将生成日期序列的Hive函数(space、split)转换为Redshift语法
Redshift适配版连续日期序列生成代码
原HiveQL依赖space、split、posexplode三个Redshift不支持的函数,核心连续序列生成逻辑无法直接在Redshift运行,改写时替换为Redshift原生语法即可,输出字段、日期范围、计算规则和原代码完全对齐。
改写后可直接运行的代码
drop table if exists date_list; create temporary table date_list as with seq as( select dateadd(day, s.i, '2020-02-27'::date) as dt from generate_series(0, datediff(day, '2020-02-27'::date, '2020-12-01'::date)) as s(i) ) select row_number() over(order by dt) as index_n, dt, cast(regexp_replace(substring(cast(dt as varchar),6,5), '-', '') as integer) as date_index from seq;
核心改写说明
- 移除原Hive特有的字符串拼接拆分、数组位置爆炸生成序列的逻辑,改用Redshift原生
generate_series函数直接生成0到日期间隔天数的连续整数作为日期偏移量,逻辑更简洁,执行性能更高 - 调整日期函数语法适配:Redshift的日期加减、间隔计算函数要求显式指定时间单位为
day,和原Hive默认按天计算的逻辑完全对齐,生成的日期范围严格覆盖2020-02-27至2020-12-01的所有连续日期 - 给
row_number()窗口函数增加order by dt排序规则,避免Redshift无显式排序时行号随机错乱的问题,保证序号和日期升序顺序严格对应 - 保留
date_index字段计算逻辑:提取日期的月日部分、移除横杠后转为整数,输出值和原Hive运行结果完全一致
内容的提问来源于stack exchange,提问作者lydias
相关产品推荐
相关产品推荐

