首页 > 解决方案 > 如何将 hive 的explode() 函数用于复杂的结构?

问题描述

我的蜂巢表如下所示:

CREATE EXTERNAL TABLE sample(id STRING,products STRUCT<urls:ARRAY<STRUCT<url:STRING>>,product_names:ARRAY<STRUCT<name:STRING>>,user:ARRAY<STRUCT<user_id:STRING>>>)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE
LOCATION ‘/user/input/sample’;

有什么方法可以分解 products 字段,以便将 url、name、user_id 存储到三个不同的列中?

任何人都可以就同样的问题向我提出建议....

标签: hive

解决方案


您应该能够按如下方式爆炸您的三个阵列

select url, product_name, user_id from sample
lateral VIEW explode(products.urls) A as url
lateral VIEW explode(products.product_names) B as product_name
lateral VIEW explode(products.user) C as user_id

;

推荐阅读