From 760e97aaf6e78794812177d3f169b81f13b58610 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Thu, 16 Apr 2026 07:17:05 +0000 Subject: [PATCH] fix: truncate nanosecond-precision timestamps for BigQuery before casting BigQuery TIMESTAMP only supports microsecond precision (6 fractional digits). Starting with dbt-bigquery >= 1.11, nanosecond-precision timestamps (9 fractional digits) may appear in string columns like execute_completed_at. This causes 'Invalid timestamp' errors when edr_cast_as_timestamp casts these values. Add a bigquery__edr_cast_as_timestamp dispatch that truncates fractional seconds beyond 6 digits before casting, matching the pattern used by the existing Dremio override. Co-Authored-By: mika@elementary-data.com --- macros/utils/data_types/cast_column.sql | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/macros/utils/data_types/cast_column.sql b/macros/utils/data_types/cast_column.sql index 6f89cf93b..5097eb5b3 100644 --- a/macros/utils/data_types/cast_column.sql +++ b/macros/utils/data_types/cast_column.sql @@ -10,6 +10,22 @@ cast({{ timestamp_field }} as {{ elementary.edr_type_timestamp() }}) {%- endmacro -%} +{# + BigQuery TIMESTAMP only supports microsecond precision (6 fractional digits). + Starting with dbt-bigquery >= 1.11, nanosecond-precision timestamps (9 fractional + digits) may appear in string columns like execute_completed_at. Truncate to + 6 fractional digits before casting to avoid "Invalid timestamp" errors. +#} +{%- macro bigquery__edr_cast_as_timestamp(timestamp_field) -%} + cast( + regexp_replace( + cast({{ timestamp_field }} as {{ elementary.edr_type_string() }}), + r'(\.\d{6})\d+', + '\\1' + ) as {{ elementary.edr_type_timestamp() }} + ) +{%- endmacro -%} + {# Athena and Trino needs explicit conversion for ISO8601 timestamps used in buckets_cte #} {%- macro athena__edr_cast_as_timestamp(timestamp_field) -%} coalesce(