在配置单元中分解结构的多个数组

0pizxfdo  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(386)

分解配置单元中的结构数组是通过以下语法完成的。

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中的第一条记录Map到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
af7jpaap

af7jpaap1#

假设列是一个结构数组,您可以使用 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 数组列的多个结构会导致像交叉连接这样的输出,因此它会被注解掉。

相关问题