Esta es la primera tabla en Colmena: contiene información sobre el artículo que estamos comprando.Consulta dos tablas relacionadas (Uniones)
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
)
Y esto es los datos de la primera tabla anterior
**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
Ésta es la segunda tabla en Hive- También contiene información sobre los artículos que están comprando.
CREATE EXTERNAL TABLE IF NOT EXISTS Table2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
Y esto es los datos de la mesa- anterior
**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"}]
He reducido los datos a una sola buyer_id (USER_ID) para hacer que el problema sencillo de entender.
Problema Sentencia-
necesito para comparar la Table2
con Table1
, lo que significa que tengo que ver si USER_ID
de Table2
y BUYER_ID
de Table1
(ya que ambos son lo mismo) obtiene emparejado, a continuación, en PURCHASED_ITEM
Table2 que es una matriz de PRODUCT_ID (igual que ITEM_ID) y TIMESTAMPS (igual que CREATED_TIME) debe ser igual a ITEM_ID
y CREATED_TIME
en Table1
para ese USER_ID en particular (BUYER_ID) y también a veces es posible que (means PURCHASED_ITEM
y ITEM_ID
, CREATED_TIME
) no son iguales o algunos PRODUCT_ID y TIMESTAMPS falta en Table2
después de comparar desde Table1
.
Con esto quiero decir el recuento de PRODUCT_ID
y TIMESTAMPS
en Table2
debe ser el mismo que el recuento de ITEM_ID
y CREATED_TIME
en la Tabla 1 para ese buyer_id en particular (USER_ID) y el contenido debe ser el mismo. Si ellos no son los mismos o de entrada no se encuentra en Table2
, entonces necesito imprimir el resultado, este particular ITEM_ID
y CREATED_TIME
falta de Table2
o la PRODUCT_ID
y TIMESTAMPS
no son los mismos después de comparar entre Table1
.
Así, por ejemplo, en la Tabla 1 actualmente para este BUYER_ID 1015826235
tengo 5 ITEM_ID
y 5 CREATED_TIME
, por lo que en la Tabla2 que debería tener 5 PRODUCT_ID
y 5 TIMESTAMPS
exactamente igual que la Tabla 1 para la misma USER_ID(BUYER_ID)
en una fila. Si no es el mismo o falta la entrada, entonces necesito imprimir el resultado que muestra que falta o que esta información es incorrecta.
Así que para que sea más claro-
PURCHASED_ITEM
es una matriz de Struct en Table2
y contiene dos cosas PRODUCT_ID
y TIMESTAMPS
.
Si USER_ID
y BUYER_ID
consigue coinciden, PRODUCT_ID
en Table2
debe corresponder con ITEM_ID
en Table1
TIMESTAMPS
y en Table2
debe complementarse con el CREATED_TIME
en Table1
.
ACTUALIZADO
Pregunta HiveQL de consultas SQL: -
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.
de consulta que escribí para la primera pregunta. Es la consulta correcta?
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.
Todo ese texto en negrita fue un poco deslumbrante. – Ben