これは Hive の 1 つのテーブルです。購入するアイテムに関する情報が含まれています。
CREATE EXTERNAL TABLE IF NOT EXISTS Table1
(
UID BIGINT,
ITEMS_PURCHASED ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
そして、これは上記の表のデータです-
1015826235 [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"},{"product_id":140002997245,"timestamps":"1339694926000"},{"product_id":200002448035,"timestamps":"1339172659000"},{"product_id":260003553381,"timestamps":"1339072514000"}]
これは Hive の 2 番目のテーブルです。購入するアイテムに関する情報も含まれています。
CREATE EXTERNAL TABLE IF NOT EXISTS Table2
(
ITEM_ID BIGINT,
CREATED_TIME STRING,
BUYER_ID BIGINT
)
そして、これは上記の2番目の表のデータです
220003038067 2012-06-21 1015826235
300003861266 2012-06-21 1015826235
140002997245 2012-06-14 1015826235
200002448035 2012-06-08 1015826235
260003553381 2012-06-07 1015826235
問題文 - 上記の 2 つのテーブルを UID( および BUYER_ID) に基づいて比較する必要があります。1 つのテーブル (Table1) の UID と 2 つ目のテーブル (Table2) の BUYER_ID は、どちらも同じものです。したがって、UID と BUYER_ID が一致するかどうかを確認する必要があり、Table1 テーブルの ITEMS_PURCHASED は Table2 テーブルの ITEM_ID および CREATED_TIME と同じである必要があり、それら (ITEMS_PURCHASED と ITEM_ID、CREATED_TIME を意味する) が同じでない場合は、何かを行う必要があります。パーセンテージ データの正確性と不正確性に関するレポートを作成できます。
だから、もっと明確にするために-
ITEMS_PURCHASED は、Table1 テーブルの Struct の配列であり、PRODUCT_ID と TIMESTAMPS の 2 つが含まれています。UID と BUYER_ID が一致する場合、Table1 の PRODUCT_ID は Table2 の ITEM_ID と一致し、Table1 の TIMESTAMPS は Table2 の CREATED_TIME と一致する必要があります。
もう 1 つ、これらのテーブルには何百万ものデータが含まれています。問題を単純化するために、レコードを 1 つだけに減らしました。
これには MapReduce ジョブを作成する必要があると思います。Hive、Hadoop、Map Reduce を使用するのはこれが初めてです。それが私が多くの問題に直面している理由です。
私は2つの解決策を考えていました-
1) ユーザー ID と buy_id を比較して、何百万ものデータをチェックする
2) または、いくつかの UID と buy_id をサンプリングしてから、データを比較します。
3) 他のアプローチはありますか?
任意の提案をいただければ幸いです