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
解决方案
假设列是结构数组,您可以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
数组列的多个结构会导致像交叉连接这样的输出,因此它被注释掉了。
推荐阅读
- python - 如何在 PyCharm 中添加对 reST 评论的交叉引用?
- python - 为什么列表函数和列表文字的行为不同?
- javascript - 在 JS/React 中过滤数组
- android - Android蓝牙套接字关闭但随后重新连接
- android - 适用于 Android/IOS 的 Canvas 上的 Unity 平滑移动和缩放 UI
- flutter - 如何在颤动的标签栏标签之间设置状态?
- php - 在 chart.js 和 PHP 中循环多行作为标签和数据
- bitmap - 为什么位图图像文件中的 alpha 字节会减半?
- python - Python:使用 URL 从文本文件中写入和读取
- python - Keras 内存分配问题