DataHub: 现代数据栈的元数据平台--如何针对元数据建模?

元数据建模概念

DataHub采用模式优先【schema-first】的方法对元数据进行建模: 使用开源的Pegasus模式语言(PDL)'扩展了一组定制的注释来针对元数据建模。

DataHub存储、服务、索引和摄取层直接在元数据模型之上操作,并支持从客户端到存储层的所有强类型。

核心抽象

从概念上讲,元数据建模 使用了以下抽象:

  • Entities 实体: 实体是元数据图中的主节点,实体由如下部分组成:
    • 实体类型,如CorpUser、Chart、Dashboard、Dataset
    • 唯一的标识符(如’urn’)
    • 一组元数据属性(也称为Aspect 方面)
  • Aspects 方面: 描述实体的特定方面的属性集合,是DataHub中写操作的最小原子单位,与同一实体相关联的多个Aspects可以独立更新,Aspect可以在实体之间共享。如DatasetProperties包含描述数据集的属性集合。
    • ownership: 描述拥有一个实体的用户和组
    • globalTags: 描述对与实体关联的标签的引用。
    • glossaryTerms: 描述对与实体关联的术语表术语的引用。
    • institutionalMemory: 与实体相关联的公司内部文件(指链接link)
    • status: 描述实体的“删除”状态,即是否应软删除。
    • subTypes: 描述更通用的Entity类型的一个或多个“子类型”。如a “Looker Explore” Dataset、a “View” Dataset. 特定的子类型可以暗示给定的实体存在某些额外的方面。
  • Relationships 关系: 表示两个实体之间的命名边。
    • 关系是通过Aspect中的外键属性以及自定义注释(@Relationship)声明的。
    • 关系允许对边进行双向遍历。例如,一个图表可以通过名为“OwnedBy”的关系将CorpUser作为其所有者,可以从Chart或CorpUser实例开始对边进行遍历
  • Identifiers (Keys & Urns) 标识符: 键是一种特殊类型的方面,它包含惟一标识单个Entity的字段,类似于关系数据库表的主键字段。
    • 关键方面可以序列化到Urns中,urn表示用于主键查找的关键字段的字符串形式。
    • Urns可以转换回关键方面结构【key aspect structs】,使关键方面成为一种“虚拟”方面。
    • 关键方面为客户端提供了一种机制,可以方便地读取包含主键的字段,这些字段通常很有用,比如数据集名称、平台名称等。
    • Urns提供一个友好的句柄,通过它实体可以被查询,而不需要一个完全物化的结构。

示意图如下:
下面的元数据图由一个由3种类型的实体(CorpUser、Chart、Dashboard)、2种类型的关系(OwnedBy、Contains) 和 3种类型的元数据方面(Ownership、ChartInfo和DashboardInfo)组成的示例图。
DataHub: 现代数据栈的元数据平台--如何针对元数据建模?

核心实体

DataHub的**“核心”实体类型**为构成现代数据栈的数据资产建模。它们包括:

  • dataPlatform 数据平台: 涉及处理、存储或可视化数据资产的外部系统。例如MySQL、Snowflake、Redshift和S3。
  • Dataset 数据集:数据集合,如Tables、Views、Streams、Document Collections、Files。 例如Postgres Tables, MongoDB Collections, or S3 files
    • 数据集可以有标签、所有者、链接、术语表术语和附加的描述
    • 它们也可以有特定的子类型,如"View", “Collection”, “Stream”, “Explore”
  • Chart 图:从数据集派生的单个数据可视化,一个图表可以是多个仪表板的一部分。图表可以带有标签、所有者、链接、术语表术语和描述。例如Superset 或 Looker 的图表.
  • Dashboard 仪表盘:用于可视化的图表集合。仪表板可以有标签、所有者、链接、术语表术语和附加的描述。例如Superset 或 Mode Dashboard
  • Data Job (Task) 数据作业: 处理数据资产的可执行作业,其中“处理”意味着消费数据、产生数据,或两者兼有。例如Airflow Task
    • Data Jobs可以带有标签、所有者、链接、术语表术语和描述。
    • 它们必须属于单个数据流。
  • Data Flow (Pipeline) 数据流: 一组有相互依赖的数据可执行作业集合。Data Jobs可以带有标签、所有者、链接、术语表术语和描述。例如 Airflow DAG

实体注册(Entity Registry)

元数据模型是通过实体注册(Entity Registry)拼接在一起的。Entity Registry简单地说,这就是定义模型“模式”的地方。

Entity Registry被构建的2种方式:快照模型 、YAML配置模型。

从2022年1月起,DataHub已不支持将快照模型作为添加新实体的方法,这样元数据模型演变会变得更加容易,添加实体和方面变成了在YAML配置文件中添加配置的问题,而不是创建新的快照/方面文件。

快照模型

Snapshot models 快照模型: 显式地将实体绑定到与之相关的方面。如定义Dataset 实体时,使用DatasetSnapshotDatasetAspectDatasetProperties,这些文件的定义参见下面的源码

namespace com.linkedin.metadata.snapshot
/**
 * A metadata snapshot for a specific dataset entity.
 */
@Entity = {
  "name": "dataset",
  "keyAspect": "datasetKey"
}
record DatasetSnapshot {

  /**
   * URN for the entity the metadata snapshot is associated with.
   */
  urn: DatasetUrn

  /**
   * The list of metadata aspects associated with the dataset. Depending on the use case, this can either be all, or a selection, of supported aspects.
   */
  aspects: array[DatasetAspect]
}

namespace com.linkedin.metadata.aspect
/**
 * A union of all supported metadata aspects for a Dataset
 */
typeref DatasetAspect = union[
  DatasetKey,
  DatasetProperties,
  EditableDatasetProperties,
  DatasetDeprecation,
  DatasetUpstreamLineage,
  UpstreamLineage,
  InstitutionalMemory,
  Ownership,
  Status,
  SchemaMetadata,
  EditableSchemaMetadata,
  GlobalTags,
  GlossaryTerms,
  BrowsePaths,
  DataPlatformInstance,
  ViewProperties
]

namespace com.linkedin.dataset

/**
 * Properties associated with a Dataset
 */
@Aspect = {
  "name": "datasetProperties"
}
record DatasetProperties includes CustomProperties, ExternalReference {

  /**
   * Documentation of the dataset
   */
  @Searchable = {
    "fieldType": "TEXT",
    "hasValuesFieldName": "hasDescription"
  }
  description: optional string

  /**
   * The abstracted URI such as hdfs:///data/tracking/PageViewEvent, file:///dir/file_name. Uri should not include any environment specific properties. Some datasets might not have a standardized uri, which makes this field optional (i.e. kafka topic).
   */
  uri: optional Uri

  /**
   * [Legacy] Unstructured tags for the dataset. Structured tags can be applied via the `GlobalTags` aspect.
   */
  tags: array[string] = [ ]
}

YAML配置模型

YAML models 配置模型:Entity Registry 基于一个叫YAML配置文件进行定义,在启动时提供给DataHub’s Metadata Service
- entity-registry.yml文件通过引用实体和方面的名称来声明它们。
- 在引导(boot)时,DataHub验证entity-registry.yml文件的结构,并确保它能找到与配置提供的每个方面名相关联的PDL模式(通过@Aspect注释)。

定义参见如下:
参见: v0.8.24 entity-registry.yml最新版 entity-registry.yml

entities:
  - name: dataset
    doc: Datasets represent logical or physical data assets stored or represented in various data platforms. Tables, Views, Streams are all instances of datasets.
    keyAspect: datasetKey
    aspects:
      - viewProperties
      - subTypes
      - datasetProfile
      - datasetUsageStatistics
      - operation
      - schemaMetadata
      - status
  - name: dataHubPolicy
    doc: DataHub Policies represent access policies granted to users or groups on metadata operations like edit, view etc.
    keyAspect: dataHubPolicyKey
    aspects:
      - dataHubPolicyInfo
  - name: dataJob
    keyAspect: dataJobKey
    aspects:
      - datahubIngestionRunSummary
      - datahubIngestionCheckpoint
  - name: corpuser
    doc: CorpUser represents an identity of a person (or an account) in the enterprise.
    keyAspect: corpUserKey
    aspects:
      - corpUserInfo
      - corpUserEditableInfo
      - corpUserStatus

探索DataHub的元数据模型

要探索研究当前的DataHub元数据模型,可以查看下面这个high-level图,它显示了不同的实体以及它们之间的关系的边。
DataHub: 现代数据栈的元数据平台--如何针对元数据建模?
针对DataHub元数据模型中最流行的实体,可以参考以下链接查看:

在元数据摄取期间,这些实体使用元数据事件表示。

参考

How does DataHub model metadata?

上一篇:【纯复习用】数据库笔记(2)ER Diagram


下一篇:【风马一族_Android】无线连接|调试Android手机