背景
排查 ETL 输入输出关系时,元数据表 data_flow 里的 inputs 和 outputs 只能看到 ETL 级别的输入、输出数据集信息。
如果要分析“输出数据集的某个字段来自哪个来源数据集的哪个字段”,需要看字段级血缘元数据,核心表是 field_atlas_link。
结论
ETL 输出数据集的字段级血缘关系主要基于 field_atlas_link 分析,可以理解为:
输出数据集 / 输出字段
<- 来源数据集 / 来源字段
核心元数据表
field_atlas_link:字段血缘关系表。
resource_id:目标资源 ID,ETL 输出字段血缘中通常是输出数据集 dsId
fd_id:目标字段 ID,通常是输出数据集字段 fdId
resource_type:目标资源类型
source_resource_id:来源资源 ID,通常是来源数据集 dsId
source_fd_id:来源字段 ID
source_resource_type:来源资源类型
atlas_link_type:字段血缘类型,0 表示数据集字段血缘,1 表示卡片字段血缘,2 表示指标字段血缘
field_info:目标字段显示信息,常见于卡片或指标字段血缘场景
dom_id:租户 / 域 ID
ctime:创建时间
utime:更新时间
data_source 用于把 dsId 转换为数据集名称,常用字段是 ds_id、name、is_del。
field 用于把 fdId 转换为字段名称或字段别名,常用字段是 ds_id、fd_id、name、alias_name、is_del。
查询 SQL
select
fal.resource_id as target_ds_id,
target_ds.name as target_ds_name,
fal.fd_id as target_fd_id,
coalesce(tf.alias_name, tf.name) as target_field_name,
fal.source_resource_id as source_ds_id,
source_ds.name as source_ds_name,
fal.source_fd_id as source_fd_id,
coalesce(sf.alias_name, sf.name) as source_field_name,
fal.resource_type,
fal.source_resource_type,
fal.atlas_link_type
from field_atlas_link fal
left join data_source target_ds
on target_ds.ds_id = fal.resource_id
and target_ds.is_del = 0
left join data_source source_ds
on source_ds.ds_id = fal.source_resource_id
and source_ds.is_del = 0
left join field tf
on tf.ds_id = fal.resource_id
and tf.fd_id = fal.fd_id
and tf.is_del = 0
left join field sf
on sf.ds_id = fal.source_resource_id
and sf.fd_id = fal.source_fd_id
and sf.is_del = 0
where fal.resource_id = '<输出数据集dsId>'
and fal.atlas_link_type = 0;
UAT 示例
- 输出数据集 ID:
c253f99fcb52940bbab9d5f9
- 输出数据集名称:应用页面关系宽表_多源ETL版_帮助中心demo
- 来源数据集:元数据_web_portal_帮助中心demo、元数据_page_帮助中心demo、元数据_custom_app_帮助中心demo、元数据_page_path_帮助中心demo
下图是查询结果示例。截图基于 UAT 环境帮助中心 demo 数据集生成;为便于展示,截图中的 ID 做了截断,实际排查时以 SQL 查询结果中的完整 ID 为准。

枚举说明
atlas_link_type:
- 0:DATASET,数据集字段血缘
- 1:CARD,卡片字段血缘
- 2:METRIC,指标字段血缘
resource_type / source_resource_type 常见值:
- 2:DATA_SET_ETL,ETL 数据集
- 3:DATA_SET_UNIVERSE,Universe 数据集
- 4:DATA_SET_ACCOUNT,账户数据集
- 5:DATA_SET_FILE,文件数据集
- 6:DATA_SET_DB_DIRECT_LINK,数据库直连数据集
- 7:DATA_SET_DB_EXTRACT,数据库抽取数据集
- 8:DATA_SET_HIGH_PERF,高性能数据集
- 9:DATA_SET_SPARK_VIEW,Spark 视图数据集
- 10:DATA_SET_ORACLE_PROCEDURE,Oracle 存储过程数据集
- 11:DATA_SET_WEBSERVICE,WebService 数据集
- 12:DATA_SET_OTHERS,其他数据集
- 14:DATA_PROCESS_CARD,卡片
- 25:METRIC_ATOMIC,原子指标
- 26:METRIC_COMPOSITE,复合指标
- 27:METRIC_DERIVED,衍生指标
注意事项
data_flow.inputs 和 data_flow.outputs 只适合看 ETL 输入输出数据集清单,不包含字段级映射关系。
- 字段名称需要通过
field 表关联获取,建议用 ds_id + fd_id 联合关联,不要只用 fd_id。
- 数据集名称需要通过
data_source 表关联获取。
- 查询卡片或指标字段血缘时,
resource_id 不一定是数据集 ID,字段显示信息可能需要参考 field_atlas_link.field_info。
- 如果 SQL 查不到字段名称,优先确认字段是否已删除、字段血缘是否已生成、目标数据集是否是 ETL 输出数据集。
|