diff --git a/macros/date_add_cross_db.sql b/macros/date_add_cross_db.sql index 2d1de55..869c244 100644 --- a/macros/date_add_cross_db.sql +++ b/macros/date_add_cross_db.sql @@ -3,7 +3,9 @@ {{ date_column }} + interval '{{ days }} days' {% elif target.type == 'bigquery' %} date_add({{ date_column }}, interval {{ days }} day) + {% elif target.type == 'snowflake' %} + dateadd(day, {{ days }}, {{ date_column }}) {% else %} - {{ date_column }} + interval {{ days }} day + {{ exceptions.raise_compiler_error("Unsupported database type: " ~ target.type) }} {% endif %} {% endmacro %} \ No newline at end of file diff --git a/macros/date_diff_cross_db.sql b/macros/date_diff_cross_db.sql new file mode 100644 index 0000000..40f52b1 --- /dev/null +++ b/macros/date_diff_cross_db.sql @@ -0,0 +1,11 @@ +{% macro date_diff_cross_db(end_date, start_date, unit) %} + {% if target.type == 'bigquery' %} + date_diff({{ end_date }}, {{ start_date }}, {{ unit }}) + {% elif target.type == 'postgres' %} + extract(epoch from ({{ end_date }} - {{ start_date }})) / 86400 + {% elif target.type == 'snowflake' %} + datediff({{ unit }}, {{ start_date }}, {{ end_date }}) + {% else %} + {{ exceptions.raise_compiler_error("Unsupported database type: " ~ target.type) }} + {% endif %} +{% endmacro %} \ No newline at end of file diff --git a/macros/quarter_end_date.sql b/macros/quarter_end_date.sql index 2bd645f..e31cc15 100644 --- a/macros/quarter_end_date.sql +++ b/macros/quarter_end_date.sql @@ -3,6 +3,8 @@ DATE_ADD(DATE_ADD({{ quarter_start_column }}, INTERVAL 3 MONTH), INTERVAL -1 DAY) {% elif target.type == 'postgres' %} ({{ quarter_start_column }} + INTERVAL '3 months' - INTERVAL '1 day')::date + {% elif target.type == 'snowflake' %} + DATEADD(DAY, -1, DATEADD(MONTH, 3, {{ quarter_start_column }})) {% else %} {{ exceptions.raise_compiler_error("Unsupported database type: " ~ target.type) }} {% endif %} diff --git a/models/demo/deals.sql b/models/demo/deals.sql index 33101d1..c66bc87 100644 --- a/models/demo/deals.sql +++ b/models/demo/deals.sql @@ -9,6 +9,6 @@ select -- this code keeps the date fields relevant for the demo environment -- it adds the difference between the current date and a fixed date (2025-01-01) -- to the original date fields, effectively shifting them into the future - {{ date_add_cross_db('created_date', 'date_diff(current_date(), \'2025-01-01\', day)') }} as created_date + {{ date_add_cross_db('created_date', date_diff_cross_db('current_date()', '\'2025-01-01\'', 'day')) }} as created_date from {{ ref('deals_raw') }} diff --git a/models/demo/tracks.sql b/models/demo/tracks.sql index 8a84a29..11730df 100644 --- a/models/demo/tracks.sql +++ b/models/demo/tracks.sql @@ -6,7 +6,7 @@ select -- this code keeps the date fields relevant for the demo environment -- it adds the difference between the current date and a fixed date (2025-01-01) -- to the original date fields, effectively shifting them into the future - {{ date_add_cross_db('t.event_timestamp', 'date_diff(current_date(), \'2025-01-01\', day)') }} as timestamp + {{ date_add_cross_db('t.event_timestamp', date_diff_cross_db('current_date()', '\'2025-01-01\'', 'day')) }} as timestamp from {{ ref('tracks_raw') }} t diff --git a/models/demo/users.sql b/models/demo/users.sql index d051ec9..c079c5d 100644 --- a/models/demo/users.sql +++ b/models/demo/users.sql @@ -27,8 +27,8 @@ select -- this code keeps the date fields relevant for the demo environment -- it adds the difference between the current date and a fixed date (2025-01-01) -- to the original date fields, effectively shifting them into the future - {{ date_add_cross_db('created_at', 'date_diff(current_date(), \'2025-01-01\', day)') }} as created_at, - {{ date_add_cross_db('first_logged_in_at', 'date_diff(current_date(), \'2025-01-01\', day)') }} as first_logged_in_at, - {{ date_add_cross_db('latest_logged_in_at', 'date_diff(current_date(), \'2025-01-01\', day)') }} as latest_logged_in_at + {{ date_add_cross_db('created_at', date_diff_cross_db('current_date()', '\'2025-01-01\'', 'day')) }} as created_at, + {{ date_add_cross_db('first_logged_in_at', date_diff_cross_db('current_date()', '\'2025-01-01\'', 'day')) }} as first_logged_in_at, + {{ date_add_cross_db('latest_logged_in_at', date_diff_cross_db('current_date()', '\'2025-01-01\'', 'day')) }} as latest_logged_in_at from cleaned_data \ No newline at end of file