我有一个有两列的表,我试图用数组中的值获取多行。我的表就是这样。
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
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` ;
如果用户的类型为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