このハイブ クエリを使用して、すべてのアカウントの国コードを検出しています。問題は、結合によってデータ セットが管理不能なサイズに爆発し、場合によってはジョブの完了に失敗することです。
この geoip ルックアップ クエリを実行するための高速で効率的な方法は何ですか? ハイブの使用は必須ではありません
SELECT /*+ MAPJOIN(geoip) */
data.account_id, geoip.country_code
FROM data JOIN geoip
WHERE data.ip_num BETWEEN geoip.begin_ip_num AND geoip.end_ip_num
BETWEEN
Hive は内部ON
節をサポートしていません。また、WHERE
フィルタは結合が完了した後にのみ適用されます。どんなヒントも役に立ちます。現在、カスタム MapReduce ジョブを使用してこれを解決しようとしています。誰にもアイデアはありますか?
情報
geoip
テーブルのサイズは約1MBです- Hadoop クラスタには 12 のマップ スロットと 12 のリデュース スロットしかありません
begin_ip_num
最初のオクテット (例:123
of ) に基づいて geoip テーブルをバケット化し、句のような123.0.0.0
条件を使用しようとしました。一部の行が除外されるため、この手法は機能しません。JOIN
FROM data JOIN geoip ON (data.first_octet_bucket=geoip.first_octet_bucket)