在配置单元中爆炸多个结构数组

时间:2018-09-27 09:10:32

标签: hadoop hive

通过以下语法在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   

1 个答案:

答案 0 :(得分:0)

假设列是结构数组,则可以将lateral viewinline结合使用。

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数组列的多个结构会导致类似交叉连接的输出,因此将其注释掉。