Соединение двух таблиц в Hive с использованием HiveQL (Hadoop) [дубликат]

Possible Duplicate:
SQL Query JOIN with Table

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"}]

Compare TestingTable2 with TestingTable1 so that below scenario is fulfilled.

Найти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, так много проблем.

Updated:-

Я написал этот запрос, но он работает не так, как я хотел.

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;

И после выполнения вышеуказанного запроса я получаю нулевой результат обратно.

One Final UPDATE:-

Мой Плохой, у меня не было точных данных в таблицах, поэтому я не получил результат обратно. Да, это работает фактический запрос выше.

Ответы на вопрос(2)

Ваш ответ на вопрос