hive 模拟update 操作

在Hive数据仓库中,由于不支持直接的UPDATE操作,面对需要更新的数据通常需要采取特殊策略。本文介绍了如何利用Hive的Rank函数来模拟更新操作,以解决订单状态更新同步问题。通过比较每天新导入的订单数据,根据更新时间对相同order_id取最新记录,避免JOIN操作带来的多条记录和效率问题。此外,还提及了在GROUP BY中仅对部分字段进行聚合的方法,如使用collect_set(column_name)[0]取出特定列的一个值。

在使用hive构建数据仓库的时候,经常会遇到从mysql或者oracle数据导入到hive中。

一般情况下,每天导一次数据,有些数据需要更新操作,最典型的例子就是订单数据,比如:

订单创建时间 订单导入hive时间 订单更新时间
2015-07-01 12:09:11 2015-07-02 00:30:00 2015-07-02 20:07:12

这个例子就很明显,如果按照订单生成时间导数据的话,订单状态更新后的数据就无法同步到hive 的数据仓库。

因为hive 不支持update操作,那么如何合并订单历史和更新数据呢?

那就使用hive模拟update操作。

hortonworks有一篇文章:http://zh.hortonworks.com/blog/four-step-strategy-incremental-updates-hive/

这篇文章就是说如何使用hive现有的操作来达到update数据的效果。

按照这么文章的操作,也会遇到一些问题:

1、join容易产生多条记录

2、jion操作比较耗时

这里我们推荐一种更轻快的解决办法,使用rank函数

以下面代码为例:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值