Possible Duplicate:
SQL Query JOIN with TableОбъединение двух таблиц в улье с помощью HiveQL (Hadoop)
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- Он также содержит информацию о предметы, которые мы покупаем.
CREATE EXTERNAL TABLE IF NOT EXISTS TestingTable2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
И это данные в приведенной выше второй таблице (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
так, что ниже сценарий выполняется.
Найдите PRODUCT_ID
И TIMESTAMPS
из TestingTable2
КОТОРЫХ НЕ СООТВЕТСТВИЕ С ITEM_ID
И CREATED_TIME
от TestingTable1 КОРРЕСПОНДЕНТУ К BUYER_ID(USER_ID)
после сравнения с TestingTable1
.
Так что если вы посмотрите TestingTable2
данные этого (последнего) ITEM_ID 210002448035
из TestingTable1
не соответствие с 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))
);
One More UPDATE
Согласно 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;
И после выполнения вышеуказанного запроса я возвращаю нулевой результат.
Заключительное UPDATE: -
My Bad, у меня не было точных данных в таблицах, так что по этой причине я не получаю результат обратно. Да, он обрабатывает фактический выше запрос.
@biziclop, Спасибо за редактирование, Любое предложение, как я могу достичь результата, которого я хочу? – ferhan
Извините, я не эксперт по ульям, может быть, кто-то еще :) – biziclop
Что значит «это не работает», ссылаясь на запрос? Каковы результаты, которые вы получаете? –