前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >数据血缘是治理的重要环节!

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

作者头像
herain
发布2025-02-18 13:40:53
发布2025-02-18 13:40:53
8000
代码可运行
举报
文章被收录于专栏:数据指象数据指象
运行总次数:0
代码可运行

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

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

今天我们从一个简单的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条件固定为常量。

优化建议

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

代码语言:javascript
代码运行次数:0
复制
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
-- 移除WHERE条件中的dt过滤

JOIN条件优化:

代码语言:javascript
代码运行次数:0
复制
LEFT JOIN table_order_source2 s2
    ON s1.user_id = s2.user_id
    AND s2.dt = '20250216' -- 将过滤条件移到JOIN条件中

字段精简:

代码语言:javascript
代码运行次数:0
复制
GROUP BY 
    s1.user_id,  -- s2.dt已是常量,可移除
    s1.user_name,
    s2.order_id

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据指象 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档