请教数据仓库设计--数据更新记录怎么处理?

yxinzju 2015-10-19 10:44:37
需求描述:
现有业务表一张:产品批次表batchTable,字段包括ID,产品ID pid,产品数量count,批次状态status,创建时间ctime,更新时间utime。
其中,产品数量,批次状态都可能更新,每次更新时同时更新utime记录。

统计任务:
因为涉及到多个系统集成,所以统计需要在数据仓库中进行。需要统计的数据包括以下几个:
1.从某一时刻 t 开始计算,最新的产品总数量
2.从某一时刻 t 开始计算,最新的各状态下批次总数量

公司可用的技术:
hadoop,hive,spark

问题:
1、当业务数据库中某一条批次记录的数量或状态发生更新后,数据怎么载入数据仓库?是将数据仓库中原记录进行更新还是新插入一条记录?如果是更新的话,因为要更新的数据占总数据的比例实在太低,在数据量大的情况效率很低。
2.、如果每次数据更新后新数据都作为一个快照新插入数据仓库的话,那每天的统计任务都要按全量数据进行统计才行,因为需要对数据仓库中的数据进行去重后拿到最新的数据进行统计,这样的话随着数据的积累,统计任务耗时会越来越长。

针对这种情况,数据仓库应该怎么设计才能满足任务需求同时又执行效率比较高?
...全文
2034 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tul163 2016-05-04
  • 打赏
  • 举报
回复
针对问题的回答: 1、建议以创建时间ctime和更新时间utime做增量标识,每天增量更新(如果按ETL时间做分区就更容易导入,而且不易影响历史数据) 因为要回到任意t时刻,所以这种方式能够满足需求。 2、如果想回到任意时刻,对历史全量的扫描是不可避免的,如果只是要看t时刻之后的数据1中的增量方式可以避免全量扫描 3、建议以增量抽取,然后t时刻计算的结果表来满足需求
yu5358979 2015-10-25
  • 打赏
  • 举报
回复
建议通过阿里的开源框架canal做一个ODS层,把业务数据的所有变化关键节点(例如:下单时间,付账时间,都对应某个表的字段status等)都记录下来,并且记载变更时间。然后数据少可以gp,多了的话可以hive

7,391

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧