前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hive sql生成数仓日期维表

hive sql生成数仓日期维表

作者头像
chimchim
发布2022-11-13 13:24:41
8890
发布2022-11-13 13:24:41
举报
文章被收录于专栏:chimchim要努力变强啊

目录

一、建表ddl

二、加工sql

三、示例结果数据


一、建表ddl

代码语言:javascript
复制
create table dim_date(
id                    bigint comment '序号',
day_yyyy_mm_dd        string comment '日期(yyyy-MM-dd)',
day_yyyymmdd          string comment '日期(yyyymmdd)',
month_yyyymm          string comment '年月(yyyyMM)',
month_yyyy_mm         string comment '年月(yyyy-MM)',
date_month            string comment '月份(MM)',
month_first_day       string comment '当月月初',
month_last_day        string comment '当月月末',
day_of_month          string comment '本月第几天',
week_days             string comment '星期(数字)',
week_short            string comment '星期(英文缩写)',
week_long             string comment '星期(英文)',
week_cn               string comment '星期(中文)',
week_of_year          string comment '当年第几周',
year_week             string comment '年周',
season                string comment '季度',
year_desc             string comment '年'
)
comment '日期维表';

二、加工sql

ps:以20220926到20221002这周数据为例,数据范围可自行调整

代码语言:javascript
复制
set hive.execution.engine=tez;
with dates as (
select date_add("2022-09-26", a.pos) as d
from (select posexplode(split(repeat("o", datediff("2022-10-02", "2022-09-26")), "o"))) a
)

insert overwrite table dim_date
select
    row_number() over(order by 1)    as id
  , d                                as day_yyyy_mm_dd
  , date_format(d, 'yyyyMMdd')       as date_yyyymmdd
  , date_format(d, 'yyyyMM')         as month_yyyymm
  , date_format(d, 'yyyy-MM')        as month_yyyy_mm
  , month(d)                         as month_desc
  , trunc(d,'MM')                    as month_first_day 
  , last_day(d)                      as month_last_day
  , dayofmonth(d)                    as day_of_month             
  , date_format(d, 'u')              as week_days   
  , date_format(d, 'E')              as week_short
  , date_format(d, 'EEEE')           as week_long
  , case when date_format(d, 'u') =1 then '星期一'
         when date_format(d, 'u') =2 then '星期二'
         when date_format(d, 'u') =3 then '星期三'
         when date_format(d, 'u') =4 then '星期四'
         when date_format(d, 'u') =5 then '星期五'
         when date_format(d, 'u') =6 then '星期六'
         when date_format(d, 'u') =7 then '星期日'
    end                              as week_cn
  , weekofyear(d)                    as week_of_year
  , concat(year(date_sub(next_day(d,'monday'),4)), '-', weekofyear(d)) as year_week
  , lpad(ceil(month(d)/3),2,0)       as season
  , year(d)                          as year_desc
from dates
;

三、示例结果数据

​​​​​​​

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、建表ddl
  • 二、加工sql
  • 三、示例结果数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档