--日期维表基本信息
with tmp_es_date_00 as
(
select
regexp_replace(predict_date_day,'-','') as date_id -- 日(yyyymmdd)
,predict_date_day as date_code -- 日(yyyy-mm-dd)
,concat(year(predict_date_day),'年',month(predict_date_day),'月',day(predict_date_day),'日') as date_name -- 日(yyyy年mm月dd日)
,dayofweek(predict_date_day) as week_day_id -- 周ID(周几)
,case dayofweek(predict_date_day) when 1 then '星期日' when 2 then '星期一'
when 3 then '星期二' when 4 then '星期三'
when 5 then '星期四' when 6 then '星期五'
when 7 then '星期六' end as week_day_name -- 星期(星期几)
,concat(year(predict_date_day),case when weekofyear(predict_date_day) < 10 then concat('0',(weekofyear(predict_date_day))) else weekofyear(predict_date_day) end) as week_ofyearid -- 年周的id
,weekofyear(predict_date_day) as week_ofyear -- 年周
,concat(year(predict_date_day),'年第',weekofyear(predict_date_day),'周') as week_ofyear_name -- 年周名称
,concat(date_add(predict_date_day,1 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end),
'~',date_add(predict_date_day,7 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end)) as week_ofyear_period -- 年周段
,concat(
regexp_replace(substr(split(concat(date_add(predict_date_day,1 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end),
'~',date_add(predict_date_day,7 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end)), '~') [0], 6, 5),'-','.'),
'-',
regexp_replace(substr(split(concat(date_add(predict_date_day,1 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end),
'~',date_add(predict_date_day,7 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end)), '~') [1], 6, 5),'-','.')
) as week_ofyear_period_short --年周段
--,dense_rank()over(partition by year(predict_date_day),month(predict_date_day) order by weekofyear(predict_date_day) asc) as week_ofmonth -- 月周
--,concat(month(predict_date_day),'月第',dense_rank()over(partition by year(predict_date_day),month(predict_date_day) order by weekofyear(predict_date_day) asc),'周') as week_ofmonth_name -- 月周名称
,month(predict_date_day) as month_code -- 月(mm)
,substr(regexp_replace(predict_date_day,'-','') ,1,6) as yearmonth_id -- 年月(yyyymm)
,quarter(predict_date_day) as quarter_id -- 季度
,concat(year(predict_date_day),'Q',quarter(predict_date_day) ) as quarter_code -- 年季度
,year(predict_date_day) as year_id -- 年
,case when MONTH(predict_date_day) > 6 then 'f_half' else 'l_half' end as half_code -- 半年
,regexp_replace(date_add(predict_date_day,-1),'-','') as last_date_id -- 昨天
,regexp_replace(date_add(predict_date_day,0 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end),'-','') as last_sunday -- 上个周日 1
,regexp_replace(date_add(predict_date_day,0 - case when dayofweek(predict_date_day) = 1 then 14 else dayofweek(predict_date_day) + 6 end),'-','') as L_last_sunday -- 上上个周日 2
,regexp_replace(date_add(predict_date_day,0 - case when dayofweek(predict_date_day) = 1 then 21 else dayofweek(predict_date_day) + 13 end),'-','') as LL_last_sunday -- 上上上个周日 3
,regexp_replace(date_add(predict_date_day,0 - case when dayofweek(predict_date_day) = 1 then 28 else dayofweek(predict_date_day) + 20 end),'-','') as LLL_last_sunday -- 上上上上个周日 4
,regexp_replace(date_add(trunc(predict_date_day,'MM'),-1),'-','') as lastday_of_lastmonth -- 上个月末
,regexp_replace(date_add(trunc(predict_date_day,'YY'),-1),'-','') as lastday_oflastyear -- 上个年末
,regexp_replace(date_add(predict_date_day,1 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end),'-','') as firstday_ofweek -- 当周第一天
,regexp_replace(date_add(predict_date_day,7 - case when dayofweek(predict_date_day) = 1 then 7 else dayofweek(predict_date_day) - 1 end),'-','') as lastday_ofweek -- 当周最后一天
,trunc(predict_date_day,'MM') as firstday_ofmonth -- 当月第一天
,last_day(predict_date_day) as lastday_ofmonth -- 当月最后一天
,to_date(concat(year(predict_date_day),'-',lpad(ceil(month(predict_date_day)/3) * 3-2,2,0),'-01')) as firstday_ofseason -- 当季第一天
,last_day(to_date(concat(year(predict_date_day),'-',lpad(ceil(month(predict_date_day)/3) * 3,2,0),'-01'))) as lastday_ofseason -- 当季最后一天
,trunc(predict_date_day,'YY') as firstday_ofyear -- 当年第一天
,last_day(add_months(trunc(predict_date_day,'YY'),11)) as lastday_ofyear -- 当年最后一天
from(
select
date_add("2020-01-14", t.pos) as predict_date_day
from(
select
posexplode(
split(
repeat(
"m",
--datediff(
-- date_sub(from_unixtime(unix_timestamp('21001231', 'yyyyMMdd')),-1),
-- from_unixtime(unix_timestamp('19000101', 'yyyyMMdd'),'yyyy-MM-dd')
-- )
datediff("2030-01-13", "2020-01-14")
),"m"
)
)
) t
) T
)
--更新月周
--[dim][房产业务][时间维表]dim_es_date_c_d
-- insert overwrite table dim_es_date_c_d
select
M.date_id --日(yyyymmdd)
,M.date_code --日(yyyy-mm-dd)
,M.date_name --日(yyyy年mm月dd日)
,M.week_day_id --周ID(周几)
,M.week_day_name --星期(星期几)
,N.week_ofyearid --年周的id
,M.week_ofyear --年周
,N.week_ofyear_name --年周名称
,M.week_ofyear_period --年周段
,M.week_ofyear_period_short --年周段简称
,N.month_code as month_week_code --周所在月
-- ,dense_rank()over(partition by M.year_id,N.month_code order by M.week_ofyear asc) as week_ofmonth --月周
,dense_rank()over(partition by N.year_id,N.month_code order by N.week_ofyear asc) as week_ofmonth --月周
,concat(N.month_code,'月第',dense_rank()over(partition by N.year_id,N.month_code order by N.week_ofyear asc),'周') as week_ofmonth_name --月周名称
,M.month_code --月(mm)
,M.yearmonth_id --年月(yyyymm)
,M.quarter_id --季度
,M.quarter_code --年季度
,M.year_id --年
,M.half_code --半年
,M.last_date_id --昨天
,M.last_sunday --上个周日
,M.L_last_sunday --上上个周日
,M.LL_last_sunday --上上个周日
,M.LLL_last_sunday --上上上个周日
,M.lastday_of_lastmonth --上个月末
,M.lastday_oflastyear --上个年末
,M.firstday_ofweek --当周第一天
,M.lastday_ofweek --当周最后一天
,M.firstday_ofmonth --当月第一天
,M.lastday_ofmonth --当月最后一天
,M.firstday_ofseason --当季第一天
,M.lastday_ofseason --当季最后一天
,M.firstday_ofyear --当年第一天
,M.lastday_ofyear --当年最后一天
,from_utc_timestamp(current_timestamp(),"GMT+8") as last_update_time
from tmp_es_date_00 M
left join
(
select year_id
,month_code
,week_ofyear
,week_ofyear_period
,week_ofyearid
,week_ofyear_name
,count(date_id) day_cnt
from tmp_es_date_00
group by year_id
,month_code
,week_ofyear
,week_ofyear_period
,week_ofyearid
,week_ofyear_name
having day_cnt >= 4
) N -- 统计周所在月
-- on M.year_id = N.year_id and M.week_ofyear = N.week_ofyear
on M.week_ofyear_period = N.week_ofyear_period
-- where M.date_id <= '${yyyyMMdd}'
where M.date_code <= date_add(from_unixtime(unix_timestamp('${yyyyMMdd}', 'yyyyMMdd'),'yyyy-MM-dd'),1)
;
--
CREATE TABLE `dim_es_date_c_d`(
`day_code` string COMMENT '',
`day_long_desc` string COMMENT '',
`day_medium_desc` string COMMENT '',
`day_short_desc` string COMMENT '',
`week_code` string COMMENT '',
`week_long_desc` string COMMENT '',
`week_medium_desc` string COMMENT '',
`week_short_desc` string COMMENT '',
`week_day` string COMMENT '',
`month_code` string COMMENT '',
`month_long_desc` string COMMENT '',
`month_medium_desc` string COMMENT '',
`month_short_desc` string COMMENT '',
`quarter_code` string COMMENT '',
`quarter_long_desc` string COMMENT '',
`quarter_medium_desc` string COMMENT '',
`quarter_short_desc` string COMMENT '',
`half_year_code` string COMMENT '',
`half_long_desc` string COMMENT '',
`half_medium_desc` string COMMENT '',
`half_short_desc` string COMMENT '',
`year_code` string COMMENT '',
`year_long_desc` string COMMENT '',
`year_medium_desc` string COMMENT '',
`year_short_desc` string COMMENT '',
`last_update_time` string COMMENT '')
COMMENT '时间维表'
比较全的时间日期维表sql
最新推荐文章于 2025-05-06 15:25:46 发布