数据仓库的特点有哪些-业务报表搭建时吃透底层存储逻辑
前两年接手公司全域经营报表搭建工作,对接业务侧梳理月度销售明细、门店客流数据时,总被开发同事反复追问数据仓库的特点有哪些,当时手里攥着一堆原始业务流水表,压根摸不透两套存储工具的差别,只能对着调度脚本反复调试,白白耗掉三个通宵。
线下业务库每日产生上千万条实时订单记录,原本想着直接调取原生数据表做月度汇总,导出数据时页面直接卡顿十几分钟,部分门店的营收数值还出现重复统计的偏差。运营同事拿着错乱的报表过来核对,翻遍数据表也找不到问题根源,后来才反应过来业务数据库和数据仓库底层运行逻辑完全不一样,普通联机业务库根本扛不住多维度聚合分析的需求。
折腾好久才搞明白,数据仓库天然面向分析场景设计,不会跟着前端下单、核销这类实时操作频繁改动底层数据。当时同步过来的三年门店历史数据,全部落进数据仓库分层存储,哪怕业务系统里删除了早年的促销订单记录,仓库里依旧留存完整快照,跨年度对比门店业绩时不用反复回捞原始业务库文件。
门店区域、客单价、消费时段、活动类型四类维度组合统计数据,放到业务库查询需要拆分八张数据表联表筛选,算力消耗直接拉满。切换数据仓库提取指标后,多维度聚合语句运行时长压缩到原先的五分之一,后台调度任务不会再出现超时报错的情况。仓库内部划分好了明细层、汇总层、宽表层,基础原始数据单独存放,提前预计算好季度、年度的汇总指标,运营人员拖拽报表组件就能调取结果,不用每次重新全量扫描底层海量数据。
存储的数据时效性划分也和业务库截然不同,业务库只保留近半年的活跃交易数据,老旧数据会定期归档清理。数据仓库会完整沉淀企业多年的全量经营数据,哪怕是五年前的新店开业活动流水,也能完整调取出来。那段时间做连锁品牌十年发展趋势分析,全靠仓库留存的历史数据支撑,要是依靠业务库根本找不到早年的经营记录。
数据入库的规则也自带统一规整的特性,线下门店收银系统、线上小程序商城、外卖平台三套渠道的数据,原始格式存在大量字段缺失、编码不统一的问题。数据仓库搭建完整的数据清洗流程,自动补齐空缺字段、统一商品编码标准、修正门店归属地标注错误,多渠道数据汇入之后全部保持统一的数据标准,跨渠道对比销售数据不会出现口径混乱的情况。
原本以为所有存储工具都支持频繁写入更新,上手调试数据仓库的时候踩了不小的坑,往仓库里推送新数据时不能随意修改存量历史数据,只能增量追加新批次的数据。当时私自改动往年的门店营收数值,直接触发仓库数据校验告警,全链路报表全部无法正常生成,运维同事花了半天时间回滚数据才恢复正常,往后处理历史数据都会严格遵循仓库的写入规则,不再随意覆盖存量数据。
加班整理完整套门店经营报表的那天傍晚,关闭电脑时盯着屏幕里平稳运行的调度任务,心里只觉得当初要是提前摸透数据仓库的各项底层特性,根本不用反复修改脚本、重做数据校验,白白浪费掉大把的工作时间。