如果我有一个表mytable
和一个列表
set vals = (1,2,3,4);
我希望将表与列表交叉连接(获取一个新表,其中包含4倍于原始表的行和一个额外的val
列),我是否有比创建更好的选项an explicit temp table?
我能做的是:
select a.*, b.val
from mytable a cross join
(select stack(4,1,2,3,4) as (val) from
(select * from mytable limit 1) z) b;
编辑:我的主要用例是将-hiveconf vals='4,1,2,3,4'
传递给hive
,并将stack(4,1,2,3,4)
替换为上述代码中的stack(${hiveconf:vals})
。
答案 0 :(得分:2)
我不知道这会有所帮助。
SELECT *
from mytable cross join
(select 1 as p
union
select 2
union
select 3
union
select 4) as x
答案 1 :(得分:1)
select a.*, b.val
from a lateral view explode(array(1,2,3,4)) b as val;