通过以下语法在hive中分解结构数组。
col1 col2 col3 col4
A1 29 [{"M1":"P1","M2":"-1","M3":"22","M4":"0"},{"M1":"PE","M2":"136","M3":"95","M4":"0.25"}] [{"M5":"10","M6":1},{"M5":"11","M6":2}]
A2 2 [{"M1":"P1","M2":"-1","M3":"10","M4":"-0.13"}] [{"M5":"5","M6":1}]
A3 6 NULL NULL
A4 2 NULL NULL
A5 3 NULL NULL
select
col1,
col2,
explode_col3.M1,
explode_col3.M2,
explode_col3.M3,
explode_col3.M4
from table1
LATERAL VIEW explode(col3) exploded_table as explode_col3;
如何爆炸col3,col4多个数组?
col3&col4是一个数组,它将具有相等数量的记录。在以下情况下,第一行在col3和col4内有2条记录,其中第二行 在col3和col4内部有1条记录。 col3中的第一条记录映射到col4中的第一条记录,对于其他人也是如此。
输出是什么:
col1 col2 M1 M2 M3 M4 M5 M6
A1 29 P1 -1 22 0 10 1
A1 29 PE 136 95 0.25 11 2
A2 2 P1 -10 10 -0.13 5 1
A3 6
A4 2
A5 3
答案 0 :(得分:0)
假设列是结构数组,则可以将lateral view
与inline
结合使用。
select col1,col2,v1,v2,v3,v4--,v5,v6
from tablename
lateral view inline(col3) t1 as m1,v1,m2,v2,m3,v3,m4,v4
--lateral view inline(col4) t2 as m5,v5,m6,v6
使用inline
数组列的多个结构会导致类似交叉连接的输出,因此将其注释掉。