AKI*_*WEB 10 java sql hadoop hive hiveql
这是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
)
Run Code Online (Sandbox Code Playgroud)
这是上面第一个表格中的数据
**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
Run Code Online (Sandbox Code Playgroud)
这是Hive中的第二个表 - 它还包含有关我们正在购买的项目的信息.
CREATE EXTERNAL TABLE IF NOT EXISTS Table2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
Run Code Online (Sandbox Code Playgroud)
这是上表中的数据 -
**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"}]
Run Code Online (Sandbox Code Playgroud)
我已将数据减少到只有一个BUYER_ID(USER_ID),以使问题易于理解.
问题陈述-
我需要比较Table2
用Table1
,这意味着我要看看是否USER_ID
从Table2
和BUYER_ID
从Table1
(因为他们都是同样的事情)获取匹配,然后PURCHASED_ITEM
在表2是PRODUCT_ID数组(同ITEM_ID)和时间戳(同CREATED_TIME)应是相同ITEM_ID
和CREATED_TIME
在Table1
该特定USER_ID(BUYER_ID)和有时也有可能的是它们(装置PURCHASED_ITEM
和ITEM_ID
,CREATED_TIME
)不相同或一些PRODUCT_ID和时间戳是从缺失Table2
从比较之后Table1
.
我的意思是,对于特定的BUYER_ID(USER_ID),count PRODUCT_ID
和TIMESTAMPS
in 的计数Table2
应该与table1的count ITEM_ID
和count相同,CREATED_TIME
并且内容应该相同.如果它们不相同或条目从丢失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
是在结构的阵列Table2
,它包含两件事情PRODUCT_ID
和TIMESTAMPS
.
如果USER_ID
和BUYER_ID
被匹配,然后PRODUCT_ID
在Table2
应该匹配ITEM_ID
的Table1
,并TIMESTAMPS
在Table2
应匹配CREATED_TIME
的Table1
.
更新
HiveQL 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.
Run Code Online (Sandbox Code Playgroud)
查询我为第一个问题写的.查询是对的吗?
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.
Run Code Online (Sandbox Code Playgroud)
小智 1
我对 Hive 不熟悉,但我建议您创建一个与 Table1 具有相同架构的临时表,并用 Table2 数据填充它(带时间戳转换)。如果得到支持,这最终可能成为一种观点。
然后可以使用以下查询来比较两个表的内容:
SELECT * FROM Table1 WHERE (ITEM_ID,CREATED_TIME,BUYER_ID) NOT IN (SELECT * FROM Table2bis)
SELECT * FROM Table2bis WHERE (ITEM_ID,CREATED_TIME,BUYER_ID) NOT IN (SELECT * FROM Table1)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
938 次 |
最近记录: |