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

✨博客主页: 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 复制代码
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文
相关推荐
智能相对论1 小时前
CES深度观察丨智能清洁的四大关键词:变形、出户、体验以及生态协同
大数据·人工智能
焦耳热科技前沿2 小时前
北京科技大学/理化所ACS Nano:混合价态Cu₂Sb金属间化合物实现高效尿素电合成
大数据·人工智能·自动化·能源·材料工程
min1811234563 小时前
深度伪造内容的检测与溯源技术
大数据·网络·人工智能
武子康3 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
数据智研4 小时前
【数据分享】(2005–2016年)基于水资源承载力的华北地区降水与地下水要素数据
大数据·人工智能·信息可视化·数据分析
TDengine (老段)5 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
亚古数据6 小时前
亚古数据:查询斯里兰卡公司可以获取什么文件和信息?
大数据·亚古数据·斯里兰卡公司查询
WLJT1231231236 小时前
守护自然与滋养民生的绿色之路
大数据·安全
min1811234566 小时前
PC端零基础跨职能流程图制作教程
大数据·人工智能·信息可视化·架构·流程图
静听松涛1336 小时前
中文PC端多人协作泳道图制作平台
大数据·论文阅读·人工智能·搜索引擎·架构·流程图·软件工程