我有一个配置单元表,其中包含示例行之一:
A、B、[“11”、“12”、“13”]、[“1”、“2”] 第 3 列和第 4 列的数组长度有时相同,有时不同。
输出:
A、B、11、1
A、B、12、2
A、B、13、[空]
我是 Hive 新手,确实需要帮助来解决这个问题。
数组的长度不断变化。它不是静态的。有时它的长度是 3、4 或 5。这就是我被困住的地方。
我在hive中使用了poseexplode函数
这里,我们需要将其分为三个任务:
删除不相关的字符,例如'['、']'和'"'
使用
posexplode
将数组分解为行,重要的是要注意保存数组数字
连接爆炸结果的结果,同时将任何缺失值保留为空,所以我们需要
left join
。
hive sql如下:
WITH data1
AS (
SELECT 'A' col1
,'B' col2
,'["11", "12", "13"]' AS array_str1
,'["1", "2"]' AS array_str2
)
,table1
AS (
SELECT col1
,col2
,pos
,element
FROM data1 LATERAL VIEW posexplode(SPLIT(REPLACE(REPLACE(REPLACE(array_str1, '"', ''), '[', ''), ']', ''), ',')) pos AS pos
,element
)
,table2
AS (
SELECT col1
,col2
,pos
,element
FROM data1 LATERAL VIEW posexplode(SPLIT(REPLACE(REPLACE(REPLACE(array_str2, '"', ''), '[', ''), ']', ''), ',')) pos AS pos
,element
)
SELECT t1.col1
,t1.col2
,t1.element
,t2.element
FROM table1 t1
LEFT JOIN table2 t2 ON t1.col1 = t2.col1
AND t1.col2 = t2.col2
AND t1.pos = t2.pos
输出:
col1 col2 element element
A B 11 1
A B 12 2
A B 13 NULL