Перейти к содержанию

Data Products (REQ-1634)

Продукт данных — это именованный, принадлежащий домену пакет таблиц, публикуемых вместе для потребления. Это единица, которую каталог раскрывает потребителям, — не отдельные таблицы, а курируемая поверхность, которую домен явно объявляет готовой. Поля следуют словарю ODPS (Open Data Product Standard) там, где Provisa уже является источником истины. [tool-verified: provisa/core/models.py:318-342, provisa-ui/src/i18n/locales/en/dataProductsTab.json]

Правило владения доменом

Каждый продукт данных принадлежит ровно одному домену (domain_id — обязательное поле). Таблица может войти в продукт данных только в том случае, если оба разделяют один и тот же domain_id. UI ограничивает выбор таблиц доменом продукта; backend отклоняет назначение product_id, чей домен не совпадает с доменом продукта, во время сохранения. [tool-verified: provisa/core/models.py:320, docs/arch/requirements.yaml:54573-54574]

Продукт, которому нужны данные из другого домена, должен сначала внести эти данные как представление домена, а затем включить это представление как участника.

Выходные порты

Таблицы и команды, назначенные продукту данных, являются его выходными портами — запрашиваемой поверхностью, которую видят потребители. Назначение таблицы устанавливает Table.product_id; снятие назначения удаляет членство. Таблица принадлежит не более чем одному продукту. Команды в том же домене также могут быть назначены участниками. [tool-verified: provisa/core/models.py:941, provisa-ui/src/i18n/locales/en/dataProductsTab.json:tablesLabel,commandsLabel]

Разделы панели детализации

При открытии продукта данных в административном UI показываются следующие панели:

Панель Что показывает
Output Ports Таблицы-участники и их колонки; команды-участники; примеры запросов (GraphQL, SQL, Cypher, gRPC, JSON:API, REST)
Related Terms Термины глоссария, связанные с таблицами-участниками продукта
Related Tables Таблицы, достижимые из таблиц-участников через одобренные связи, но ещё не входящие в продукт
Relationships Одобренные связи между таблицами-участниками этого продукта
Lineage Граф происхождения колонок, показывающий таблицы-участники как опубликованную конечную точку плюс каждую вышестоящую таблицу. Требует возможность view_governance
Input Ports Однохоповые входы → преобразование → выходы, выведенные из lineage. Требует view_governance
Data Quality Таблицы-чекеры, чьи контракты сканируют выходные порты этого продукта; одна строка на проверку на прогон. Включает модальное окно с правилами и отображение тегов ПДн

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

Экспорт метаданных

По умолчанию во внешние каталоги публикуются только таблицы, назначенные продукту. build_snapshot применяет фильтр data_products_only: неназначенные таблицы отсекаются, вместе с их рёбрами связей, рёбрами lineage и тегами governance. Источники и домены публикуются всегда, независимо от этого. [tool-verified: provisa/api/metadata_export/builder.py:594,609,641]

Продукт без экспортированных участников не публикуется — пустой листинг заявлял бы о существовании продукта, за которым ничего не стоит. [tool-verified: provisa/api/metadata_export/model.py:106-113]

Только каталоги с нативным понятием продукта данных публикуют его как самостоятельную сущность; остальные публикуют (уже отфильтрованные) таблицы-участники без группировки в продукт:

Каталог Публикуется как
Snowflake Horizon SHARE + организационный листинг (нативный Data Product); publish=false оставляет его в состоянии DRAFT, publish=true публикует его вживую
BigQuery Analytics Hub Листинг Analytics Hub (нативный)
OpenMetadata Сущность DataProduct (нативная)
DataHub Нативная URN-сущность dataProduct с собственными аспектами properties/ownership
Collibra Актив типа сообщества Data Product, связанный с таблицами-участниками
Apache Atlas Пользовательский typedef provisa_data_product по принципу «лучшее из возможного» — у Atlas нет нативного типа продукта данных
Atlan Пользовательский typedef-догадка DataProduct по принципу «лучшее из возможного» — у Atlan нет документированного стабильного типа для этого
OpenLineage Не листинг — таблицы-участники несут пользовательский фасет provisa_data_product, называющий продукт

[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]

Поля

Поле Обязательно Примечания
id Да Машиночитаемый стабильный идентификатор, например customer_360
domain_id Да Владеющий домен; правило членства применяется относительно него
name Да Отображаемое имя
owner_role Нет Роль, ответственная за этот продукт; отлична от стюарда домена
team_role Нет Роль, чьи держатели формируют повседневную рабочую команду; разрешается до отдельных лиц
purpose Нет Что публикует этот продукт и зачем
limitations Нет Известные ограничения, оговорки или исключения
usage Нет Как потреблять этот продукт
version Нет например, 1.2.0
status Нет например, proposed, active, deprecated, retired
sla Нет Обязательства по уровню обслуживания; только текст — продукт охватывает несколько таблиц-участников, и структурированный SLA не может однозначно указать, какого участника он описывает
support Нет Произвольный текст с рекомендациями по поддержке
support_contact Нет Email или URL; требуется манифестами организационного листинга Snowflake Horizon Catalog (REQ-1635)
publish Нет true для немедленной публикации листингов Horizon Catalog; новые листинги по умолчанию находятся в DRAFT (REQ-1635)
custom_properties Нет Произвольные метаданные ключ-значение, не покрытые стандартными полями

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