在Hive分区之间获取增量更改

时间:2013-11-01 22:23:11

标签: join hadoop hive

我有一个夜间工作,运行并计算蜂巢中的一些数据。它按天划分。

字段: id bigint 排名bigint

昨天 输出/ DT = 2013年10月31日 今天 输出/ DT = 2013年11月1日

我想弄清楚是否有一种简单的方法可以在今天和昨天之间进行增量更改

我正在考虑做一个左外连接但不确定它是什么样的,因为它是同一个表

当存在不同的表时,这可能是什么样子

SELECT * FROM LEFT OUTER JOIN b ON(a.id = b.id AND a.dt ='2013-11-01'和b.dt ='2-13-10-31')WHERE a.rank!= B.rank

但是在同一张桌子上它是

SELECT * FROM LEFT OUTER JOIN a ON(a.id = a.id AND a.dt ='2013-11-01'和a.dt ='2-13-10-31')WHERE a.rank!= a.rank

建议?

2 个答案:

答案 0 :(得分:1)

这样可行

SELECT a.* 
FROM A a LEFT OUTER JOIN A b ON a.id = b.id
WHERE a.dt='2013-11-01' AND b.dt='2013-10-31' AND <your-rank-conditions>;

有效地,这将仅跨越1个MapReduce作业。

答案 1 :(得分:0)

所以我想通了......使用子查询和联接

select * from(select * from table where dt ='2013-11-01')a 完全外部加入 (从表格中选择*,其中dt ='2013-10-31')b on(a.id = b.id) 其中a.rank!= b.rank或a.rank为null或b.rank为null

以上将为您提供差异..

您可以采取差异并找出您需要添加/更新/删除

的内容

UPDATE如果a.rank!= null且b.rank!= null,则排名已更改 DELETE IF a.rank = null和b.rank!= null,即用户不再排名 如果a.rank!= null并且b.rank = null则添加,即这是一个新用户