sql—如何以递归方式在hiveql中生成数字序列?

7d7tgy0s  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(725)

我最近从db2迁移到hiveql。我用一个查询递归地生成一系列数字,比如1到1000。under是使用的代码;

WITH TB (N) AS
(VALUES (100)
UNION ALL
SELECT N + 100
FROM TB
WHERE N + 1 <= 5000)
SELECT * FROM TB;

我可以用这个代码做任何我想要的序列,
但现在在hiveql中 VALUES() 或者 WITH TB (N) 似乎不像在db2中那样工作。有没有办法在hiveql中生成这样的序列?

h7appiyu

h7appiyu1#

可以使用此查询在配置单元中生成序列。 space() 返回给定长度的空间字符串, split 创建一个空格数组, posexplode 分解数组(生成行),可以使用索引生成序列:

set hivevar:start=1; --Define sequence start and end
set hivevar:end=20;

with seq as(
select posexplode(split(space(${end}-${start}),' ')) as (i,x)
)
select ${start}+i from seq;

相关问题