多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

DataHub 核心概念全解析:URN、策略、角色与元数据建模模型

DataHub 核心概念全解析:URN、策略、角色与元数据建模模型 DataHub 核心概念全解析URN、策略、角色与元数据建模模型【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub数据资产治理的第一步是理解平台的核心抽象。DataHubThe Context Platform for your Data and AI Stack以一套实体 属性Aspect 关系Relationship的元数据模型为骨架通过 URN 唯一标识每个资源并用 Policy、Role、Access Token 构建细粒度的权限体系。本文以仓库文档 docs/what-is-datahub/datahub-concepts.md 为主线结合源码与配套文档系统讲解 DataHub 的核心概念读完后你将能准确理解 URN 的构成与限制、掌握 Policy/Role/PAT 的权限设计思路并深入理解 Entity/Aspect/Relationship 元数据模型及其在查询与存储中的实际行为。一、通用概念General ConceptsURNUniform Resource NameURN 是 DataHub 中唯一标识任意资源的 URI 方案其形式为urn:Namespace:Entity Type:ID典型示例urn:li:dataset:(urn:li:dataPlatform:hive,fct_users_created,PROD)、urn:li:corpuser:jdoe。完整的 URN 规范可参考 docs/what/urn.md。从源码结构看URN 的三段式组成由 li-utils/src/main/javaPegasus/com/linkedin/common/urn/ 目录下的Urn.java基类及各类实体 URN 实现共同定义Namespace命名空间DataHub 内置所有 URN 统一使用li作为命名空间如果你 fork DataHub可以整体更换为自己的组织命名空间。Entity Type实体类型即资源的对象类型例如dataset、corpuser、dataPlatform。它不限于元数据图中的实体数据平台等资源也可以有自己的 URN。ID标识符在特定命名空间、特定实体类型下唯一。ID 可以是单字段也可以是多字段复杂 URN。复杂 URN 的字段甚至可以嵌套其他 URN称为嵌套 URN非 URN 类型的字段值可以是字符串、数字或 Pegasus Enum。以 DatasetUrn.java 为例DatasetUrn extends Urn包含三个 ID 字段platform另一个 URN即DataPlatformUrn、name、originFabricType枚举如PROD、EI。构造时调用super(ENTITY_TYPE, TupleKey.create(platform, name, origin))完成嵌套 URN 的序列化示例urn:li:dataset:(urn:li:dataPlatform:kafka,PageViewEvent,PROD) urn:li:dataset:(urn:li:dataPlatform:hdfs,PageViewEvent,EI)URN 的字符限制创建或生成 URN 时必须遵守建议对受限字符做 URL 编码圆括号(或)是保留字符不允许出现在 URN 的任何位置Unicode 单元分隔符␟U241F不允许出现在 URN 元组内部逗号,是保留字符。例如urn:li:dashboard:(looker,dashboards.thelook)合法而urn:li:dashboard:(looker,dashboards.the,look)非法。Policy访问策略访问策略定义谁Actors能对哪些资源Resources做什么操作Privileges。完整指南见 docs/authorization/policies.md几个通俗示例Dataset 的 Owner 可以编辑文档但不能编辑 Tag数据管家 Jenny 可以为任意 Dashboard 编辑 Tag但不能动其他元数据数据分析师 James 只能编辑他下游消费的特定数据管道的 Links数据平台团队可以管理用户与组、查看平台分析、管理策略本身。Policy 分为两类Platform Policies平台策略授予平台级权限如管理用户与组、查看 Analytics 页面、管理策略本身。它只有Actors Privileges两部分没有目标资源。Metadata Policies元数据策略控制对元数据实体的读写由Resources哪个 Privileges做什么 Actors谁三部分组成。资源可以按以下方式圈定多个条件是交集/AND关系例如同时限定 resource type 为 dataset 且带myTag标签则策略只作用于被该标签标记的 dataset资源类型如 dataset、chart、dashboard资源 URN指定具体实体Tag带特定标签的资产Domain特定业务域内的资产递归包含嵌套子域Container特定容器内的资产递归包含嵌套子容器Glossary Term / Term Group被特定业务术语或术语组标注的资产术语组递归覆盖其全部子项。Actors 支持三种定义方式注意与资源不同Actor 之间是并集/OR关系用户列表或全部用户、组列表或全部组、实体的 Owner。策略默认启用。若想完全关闭策略功能隐藏策略管理 UI、默认放行所有操作可在datahub-gms容器的环境变量如docker/datahub-gms的 docker.env中设置AUTH_POLICIES_ENABLEDfalse。策略仅当 GMS 设置REST_API_AUTHORIZATIONtrue时才约束 REST API。系统内置的默认策略定义在metadata-service/war/src/main/resources/boot/policies.json其中datahub根账号拥有不可变超级用户权限避免误删所有策略后无法登录。完整权限清单Platform 级、Entity 级、Aspect 级如 Edit Tags / Edit Owners / Edit Lineage 等见 PoliciesConfig.java。Role角色DataHub 提供 Role 机制来批量管理权限。开箱即用的内置角色Admin、Editor、Reader 等会与 Policy 共同生效——例如在启用基于视图的访问控制VBAC时Admin/Editor/Reader 角色会覆盖视图级策略限制因此不应给需要受限发现能力的用户分配 Editor/Reader。详见 docs/authorization/roles.md。Access Token个人访问令牌PATPersonal Access TokenPAT让用户以代码形式代表自己在启用安全的部署环境中以编程方式调用 DataHub API。它与启用认证的元数据服务配合使用为自动化操作增加一层保护。使用 PAT 需要两个前提GMS 已启用元数据认证用户已通过 DataHub Policy 被授予Generate Personal Access Tokens或Manage All Access Tokens权限。生成后在 HTTP 请求头中以 Bearer 方式携带令牌。生产环境推荐经前端代理9002 端口访问也可直接访问 GMS8080 端口# 经前端代理生产推荐 curl http://localhost:9002/api/gms/entities/urn:li:corpuser:datahub -H Authorization: Bearer access-token # 直接访问元数据服务 curl http://localhost:8080/entities/urn:li:corpuser:datahub -H Authorization: Bearer access-token令牌的可用有效期选项来自 GMS 配置authentication.accessTokens.allowedDurationsISO-8601 时长默认PT1H、P1D、P7D、P30D、P90D、P180D、P365D默认禁用永不过期令牌如需开启可设置ACCESS_TOKEN_ALLOW_NO_EXPIRYtrue。若未启用元数据认证未携带令牌的编程请求会收到 401。详见 docs/authentication/personal-access-tokens.md。View视图View 允许你保存并共享一组过滤条件在浏览 DataHub 时复用。一个 View 可以是公共的Public或私人的Personal。Deprecation弃用状态Deprecation 是描述实体弃用状态的一个 Aspect通常以布尔值表达用于标记数据资产已废弃。Ingestion Source采集源Ingestion Source 指我们从中抽取元数据的外部数据系统例如 BigQuery、Looker、Tableau 等。完整的 Source 清单见 metadata-ingestion/README.md。Container容器Container 是一组相关数据资产的容器例如数据库、Schema、项目等。容器本身也是元数据图中的实体可用于策略的资源圈定。Data Platform数据平台Data Platform 是包含 Dataset、Dashboard、Chart 及其他各类数据资产的系统或工具。内置数据平台的完整清单定义在启动时的引导配置文件>namespace com.linkedin.metadata.key /** * Key for a CorpUser */ Aspect { name: corpUserKey } record CorpUserKey { /** * The name of the AD/LDAP user. */ Searchable { fieldName: ldap, fieldType: WORD_GRAM, boostScore: 2.0, enableAutocomplete: true } username: string }由此生成的 URN 形式为urn:li:corpuser:username。例如用户johnsmith的 Key Aspect JSON 为{username: johnsmith}对应 URN 为urn:li:corpuser:johnsmith。同时可以看到Searchable注解把username映射到搜索索引的ldap字段并提升权重印证了Key Aspect 中的字段通常也是搜索常用字段的设计。Entity Registry实体注册表元数据模型的Schema集中定义在Entity Registry中——它是构成元数据图的实体及各自 Aspect 的目录。自 2022 年 1 月起DataHub 已弃用通过 Snapshot 模型新增实体的方式改为在 YAML 配置文件entity-registry.ymlmetadata-models/src/main/resources/entity-registry.yml中声明启动时元数据服务会校验注册表结构并确保能为每个 Aspect 名称找到对应的 PDL Schema通过Aspect注解。这让模型演变更简单——新增 Entity/Aspect 只需向 YAML 增加条目而无需创建新的 Snapshot / Aspect 文件。查询元数据图的三种方式DataHub 的建模语言允许按查询模式优化元数据持久化官方支持三种查询方式详见 docs/modeling/metadata-model.md主键查找按 URN 取实体调用entities端点并传入 URL 编码的 URN返回该实体最新版本的 Aspect 集合curl --location --request GET http://localhost:8080/entities/urn%3Ali%3Achart%3Acustomers也可以指定 Aspect 名与版本号按版本读取或通过aspects?actiongetTimeseriesAspectValues读取时序型 Aspect。搜索查询按任意字符串搜索实体input指定查询词、entity指定实体类型curl --location --request POST http://localhost:8080/entities?actionsearch \ --header X-RestLi-Protocol-Version: 2.0.0 \ --header Content-Type: application/json \ --data-raw {input: \customers\, entity: chart, start: 0, count: 10}关系查询沿指定类型的边查找与源实体相连的实体例如查询某 Chart 的所有者curl --location --request GET --header X-RestLi-Protocol-Version: 2.0.0 \ http://localhost:8080/relationships?directionOUTGOINGurnurn%3Ali%3Achart%3AcustomerstypesList(OwnedBy)两类 AspectVersioned 与 Timeseries1. Versioned Aspects版本化 Aspect每个版本化 Aspect 都关联一个数字版本号。字段变化时自动生成新版本并存储在关系型数据库中可备份恢复支撑了 UI 中的大部分体验Ownership、描述、Tag、业务术语等。示例Ownership、GlobalTags、GlossaryTerms。2. Timeseries Aspects时序 Aspect每个时序 Aspect 关联一个时间戳用于表示实体随时间有序变化的事件如数据集画像profiling结果、每日数据质量检查结果。要点时序 Aspect不存入关系型存储而是持久化在搜索索引如 Elasticsearch与消息队列Kafka中因此灾备恢复相对更具挑战必须声明type: timeseries并包含 TimeseriesAspectBase内含timestampMillis字段可以通过时间范围查询这是它与版本化 Aspect 最大的区别字段可附加Searchable与Relationship注解也可附加TimeseriesField/TimeseriesFieldCollection注解以支持聚合查询。以 DatasetProfile.pdl 为例它includes TimeseriesAspectBase定义了rowCount总行数、columnCount总列数、fieldProfiles每列画像、sizeInBytes存储字节数等可搜索统计字段Aspect注解中type: timeseries表明其类型。时序 Aspect 的摄入有两种方式通过 GMS REST 端点aspects?actioningestProposal以 JSON 方式提交entityType、entityUrn、changeTypeUPSERT、aspectName、aspect.value为转义的 JSON 字符串或通过 Python SDK 的MetadataChangeProposalWrapper配合DatahubRestEmitter/DatahubKafkaEmitter发送。聚合查询则通过analytics?actiongetTimeseriesStats完成metrics支持LATEST、SUM、CARDINALITY三种聚合buckets支持DATE_GROUPING_BUCKET时间窗口分组配合毫秒时间戳与STRING_GROUPING_BUCKET按字符串字段唯一值分组返回一个类 SQL 的tablecolumnNames/columnTypes/rows。相关测试可参考metadata-io/src/test/java/com/linkedin/metadata/timeseries/search/TimeseriesAspectServiceTestBase.java中的getAggregatedStats测试组。三、总结概念如何串联成体系DataHub 的核心概念是层层咬合的URN是贯穿一切的唯一标识urn:li:entity-type:(...)Entity/Aspect/Relationship构成可查询的元数据图Entity 是节点、Aspect 是可独立写入的属性面、Relationship 是双向可遍历的边Data Platform / Dataset / Chart / Dashboard / Data Job / Data Flow / Container / CorpUser / CorpGroup等则是图中预定义的核心实体Tag / Glossary Term / Domain / Owner / Deprecation提供对资产的标注、组织与治理维度而Policy / Role / Access Token则在实体与操作之上定义了完整的授权边界。理解这套概念模型是使用 DataHub 管理数据资产、设计权限策略、编写采集与查询程序的基础。进一步阅读元数据建模详见 docs/modeling/metadata-model.mdURN 规范详见 docs/what/urn.mdAspect 概念详见 docs/what/aspect.md策略授权详见 docs/authorization/policies.md个人访问令牌详见 docs/authentication/personal-access-tokens.md。【免费下载链接】datahubThe Context Platform for your Data and AI Stack项目地址: https://gitcode.com/GitHub_Trending/da/datahub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表