diff --git a/macros/utils/cross_db_utils/contains.sql b/macros/utils/cross_db_utils/contains.sql index f56d941ae..ea7634d42 100644 --- a/macros/utils/cross_db_utils/contains.sql +++ b/macros/utils/cross_db_utils/contains.sql @@ -2,7 +2,7 @@ {{ adapter.dispatch('contains', 'elementary') (string, string_to_search, case_sensitive) }} {%- endmacro %} -{# Snowflake, Databricks #} +{# Snowflake, Databricks and DuckDB #} {% macro default__contains(string, string_to_search, case_sensitive) %} {%- if case_sensitive %} contains({{ string }}, '{{ string_to_search }}') diff --git a/macros/utils/cross_db_utils/datediff.sql b/macros/utils/cross_db_utils/datediff.sql index 7f4113b27..842c5b612 100644 --- a/macros/utils/cross_db_utils/datediff.sql +++ b/macros/utils/cross_db_utils/datediff.sql @@ -2,7 +2,7 @@ {{ return(adapter.dispatch('edr_datediff', 'elementary')(first_date, second_date, date_part)) }} {% endmacro %} -{# For Snowflake, Databricks, Redshift, Postgres & Spark #} +{# For Snowflake, Databricks, Redshift, Postgres, Spark & DuckDB #} {# the dbt adapter implementation supports both timestamp and dates #} {% macro default__edr_datediff(first_date, second_date, date_part) %} {% set macro = dbt.datediff or dbt_utils.datediff %} @@ -24,4 +24,4 @@ {%- else %} {{ exceptions.raise_compiler_error("Unsupported date_part in edr_datediff: ".format(date_part)) }} {%- endif %} -{% endmacro %} \ No newline at end of file +{% endmacro %} diff --git a/macros/utils/cross_db_utils/day_of_week.sql b/macros/utils/cross_db_utils/day_of_week.sql index 093b4b1b6..142d18cf3 100644 --- a/macros/utils/cross_db_utils/day_of_week.sql +++ b/macros/utils/cross_db_utils/day_of_week.sql @@ -32,3 +32,7 @@ 0 , 'Sunday' ) {% endmacro %} + +{% macro duckdb__edr_day_of_week_expression(date_expr) %} + dayname({{ date_expr }}) +{% endmacro %} diff --git a/macros/utils/cross_db_utils/get_profile_creation_query.sql b/macros/utils/cross_db_utils/get_profile_creation_query.sql index 1545dfe7a..2163563ed 100644 --- a/macros/utils/cross_db_utils/get_profile_creation_query.sql +++ b/macros/utils/cross_db_utils/get_profile_creation_query.sql @@ -25,7 +25,7 @@ ALTER DEFAULT PRIVILEGES IN SCHEMA {{ parameters["schema"] }} GRANT SELECT ON TA {% endmacro %} -{# Databricks, BigQuery, Spark #} +{# Databricks, BigQuery, Spark, DuckDB #} {% macro default__get_profile_creation_query(parameters) %} {% do exceptions.raise_compiler_error('User creation not supported through sql using ' ~ target.type) %} {% endmacro %} diff --git a/macros/utils/cross_db_utils/hour_of_day.sql b/macros/utils/cross_db_utils/hour_of_day.sql index fed51321d..6fed99ba5 100644 --- a/macros/utils/cross_db_utils/hour_of_day.sql +++ b/macros/utils/cross_db_utils/hour_of_day.sql @@ -22,3 +22,7 @@ {% macro snowflake__edr_hour_of_day_expression(date_expr) %} HOUR({{ date_expr }}) {% endmacro %} + +{% macro duckdb__edr_hour_of_day_expression(date_expr) %} + EXTRACT('hour' FROM {{ date_expr }}) +{% endmacro %} diff --git a/macros/utils/cross_db_utils/hour_of_week.sql b/macros/utils/cross_db_utils/hour_of_week.sql index 842acbb46..285d176be 100644 --- a/macros/utils/cross_db_utils/hour_of_week.sql +++ b/macros/utils/cross_db_utils/hour_of_week.sql @@ -30,3 +30,7 @@ 0 , 'Sunday' ) as {{ elementary.edr_type_string() }}), cast(HOUR({{ date_expr }}) as {{ elementary.edr_type_string() }})) {% endmacro %} + +{% macro duckdb__edr_hour_of_week_expression(date_expr) %} + concat(cast(dayname({{ date_expr }}) as {{ elementary.edr_type_string() }}), cast(EXTRACT('hour' FROM {{ date_expr }}) as {{ elementary.edr_type_string() }})) +{% endmacro %} diff --git a/macros/utils/cross_db_utils/to_char.sql b/macros/utils/cross_db_utils/to_char.sql index dba0fd739..5f741bbf5 100644 --- a/macros/utils/cross_db_utils/to_char.sql +++ b/macros/utils/cross_db_utils/to_char.sql @@ -13,4 +13,8 @@ {% macro spark__edr_to_char(column, format) %} date_format({{ column }} {%- if format %}, '{{ format }}'){%- else %}, 'YYYY-MM-DD HH:MI:SS'){%- endif %} -{% endmacro %} \ No newline at end of file +{% endmacro %} + +{% macro duckdb__edr_to_char(column, format) %} + strftime({{ column }} {%- if format %}, '{{ format }}'){%- else %}, 'YYYY-MM-DD HH:MI:SS'){%- endif %} +{% endmacro %}