首页 > 解决方案 > 在 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   

标签: hadoophive

解决方案


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


推荐阅读