赞
踩
注:参考文章:
生成1-10的连续值
方式一:posexplode炸裂函数,生成下角标pos, 再利用起始值start + pos(步长) = 结束值end
需要借助函数 split 和 space
split(分割字符串)
- 语法:split(string str, string pat)
- 返回值:array
- 说明:按照pat分隔符分割 字符串str, 返回分割后的字符串数组
- 举例:select split('adgncf','n') --> ["adg","cf"]
space:空格字符串函数
- 语法: space(int n)
- 说明:返回长度为5的空格字符串
- 举例:select length(space(5)) ---> 5
select split(space(5),'')
输出结果为:
select posexplode(split(space(5),''))
输出结果为:
因此, 生成1-10的连续值的代码如下:
- select
- id_start + tmp.pos as id
- from (
- select
- 1 as id_start,
- 10 as id_end) t
- lateral view posexplode(split(space(id_end - id_start),'')) tmp as pos, val
方式二:利用row_number() over()排名函数生成id序列
- select
- row_number() over () as id
- from (select explode(split(space(9), ''))) t
上述案例主要用到posexplode炸裂函数(带下角标pos)或row_number()函数,生成连续的数值。这种思路可以借鉴到 【用户间断连续登陆】类型的 题型中,手动填补间断的天数。
Hive炸裂函数文章见:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。