Databend 原生数据血缘实战:表级列级追踪与依赖排查

Feng 6 阅读 AI技术

数据血缘在数据库内部直接采集,表级和列级都能追踪。Databend 原生 Data Lineage 从 v1.2.935 起可用,采到的对象和字段依赖关系可以拿来做改动影响拆解、数据问题定位、资产管控和敏感数据传播追踪。

为什么需要血缘:从手工排查到依赖路线

表结构一改,下游视图、数据作业、报表可能全跟着出问题。指标异常时,得沿着加工链路往回找源头数据或转换逻辑。敏感字段流出去了,也得知道它到底传到了哪些地方。

数据体系小的时候,靠经验、SQL 搜索、人工筛查还能应付。一旦表、视图、Stage、数据管道织成复杂的依赖网,光有一份对象清单就不够了,必须识别数据在对象之间怎么流动。

血缘描述数据从产生、加工到被消费的路径,分两个方向看:

  • 上游(Upstream):当前对象的数据从哪来。比如客户销售汇总表的上游可能包括订单明细表和客户维度表。
  • 下游(Downstream):当前对象的数据流向哪。比如订单明细表的下游可能包括聚合表、视图和数据作业。

改表结构、调字段类型、删列或者重构模型之前,先查下游血缘能识别潜在影响范围,省掉大量人工确认。报表数字不对时,沿列级血缘逐层检查源数据、转换逻辑和下游用法,能把排查范围压下来。比在 SQL 和作业记录里逐条搜要快得多,血缘给的是一条明确的依赖路线。

Databend 记录哪些对象和关联

表级与列级血缘

血缘模型里,表、视图、Stage 和外部 Catalog 对象是节点,数据写入和视图定义关系是节点之间的边。表级血缘描述对象之间的依赖,列级血缘进一步描述源列到目标列的产出关系。

列级血缘不只管直接复制列。聚合、计算表达式、别名、多层查询,Databend 都从查询计划里解析参与计算的源列。一个目标列由多个源列计算产出时,这些源列都算它的上游,依赖关系还能跨中间表或视图继续追。

Data Movement 与 View Lineage

Databend 采集两类血缘:

  • Data Movement:数据实际从一个对象写入另一个对象,比如 CREATE TABLE … AS SELECT、INSERT … SELECT、多表 INSERT、REPLACE、MERGE 和 COPY。
  • View Lineage:视图定义和源对象之间的依赖。启用血缘后,创建视图时会记录血缘关系;启用之前就存在的视图可以用 REFRESH LINEAGE 回填或修正关系。

Stream、Stage 与外部 Catalog

  • Stream:通过 Stream 读数据时,血缘关系指向 Stream 对应的底层表。
  • Stage:参与对象级血缘,记录数据从 Stage 加载到表或从表卸载到 Stage 的过程。
  • 外部 Catalog:外部对象可以作为血缘端点,说明 Databend 对象和外部数据之间的关系;血缘遍历到外部 Catalog 边界就停。

私有化部署配置

Data Lineage 是 Databend 企业版功能。私有化部署需要企业版许可证。启用时,在每个 Query 节点的 databend-query.toml 里加入:

一个客户分层示例链路

用客户分层场景演示完整链路:fact_orders 存订单明细,agg_customer_sales 按客户汇总累计消费额、订单数和最近下单时间,customer_segments 根据累计消费额算出客户等级。

CREATE OR REPLACE DATABASE lineage_demo;

CREATE OR REPLACE TABLE lineage_demo.fact_orders (
  order_id BIGINT,
  customer_id BIGINT,
  amount DECIMAL(12, 2),
  order_time TIMESTAMP
);

CREATE OR REPLACE TABLE lineage_demo.agg_customer_sales AS
SELECT
  customer_id,
  sum(amount) AS total_amount,
  count(*) AS order_count,
  max(order_time) AS last_order_time
FROM lineage_demo.fact_orders
GROUP BY customer_id;

CREATE OR REPLACE TABLE lineage_demo.customer_segments AS
SELECT
  customer_id,
  total_amount,
  order_count,
  if(total_amount >= 1000, 'high_value', 'standard') AS segment,
  now() AS updated_at
FROM lineage_demo.agg_customer_sales;

血缘通过异步链路持久化。执行完上述语句后,相关关系一般几秒内就能查到。

用 SQL 追溯来源和检查改动影响

表级上游血缘查询

GET_LINEAGE 接收对象名称、对象类型、方向和可选的遍历跳数。对象类型支持 TABLE、VIEW、STAGE 和 COLUMN,方向支持 UPSTREAM 和 DOWNSTREAM;遍历跳数取值 1–5,省略时默认是 5。

SELECT
  distance,
  source_object_database,
  source_object_name,
  target_object_database,
  target_object_name,
  process
FROM GET_LINEAGE(
  'lineage_demo.customer_segments',
  'TABLE',
  'UPSTREAM',
  2
)
ORDER BY distance;

UPSTREAM 表示往数据来源方向追,DOWNSTREAM 表示往数据消费方查。distance = 1 是直接关系,distance = 2 是经过一个中间对象的第二跳关系。process 是包含查询和执行上下文的 JSON 字符串,里面的字段可能因血缘关系类型和执行上下文而为空。

列级下游血缘查询

查列的时候,把完整列名作为起点,对象类型设为 COLUMN:

SELECT
  distance,
  source_object_name,
  source_column_name,
  target_object_name,
  target_column_name
FROM GET_LINEAGE(
  'lineage_demo.fact_orders.amount',
  'COLUMN',
  'DOWNSTREAM',
  5
)
ORDER BY distance, target_object_name, target_column_name;

这个查询用来评估改 amount 字段时可能受影响的派生列。

血缘在库内怎么采集和保存

基于真实查询计划解析依赖

血缘采集的准确性来自真实查询计划。聚合、计算表达式、多表关联、多层查询这些复杂 SQL,Databend 能按实际查询语义解析列级依赖。血缘关系还会保留相关的查询和执行上下文,方便追溯关系来源、核对转换逻辑、定位数据问题。

异步持久化血缘事件

查询成功后,产生的血缘事件异步写入内置系统表。正常运行时,新关系一般几秒内就能查到,不用等按小时或按天跑的离线扫描作业。

用对象身份保持重命名后的关系

default Catalog 中的 Databend 原生表,Data Movement 用对象 ID 和列 ID 标识血缘端点,而不是只存对象名。查血缘时,再按当前元数据解析最新名称。对表或列做重命名(Rename)后,已有血缘关系仍然指向同一对象。稳定的对象身份能减少长期维护血缘图时的误连通,在数据模型演进过程中保持关系一致。

把已有视图接入血缘图

启用 Data Lineage 后,创建视图时会记录血缘关系。启用前就存在的视图,建议先 Dry Run 预览改动,再执行刷新:

REFRESH LINEAGE FOR ALL VIEWS DRY RUN;
REFRESH LINEAGE FOR ALL VIEWS;

REFRESH LINEAGE 会修正 default Catalog 中所有视图的血缘,需要全局 SUPER 权限。Dry Run 只报告将要新增、更新或删除的关系,不写数据。

在 Databend Cloud 中查看依赖和查询上下文

Databend Cloud 里打开 Database Explorer,选一个表或视图,进 Lineage 页签就能看血缘图。该功能默认不开,需要时提工单让 Databend 开启。

节点代表表或视图,节点之间的连线表示数据的上下游关系;展开节点可以看列之间的依赖。点表节点之间的连线,还能看到产生该血缘关系时记录的查询和执行上下文。

列级血缘可以用来拆解敏感字段经过转换后流向的目标列。结合权限控制和 Masking Policy,能评估数据暴露边界,为安全审计和合规管控提供依据。

在表视图海量的库里,名字像不代表含义一致。血缘关系映射数据的实际流向,能用来识别关键数据集、重复加工链路,以及缺少下游依赖的对象。

把数据依赖变成排查线索

Databend 原生 Data Lineage 基于真实查询计划采集血缘关系,把表级依赖、列级映射和执行上下文纳入统一的血缘查询结果,用于改动影响拆解、数据问题定位和数据管控。

Data Lineage 自 Databend v1.2.935 起可用。

Feng
这位作者很神秘,还没有填写简介。