Questa è la prima tabella in Hive: contiene informazioni sull'elemento che stiamo acquistando.Interroga due tabelle correlate (Join)
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
)
e questo è i dati nella tabella di cui sopra prima
**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
Questa è la seconda tavola in Hive- Esso contiene inoltre informazioni sugli elementi che stanno acquistando.
CREATE EXTERNAL TABLE IF NOT EXISTS Table2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
e questo è il dati del tavolo- sopra
**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"}]
ho ridotto i dati a un solo buyer_id (USER_ID) per rendere il problema semplice da capire.
Problema Statement-
ho bisogno di confrontare il Table2
con Table1
, il che significa che ho bisogno di vedere se USER_ID
da Table2
e BUYER_ID
da Table1
(in quanto entrambi sono stessa cosa) viene abbinato, quindi PURCHASED_ITEM
in Tabella2 che è una matrice di PRODUCT_ID (uguale a ITEM_ID) e TIMESTAMPS (uguale a CREATED_TIME) dovrebbe essere uguale a ITEM_ID
e CREATED_TIME
in Table1
per quel particolare USER_ID (ACQUIRENTE) e talvolta è possibile che siano (significa PURCHASED_ITEM
e ITEM_ID
, CREATED_TIME
) non sono uguali o alcuni PRODUCT_ID e TIMESTAMPS mancano da Table2
dopo il confronto da Table1
.
Con ciò significa che il conteggio di PRODUCT_ID
e TIMESTAMPS
in Table2
dovrebbe essere lo stesso valore di ITEM_ID
e CREATED_TIME
in Tabella 1 per quel particolare buyer_id (USER_ID) e il contenuto deve essere lo stesso. Se non sono gli stessi e il vincolo non è presente Table2
, poi ho bisogno di stampare il risultato, questa particolare ITEM_ID
e CREATED_TIME
manca dal Table2
o PRODUCT_ID
e TIMESTAMPS
non sono lo stesso dopo aver confrontato da Table1
.
Così, per esempio in Tabella 1 attualmente per questo BUYER_ID 1015826235
ho 5 ITEM_ID
e 5 CREATED_TIME
, così in Table2 devo avere 5 PRODUCT_ID
e 5 TIMESTAMPS
esattamente come Table1 per lo stesso USER_ID(BUYER_ID)
in una riga. Se non è lo stesso o manca la voce, devo stampare il risultato mostrando che questo è mancante o questo dato è sbagliato.
Quindi, solo per renderlo più Clear-
PURCHASED_ITEM
è un array di Struct in Table2
e contiene due cose PRODUCT_ID
e TIMESTAMPS
.
Se USER_ID
e BUYER_ID
ottiene abbinati poi PRODUCT_ID
in Table2
dovrebbe essere abbinato con ITEM_ID
in Table1
e TIMESTAMPS
in Table2
dovrebbe essere abbinato con CREATED_TIME
in Table1
.
AGGIORNATO
HiveQL SQL Query Domanda: -
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.
query che ho scritto per la prima domanda. La domanda è giusta?
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.
Tutto quel testo in grassetto era un po 'accecante. – Ben