0

我有一个夜间工作,在 hive 中运行和计算一些数据。它是按天划分的。

字段:id bigint rank bigint

昨天输出/dt=2013-10-31 今天输出/dt=2013-11-01

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

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

这是有不同表时的样子

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

但在同一张桌子上

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

建议?

4

2 回答 2

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 作业。

于 2013-11-06T11:12:36.860 回答
0

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

select * from (select * from table where dt='2013-11-01') a FULL OUTER JOIN (select * from table where dt='2013-10-31') b on (a.id=b.id)其中 a.rank!=b.rank 或 a.rank 为 null 或 b.rank 为 null

以上将为您提供差异..

您可以获取差异并找出添加/更新/删除所需的内容

更新如果 a.rank!=null 和 b.rank!=null 即排名改变 DELETE IF a.rank=null 和 b.rank!=null 即如果 a.rank!=null 和 b,则用户不再排名 ADD。 rank=null 即这是一个新用户

于 2013-11-01T23:21:08.067 回答