Skip to content
This repository was archived by the owner on Sep 2, 2025. It is now read-only.

Commit ac3b126

Browse files
committed
sub_strategy
1 parent 4a86d9e commit ac3b126

File tree

3 files changed

+52
-1
lines changed

3 files changed

+52
-1
lines changed

dbt/include/bigquery/macros/materializations/incremental_strategy/insert_overwrite.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,4 +212,4 @@
212212
raise using message = FORMAT("Error: %s", @@error.message);
213213
rollback transaction;
214214
end
215-
{% endmacro %}
215+
{% endmacro %}

tests/functional/adapter/incremental/incremental_strategy_fixtures.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,3 +611,51 @@
611611
}}
612612
select * from {{ ref('input_model') }}
613613
"""
614+
615+
overwrite_static_day_delete_and_insert_sub_strategy_sql = """
616+
{% set partitions_to_replace = [
617+
"'2020-01-01'",
618+
"'2020-01-02'",
619+
] %}
620+
621+
{{
622+
config(
623+
materialized="incremental",
624+
incremental_strategy="insert_overwrite",
625+
insert_overwrite_fn='delete+insert',
626+
cluster_by="id",
627+
partition_by={
628+
"field": "date_time",
629+
"data_type": "datetime",
630+
"granularity": "day"
631+
},
632+
partitions=partitions_to_replace,
633+
on_schema_change="sync_all_columns"
634+
)
635+
}}
636+
637+
638+
with data as (
639+
640+
{% if not is_incremental() %}
641+
642+
select 1 as id, cast('2020-01-01' as datetime) as date_time union all
643+
select 2 as id, cast('2020-01-01' as datetime) as date_time union all
644+
select 3 as id, cast('2020-01-01' as datetime) as date_time union all
645+
select 4 as id, cast('2020-01-01' as datetime) as date_time
646+
647+
{% else %}
648+
649+
-- we want to overwrite the 4 records in the 2020-01-01 partition
650+
-- with the 2 records below, but add two more in the 2020-01-02 partition
651+
select 10 as id, cast('2020-01-01' as datetime) as date_time union all
652+
select 20 as id, cast('2020-01-01' as datetime) as date_time union all
653+
select 30 as id, cast('2020-01-02' as datetime) as date_time union all
654+
select 40 as id, cast('2020-01-02' as datetime) as date_time
655+
656+
{% endif %}
657+
658+
)
659+
660+
select * from data
661+
""".lstrip()

tests/functional/adapter/incremental/test_incremental_strategies.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
overwrite_day_with_time_ingestion_sql,
2828
overwrite_day_with_time_partition_datetime_sql,
2929
overwrite_static_day_sql,
30+
overwrite_static_day_delete_and_insert_sub_strategy_sql,
3031
)
3132

3233

@@ -50,6 +51,7 @@ def models(self):
5051
"incremental_overwrite_day_with_time_partition.sql": overwrite_day_with_time_ingestion_sql,
5152
"incremental_overwrite_day_with_time_partition_datetime.sql": overwrite_day_with_time_partition_datetime_sql,
5253
"incremental_overwrite_static_day.sql": overwrite_static_day_sql,
54+
"incremental_overwrite_static_day_with_deleteinsert.sql": overwrite_static_day_delete_and_insert_sub_strategy_sql
5355
}
5456

5557
@pytest.fixture(scope="class")
@@ -85,6 +87,7 @@ def test__bigquery_assert_incremental_configurations_apply_the_right_strategy(se
8587
"incremental_overwrite_day_with_time_partition_expected",
8688
),
8789
("incremental_overwrite_static_day", "incremental_overwrite_day_expected"),
90+
("incremental_overwrite_static_day_with_deleteinsert", "incremental_overwrite_day_expected"),
8891
]
8992
db_with_schema = f"{project.database}.{project.test_schema}"
9093
for incremental_strategy in incremental_strategies:

0 commit comments

Comments
 (0)