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
4

1 回答 1

0

date并且user是 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` ;

如果 users 是 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
于 2020-03-21T07:27:40.030 回答