1

IP アドレスの数値バージョンを含む Hive テーブルがあります。開始、終了、場所を含む別のテーブルがあり、開始と終了は場所に関連付けられた数値 IP の範囲を定義します。

Example
Numeric: 29

start | end | location
----------------------
1     | 11  | 666
12    | 30  | 777
31    | 40  | 888

Output: 29 - 777

テーブル 1 の IP を使用して、テーブル 2 から場所を検索する必要があります。私は Hive を初めて使用し、結合ステートメントで BETWEEN または < > を使用できないことを発見しました。私はHive SQLを使用してこれを実現する方法を見つけようとしていますが、それを理解することはできません. 方法はありますか?それらのいずれかが必要な場合、私はUDFにもある程度精通しています。これは Hive では不可能であり、Pig または Java の Map/Reduce ジョブを使用する必要があるという考えにオープンです。現時点では、十分な知識がありません。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

2

Hive と Pig は、このような不等結合をサポートしていません。クロス ジョインとそれを行う場所を使用できます。しかし、それは非効率的です。簡単な例:

SELECT t1.ip, t2.location_ip FROM t1 JOIN t2
WHERE t1.ip >= t2.start_ip and t1.ip<=t2.start_ip ;

ただし、大きなテーブルと小さなテーブルをクロス結合したいようです。もしそうなら、おそらく次のステートメントがより効率的です。

SELECT /*+ MAPJOIN(t2) */ t1.ip, t2.location_ip FROM t1 JOIN t2
WHERE t1.ip >= t2.start_ip and t1.ip<=t2.start_ip ;
于 2013-09-18T02:08:02.260 に答える