专栏名称: 老司机聊数据
互联网+行业,数字化落地,包含IT数据管理、数据资产、数据应用、最佳企业数据案例实践分享等
目录
相关文章推荐
51好读  ›  专栏  ›  老司机聊数据

数据血缘是治理的重要环节!

老司机聊数据  · 公众号  ·  · 2025-04-03 10:28

正文

请到「今天看啥」查看全文


大数据血缘主要体现在表与表之间的关系,描述了我的数据从哪里来,经过怎样的关联处理,流到哪里去,弄清楚关系是做数据治理的关键一环。

大数据中涉及的数据表成百上千,表与表之间的关系,交叉依赖,错中复杂的。

今天我们从一个简单的SQL开始,去构建血缘关系及可视化。SQL查询客户的销售额,并将数据写入表table_user_dt_tg中:


血缘关系解析图谱:

使用PlantUML做可视化展示:

关键血缘分析

1. 目标表结构

2. 分区策略

  • 分区字段:dt
  • 分区值来源:硬编码值'20250216'(通过WHERE条件过滤)
  • 动态性:静态分区(每次写入固定分区)

3. 字段级血缘

  • user_id:双路径验证
  • 主路径:s1.user_id → 目标表
  • 验证路径:JOIN条件s1.user_id = s2.user_id
  • order_amt:存在聚合风险
  • 聚合操作可能导致精度损失(需确认业务是否需要保留明细)

有了血缘数据之后,我们请能清楚的看出 数据的流向以及使用哪些字段,做了哪些计算统计等,数据治理才有了抓手。比如基于血缘数据分析。可以评估出S QL存在的风险点以及优化建议。

SQL质量风险点

  • 分区陷阱:WHERE条件将s2.dt固定为20250216,但目标表分区字段dt来自s2.dt,导致所有数据写入dt='20250216'分区
  • LEFT JOIN实效性:WHERE条件在JOIN之后执行,实际将LEFT JOIN转换为INNER JOIN效果
  • GROUP BY冗余:group by包含s2.dt,但该字段已被WHERE条件固定为常量。

优化建议

动态分区改造(如需多分区写入):

SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
-- 移除WHERE条件中的dt过滤

JOIN条件优化:

LEFT JOIN table_order_source2 s2
    ON s1.user_id = s2.user_id
    AND s2.dt = '20250216' -- 将过滤条件移到JOIN条件中

字段精简:

GROUP BY 
    s1.user_id,  -- s2.dt已是常量,可移除
    s1.user_name,
    s2.order_id

以上就是一个基于数据血缘,做数据治理的经典案例了。








请到「今天看啥」查看全文