PAYATHON 2026

哪些开源 Data Lineage 工具支持列级血缘及转换、聚合逻辑展示?

数据小陈

结论:优先验证 DataHub,备选 OpenMetadata

针对 Snowflake 平台上“自动解析 SQL、建立列级血缘、查看转换逻辑、通过 API 提供给下游应用”的需求,建议优先对 DataHub 做概念验证,同时评估 OpenMetadata。两者都有采用 Apache 2.0 许可证的开源项目,可以自行部署。DataHub 开源仓库、OpenMetadata 开源仓库

选型时,需要分别确认工具能否识别目标列依赖的源列,以及能否展示并返回目标列的具体表达式。支持列级血缘,不代表工具会自动把每条血缘边标注成 SUM(price * quantity),也不代表查询血缘的 API 会直接返回这样的表达式。

如果允许从列级血缘跳转查看关联 SQL,可以先试 DataHub。如果要求界面和 API 都直接提供逐列表达式,就应将其列为必须实际验证的验收条件。

OpenLineage 的职责是什么?

OpenLineage 提供血缘事件规范及相关集成。它的列级血缘模型可以表达输入列、输出列及其转换关系,但规范本身不负责为任意代码自动生成完整的表达式展示界面。

原问题中的术语需要澄清:在当前列级血缘规范中,DIRECT、INDIRECT 属于 type;TRANSFORMATION、AGGREGATION 属于 subtype。description 可以携带转换说明,但具体是否自动生成、包含多少表达式信息,取决于事件生产端的实现,不能仅凭规范字段判断。OpenLineage 列级血缘规范

继续采用 OpenLineage 时,需要检查所用集成实际产生的事件,并确认存储端和展示端能否保留、呈现这些信息。

DataHub 为什么适合作为首选候选?

DataHub 提供 SQL 血缘推断和列级血缘查询接口。官方 SDK 的 infer_lineage_from_sql() 可以解析 SQL、推断表与列之间的依赖,并创建包含 SQL 转换逻辑的 query node;get_lineage() 支持通过 source_column 查询指定列的血缘。DataHub Lineage SDK 文档

这比较接近“解析 SQL 后自动产生血缘,同时保留转换依据”的需求。不过,query node 展示的是关联 SQL,不能据此断言每条列级血缘边都已有独立的表达式展示。

Snowflake 连接器支持列级血缘,也提供查询实体采集配置。接入时需要留意权限和 Snowflake 版本条件:官方配置说明中,include_column_lineage 对应的表到表、视图到表列级血缘要求适当授权及 Snowflake Enterprise Edition 或更高版本。自行提供 SQL 进行解析是另一条接入路径,需要单独评估。DataHub Snowflake 连接器文档

如何验证 SQL 解析与 API 查询?

先采集相关表的 schema,再用一条容易人工核对的 SQL 验证。以下示例采用支持这些接口的 DataHub SDK,并假设已配置 DataHub 服务地址和认证信息:

from datahub.sdk import DataHubClient

client = DataHubClient.from_env()

sql_query = """
CREATE TABLE PROD_DB.ANALYTICS.SALES_SUMMARY AS
SELECT
    customer_id,
    SUM(price * quantity) AS total_amount
FROM PROD_DB.RAW.ORDER_ITEMS
GROUP BY customer_id
"""

client.lineage.infer_lineage_from_sql(
    query_text=sql_query,
    platform="snowflake",
    default_db="PROD_DB",
    default_schema="ANALYTICS",
)

results = client.lineage.get_lineage(
    source_urn="<目标表在 DataHub 中的实际 Dataset URN>",
    source_column="total_amount",
    direction="upstream",
)

for result in results:
    print(result)

这里的 SQL 用于血缘推断;示例没有调用 Snowflake 执行建表操作。目标表 URN 和列名需要替换为实际采集后使用的标识,并核对大小写。

验收时,分别检查:

  • total_amount 是否能追溯到 price 和 quantity。
  • 关联 SQL 是否保留 SUM(price * quantity)。
  • 界面能否从目标列找到对应的转换 SQL。
  • 下游应用通过 API 得到的是列依赖路径、完整 SQL,还是已经拆分好的逐列表达式。

SDK 文档中的列级查询结果包含血缘路径,不能假定这些路径对象同时包含完整转换表达式。如果下游需要独立的表达式字段,应另行验证查询元数据接口,或设计补充的解析与存储流程。

OpenMetadata 适合什么情况?

OpenMetadata 也可以纳入候选名单。其血缘采集流程能够处理 SQL,Snowflake 属于支持血缘工作流的连接器。文档说明,对于能够取得定义 SQL 的视图,可以在元数据采集后生成视图及列级血缘。OpenMetadata 血缘工作流

它的 Lineage API 支持管理实体间的血缘关系,并携带列映射、SQL 查询及 pipeline 引用,适合需要把血缘接入现有元数据平台的团队。不过,API 能保存 SQL,与“自动解析后逐列展示表达式”是两项需要分开验证的能力。OpenMetadata Lineage API

哪些限制需要提前验证?

建议使用真实业务 SQL 做验证,至少覆盖 CTE、多表 JOIN、聚合、窗口函数和实际使用的写入语句。只用简单的 SELECT a AS b,很难判断工具能否满足生产需求。

以 DataHub 的 SQL parser 文档为例,schema 不完整或过时会影响解析结果,运行时才能确定的动态表引用也存在限制。该文档还说明,WHERE、GROUP BY、JOIN 等子句中引用的列不会作为其列级血缘的一部分。如果希望同时追踪“影响结果筛选或分组的列”,需要专门验证这种间接依赖。DataHub SQL parser 能力与限制

对于任意 Python 代码、UDF 内部逻辑或动态 SQL,也应逐项确认支持范围。能够解析 SQL,并不代表工具能够解析所有转换代码。

实际落地时,可以先用 DataHub 验证列依赖路径与关联 SQL 是否满足使用需求。如果下游明确需要逐列转换表达式,再确认现有接口的返回结构,决定是否补充表达式提取。

备注:内容仅供参考。