hive中数据更新以及实现

问题

  1. hive虽然已经支持更新操作但是效率低,所以要更新数据就要通过自己手动进行更新。
  2. 拿业务数据来说,使用sqoop脚本是可以直接把全量数据抽取到hive中,sqoop也有两种增量抽取数据的方法,一种是基于自增列,一种是基于时间列。可以参考:sqoop增量导入的两种方式;但是这两种方法里面是只可以把新增的数据拉去过来的,变化的数据是没有抽取过来,所以我们使用的增量抽取是使用的表里面的修改时间和创建时间来进行增量抽取。
  3. 抽取过来的数据就要考虑如何进行更新操作,因为抽取过来的数据既有新增也有变化。现在就要考虑到如何将变化的数据进行合并?

实现

考虑hive中储存历史状态变化的数据
使用拉链表(详细查看 拉链表制作
以下实现方法是不考虑hive中储存历史状态变化的数据,只存储最新状态的数据。

1.使用窗口函数row_number进行实现

思路:

  1. 首先抽取的表必须要有一个唯一主键,先根据创建时间和修改时间将新增的和变化的数据拉去过来到一张临时表
  2. 将临时表和之前正式表进行union all操作
  3. 使用row_number函数根据唯一主键进行分组,根据修改时间进行排序,取出修改时间最大的那条数据,更新到正式表既可以(中间有个问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值