重複の可能性:
テーブルを使用したSQLクエリJOIN
CREATE EXTERNAL TABLE IF NOT EXISTS TestingTable1 (This is the MAIN table through which comparisons need to be made)
(
BUYER_ID BIGINT,
ITEM_ID BIGINT,
CREATED_TIME STRING
)
そしてこれは上の最初の表のデータです
**BUYER_ID** | **ITEM_ID** | **CREATED_TIME**
--------------+------------------+-------------------------
1015826235 220003038067 *2001-11-03 19:40:21*
1015826235 300003861266 2001-11-08 18:19:59
1015826235 140002997245 2003-08-22 09:23:17
1015826235 *210002448035* 2001-11-11 22:21:11
これはHiveの2番目のテーブルです-これには、購入しているアイテムに関する情報も含まれています。
CREATE EXTERNAL TABLE IF NOT EXISTS TestingTable2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
そしてこれは上の2番目の表のデータです(TestingTable2
)-
**USER_ID** **PURCHASED_ITEM**
1015826235 [{"product_id":220003038067,"timestamps":"1004941621"}, {"product_id":300003861266,"timestamps":"1005268799"}, {"product_id":140002997245,"timestamps":"1061569397"},{"product_id":200002448035,"timestamps":"1005542471"}]
以下のシナリオが満たされるようにと比較TestingTable2
してください。TestingTable1
から比較した後、 TestingTable1に対応するANDと一致しないPRODUCT_ID
ANDTIMESTAMPS
を検索します。TestingTable2
ITEM_ID
CREATED_TIME
BUYER_ID(USER_ID)
TestingTable1
したがって、データを見るとTestingTable2
、this(last)ITEM_ID 210002448035
fromTestingTable1
はデータと一致しておらずTestingTable2
PRODUCT_ID- 200002448035
、同様にタイムスタンプと一致していません。そこで、HiveQLクエリを使用して以下の結果を表示したいと思います。
**BUYER_ID** | **ITEM_ID** | **CREATED_TIME** | **PRODUCT_ID** | **TIMESTAMPS**
--------------+------------------+--------------------------------+------------------------+----------------------
1015826235 *210002448035* 2001-11-11 22:21:11 200002448035 1005542471
1015826235 220003038067 *2001-11-03 19:40:21* 220003038067 1004941621
誰かがこれで私を助けることができますか?私はHiveQLを初めて使用するので、多くの問題があります。
更新しました:-
このクエリを作成しましたが、希望どおりに機能しません。
select * from
(select * from
(select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as timestamps
from testingtable2 LATERAL VIEW
explode(purchased_item) exploded_table as prod_and_ts)
prod_and_ts
LEFT OUTER JOIN testingtable1
ON ( prod_and_ts.user_id = testingtable1.buyer_id AND testingtable1.item_id = prod_and_ts.product_id
AND prod_and_ts.timestamps = UNIX_TIMESTAMP (testingtable1.created_time)
)
where testingtable1.buyer_id IS NULL)
set_a LEFT OUTER JOIN testingtable1
ON (set_a.user_id = testingtable1.buyer_id AND
( set_a.product_id = testingtable1.item_id OR set_a.timestamps = UNIX_TIMESTAMP(testingtable1.created_time) )
);
もう1つの更新
user1166147
コメントによると。私は彼の質問に従って私の質問を書きました。ハイブでは、私INNER JOIN
は単にによって書かれていると思いますJOIN
。
これは私の以下のクエリです。
select * from (select t2.buyer_id, t2.item_id, t2.created_time as created_time, subq.user_id, subq.product_id, subq.timestamps as timestamps
from
(select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as timestamps from testingtable2 lateral view explode(purchased_item) exploded_table as prod_and_ts) subq JOIN testingtable1 t2 on t2.buyer_id = subq.user_id
AND subq.timestamps = unix_timestamp(t2.created_time)
WHERE (subq.product_id <> t2.item_id)
union all
select t2.buyer_id, t2.item_id as item_id, t2.created_time, subq.user_id, subq.product_id as product_id, subq.timestamps
from
(select user_id, prod_and_ts.product_id as product_id, prod_and_ts.timestamps as timestamps from testingtable2 lateral view explode(purchased_item) exploded_table as prod_and_ts) subq JOIN testingtable1 t2 on t2.buyer_id = subq.user_id
and subq.product_id = t2.item_id
WHERE (subq.timestamps <> unix_timestamp(t2.created_time))) unionall;
そして、上記のクエリを実行した後、ゼロの結果が返されます。
1つの最終更新:-
残念ながら、テーブルに正確なデータがなかったため、結果が返されませんでした。はい、実際の上記のクエリを実行しています。