如何扩展行中的数组值!!使用配置单元sql

fdbelqdn  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(511)

我有一个有4列的表,一列(items)类型是array,另一列(items)类型是string。

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

我不是一个HivesqlMaven,请帮助我走出这个困境。

bq3bfh9z

bq3bfh9z1#

我们可以使用 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
zfycwa2u

zfycwa2u2#

试试这个:

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

在explode(items)中,items是存储表列,table是存储表。

相关问题