OpenLineage 是一个用于元数据和血缘采集的开放标准,专为在作业运行时动态采集数据而设计。它通过统一的命名策略定义了由作业(Job)、运行实例(Run)和数据集(Dataset) 组成的通用模型,并通过可扩展的Facets机制对这些实体进行元数据增强。
该项目是 LF AI & Data 基金会的毕业级项目,处于活跃开发阶段,欢迎社区贡献。
OpenLineage 集成
OpenLineage Integrations
能力矩阵
该矩阵尚未完成。
下表展示了输入面与 OpenLineage 用于收集元数据的各种机制之间的关系。并非所有机制都能为所有面收集数据,某些面仅特定于某个集成。
✔️:该机制实现了此面。
✖️:该机制未实现此面。
空白列表示尚未记录该机制是否实现此面。
机制 | 集成 | 收集的元数据 | InputDatasetFacet | OutputDatasetFacet | SqlJobFacet | SchemaDatasetFacet | DataSourceDatasetFacet | DataQualityMetricsInputDatasetFacet | DataQualityAssertionsDatasetFacet | SourceCodeJobFacet | ExternalQueryRunFacet | DocumentationDatasetFacet | SourceCodeLocationJobFacet | DocumentationJobFacet | ParentRunFacet |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SnowflakeOperator* | Airflow Extractor | Lineage Job duration | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✖️ | ✖️ | ||||||
BigQueryOperator** | Airflow Extractor | Lineage Schema details Job duration | ✔️ | ✔️ | ✔️ | ||||||||||
PostgresOperator* | Airflow Extractor | Lineage Job duration | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||||||||
SqlCheckOperators | Airflow Extractor | Lineage Data quality assertions | ✔️ | ✖️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||||||
dbt | dbt Project Files | Lineage Row count Byte count | ✔️ | ||||||||||||
Great Expectations | Action | Data quality assertions | ✔️ | ✔️ | ✔️ | ||||||||||
Spark | SparkListener | Schema Row count Column lineage | ✔️ | ||||||||||||
Snowflake*** | Access History | Lineage |
* 使用 Rest SQL 解析器
** 使用 BigQuery API
*** 使用 Snowflake 查询日志
兼容性矩阵
该矩阵展示了每个集成已知支持的数据源,以及目标系统或框架所需的最低版本。
平台 | 版本 | 数据源 |
---|---|---|
Apache Airflow | 1.10+ 2.0+ | PostgreSQL MySQL Snowflake Amazon Athena Amazon Redshift Amazon SageMaker Amazon S3 Copy and Transform Google BigQuery Google Cloud Storage Great Expectations SFTP FTP |
Apache Spark | 2.4+ | JDBC HDFS Google Cloud Storage Google BigQuery BigTable Spanner CloudSQL Google BigQuery Google BigQuery Amazon S3 Azure Blob Storage Azure Data Lake Gen2 Azure Synapse |
dbt | 0.20+ | Snowflake Google BigQuery |
集成策略
本节需要更多细节!欢迎通过底部的编辑链接进行贡献。
与流水线集成
与数据源集成
入门指南
Getting Started
本指南将介绍如何快速开始使用 OpenLineage 收集 数据集(dataset) 、作业(job) 和 运行(run) 元数据。我们将演示如何以 OpenLineage 事件的形式收集 运行级别(run-level) 元数据,并使用 Marquez 作为 HTTP 后端,随后通过 Marquez UI 探索血缘元数据。
前置条件
开始前,请确保已安装:
提示
在本指南中,我们将使用 Marquez 作为 OpenLineage 的 HTTP 后端,并通过 Docker 运行 HTTP 服务器。
使用 Docker 运行 Marquez
使用 Docker 启动 Marquez 最为便捷。请克隆 Marquez 源码并运行 ./docker/up.sh
脚本:
git clone https://github.com/MarquezProject/marquez.git && cd marquez
./docker/up.sh
提示
向脚本传递--build
标志可从源码构建镜像,或传递--tag X.Y.Z
以使用已打标签的镜像。
Apple 芯片架构的用户若遇到 Docker 平台相关错误,可能需要启用模拟并自定义 Docker 服务。可参考此指南。
Marquez 后端使用端口5432
。
要查看 Marquez UI 并验证其已启动,请打开 http://localhost:3000。
UI 使您能够通过血缘图发现作业与其产生和使用的数据集之间的依赖关系,查看当前及历史作业运行的运行级别元数据,等等。
收集运行级别元数据
Marquez 是 OpenLineage 标准的参考实现,是一个 LF AI & DATA 孵化项目,用于收集、聚合和可视化数据生态系统的元数据。
在此示例中,您将学习如何使用 Marquez 的 LineageAPI 和 UI 收集数据集和作业元数据。
提交血缘事件时,首先需要定义一个唯一的 run ID
,例如 0176a8c2-fe01-7439-87e6-56a1a1b4029f
。建议使用 UUIDv7 格式,并且必须唯一。该 run ID 将用于随时间跟踪某个**作业(job)**的运行级别元数据,该作业可能有一个名称,如 my-job
。那么,让我们开始吧!
提示
示例展示了如何通过curl
直接调用 HTTP API 收集元数据。但您也可以使用我们的 Java 或 Python 客户端库快速上手。
步骤 1:启动一次运行
使用 run ID 0176a8c2-fe01-7439-87e6-56a1a1b4029f
为 my-job
启动运行,输入数据集为 my-input
:
请求
$ curl -X POST http://localhost:5000/api/v1/lineage \
-i -H 'Content-Type: application/json' \
-d '{
"eventType": "START",
"eventTime": "2020-12-28T19:52:00.001+10:00",
"run": {
"runId": "0176a8c2-fe01-7439-87e6-56a1a1b4029f"
},
"job": {
"namespace": "my-namespace",
"name": "my-job"
},
"inputs": [{
"namespace": "my-namespace",
"name": "my-input"
}],
"producer": "https://github.com/OpenLineage/OpenLineage/blob/v1-0-0/client",
"schemaURL": "https://openlineage.io/spec/1-0-5/OpenLineage.json#/definitions/RunEvent"
}'
响应
201 CREATED
步骤 2:完成一次运行
使用 0176a8c2-fe01-7439-87e6-56a1a1b4029f
完成 my-job
的运行,输出数据集为 my-output
。我们还指定了 schema facet 以在标记运行完成前收集 my-output
的 schema。注意,由于输入数据集 my-input
已与 run ID 关联,因此无需再次指定:
请求
$ curl -X POST http://localhost:5000/api/v1/lineage \
-i -H 'Content-Type: application/json' \
-d '{
"eventType": "COMPLETE",
"eventTime": "2020-12-28T20:52:00.001+10:00",
"run": {
"runId": "0176a8c2-fe01-7439-87e6-56a1a1b4029f"
},
"job": {
"namespace": "my-namespace",
"name": "my-job"
},
"outputs": [{
"namespace": "my-namespace",
"name": "my-output",
"facets": {
"schema": {
"_producer": "https://github.com/OpenLineage/OpenLineage/blob/v1-0-0/client",
"_schemaURL": "https://github.com/OpenLineage/OpenLineage/blob/v1-0-0/spec/OpenLineage.json#/definitions/SchemaDatasetFacet",
"fields": [
{ "name": "a", "type": "VARCHAR"},
{ "name": "b", "type": "VARCHAR"}
]
}
}
}],
"producer": "https://github.com/OpenLineage/OpenLineage/blob/v1-0-0/client",
"schemaURL": "https://openlineage.io/spec/1-0-5/OpenLineage.json#/definitions/RunEvent"
}'
响应
201 CREATED
查看已收集的血缘元数据
搜索作业元数据
要查看 Marquez 收集的血缘元数据,请访问 http://localhost:3000 进入 UI。然后,使用页面右上角的搜索栏搜索作业 my-job
。要查看 my-job
的血缘元数据,请从下拉列表中点击该作业:
查看作业元数据
在搜索结果中,您应看到作业的 namespace
和 name
,在血缘图中应看到 my-input
作为输入数据集,my-output
作为输出数据集。在图下方的作业详情页面的 RUN HISTORY
选项卡中,作业运行状态应为 COMPLETED
。
查看输入数据集元数据
最后,点击 my-job
的输出数据集 my-output
。显示的元数据包括名称、列名、数据类型等:
总结
在此简单示例中,我们向您展示了如何使用 Marquez 通过 Openlineage 收集数据集和作业元数据。我们还带您完成了一组 HTTP API 调用,以成功将运行标记为完成,并查看 Marquez 收集的血缘元数据。
后续步骤
- 查看 Marquez 的 Airflow 示例,了解如何为 Airflow DAG 启用 OpenLineage 元数据收集,并使用 Marquez 排查失败的 DAG。
- 观看 Cross-platform Data Lineage with OpenLineage。
- 观看 Column-level Lineage is Coming to the Rescue。
- 观看 Observability for Data Pipelines with OpenLineage。
- 观看 Data Observability and Pipelines: OpenLineage and Marquez。
- 收听 Solving Data Lineage Tracking And Data Discovery At WeWork。
- 收听 Unlocking The Power of Data Lineage In Your Platform with OpenLineage。
反馈
您觉得本指南如何?我们非常乐意听取您的反馈,可通过 OpenLineage Slack 找到我们。
风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。