[hive] posexplode生成从去年一月一号,到本月的月时间表

生成从去年一月一号,到本月的月时间表

posexplode用法:

lateral view 表别名 as 序号列名,数组中的元素的名

1、生成序列


        SELECT 
        time_stamp_fist_day_of_last_year,--去年第一天的时间戳
        num
        from
        (
            SELECT
            split(repeat_o,',') o_array,
            time_stamp_fist_day_of_last_year
            from
            (
                SELECT
                concat(repeat('o,',sub_momth_num),'o') repeat_o,--因为posexplode序号从0开始所以多拼一个
                time_stamp_fist_day_of_last_year
                from
                (
                    SELECT 
                    datediff(time_stamp_yestoday,time_stamp_fist_day_of_last_year,'MM')sub_momth_num,
                    time_stamp_fist_day_of_last_year
                    from
                    (
                        select
                        to_date(${bizdate},'yyyyMMdd') time_stamp_yestoday,--昨天的时间戳
                        to_date(concat(cast(SUBSTR(${bizdate},1,4) as int )-1,'0101'),'yyyyMMdd') time_stamp_fist_day_of_last_year --去年第一天的时间戳
                    )t1
                )t2
            )t3
        )t4 LATERAL view posexplode(o_array) t5 as num,val
        ;

2、结果 


SELECT
date_format(new_date,'yyyy-MM') year_month
from
(
    SELECT 
    dateadd(time_stamp_fist_day_of_last_year,num,'MM') new_date
    from
    (
        SELECT 
        time_stamp_fist_day_of_last_year,--去年第一天的时间戳
        num
        from
        (
            SELECT
            split(repeat_o,',') o_array,
            time_stamp_fist_day_of_last_year
            from
            (
                SELECT
                concat(repeat('o,',sub_momth_num),'o') repeat_o,--因为posexplode序号从0开始所以多拼一个
                time_stamp_fist_day_of_last_year
                from
                (
                    SELECT 
                    datediff(time_stamp_yestoday,time_stamp_fist_day_of_last_year,'MM')sub_momth_num,
                    time_stamp_fist_day_of_last_year
                    from
                    (
                        select
                        to_date(${bizdate},'yyyyMMdd') time_stamp_yestoday,--昨天的时间戳
                        to_date(concat(cast(SUBSTR(${bizdate},1,4) as int )-1,'0101'),'yyyyMMdd') time_stamp_fist_day_of_last_year --去年第一天的时间戳
                    )t1
                )t2
            )t3
        )t4 LATERAL view posexplode(o_array) t5 as num,val
    )t6
)t7
;

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值