ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

DataHub 平台实例实战:用 platform_instance 与 dataPlatformInstance Aspect 组织多平台部署下的数据资产

DataHub 平台实例实战:用 platform_instance 与 dataPlatformInstance Aspect 组织多平台部署下的数据资产 DataHub 平台实例实战用 platform_instance 与 dataPlatformInstance Aspect 组织多平台部署下的数据资产【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub本文基于 DataHub 仓库的官方文档 platform-instances 展开讲解 DataHub 元数据模型中 Platform Instances平台实例机制如何通过platform_instance配置将 Dataset 归属到具体的平台实例、dataPlatformInstanceaspect 的模型定义与 URN 生成逻辑、面向血缘类来源的platform_instance_map映射以及基于 URN 不可变性的命名最佳实践与 Data Products、Tags 等替代组织方案。读完后你将能够正确配置多实例环境下的 ingestion recipe并理解 DataHub 将技术标识与业务上下文分离的设计原则。1. Dataset URN 三段键的局限性为什么需要平台实例DataHub 的 Dataset 元数据模型当前采用三段式主键Data Platform数据平台例如urn:li:dataPlatform:mysqlName名称例如db.schema.nameEnv or Fabric环境或 Fabric例如DEV、PROD等这种命名方式无法方便地表达同一组织在同一环境fabric内部署的多个平台或技术实例。例如一个组织可能在生产环境拥有多套 Redshift 实例并希望把分布在这些实例中的所有数据资产都纳入 DataHub 元数据仓库统一查看。如果两个 Redshift 实例各自都有db.orders.fact_sales表仅靠platform name env三段键就会发生冲突——这正是平台实例机制要解决的问题。注意平台实例只是解决该问题的一种方案它在不可变性immutability方面存在权衡。DataHub 还提供了组织和管理多平台实例的替代方法详见本文第 7 节。从v0.8.24起的版本开始DataHub 在元数据模型中开放了平台实例支持的第一阶段。这一能力由两个主要部分构成dataPlatformInstanceaspect新增到 Dataset 上允许数据集关联到某个平台的实例所有 ingestion source 的增强允许 recipe 通过platform_instance参数附带平台实例使生成的 URN 从urn:li:dataset:(urn:li:dataPlatform:platform,name,ENV)格式变为urn:li:dataset:(urn:li:dataPlatform:platform,instance.name,ENV)格式。对于会向其他平台数据集产生血缘的来源例如 Looker、Superset 等 BI 工具还增加了专门配置项允许 recipe 作者指定平台到实例名的映射。2. URN 不可变性平台实例命名的第一原则DataHub 的 URN 是分配给实体后必须保持不变的不可变标识符。这种不可变性是维持数据完整性、血缘追踪和系统内一致引用的基础。一旦 URN 被创建即使底层数据资产的属性发生变化也绝不应修改它。2.1 URN 不可变性挑战的由来许多组织面临一个关键挑战URN 身兼二职——它既是系统内部标识符又是 DataHub UI 中用户可见的标识符。当组织分类体系domains、products、systems发生变化时会产生如下冲突资产孤立Orphaned AssetsURN 一旦改变所有在 ingestion 之外添加的元数据描述、标签、血缘、所有权都会停留在旧资产上集成中断Integration Disruption依赖特定 URN 的下游应用和集成会因此失效用户困惑User ConfusionUI 中可见的 URN 变得过时且具有误导性运维开销Operational Overhead团队必须将所有引用迁移到新 URN。2.2 解法技术标识与业务上下文中分离在制定平台实例命名约定时所选名称必须满足以下三条源于数据本身Intrinsic to the data基于数据资产的稳定、固有属性不随时间变化Not subject to change避免因组织重组、技术迁移或运维调整而变化的名称跨所有 ingestion 来源一致Consistent across all ingestion sources同一平台实例名必须在所有 recipe 中一致使用才能保证不同来源产生的 URN 对齐。3. dataPlatformInstance Aspect模型层定义dataPlatformInstanceaspect 由 PDL 模型定义见 DataPlatformInstance.pdlnamespace com.linkedin.common Aspect { name: dataPlatformInstance } record DataPlatformInstance { Searchable { fieldType: URN, addToFilters: true, filterNameOverride: Platform } platform: Urn Searchable { fieldType: URN, addToFilters: true, filterNameOverride: Platform Instance fieldName: platformInstance } instance: optional Urn }从该模型定义可以确认两点实现事实platform是必填字段instance是可选字段——这解释了为何未配置platform_instance的既有数据集 URN 保持三段式结构向后兼容两个字段都标注了SearchablefieldType: URN且addToFilters: true即在搜索索引中平台与平台实例都会成为可筛选字段UI 上分别呈现为 Platform 与 Platform Instance 过滤器。对应的 Python 侧实体模型见 data_platform_instance.py其中DataPlatformInstance类将platform与platform_instance转换为DataPlatformInstanceClassinstance 部分会被封装成完整的平台实例 URN。4. 启用平台实例platform_instance 配置参数各 ingestion source 的具体启用方式见其专属文档如 metadata-ingestion/docs/sources 目录下的连接器文档但通用模式一致在 source config 中追加一个可选参数platform_instance。以 MySQL 为例下面这个 recipe 会摄入一个你命名为primary-mysql的 MySQL 实例source: type: mysql config: # 连接坐标 host_port: localhost:3306 platform_instance: primary-mysql database: dbname # 凭证 username: root password: example sink: # sink 配置从源码结构看该参数的定义位于 source_common.py 的PlatformInstanceConfigMixin中class PlatformInstanceConfigMixin(ConfigModel): 任何连接平台的 source 都应继承这个类 platform_instance: Optional[str] Field( defaultNone, descriptionThe instance of the platform that all assets produced by this recipe belong to. This should be unique within the platform. See https://docs.datahub.com/docs/platform-instances/ for more details., )关键约束platform_instance默认值为None且官方注释明确要求The instance ... should be unique within the platform同一平台内必须唯一——即实例名唯一性的边界是单个 platform跨 platform 可以重名。所有会产出 Dataset 元数据的来源通过DatasetSourceConfigMixin继承PlatformInstanceConfigMixin与EnvConfigMixin获得该配置项。4.1 URN 的实际生成逻辑配置生效后Dataset URN 的生成由 mce_builder.py 完成def make_dataplatform_instance_urn(platform: str, instance: str) - str: if instance.startswith(urn:li:dataPlatformInstance): return instance else: return furn:li:dataPlatformInstance:({make_data_platform_urn(platform)},{instance}) def make_dataset_urn_with_platform_instance( platform: str, name: str, platform_instance: Optional[str], env: str DEFAULT_ENV ) - str: ... return str( DatasetUrn.create_from_ids( platform_idplatform, table_namename, envenv, platform_instanceplatform_instance, ) )结合 abs/source.py 中的 MCE 构建逻辑当self.source_config.platform_instance非空时生成的 Dataset URN 中间段不再是原始表名路径而是平台实例 URN即urn:li:dataset:(urn:li:dataPlatform:mysql,urn:li:dataPlatformInstance:(urn:li:dataPlatform:mysql,primary-mysql),PROD)同时同一处代码会向 MCE 的 aspect 列表中追加一个DataPlatformInstanceClassplatform 指向平台 URN、instance 指向实例 URN使数据集在图谱中与该平台实例建立可查询的关联。这两段逻辑正是文档所述URN 格式变化 aspect 新增两个能力在代码层面的对应实现。4.2 血缘类来源platform_instance_map对于 Looker、Superset 这类 BI 工具它们本身不产出数据集而是向其他平台的数据集产生血缘DataHub 提供了platform_instance_map配置允许 recipe 作者声明某平台应映射到哪个实例名以保证血缘指向的 URN 与对应平台 ingestion recipe 生成的 URN 对齐。该配置定义于 source_common.py 的DatasetLineageProviderConfigBaseclass DatasetLineageProviderConfigBase(EnvConfigMixin): 任何向 Dataset 产生血缘而非直接产出 Dataset 的非 Dataset 来源 都应继承这个类。例如 Orchestrators、Pipelines、BI Tools 等。 platform_instance_map: Optional[Dict[str, str]] Field( defaultNone, descriptionA holder for platform - platform_instance mappings to generate correct dataset urns, )它是一个platform - platform_instance的字典映射。使用原则与主配置相同映射中的实例名必须与对应平台 ingestion recipe 中platform_instance的值完全一致否则血缘两端 URN 无法匹配血缘关系将断裂。例如若 Redshift 数据集以primary-redshift实例摄入则 Looker recipe 中应写source: type: looker config: ... platform_instance_map: redshift: primary-redshift5. 平台实例命名最佳实践配置平台实例时应选择一个易于理解且可预见地保持稳定的实例名。例如core_warehouse或finance_redshift都是可接受的名字纯 GUID如a37dc708-c512-4fe4-9829-401cd60ed789也可以。请记住无论你选择什么实例名都需要在多个 recipe中指定同一个名字才能确保不同来源产生的标识符对齐。为确保 URN 不可变性和长期稳定性平台实例名应当是内建于基础设施的技术标识符而非业务概念业务上下文应交由 DataHub 的 domains、ownership 等内建能力承载。✅ 好的示例基础设施标识符us-east-1-cluster-1、eu-west-2-cluster-2技术性命名primary-redshift、secondary-mysql、analytics-snowflakeGUID/UUIDa37dc708-c512-4fe4-9829-401cd60ed789基础设施编码rds-prod-001、redshift-analytics-01❌ 应避免的模式组织分类学company.domain.product.systemdomains、products、systems 会随时间变化业务域名称customer_data_warehouse、finance_redshift应使用 DataHub domains所有权引用john_warehouse、sarah_analytics应使用 DataHub ownership 功能版本号redshift_v2、mysql_8_0应使用 DataHub 的版本管理能力临时性指示temp_warehouse、migration_db技术迁移名称legacy_mysql、old_redshift应使用 DataHub tags关键原则技术导向使用基础设施级标识符而非业务概念稳定性选择反映永久性技术特征的名称一致性所有平台实例使用同一命名模式唯一性确保每个平台实例拥有唯一标识符关注点分离业务上下文交由 DataHub 的 domain 与 ownership 特性承载。补充说明domains、ownership、数据分类、技术迁移状态等业务上下文应通过 DataHub 的专属特性domains、ownership、tags 等管理而非内嵌进平台实例名。环境信息用 tags 表达相比 fabric 类型更利于随时间演进做晋升管理版本化则应使用 DataHub 的版本能力。6. URN 不可变性挑战的替代方案当组织分类体系演进时不应通过变更 URN 来适应而应利用 DataHub 提供的、保持 URN 不变的同时实现灵活业务上下文管理的手段。6.1 推荐做法技术标识与业务上下文中分离最有效的方案是将平台实例命名设计为技术上稳定的同时用 DataHub 的元数据特性承载业务上下文使用稳定的技术标识符设计不会变更的平台实例名✅us-east-1-cluster-001、anomalo-prod-01、primary-redshift❌company.domain.product.system分类学演进时会变利用 DataHub 的业务上下文特性Data Products按业务目的对相关资产分组Tags 与自定义属性添加可随时更新的灵活元数据Glossary Terms将业务概念与技术资产关联Domains用 DataHub domains 做业务域分类。7. 替代方案详解DataHub 提供了多种可与平台实例互补或替代的组织概念7.1 Data ProductsData Products遵循 data mesh 原则按业务目的对相关数据资产分组面向领域由特定业务团队拥有内聚单元相关资产表、仪表盘、pipeline被统一管理业务上下文聚焦业务价值与消费者需求跨平台可以跨越多个平台实例。示例Customer Analytics Data Product ├── Tables from Redshift Cluster 1 ├── Tables from Snowflake Analytics ├── Dashboards from Looker └── Pipelines from Airflow7.2 其他元数据管理手段Tags 与 Labels目的在不改变 URN 的前提下添加灵活的元数据上下文用例为数据集打组织上下文标签domain、product、system、环境专属标签、迁移状态或遗留系统标记优势灵活、可搜索且更新无需变更 URN示例为数据集打标签domain.voice、product.billing、system.anomalo。Custom Properties自定义属性目的为实体添加结构化元数据用例以结构化数据保存组织分类学、基础设施专属元数据、随时间变化的业务上下文优势可查询、可过滤的结构化数据示例添加自定义属性org_domain: voice域变更时可直接更新。Glossary Terms 与业务上下文目的将业务含义与技术资产关联用例数据集关联业务概念、平台实例关联业务域、创建业务友好的分组优势连接技术视角与业务视角示例将数据集关联到术语 Customer Billing术语重命名不影响 URN。搜索与发现能力目的不改变 URN 即可查找和组织资产用例按组织标签搜索、按自定义属性过滤、用 saved search 固化常见组织查询优势无需结构性变更的灵活发现。DataHub Actions 与自动化目的自动化元数据管理用例按组织上下文自动打标、按业务规则自动分配所有权、跨平台实例同步元数据优势减少人工操作、保证一致性。7.3 方案对比ApproachURN ImpactFlexibilityComplexityBest Use CasePlatform InstancesChanges URNLowLowURN 中需要技术性区分Data ProductsNo changeHighHigh跨平台的业务导向分组Tags/LabelsNo changeHighLow灵活元数据与可搜索上下文Custom PropertiesNo changeMediumMedium结构化元数据存储Glossary TermsNo changeHighMedium业务上下文与领域关联Search FeaturesNo changeHighLow无需变更的发现与组织AutomationNo changeMediumHigh一致的元数据管理7.4 如何选型Platform Instances当需要在 URN 中体现技术区分时Data Products当需要跨平台的业务导向分组时Tags/Labels当需要灵活、可搜索的元数据时Custom Properties当需要结构化元数据存储时Glossary Terms当需要业务上下文关联时组合方案多种概念联合使用实现全面的组织管理。8. 小结平台实例与数据产品分别解决了 DataHub 数据组织中的不同层面平台实例通过修改 URN 引入技术标识符而数据产品在不改变资产物理身份的前提下提供组织结构。对于分类体系持续演进的组织核心在于将技术标识写入 URN与业务上下文写入元数据分离从而同时获得不可变性与灵活性。落地时的三条检查清单所有指向同一物理实例的 ingestion recipe含血缘类来源的platform_instance_map使用完全相同的实例名实例名选定后视为长期契约——后续调整业务归属请用 domains/tags/data products而不是改 URN启用后可利用dataPlatformInstanceaspect 上的 Platform / Platform Instance 搜索过滤器见 DataPlatformInstance.pdl 中Searchable注解按实例维度检索资产验证各来源 URN 是否已对齐。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表