Akhil Narayanan Nair home

Snowflake - Time Dimension

================

create or replace sequence dim_time_time_key_seq start = 1 increment = 1;

create or replace TABLE EUS_SO_PUB.SO_MART.DIM_TIME (

TIME_KEY NUMBER(38,0),

    D_TIME TIME(9) NOT NULL,

D_TIME_OF_DAY VARCHAR(2),

D_HOUR NUMBER(38,0),

D_MINUTE NUMBER(38,0),

D_TIME_30 TIME(9),

D_TIME_60 TIME(9),

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(minute, ‘-‘   seq4(), current_date()::date) as time_value

from

table (generator(rowcount => 1440))

)

SELECT

    dim_time_time_key_seq.NEXTVAL                                                                       AS time_key

   ,to_time(time_value)                                                                                 AS d_time
   
   ,CASE 
   
     WHEN substring(time_value,12,2)::int >= 12
 
     THEN 'PM' ELSE 'AM'
 
   END                                                                                                  AS d_time_of_day
   
   ,hour(time_value)                                                                                    AS d_hour
   
   ,minute(time_value)                                                                                  AS d_minute
   
   ,CASE 
   
     WHEN substring(time_value,15,2)::int >= 30
 
     THEN ( substring(time_value,12,2)||':'||'30' )::time
 
     ELSE ( substring(time_value,12,2)||':'||'00' )::time
 
   END                                                                                                  AS d_time_30
   
   ,(substring(time_value,12,2)||':'||'00')::time                                                       AS d_time_60
   
   ,false                                                                                               AS etl_is_deleted_ind
   
   ,false                                                                                               AS etl_is_skeleton_ind
   
   ,'dim_time_insert_proc'                                                                              AS etl_data_source_code
   
   ,''                                                                                                  AS etl_md5_checksum
   
   ,CURRENT_DATE                                                                                        AS etl_last_updated_date

FROM gen_data;