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

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

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

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

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

针对这种情况,数据仓库应该怎么设计才能满足任务需求同时又执行效率比较高?
已邀请:
0

老头子 - 专注是唯一的捷径 2015-10-21 回答

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


 
第一个问题用数据库搞,根据业务主键建索引,然后update,很快的,不会慢。
第二个问题作为快照插入数据库,就根据 utime = sysdate - 1 来取数做增量就可以了,拿到的就已经是最新的数据了。为什么要做全量去重呢?每太看明白你的意思。
 
建议做第二种insert方式,因为数据仓库是要保留历史数据的,不知道你们是否做同比环比,你用第一种update方式就没法做了。
 
0

BAO胖子 - 15年BI经验,涉足电力,快消品,医药,信息服务等行业的BI老兵。 2015-10-19 回答

业务上数据出错,也就是如果源系统数据由于业务的原因不可避免的错误,充负值对冲,再正确数值,这样就没有UPDATE,只有INSER,由于有负值对冲,你求出的summary的结果就是正确的。
 
通常这种事情不是很多,增加一个判断条件,加个小表管理也好用其他管理也好,总之就是判断在统计周期是不是有数据调整现象,如果没有就不用全量计算。
0

Bob - 同程旅游大数据+BI 架构师 2015-10-20 回答

如何存储变化
在集群中存储并更新变化的批次数据,是不容易操作的。尤其是hdfs文件系统。
可选的方案建议如下:
1.将变化的数据存储到数据库中。让数据库来承担update工作,在这个过程中尽量用上数据库索引。
这个方案需要定期同步数据到hive的分区表中。
 
2.使用hbase集群来存储变化的数据,并调用hbase的api来完成数据更新操作。
这个方案的优点是可用hive来直接读取hbase的数据
但是在hbase接口开发方面需要投入一些Java开发者。
 
其他的方案也有,但是在你的这个场景来讲,复杂度会高些
0

jcwd520 2015-10-29 回答

感谢大家帮忙分析,对我非常有帮助。

要回复问题请先登录注册