これはHiveの最初のテーブルです-これには、購入しているアイテムに関する情報が含まれています。
CREATE EXTERNAL TABLE IF NOT EXISTS Table1 (This is the MAIN table through which comparisons need to be made)
(
ITEM_ID BIGINT,
CREATED_TIME STRING,
BUYER_ID BIGINT
)
そしてこれは上の最初の表のデータです
**ITEM_ID** **CREATED_TIME** **BUYER_ID**
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
これはHiveの2番目のテーブルです-これには、購入しているアイテムに関する情報も含まれています。
CREATE EXTERNAL TABLE IF NOT EXISTS Table2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
そしてこれは上の表のデータです-
**USER_ID** **PURCHASED_ITEM**
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"}]
問題を理解しやすくするために、データを1つのBUYER_ID(USER_ID)のみに減らしました。
問題文-
Table2
withを比較するTable1
必要があります。つまり、USER_ID
fromTable2
とBUYER_ID
from Table1
(両方とも同じものであるため)が一致するかどうかを確認する必要があります。次にPURCHASED_ITEM
、PRODUCT_ID(ITEM_IDと同じ)とTIMESTAMPS(CREATED_TIMEと同じ)の配列であるTable2でその特定のUSER_ID(BUYER_ID)と同じでITEM_ID
ありCREATED_TIME
、また、それら(meansと、 )が同じでないか、から比較した後に一部のPRODUCT_IDとTIMESTAMPSが欠落している可能性もあります。Table1
PURCHASED_ITEM
ITEM_ID
CREATED_TIME
Table2
Table1
これは、その特定のBUYER_ID(USER_ID)のとの数が表1のとの数と同じであり、内容が同じである必要があるPRODUCT_ID
ことTIMESTAMPS
を意味します。それらが同じでないか、エントリがから欠落している場合は、結果を出力する必要があります。この特定のandは、またはから欠落しており、から比較した後、同じではありません。Table2
ITEM_ID
CREATED_TIME
Table2
ITEM_ID
CREATED_TIME
Table2
PRODUCT_ID
TIMESTAMPS
Table1
たとえば、現在、これについてはTable1にとBUYER_ID 1015826235
が5 ITEM_ID
あり5 CREATED_TIME
ます。したがって、Table2には、1つの行に同じものがある場合はTable15 PRODUCT_ID
と5 TIMESTAMPS
まったく同じである必要があります。USER_ID(BUYER_ID)
それが同じでないか、エントリが欠落している場合は、これが欠落しているか、このデータが間違っていることを示す結果を印刷する必要があります。
それで、それをより明確にするために-
PURCHASED_ITEM
はStructの配列であり、Table2
2つのものPRODUCT_ID
とが含まれていますTIMESTAMPS
。
USER_ID
とBUYER_ID
が一致する場合、 PRODUCT_ID
inはinとTable2
一致する必要があり、 inはITEM_ID
inTable1
と一致する必要があります。TIMESTAMPS
Table2
CREATED_TIME
Table1
更新しました
HiveQL SQLクエリの質問:-
Q 1) Find all USER_ID from Table2 whose PRODUCT_ID or TIMESTAMP are not same with
ITEM_ID or CREATED_TIME after comparing with Table1 on BUYER_ID.
最初の質問のために書いたクエリ。クエリは正しいですか?
A 1) select Table2.user_id from Table2 where Table1.user_id = Table2.buyer_id
and (Table1.item_id <> Table2.product_id or UNIX_TIMESTAMP(Table1.created_time) <>
Table2.timestamps)
Q 2) Find the `BUYER_ID(USER_ID)` and as well as those `ITEM_ID` and `CREATED_TIME`
which are missing from `Table2` after comparing from `Table1` on `BUYER_ID`.
A 2) Not sure.