Это первая таблица в 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"}]
Я сократил данные только до одного ПОКУПАТЕЛЯ _ID (ПОЛЬЗОВАТЕЛЯ _ID ), чтобы упростить понимание проблемы.
Постановка задачи-
Мне нужно сравнить Table2
с Table1
, что означает, что мне нужно посмотреть, соответствуют ли USER_ID
из Table2
и BUYER_ID
изTable1
(поскольку они оба одинаковы, )сопоставляется, затем PURCHASED_ITEM
в таблице 2, которая представляет собой массив PRODUCT _ID (, такой же, как ITEM _ID ), и TIMESTAMPS (, такие же, как CREATED _ВРЕМЯ )должно быть таким же, как ITEM_ID
и CREATED_TIME
в Table1
для конкретного ПОЛЬЗОВАТЕЛЯ _ID (ПОКУПАТЕЛЯ _ID ), а также иногда возможно, что они (означает PURCHASED_ITEM
и ITEM_ID
,CREATED_TIME
)не совпадают или какой-то PRODUCT _ID и TIMESTAMPS отсутствуют в Table2
после сравнения с Table1
.
Под этим я подразумеваю, что количество PRODUCT_ID
и TIMESTAMPS
в Table2
должно быть таким же, как количество ITEM_ID
и CREATED_TIME
в Таблице 1 для этого конкретного ПОКУПАТЕЛЯ _ID (ПОЛЬЗОВАТЕЛЯ _ID )и содержимое должно быть таким же. Если они не совпадают или запись отсутствует в Table2
, тогда мне нужно распечатать результат, эти конкретные ITEM_ID
и CREATED_TIME
отсутствуют в Table2
или PRODUCT_ID
и TIMESTAMPS
не совпадают после сравнение с Table1
.
Так, например, в таблице 1 в настоящее время для этого BUYER_ID 1015826235
у меня есть 5 ITEM_ID
и 5 CREATED_TIME
,поэтому в таблице 2 у меня должны быть 5 PRODUCT_ID
и 5 TIMESTAMPS
точно такие же, как в таблице 1 для того же USER_ID(BUYER_ID)
в одной строке. Если это не то же самое или запись отсутствует, мне нужно распечатать результат, показывающий, что это отсутствует или эти данные неверны.
Так что просто чтобы было понятнее-
PURCHASED_ITEM
представляет собой массив Struct в Table2
и содержит две вещи PRODUCT_ID
и TIMESTAMPS
.
Если USER_ID
и BUYER_ID
совпадают, то PRODUCT_ID
в Table2
должно быть сопоставлено с ITEM_ID
в Table1
, а TIMESTAMPS
в Table2
должно быть сопоставлено с CREATED_TIME
в Table1
.
ОБНОВЛЕНО
Вопрос о SQL-запросе HiveQL:-
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.