会议室里最安静的一刻,往往出现在两个数对不上的时候。
老板看着大屏问:“为什么这里销售额是 128 万,日报里是 131 万?”
做数据的同学低头看了一眼,回答:“一个是实时的,一个是离线的。”
这句话很常见。
也很危险。
因为它解释了现象,却没有解释边界。老板听完还是不知道该信哪个数,业务听完还是不知道明天能不能用,最后大家只记住一件事:数据又对不上。
“实时”和“离线”不是免死金牌
实时数据和离线数据不一样,这很正常。
实时链路更快,但可能有延迟到达、重复消息、状态回写、退款补录。离线链路更稳,但通常按批次跑,看到的是某个时间点之后整理过的结果。
问题在于,很多人把“实时/离线”当成解释的终点。
其实它只是起点。
老板真正想知道的是:这两个数差在哪里,差多少算正常,什么时候会收敛,今天决策应该看哪个。
如果你只说“一个实时一个离线”,就像医生只说“一个是体温计,一个是血常规”。信息没错,但病人还是不知道怎么判断。

LTAP 很热,但普通人先看懂一致性
最近 Databricks 推 Lakebase,讨论 LTAP,也就是把事务型处理和分析型处理放到更统一的数据底座里。
这类趋势很好理解:大家都不想维护太多套系统,也不想在业务库、数仓、湖仓、缓存之间来回搬数据。
可是 Regatta 的反方文章也提醒了一点:存储统一,不代表一致性问题自动解决。
对普通数据从业者来说,不一定要立刻掌握所有架构细节。但你要有一个基本意识:两个数不一样,背后通常不是“谁算错了”这么简单。
它可能来自:
- 数据时间窗口不同;
- 写入和统计看到的版本不同;
- 迟到数据处理规则不同;
- 退款、取消、补录的状态归属不同;
- 实时链路和离线链路过滤规则不同。
这些问题如果不讲清楚,未来 AI 问数也会踩同样的坑。
AI 会很快回答“销售额是多少”。但如果系统里同时存在实时销售额、离线销售额、财务确认销售额、运营口径销售额,它很可能答得又快又乱。
你应该给出 4 层解释
下次再遇到两个数不一样,不要只说实时/离线。
可以按 4 层解释。
第一层:来源。
这两个数分别来自哪张表、哪条链路、哪个报表。先让大家知道它们不是凭空出现的。
第二层:时间。
一个看的是截至当前分钟的数据,另一个看的是昨晚批处理后的数据;一个包含今天退款,一个要到明天才回写。时间窗口说清楚,很多争议会少一半。
第三层:规则。
哪些订单算进去,哪些不算;取消订单算不算,退款什么时候扣,测试订单有没有排除。规则不说清,数字永远像吵架。
第四层:使用建议。
这才是最重要的。今天要看趋势,用实时数;月底要对账,用离线确认数;活动现场要盯异常,用实时看板;财务结算不能用实时看板截图。
数据分析师的价值,不是证明其中一个数绝对正确,而是告诉别人每个数适合干什么。
别把差异藏起来
很多人怕解释两个数不一样。
好像一解释,就承认数据不可信。
其实恰好相反。真正让人不信数据的,是差异永远没有解释。你越遮,大家越觉得里面有问题。
如果你能在报表旁边写清楚:这个实时指标通常会在 T+1 后和离线口径收敛,正常差异范围大约来自退款和迟到订单,超过某个范围需要排查上游,那业务反而更敢用。
数据可信,不是所有数永远一样。
数据可信,是差异出现时,有人能说明它为什么出现、什么时候消失、该怎么用。
这就是普通数据从业者在 AI 时代更需要补的一课。
模型可以帮你查数。
但解释两个数为什么不一样,仍然是人的工作。
下次开会前,先准备一张差异卡
如果你经常被问到两个数为什么不一样,可以提前给自己准备一张很小的差异卡。
不用复杂,5 行就够:
- 指标名;
- 实时口径;
- 离线口径;
- 常见差异来源;
- 建议使用场景。

这张卡的作用,不是让你在会上显得准备充分。它是帮你把“临场解释”变成“稳定判断”。
很多数据分析师在会上吃亏,不是因为算错了,而是因为只带了结果,没有带解释结果的材料。别人一问,自己就只能临时组织语言。越解释越像辩解。
有了差异卡,你可以很平静地说:这两个数确实不同,差异主要来自退款回写和数据窗口;今天看活动趋势用实时数,月底复盘和财务对账看离线确认数。
这句话比“一个是实时的”多不了多少字。
但可信得多。
我叫石头,在数据行业里摸爬滚打了十几年,见过太多“一个实时一个离线”后面藏着的真问题。这里写的,就是这些教训——我觉得值得说出来的那部分。
来源:Databricks Lakebase · Regatta:storage unification is not enough