【DataHub】 现代数据栈的元数据平台--如何将数据血缘关系写入DataHub

什么是Data lineage?

大数据时代,系统的数据来源广泛,各种类型的数据快速产生且爆发性增长。从数据的产生、ETL
、数据融合分析、数据应用直至最终消亡,在数据流转过程中数据之间的关联关系称为数据血缘关系。

数据血缘揭示了数据的生命周期——目标是记录并显示从数据产生到消亡的完整数据流
数据血缘描述数据处理流程、表、报表、即席查询之间的流向关系、表与表的依赖关系、表与离线ETL任务、调度平台、计算引擎之间的依赖关系。

数据血缘是数据治理的重要一环,用于追踪数据的来源、评估数据价值、数据生命周期管理、数据安全管控。

Data lineage includes the data origin, what happens to it and where it moves over time. Data lineage gives visibility while greatly simplifying the ability to trace errors back to the root cause in a data analytics process.

如何写入数据血缘数据

显示效果

本示例创建三个数据集tableA、tableB、tableC, 由数据集A、B关联统计得到数据集C,如用户点击明细日志和用户表关联,按天统计PU/UV数据
显示效果如下:
在这里插入图片描述
在这里插入图片描述

源码示例

datahub的Rest API 支持数据血缘关系的写入。通过UpstreamLineage对象创建一个数据集的上流数据集。

# -*- coding: utf-8 -*-
from typing import List
import datetime
import datahub.emitter.mce_builder as builder
from datahub.emitter.mcp import MetadataChangeProposalWrapper
from datahub.emitter.rest_emitter import DatahubRestEmitter
from datahub.metadata.com.linkedin.pegasus2avro.dataset import (
    UpstreamLineage,
)
from datahub.metadata.schema_classes import *


def add_metadata_by_me(urn: str, desc: str, emitter: DatahubRestEmitter):
    # 构造一个数据集属性对象
    dataset_properties = DatasetPropertiesClass(description=desc)

    # 构造一个MetadataChangeProposalWrapper对象
    metadata_event = MetadataChangeProposalWrapper(
        entityType="dataset",
        changeType=ChangeTypeClass.UPSERT,
        entityUrn=urn,
        aspectName="datasetProperties",
        aspect=dataset_properties,
    )

    # emit 元数据,这是一个阻塞调用
    res = emitter.emit(metadata_event)
    print(res)

def add_data_lineage(src_urns: List[str], dest_urn: str, emitter: DatahubRestEmitter):
    # 构建数据血缘上流对象UpstreamClass实例
    upstream_tables: List[UpstreamClass] = []
    for urn in src_urns:
        upstream_tables.append(
            UpstreamClass(
                dataset=urn,
                type=DatasetLineageTypeClass.TRANSFORMED,
                auditStamp=AuditStampClass(
                    time= int(datetime.datetime.now().timestamp()*1000),
                    actor="urn:li:corpuser:datahub",
                ),
            )
        )
    # 构建上流数据血缘对象实例
    upstream_lineage = UpstreamLineage(upstreams=upstream_tables)

    # 构造一个MetadataChangeProposalWrapper对象
    lineage_mcp = MetadataChangeProposalWrapper(
        entityType="dataset",
        changeType=ChangeTypeClass.UPSERT,
        entityUrn=dest_urn,
        aspectName="upstreamLineage",
        aspect=upstream_lineage,
    )

    # emit 元数据,这是一个阻塞调用
    res = emitter.emit(lineage_mcp)
    print(res)


gms_server_url = "http://172.25.21.188:8080"

# 构建一个GMS REST API Emitter。
rest_emitter = DatahubRestEmitter(gms_server_url)

add_metadata_by_me(builder.make_dataset_urn("hive", "test.tableA"), "用户点击明细数据", rest_emitter)
add_metadata_by_me(builder.make_dataset_urn("hive", "test.tableB"), "用户基础数据", rest_emitter)
add_metadata_by_me(builder.make_dataset_urn("hive", "test.tableC"), "用户PV/UV按天统计数据", rest_emitter)

add_data_lineage(
    src_urns=[builder.make_dataset_urn("hive", "test.tableA"), builder.make_dataset_urn("hive", "test.tableB")],
    dest_urn=builder.make_dataset_urn("hive", "test.tableC"),
    emitter=rest_emitter
)

参考

datahub data lineage sample_code
干货 | 携程数据血缘构建及应用

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值