sql - 使用 HiveQL 分解结构数组

标签 sql hive hiveql

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

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

如有任何建议,我们将不胜感激。

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

最佳答案

您可以使用函数 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/

相关文章:

amazon-s3 - Hive - 动态分区 : Long loading times with a lot of partitions when updating table

hive - 使用 HiveQL 删除前导零

sql - SQL 可序列化事务如何工作? (SELECT/UPDATE 与 INSERT 冲突)

php - MySQL连接唯一

mysql - SQL 维护脚本

java - Hive 元存储遭受 kerberos "Clock skew too great"错误

.net - IP 更改后重新连接已删除的 SqlConnection,而不回滚事务

hadoop - 从 Hive 中的多个表中选择数据

hadoop - Hive中的数据(单引号和双引号)不匹配

hadoop - 无法在指定位置的配置单元中查看创建的数据库