Snowflake - Date Dimension
================
create or replace sequence dim_date_date_key_seq start = 1 increment = 1;
create or replace TABLE EUS_SO_PUB.SO_MART.DIM_DATE (
DATE_KEY NUMBER(38,0),
REPORTING_DATE DATE NOT NULL,
DAY_NAME VARCHAR(100) NOT NULL,
WEEK_NUMBER NUMBER(38,0) NOT NULL,
WEEK_NAME VARCHAR(100) NOT NULL,
WEEK_BEGIN_DATE DATE NOT NULL,
WEEK_END_DATE DATE NOT NULL,
MONTH_NUMBER NUMBER(38,0) NOT NULL,
MONTH_NAME VARCHAR(100) NOT NULL,
MONTH_BEGIN_DATE DATE NOT NULL,
MONTH_END_DATE DATE NOT NULL,
QUARTER_NUMBER NUMBER(38,0) NOT NULL,
QUARTER_NAME VARCHAR(100) NOT NULL,
QUARTER_BEGIN_DATE DATE NOT NULL,
QUARTER_END_DATE DATE NOT NULL,
YEAR_NUMBER NUMBER(38,0) NOT NULL,
YEAR_BEGIN_DATE DATE NOT NULL,
YEAR_END_DATE DATE NOT NULL,
DAY_OF_WEEK NUMBER(38,0) NOT NULL,
DAY_OF_MONTH NUMBER(38,0) NOT NULL,
DAY_OF_QUARTER NUMBER(38,0) NOT NULL,
DAY_OF_YEAR NUMBER(38,0) NOT NULL,
WEEK_END_IND BOOLEAN NOT NULL,
MONTH_END_IND BOOLEAN NOT NULL,
YEAR_MONTH_NUMBER NUMBER(38,0) NOT NULL,
MONTH_YEAR_NAME VARCHAR(100) NOT NULL,
ETL_IS_DELETED_IND BOOLEAN NOT NULL DEFAULT FALSE,
ETL_IS_SKELETON_IND BOOLEAN NOT NULL DEFAULT FALSE,
ETL_DATA_SOURCE_CODE VARCHAR(16777216) NOT NULL DEFAULT 'missing',
ETL_MD5_CHECKSUM VARCHAR(16777216) NOT NULL DEFAULT 'missing',
ETL_LAST_UPDATED_DATE TIMESTAMP_NTZ(9) NOT NULL
)
AS
WITH gen_data AS
(
select
dateadd(day, ‘-‘ | seq4(), ‘2030-12-31’::date) as date_value |
from
table
(generator(rowcount => 6095))
)
SELECT
dim_date_date_key_seq.NEXTVAL AS date_key
,date_value AS reporting_date
,DAYNAME(date_value) AS day_name
,WEEK(date_value) AS week_number
,’Week ‘ | WEEK(date_value) AS week_name |
,date_value - dayofweek(date_value) AS week_begin_date
,last_day(date_value, ‘week’) AS week_end_date
,month(date_value) AS month_number
,monthname(date_value) AS month_name
,date_trunc(‘month’,date_value)::DATE AS month_begin_date
,last_day(date_value, ‘month’) AS month_end_date
,quarter(date_value) AS quarter_number
,’Q’ | quarter(date_value) AS quarter_name |
,date_trunc(‘quarter’,date_value)::DATE AS quarter_begin_date
,last_day(date_value, ‘quarter’) AS quarter_end_date
,year(date_value) AS year_number
,date_trunc(‘year’,date_value)::DATE AS year_begin_date
,last_day(date_value, ‘year’) AS year_end_date
,dayofweek(date_value) AS day_of_week
,dayofmonth(date_value) AS day_of_month
,row_number() OVER
( PARTITION BY quarter_number
ORDER BY date_value) AS day_of_quarter--rework
,dayofyear(date_value) AS day_of_year
,CASE WHEN DAYNAME(date_value) in(‘Sat’,’Sun’) THEN True ELSE False END AS week_end_ind
,CASE WHEN
date_value = (date_trunc('month', date_value) + INTERVAL '1 month' - INTERVAL '1 day')::date
THEN True
ELSE False
END AS month_end_ind
,to_char( date_value,’YYYYMM’)::int AS year_month_number
,trim(to_char( date_value , ‘Mon’) | chr(39) | to_char( date_value , ‘YYYY’) ) AS month_year_name |
,false AS etl_is_deleted_ind
,false AS etl_is_skeleton_ind
,’dim_date_insert_proc’ AS etl_data_source_code
,’’ AS etl_md5_checksum
, CURRENT_DATE AS etl_last_updated_date
FROM gen_data;