Запрос двух связанных таблиц (Соединения)

Это первая таблица в 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.
10
задан 16 revs, 3 users 97% 6 July 2012 в 22:44
поделиться