如何在Hive SQL中将数组值按行展开!

7

我有一个包含4列的表格,其中一列(items)是数组类型,其余列为字符串。

ID   |    items                                  | name  |  loc  
_________________________________________________________________

id1  | ["item1","item2","item3","item4","item5"] | Mike | CT
id2  | ["item3","item7","item4","item9","item8"] | Chris| MN
.
.

在这里,我想要非规范化的输出,例如

ID   |    items                       | name  |  loc  
______________________________________________________
id1  | item1                          | Mike  | CT
id1  | item2                          | Mike  | CT
id1  | item3                          | Mike  | CT
id1  | item4                          | Mike  | CT
id1  | item5                          | Mike  | CT
id2  | item3                          | Chris | MN
id2  | item7                          | Chris | MN
id2  | item4                          | Chris | MN
id2  | item9                          | Chris | MN
id2  | item8                          | Chris | MN

我不是Hive SQL专家,请帮我解决这个问题。


查看Hive中的“explode”函数:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-explode - Amar
Select explode(items) 仅适用于一个字段,如何使用explode获取其他列? - user2416693
2个回答

10

试试这个:

 SELECT ID,itemsName,name,loc
 FROM Table
 LATERAL VIEW explode(items) itemTable AS itemsName;

在 explode(items) 中,items 是您存储的表列,Table 是您存储的表。


嗨Kishore,感谢您的回复。我们可以对多个数组类型列执行相同的操作吗?例如:ID | items | item_Name | name | loc
id1 | ["item1","item2","item3","item4","item5"] | ["Ruler","Cap","Pen","brush ","Eraser"] | Mike | CTid2 | ["item3","item7","item4","item9","item8"] | ["Pen","Pencil","brush"," ","Calc"] | Chris| MN
- user2416693
我不明白你的问题,请重新提出另一个问题,并确切地描述你的问题。 - Kishore

0
我们可以使用posexplode()函数来实现您提到的场景,即具有多个数组列。
类似这样的代码可以解决问题:
SELECT ID,i1.item,i2.itemName,name,loc
 FROM Table
 LATERAL VIEW posexplode(items) i1 AS item,item_1
 LATERAL VIEW posexplode(item_Name) i2 AS itemName,itemName_1
 WHERE item=itemName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接