试图通过侧面观察并爆炸将数组中的值包含在蜂巢中并导致多行爆炸

问题描述 投票:0回答:1

我有一个有两列的表,我试图用数组中的值获取多行。我的表就是这样。

date                  users
2019-01-01       ["U00001","U00002","U00002"]

我正在尝试获得如下输出

date               users
2019-01-01       "U00001"
2019-01-01       "U00002"
2019-01-01       "U00003"

我正在使用以下查询

SELECT date, user FROM  table1
LATERAL VIEW  explode(users)  myTable2 AS user;

我无法获得以上期望的输出,我的查询结果显示如下。

date                 user
2019-01-01    "U00001","U00002","U00002"

我的列数据类型是

column         data_type
date            string
user            Array
hadoop hive hiveql impala
1个回答
0
投票

dateuser是Hive中的保留字,请使用反引号。另外(请查看我的示例)侧面视图应具有别名(u),列分解为别名user

with your_data as (--use your table instead of this 
select stack(1, '2019-01-01', array("U00001","U00002","U00002")) as(`date`, users)
)

select t.`date`, u.`user` 
  from your_data t --use your table instead
       lateral view explode(t.users) u as `user` ;

如果用户的类型为STRING,则删除方括号和双引号,然后拆分并爆炸:

with your_data as (--use your table instead of this 
select stack(1, '2019-01-01', '["U00001","U00002","U00002"]') as (`date`, users)
)

select t.`date`, u.`user` 
  from your_data t --use your table instead
       lateral view explode(split(regexp_replace(t.users,'\\[|\\]|\\"',''),',')) u as `user` ;

结果:

t.date      u.user
2019-01-01  U00001
2019-01-01  U00002
2019-01-01  U00002
© www.soinside.com 2019 - 2024. All rights reserved.