请教数据仓库设计-数据更新记录怎么处理?
0
需求描述:
现有业务表一张:产品批次表batchTable,字段包括ID,产品ID pid,产品数量count,批次状态status,创建时间ctime,更新时间utime。
其中,产品数量,批次状态都可能更新,每次更新时同时更新utime记录。
统计任务:
因为涉及到多个系统集成,所以统计需要在数据仓库中进行。需要统计的数据包括以下几个:
1.从某一时刻 t 开始计算,最新的产品总数量
2.从某一时刻 t 开始计算,最新的各状态下批次总数量
公司可用的技术:
hadoop,hive,spark
问题:
1、当业务数据库中某一条批次记录的数量或状态发生更新后,数据怎么载入数据仓库?是将数据仓库中原记录进行更新还是新插入一条记录?如果是更新的话,因为要更新的数据占总数据的比例实在太低,在数据量大的情况效率很低。
2.、如果每次数据更新后新数据都作为一个快照新插入数据仓库的话,那每天的统计任务都要按全量数据进行统计才行,因为需要对数据仓库中的数据进行去重后拿到最新的数据进行统计,这样的话随着数据的积累,统计任务耗时会越来越长。
针对这种情况,数据仓库应该怎么设计才能满足任务需求同时又执行效率比较高?
现有业务表一张:产品批次表batchTable,字段包括ID,产品ID pid,产品数量count,批次状态status,创建时间ctime,更新时间utime。
其中,产品数量,批次状态都可能更新,每次更新时同时更新utime记录。
统计任务:
因为涉及到多个系统集成,所以统计需要在数据仓库中进行。需要统计的数据包括以下几个:
1.从某一时刻 t 开始计算,最新的产品总数量
2.从某一时刻 t 开始计算,最新的各状态下批次总数量
公司可用的技术:
hadoop,hive,spark
问题:
1、当业务数据库中某一条批次记录的数量或状态发生更新后,数据怎么载入数据仓库?是将数据仓库中原记录进行更新还是新插入一条记录?如果是更新的话,因为要更新的数据占总数据的比例实在太低,在数据量大的情况效率很低。
2.、如果每次数据更新后新数据都作为一个快照新插入数据仓库的话,那每天的统计任务都要按全量数据进行统计才行,因为需要对数据仓库中的数据进行去重后拿到最新的数据进行统计,这样的话随着数据的积累,统计任务耗时会越来越长。
针对这种情况,数据仓库应该怎么设计才能满足任务需求同时又执行效率比较高?
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
4 个回复
老头子 - 专注是唯一的捷径 2015-10-21 回答
赞同来自:
第一个问题用数据库搞,根据业务主键建索引,然后update,很快的,不会慢。
第二个问题作为快照插入数据库,就根据 utime = sysdate - 1 来取数做增量就可以了,拿到的就已经是最新的数据了。为什么要做全量去重呢?每太看明白你的意思。
建议做第二种insert方式,因为数据仓库是要保留历史数据的,不知道你们是否做同比环比,你用第一种update方式就没法做了。
BAO胖子 - 15年BI经验,涉足电力,快消品,医药,信息服务等行业的BI老兵。 2015-10-19 回答
赞同来自:
通常这种事情不是很多,增加一个判断条件,加个小表管理也好用其他管理也好,总之就是判断在统计周期是不是有数据调整现象,如果没有就不用全量计算。
Bob - 同程旅游大数据+BI 架构师 2015-10-20 回答
赞同来自:
在集群中存储并更新变化的批次数据,是不容易操作的。尤其是hdfs文件系统。
可选的方案建议如下:
1.将变化的数据存储到数据库中。让数据库来承担update工作,在这个过程中尽量用上数据库索引。
这个方案需要定期同步数据到hive的分区表中。
2.使用hbase集群来存储变化的数据,并调用hbase的api来完成数据更新操作。
这个方案的优点是可用hive来直接读取hbase的数据
但是在hbase接口开发方面需要投入一些Java开发者。
其他的方案也有,但是在你的这个场景来讲,复杂度会高些
jcwd520 2015-10-29 回答
赞同来自: