首页/数据/数仓建模速查/数据日期与运行时间:别混用
分层与规范64 条

数据日期与运行时间:别混用

数据日期来自调度参数(业务日期),运行时间是任务实际执行时刻;分区与口径一律用数据日期,用运行时间会导致补数与跨天任务错分区。

数仓建模速查数据更新于 2026-10-13

两个时间概念的区别

数据日期(业务日期)是这条数据属于哪一天,由调度参数注入,例如 bizdate=2026-10-12;运行时间是任务实际执行的时刻,来自系统时钟,只用于日志与监控。T+1 链路里两者天然差一天:10 月 13 日凌晨跑的任务处理的是 10 月 12 日的数据。分区取值、数据过滤、口径判断一律用数据日期,用运行时间推导日期会让补数与跨零点任务写进错误分区,而且往往不报错。

基本信息

数据日期由调度参数注入,如 bizdate=2026-10-12
运行时间任务实际执行时刻,仅用于日志与监控
分区取值一律使用数据日期参数
脚本写法显式引用平台参数,不使用系统当前时间函数
跨零点风险凌晨执行时当前日期与数据日期相差一天
补数方式改调度参数重跑,脚本本身不改代码
传递约定上下游通过调度参数传数据日期,不各自推算

典型使用场景

  • T+1 链路:凌晨调度处理前一天数据,分区写入前一日的 dt
  • 补数重跑:把调度参数改成历史日期,同一份脚本直接重放
  • 跨零点长任务:运行时间已经进入第二天,数据日期仍是前一天
  • 多级依赖:下游直接使用上游传入的数据日期,不再自行计算一次
  • 故障排查:用运行时间定位日志与资源曲线,用数据日期定位数据范围

参数化脚本写法

参数化脚本写法
-- 调度参数由平台注入,示例值 bizdate=2026-10-12
-- 分区与过滤一律使用数据日期参数
INSERT OVERWRITE TABLE dws_trade_store_day PARTITION (dt='${bizdate}')
SELECT store_id, order_cnt, pay_amt
FROM tmp_trade_store_day;

-- 错误写法:用系统当前日期做分区,跨零点与补数都会写错日期
-- INSERT OVERWRITE TABLE dws_trade_store_day PARTITION (dt=date_format(current_date(), 'yyyy-MM-dd'))

-- 校验:确认写入分区与数据日期一致
SELECT count(*) FROM dws_trade_store_day WHERE dt = '${bizdate}';

三个时间概念对照

概念来源示例值用途
数据日期调度参数注入2026-10-12分区、过滤、口径
运行时间系统时钟2026-10-13 02:30日志、监控、性能分析
计划调度时间调度系统计划2026-10-13 00:00任务定位与依赖排查
用系统当前日期做分区,补数时会把三天前的数据全部写进今天的分区,跨零点任务也会偏一天。写错的分区通常仍有正常数据,靠人眼很难发现。
数据日期与运行时间不一致是正常状态,不是异常。凡是与数据内容相关的判断(分区、增量范围、对账日期)都必须取数据日期;只有日志、告警与资源监控才用运行时间。

易错点

  • 脚本用系统当前日期:补三天前的数据全部写进今天的分区,历史分区反而缺数
  • 跨零点任务未固定数据日期:数据错位一天且当天作业持续成功,问题延后暴露
  • 上下游各自推算数据日期(一方减一天一方不减):依赖链上数据错位,对账差额成规律性偏差
  • 用运行时间做数据过滤:T+1 链路整体偏移一天,增量范围与业务日始终不对齐
  • 把运行时间当数据日期排查:查日志找到了,数据却对不上,定位方向一错再错

数据来源与参考

  • 阿里《大数据之路:阿里巴巴大数据实践》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌