数仓数据基线,在不借助平台下要怎么做?

✨博客主页: https://blog.csdn.net/m0_63815035?type=blog

💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识
📢博客专栏: https://blog.csdn.net/m0_63815035/category_11954877.html
📢欢迎点赞 👍 收藏 ⭐留言 📝
📢本文为学习笔记资料,如有侵权,请联系我删除,疏漏之处还请指正🙉
📢大厦之成,非一木之材也;大海之阔,非一流之归也✨

问题:是不是比如一个核心ads层表,通过观察比如都是凌晨3点半跑完,给这个核心表增加基线比如制定3:40分,然后用一个shell脚本查询目标表是否调度完毕,如果否,就发邮件报警这种吗?如果不是,原理是什么?

回答:

数仓数据基线(即数据产出的时间/质量基准)的核心是"保障关键数据在指定时间前完成加工、且符合质量要求"。不借助平台时,需通过**"基线定义+任务依赖校验+监控告警"**的手动流程实现,你的思路是:"基线制定、依赖校验、监控告警、异常处理"全链路,具体如下:

一、先明确:数据基线的核心目标

数据基线包含两个维度:

  1. 时间基线:核心表/任务必须在指定时间前完成(比如ADS层核心报表表需在每日3:40前产出);
  2. 质量基线:数据需满足准确性、完整性(比如订单表当日数据量不低于昨日的80%)。

二、不借助平台的落地步骤(以"日更数仓"为例)

步骤1:定义核心数据基线(先明确"要保障什么")

先梳理数仓中的核心表/任务(比如支撑业务报表的ADS层表、下游依赖的DWS汇总表),给每个核心对象制定基线:

  • 时间基线:基于历史任务耗时,设置"完成截止时间"(比如ADS层订单报表表,历史平均3:30完成,基线设为3:40);
  • 质量基线:定义核心校验规则(比如订单表当日数据量≥昨日90%、用户ID无NULL值)。

示例基线表(可存在Hive/Excel中)

核心表名 时间基线 质量基线规则1 质量基线规则2
ads_order_report 每日3:40前 当日数据量≥昨日90% user_id字段NULL率=0
dws_user_act_d 每日3:20前 活跃用户数≥昨日80% 无重复user_id
步骤2:任务依赖的"前置校验"(保障"上游数据就绪")

数仓任务是分层依赖的(比如ADS层依赖DWS层,DWS层依赖DWD层),所以在任务执行前,需先校验"上游依赖的表/分区是否已完成且符合质量",避免无效执行。

  • 实现方式:在任务的Shell脚本中,添加"依赖校验SQL",执行任务前先跑校验,不通过则直接失败并告警。

  • 示例(Shell+Hive SQL)

    bash 复制代码
    # 校验上游DWS层表的当日分区是否存在(时间基线)
    check_dws() {
      hive -e "
        SHOW PARTITIONS dws_user_act_d PARTITION(dt='${today}');
      " > /tmp/dws_check.log
      # 若分区不存在,直接退出并告警
      if [ $? -ne 0 ]; then
        echo "上游dws_user_act_d的${today}分区未产出" | mail -s "任务依赖失败" data_team@xxx.com
        exit 1
      fi
    }
    
    # 校验上游表数据量是否符合质量基线
    check_dws_quality() {
      yesterday=$(date -d "-1 day" +%Y-%m-%d)
      # 查当日和昨日数据量
      count_today=$(hive -e "SELECT COUNT(*) FROM dws_user_act_d WHERE dt='${today}'")
      count_yesterday=$(hive -e "SELECT COUNT(*) FROM dws_user_act_d WHERE dt='${yesterday}'")
      # 若当日数据量<昨日80%,退出告警
      if [ $count_today -lt $((count_yesterday * 80 / 100)) ]; then
        echo "dws_user_act_d数据量不足:今日${count_today},昨日${count_yesterday}" | mail -s "数据质量不达标" data_team@xxx.com
        exit 1
      fi
    }
    
    # 先执行校验,再跑任务
    check_dws
    check_dws_quality
    # 校验通过,执行当前任务
    hive -f /script/ads_order_report.sql
步骤3:核心表的"基线监控"(保障"按时按质产出")

针对核心表的时间基线+质量基线,单独写一个"监控脚本",定时运行(比如每10分钟跑一次),检查核心表是否达标。

  • 时间基线监控示例(Shell)

    bash 复制代码
    today=$(date +%Y-%m-%d)
    # 检查ads_order_report的当日分区是否在3:40前产出
    check_time() {
      current_time=$(date +%H:%M)
      # 判断当前时间是否超过3:40
      if [ "$current_time" \> "03:40" ]; then
        # 检查分区是否存在
        hive -e "SHOW PARTITIONS ads_order_report PARTITION(dt='${today}')" > /tmp/ads_check.log
        if [ $? -ne 0 ]; then
          echo "ads_order_report未在3:40前产出" | mail -s "时间基线告警" data_team@xxx.com
        fi
      fi
    }
  • 质量基线监控示例(Hive SQL+Shell)

    bash 复制代码
    check_quality() {
      # 检查user_id的NULL率
      null_rate=$(hive -e "
        SELECT COUNT(CASE WHEN user_id IS NULL THEN 1 END)/COUNT(*) 
        FROM ads_order_report WHERE dt='${today}'
      ")
      if [ $null_rate -gt 0 ]; then
        echo "ads_order_report的user_id存在NULL值" | mail -s "质量基线告警" data_team@xxx.com
      fi
    }
步骤4:异常告警与重试(保障"出问题能及时处理")
  • 告警方式 :用Shell的mail命令发邮件,或调用企业微信/钉钉的API发消息(需申请机器人Webhook);

  • 重试机制 :在任务脚本中添加"失败重试逻辑"(比如失败后等待5分钟重试2次),避免临时网络波动导致的异常。

    bash 复制代码
    # 任务重试示例
    retry_count=0
    max_retry=2
    while [ $retry_count -le $max_retry ]; do
      hive -f /script/ads_order_report.sql
      if [ $? -eq 0 ]; then
        echo "任务成功"
        exit 0
      else
        retry_count=$((retry_count + 1))
        echo "任务失败,第${retry_count}次重试"
        sleep 300  # 等待5分钟
      fi
    done
    # 重试失败,告警
    echo "任务重试失败" | mail -s "任务失败告警" data_team@xxx.com

四、方案的优缺点

  • 优点:不依赖平台,成本低,灵活可控(能根据业务自定义规则);
  • 缺点:需手动写大量脚本,维护成本高(比如新增核心表要改监控脚本),无可视化界面(告警需查邮件/日志)。
csharp 复制代码
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文
相关推荐
火山引擎开发者社区4 小时前
两大模型发布!豆包大模型日均使用量突破 50 万亿 Tokens
大数据·人工智能
Hello.Reader4 小时前
Flink SQL 的 UNLOAD MODULE 模块卸载、会话隔离与常见坑
大数据·sql·flink
禾高网络5 小时前
互联网医院系统,互联网医院系统核心功能及技术
java·大数据·人工智能·小程序
AI营销实验室5 小时前
原圈科技AI CRM系统:数据闭环与可视化革新的行业突破
大数据·人工智能
Deepoch5 小时前
仓储智能化新思路:以“渐进式升级”破解物流机器人改造难题
大数据·人工智能·机器人·物流·具身模型·deepoc·物流机器人
シ風箏7 小时前
Flink【基础知识 01】简介+核心架构+分层API+集群架构+应用场景+特点优势(一篇即可大概了解Flink)
大数据·架构·flink·bigdata
Dxy12393102167 小时前
Elasticsearch如何做向量搜索
大数据·elasticsearch
jkyy20147 小时前
AI赋能膳食管理:健康有益助力企业实现精准营养升级
大数据·人工智能·科技·物联网·健康医疗
cui_win7 小时前
Elasticsearch 分片满了?「cluster.max_shards_per_node」报错
大数据·elasticsearch·搜索引擎