gpt4 book ai didi

sql - 使用 HiveQL 爆炸结构数组

转载 作者:行者123 更新时间:2023-12-04 18:16:38 25 4
gpt4 key购买 nike

CREATE TABLE IF NOT EXISTS Table2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
) ROW FORMAT
DELIMITED FIELDS TERMINATED BY '-'
collection items terminated by ','
map keys terminated by ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/user/rj/output2';

下面是表2中的数据
1345653-110909316904:1341894546,221065796761:1341887508

我可以通过使用下面的查询来分解上述数据,它适用于上述数据-
SELECT  * FROM (select user_id, prod_and_ts.product_id as product_id,
prod_and_ts.timestamps as timestamps FROM table2 LATERAL VIEW
explode(purchased_item) exploded_table as prod_and_ts) prod_and_ts;

我会得到这样的输出,这很好 -
1345653                                110909316904     1341894546
1345653 221065796761 1341887508

但在某些情况下,我在下表中有这样的数据,多个时间戳为相同的 product_id 附加了井号-
1345653-110909316904:1341894546#1341885695,221065796761:1341887508#1341885453

我需要使用 HiveQL 查询对上述数据进行这样的输出-
1345653                                110909316904     1341894546
1345653 110909316904 1341885695
1345653 221065796761 1341887508
1345653 221065796761 1341885453

这有可能以某种方式做到这一点吗?

任何建议将不胜感激。?

PS我几天前问过这个问题,但在那种情况下,数据不同,现在数据完全不同,我需要类似的输出。

最佳答案

您可以使用函数 regexp_replace 或 regex_extract 仅获取产品 ID。尝试这个:

SELECT  * FROM (select user_id, prod_and_ts.product_id as product_id,
regex_replace(prod_and_ts.timestamps, "#\\d*", "") as timestamps FROM table2 LATERAL VIEW
explode(purchased_item) exploded_table as prod_and_ts) prod_and_ts;

关于sql - 使用 HiveQL 爆炸结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11550651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com