1. 元数据管理实施方案总览
2. 元数据分类
元数据按用途的不同分为两类:技术元数据( Technical Metadata)和业务元数据( Business Metadata )
2.1 技术元数据
技术元数据是存储关于数据仓库系统技术细节的数据,用于开发和管理数据仓库使用的数据。常见的技术元数据有:
- 分布式计算系统存储元数据:如Hive表、列、分区等信息。记录了表的表名。分区信息、责任人信息、文件大小、表类型,生命周期,以及列的字段名、字段类型、字段备注、是否是分区 段等信息。- 分布式计算系统运行元数据:如 Spark上所有作业运行等信息:类似于 Job 日志,包括作业类型、实例名称、输入输出、 SQL 、执行时间。数据开发平台中数据同步、计算任务、任务调度等信息。- 数据质量和运维相关元数据:如任务监控、运维报警、数据质量、故障等信息,包括任务监控运行日志、告警配置及运行日志、故障信息等。
2.2 业务元数据
业务元数据从业务角度描述了数据仓库中的数据,它提供了介于使用者和实际系统之间的语义层,使得不懂计算机技术的业务人员也能够看懂数据仓库中的数据。常见的业务元数据有:
- Data 元数据:如维度及属性、业务过程、指标等的规范化定义,用于更好地管理和使用数据。- 数据应用元数据:如数据报表、数据产品等的配置和运行元数据。
3. 元数据标签体系
利用元数据标签不仅可以节约研发人员的时间成本,同时对公司内部的非研发人员来说,也可以更直观地理解数据、利用数据,从而提升数据的研发效率。所以在datahub里可以预先建设domain共和glossary词库用于对数据进行打标。
**基础标签 **
- 数据的存储情况
- 访问情况
- 数据安全等级
数仓标签
- 数据是增量/全量
- 是否可再生
- 数据的生命周期
业务标签
- 数据归属的主题域
- 产品线BU
- 业务类型
潜在标签
这类标签主要是为了说明数据潜在的应用场景
- 社交
- 媒体
- 广告
- 电商
- 金融
4. 表元数据
4.1 基于pull机制抽取元数据
Datahub的pull是基于插件的方式。可以检查数据源获取插件Source,转换插件transformer,获取插件Sink。插件安装命令如:pip install 'acryl-datahub[mysql]'
使用命令查看当前已安装的插件python3 -m datahub check plugins
web端ui方式
cli端yml方式
yml解析
模板
source:
type: mysql #数据源可以是hive等其他,相应的config配置有细微不同
config:
host_port: 172.16.8.69:3308
database: test
username: "root"
password: "root"
profiling: #hive中统计慎用,容易资源拉满,集群垮掉
enabled: True
include_field_min_value: True
include_field_max_value: True
stateful_ingestion: #开启状态,在拉取全数据时候会自动增删
enabled: True
remove_stale_metadata: True
#大部分情况transformer不需要配置
transformers:
- type: "simple_remove_dataset_ownership"
config:
owner_urns:- "urn:li:corpuser:username1"
- "urn:li:corpuser:username2"
- "urn:li:corpGroup:groupname"
ownership_type: "PRODUCER"
#默认就是datahub-rest
sink:
type: "datahub-rest"
config:
server: 'http://localhost:8080'
pipeline_name: mysql_pipline #要支持状态,必须有pipline名称
datahub_api: # Optional. But if provided, this config will be used by the "datahub" ingestion state provider.
server: "http://localhost:8080"
source
更多config 详情见官方文档Input objects | DataHub (datahubproject.io)
source:
type: mysql #数据源可以是hive等其他,相应的config配置有细微不同
config:
host_port: 172.16.8.69:3308
database: test
username: "root"
password: "root"
profiling:
enabled: True
include_field_min_value: True
include_field_max_value: True
stateful_ingestion: #开启状态,在拉取全数据时候会自动增删
enabled: True
remove_stale_metadata: True
transformer(可不配置)
(1)添加标签
使用 simple_add_dataset_tags 模块给添加标签。
可以使用自己的模块函数通过 add_dataset_tags 自定义标签。
transformers:
- type: "simple_add_dataset_tags"
config:
tag_urns: - "urn:li:tag:NeedsDocumentation"
- "urn:li:tag:Legacy"
(2)更改拥有者
使用 simple_remove_dataset_ownership 清除数据拥有者。
transformers:
- type: "simple_remove_dataset_ownership"
config: {}
使用 simple_add_dataset_ownership 添加一系列用户。
transformers:
- type: "simple_add_dataset_ownership"
config:
owner_urns: - "urn:li:corpuser:username1"
- "urn:li:corpuser:username2"
- "urn:li:corpGroup:groupname"
ownership_type: "PRODUCER"
(3)根据数据集 urn 模式设置拥有者关系,为不同的数据集设置不同的拥有者。
transformers:
- type: "pattern_add_dataset_ownership"
config:
owner_pattern:
rules:
".example1.": ["urn:li:corpuser:username1"]
".example2.": ["urn:li:corpuser:username2"]
ownership_type: "DEVELOPER"
(4)标记数据集状态
不想在界面看到某个数据集,就需要将其标记为“已移除”。
transformers:
- type: "mark_dataset_status"
config:
removed: true
(5)添加数据集浏览路径
通过转换为数据集添加浏览路径。有 3 个可选变量:
ENV:传递的环境变量,默认 prod。
PLATFORM:DataHub 支持的平台,例如:mysql、postgres。
DATASET_PARTS:斜线分割的数据集名称,例如:database_name/[table_name]。
这样就会给 hive 数据库的 cn_sisyphe_dm_book.biz_batch_operate_record浏览路径 表生成一个:
/prod/hive/cn_sisyphe_dm_book/biz_batch_operate_record浏览路径。
transformers:
- type: "set_dataset_browse_path"
config:
path_templates: - /ENV/PLATFORM/DATASET_PARTS
#不需要 ENV 并且固定路径中的某部分。
transformers: - type: "set_dataset_browse_path"
config:
path_templates: - /PLATFORM/marketing_db/DATASET_PARTS
这会为 MySQL 数据库 sales.orders 表产生浏览路径:/mysql/marketing_db/sales/orders。
可以设置多浏览路径。不同的人对同样的数据资产有不同的名字。
transformers: - type: "set_dataset_browse_path"
config:
path_templates: - /PLATFORM/marketing_db/DATASET_PARTS
- /data_warehouse/DATASET_PARTS
这样会生成 2 个浏览路径:
① /mysql/marketing_db/sales/orders
② /data_warehouse/sales/orders
sink
- (1)Console
将元数据事件输出到标准输出。
用于试验和调试。
source:
source configs
sink:
type: "console"
- (2)DataHub
① DataHub Rest
使用 GMS Rest 接口将元数据推送到 DataHub。
任何错误可以立即被报告。
还有一些字段可以设置:timeout_sec、token、extra_headers、max_threads。
source:
source configs
sink:
type: "datahub-rest"
config:
server: "http://datahubip:8080"
② DataHub Kafka
通过发布消息到 Kafka 将元数据推送至 DataHub。
异步的可以处理更高的流量。
有一些跟连接相关的字段配置信息。
source:
source configs
sink:
type: "datahub-kafka"
config:
connection:
bootstrap: "localhost:9092"
schema_registry_url: "http://datahubip:8081"
- (3)File
将元数据输出到文件。
使用 File 汇可以将源数据源的处理和推送从 DataHub 解耦。
也适合于调试目的。
使用 File 源可以从 File 汇的数据文件读取元数据。
source:
source configs
sink:
type: file
config:
filename: ./path/to/mce/file.json
yml模板
不论是ui方式还是cli方式都需要配置yml文件。例举如下我司常用的组件,更多模板详见Athena | DataHub (datahubproject.io)
mysql模板
能力
地位
笔记
数据探查✅(可选)通过配置启用检测已删除的实体✅通过有状态引入启用域✅通过配置字段支持
domain
平台实例✅默认启用
此插件提取以下内容:数据库、架构和表的元数据 通过可选的 SQL 分析与每个表关联的列类型和架构 表、行和列统计信息
正在上传…重新上传取消
clickhouse模板
能力
地位
笔记
数据探查✅(可选)通过配置启用检测已删除的实体✅通过有状态引入启用
此插件提取以下内容:
- 表、视图、实例化视图和字典的元数据- 与每个表关联的列类型(*聚合函数和日期时间与时区除外)- 通过可选的 SQL 分析对表、行和列进行统计信息。- 表,视图,具体化视图和字典(带有CLICKHOUSE source_type)血缘
正在上传…重新上传取消
clickhouse-usage模板(统计ck使用详情)
能力
地位
笔记
数据探查✅(可选)通过配置启用检测已删除的实体✅通过有状态引入启用
此插件具有以下功能 -
- 对于特定的数据集,此插件引入以下统计信息 - 1. 前 n 个查询。2. 顶级用户。3. 数据集中每列的用法。2. 将这些统计信息按天或小时粒度聚合到存储桶中。
hive模板
能力
地位
笔记
域✅通过配置字段支持
domain
平台实例✅默认启用
此插件提取以下内容:
- 数据库、架构和表的元数据- 与每个表关联的列类型- 详细的表和存储信息- 通过可选的 SQL 分析对表、行和列进行统计信息。
*4.2. RESET-API方式*
手工构建元数据(即使表不存在)
API-MEDTADA人工构建模板
正在上传…重新上传取消
5. 血缘元数据
5.1 基于push机制构建血缘元数据
** SparkSql场景**
自动解析sparksql依赖关系
** sparksql模板**
正在上传…重新上传取消
SparkSession场景
自动解析sparkrdd/df依赖关系
sparkSession模板
spark = SparkSession.builder
.master("spark://spark-master:7077")
.appName("test-application")
.config("spark.jars.packages","io.acryl:datahub-spark-lineage:0.8.23")
.config("spark.extraListeners","datahub.spark.DatahubSparkListener")
.config("spark.datahub.rest.server", "http://ipt:8080")
.enableHiveSupport()
.getOrCreate()
5.2 基于Rest API机制构建血缘元数据
**RESET-****API-**LINEAGE DEMO
手工构建表与表之间血缘
正在上传…重新上传取消
**RESET-***API-LINEAGE构建工具*
正在上传…重新上传取消
** mr hql程序基于REST-API构建血缘(走pub_execute_sql脚本)**
** mr hql回算程序基于REST-API构建血缘(走回算脚本)**
** waterdrop hive-ck ****REST-API **构建血缘(water drop脚本方式)
6. cli手工删除元数据
datahub delete --urn "urn:li:dataset:(urn:li:dataPlatform:clickhouse,DatabaseNameToBeIngested.add_record.product_user_new_20220117,PROD)" --hard(必须要硬删,软删可能会导致后续同名的表注册不进去)
删除开发环境中的所有数据集
datahub delete --env DEV --entity_type dataset
删除特定平台的所有容器
datahub delete --entity_type container --platform s3
删除开发环境中的所有管道和任务
datahub delete --env DEV --entity_type "datajob"
datahub delete --env DEV --entity_type "dataflow"
删除 PROD 环境中的所有 bigquery 数据集
datahub delete --env PROD --entity_type dataset --platform bigquery --hard
删除所有外观仪表板和图表
datahub delete --entity_type dashboard --platform finereport --hard
datahub delete --entity_type chart --platform finereport --hard
删除与查询匹配的所有数据集
datahub delete --entity_type dataset --query "_tmp" -n
7. 基于graphiql查询血缘以及上下游数量
172.16.8.69:9002/api/graphiql#,查询地址,更多文档详见DataHub GraphQL API | DataHub (datahubproject.io)
Demo
query{
dataset(
urn: "urn:li:dataset:(urn:li:dataPlatform:hive,cn_sisyphe_dim.biz_employee_account,PROD)" #查询的表
) {
lineage(
input: {direction: DOWNSTREAM, start: 0, count: 100, separateSiblings: true} #direction可选DOWNSTREAM或者UPSTREAM,start:从offset第几个起 count:返回结果数
) {
start #返回字段
count #返回字段
total #返回总共有多少条结果
relationships {
type
degree
entity {
type
urn
relationships(input: {types: [], start: 0, count: 100, direction: 查询该表关联的表,该层可以不查询
start
count
total
relationships {
type
entity {
urn
type
}
created {
actor
}
direction
}}}}}}}
查询表依赖上下游数量以及依赖明细UTILS
正在上传…重新上传取消
版权归原作者 只会写demo的程序猿 所有, 如有侵权,请联系我们删除。