Saltar a contenido

Productos de datos (REQ-1634)

Un producto de datos es un conjunto con nombre y propietario de tablas publicadas juntas para su consumo. Es la unidad que el catálogo expone a los consumidores: no tablas individuales, sino una superficie curada que un dominio declara explícitamente lista. Los campos siguen el vocabulario de ODPS (Open Data Product Standard) donde Provisa ya tiene la fuente de verdad. [tool-verified: provisa/core/models.py:318-342, provisa-ui/src/i18n/locales/en/dataProductsTab.json]

Regla de propiedad de dominio

Cada producto de datos pertenece exactamente a un dominio (domain_id es un campo obligatorio). Una tabla puede unirse a un producto de datos solo cuando ambos comparten el mismo domain_id. La interfaz limita el selector de tablas al dominio del producto; el backend rechaza una asignación de product_id cuyo dominio no coincida con el del producto en el momento de guardar. [tool-verified: provisa/core/models.py:320, docs/arch/requirements.yaml:54573-54574]

Un producto que necesita datos de otro dominio debe traer esos datos como una vista de dominio primero y luego incluir la vista como miembro.

Puertos de salida

Las tablas y comandos asignados a un producto de datos son sus puertos de salida: la superficie consultable que ven los consumidores. Asignar una tabla establece Table.product_id; eliminarla quita la pertenencia. Una tabla pertenece a lo sumo a un producto. Los comandos del mismo dominio también pueden asignarse como miembros. [tool-verified: provisa/core/models.py:941, provisa-ui/src/i18n/locales/en/dataProductsTab.json:tablesLabel,commandsLabel]

Secciones del panel de detalle

Al abrir un producto de datos en la interfaz de administración se muestran estos paneles:

Panel Qué muestra
Output Ports Tablas miembro y sus columnas; comandos miembro; consultas de ejemplo (GraphQL, SQL, Cypher, gRPC, JSON:API, REST)
Related Terms Términos del glosario vinculados a las tablas miembro del producto
Related Tables Tablas accesibles desde las tablas miembro a través de relaciones aprobadas pero que aún no forman parte del producto
Relationships Relaciones aprobadas entre las tablas miembro de este producto
Lineage Grafo de linaje de columnas que muestra las tablas miembro como punto final publicado más cada tabla ascendente. Requiere la capacidad view_governance
Input Ports Entradas a un salto → transformación → salidas derivadas del linaje. Requiere view_governance
Data Quality Tablas de comprobación cuyos contratos analizan los puertos de salida de este producto; una fila por comprobación por ejecución. Incluye un modal de reglas y la visualización de etiquetas PII

[tool-verified: provisa-ui/src/i18n/locales/en/dataProductsTab.json:detail]

Exportación de metadatos

Solo las tablas asignadas a un producto se publican en catálogos externos de forma predeterminada. build_snapshot aplica un filtro data_products_only: las tablas no asignadas se retienen, junto con sus aristas de relación, aristas de linaje y etiquetas de gobierno. Los orígenes y dominios siempre se publican independientemente. [tool-verified: provisa/api/metadata_export/builder.py:594,609,641]

Un producto sin miembros exportados no se publica: una ficha vacía afirmaría que existe un producto sin nada detrás. [tool-verified: provisa/api/metadata_export/model.py:106-113]

Solo los catálogos con un concepto nativo de producto de datos lo publican como entidad de primer orden; el resto publica las tablas miembro (ya filtradas) sin agrupación de producto:

Catálogo Publicado como
Snowflake Horizon SHARE + ficha de organización (Data Product nativo); publish=false lo mantiene como DRAFT, publish=true lo pone en activo
BigQuery Analytics Hub Ficha de Analytics Hub (nativo)
OpenMetadata Entidad DataProduct (nativa)
DataHub Entidad URN dataProduct nativa con sus propios aspectos de propiedades/propiedad
Collibra Activo de tipo de comunidad Data Product, relacionado con las tablas miembro
Apache Atlas typedef personalizado provisa_data_product con mejor esfuerzo — Atlas no tiene tipo nativo de producto de datos
Atlan Suposición de typedef personalizado DataProduct con mejor esfuerzo — Atlan no tiene un tipo estable documentado para esto
OpenLineage No es una ficha — las tablas miembro llevan una faceta personalizada provisa_data_product que nombra el producto

[tool-verified: provisa/api/metadata_export/snowflake_horizon.py:389-418, provisa/api/metadata_export/bigquery_dataplex.py:112-136, provisa/api/metadata_export/openmetadata.py:326-344, provisa/api/metadata_export/datahub.py:133-136,443-483, provisa/api/metadata_export/collibra.py:129-133,371-388, provisa/api/metadata_export/atlas.py:134-147, provisa/api/metadata_export/atlan.py:60, provisa/api/metadata_export/openlineage.py:243,348]

Campos

Campo Obligatorio Notas
id Identificador estable legible por máquina, p. ej. customer_360
domain_id Dominio propietario; la regla de pertenencia se aplica sobre este campo
name Nombre para mostrar
owner_role No Rol responsable de este producto; distinto del steward del dominio
team_role No Rol cuyos miembros forman el equipo de trabajo cotidiano; se resuelve en individuos
purpose No Qué publica este producto y por qué
limitations No Restricciones, advertencias o exclusiones conocidas
usage No Cómo consumir este producto
version No p. ej. 1.2.0
status No p. ej. proposed, active, deprecated, retired
sla No Compromisos de nivel de servicio; solo texto — un producto abarca varias tablas miembro y un SLA estructurado no puede nombrar sin ambigüedad qué miembro describe
support No Orientación de soporte en texto libre
support_contact No Correo electrónico o URL; requerido por los manifiestos de ficha de organización del Catálogo Snowflake Horizon (REQ-1635)
publish No true para publicar fichas del Catálogo Horizon de inmediato; las nuevas fichas son DRAFT por defecto (REQ-1635)
custom_properties No Metadatos clave-valor arbitrarios no cubiertos por los campos estándar

[tool-verified: provisa/core/models.py:318-342, provisa/api/admin/types.py:104-118,538-551]