with tmp_es_date_00 as
(
select
regexp_replace(predict_date_day,'-','') as date_id
,predict_date_day as date_code
,concat(year(predict_date_day),'年',month(predict_date_day),'月',day(predict_date_day),'日') as date_name
,dayofweek(predict_date_day) as week_day_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
,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
,month(predict_date_day) as month_code
,substr(regexp_replace(predict_date_day,'-','') ,1,6) as yearmonth_id
,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
,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
,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
,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
,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("2030-01-13", "2020-01-14")
),"m"
)
)
) t
) T
)
select
M.date_id
,M.date_code
,M.date_name
,M.week_day_id
,M.week_day_name
,N.week_ofyearid
,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 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
,M.yearmonth_id
,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.week_ofyear_period = N.week_ofyear_period
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 '时间维表'