0

ハイブでいくつかのデータを実行して計算する夜間のジョブがあります。日ごとに区切られています。

フィールド: id bigint ランク 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

上記はあなたに違いを与えるでしょう..

差分を取得して、追加/更新/削除する必要があるものを把握できます

UPDATE If a.rank!=null and b.rank!=null ie rank changed DELETE IF a.rank=null and b.rank!=null ie a.rank!=null and b. ADD if a.rank!=null and b.ランク = null つまり、これは新しいユーザーです

于 2013-11-01T23:21:08.067 に答える