这是 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 中的第二张表 - 它还包含有关我们正在购买的物品的信息。
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"}]
我已将数据减少到只有一个 BUYER_ID(USER_ID) 以使问题易于理解。
问题陈述-
我需要比较Table2
with Table1
,这意味着我需要查看USER_ID
fromTable2
和BUYER_ID
from Table1
(因为它们都是相同的东西)是否匹配,然后PURCHASED_ITEM
在 Table2 中这是一个 PRODUCT_ID(与 ITEM_ID 相同)和 TIMESTAMPS(与 CREATED_TIME 相同)的数组应该ITEM_ID
与特定CREATED_TIME
的USER_ID(BUYER_ID)相同Table1
,并且有时它们(表示PURCHASED_ITEM
和ITEM_ID
, )可能不同,或者在比较之后CREATED_TIME
缺少某些 PRODUCT_ID 和 TIMESTAMPS 。Table2
Table1
我的意思是,对于特定的 BUYER_ID(USER_ID),和 in 的计数PRODUCT_ID
应该TIMESTAMPS
与Table2
Table1 中的计数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 中,我应该在一行中5 PRODUCT_ID
与5 TIMESTAMPS
Table1 完全相同。USER_ID(BUYER_ID)
如果它不一样或条目丢失,那么我需要打印结果,显示这个丢失或者这个数据是错误的。
所以只是为了更清楚-
PURCHASED_ITEM
是一个结构数组,Table2
它包含两个东西PRODUCT_ID
和TIMESTAMPS
。
如果USER_ID
andBUYER_ID
得到匹配,则PRODUCT_ID
inTable2
应与ITEM_ID
in匹配Table1
,TIMESTAMPS
inTable2
应与CREATED_TIME
in匹配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.