Skip to content

Commit

Permalink
Add tests for merge mode (#161)
Browse files Browse the repository at this point in the history
Co-authored-by: Vamshi Kolanu <vkolanu@vamshikolanu.local>
  • Loading branch information
vamshikolanu and Vamshi Kolanu authored Feb 20, 2025
1 parent f79e443 commit d8fb502
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ Support for [On-Schema Change](https://docs.getdbt.com/docs/build/incremental-mo
|Materialization: Incremental - Append | Yes | Yes|
|Materialization: Incremental - Append with Partitions | Yes | Yes|
|Materialization: Incremental - Insert+Overwrite with Partitions | Yes | No |
|Materialization: Incremental - Merge | No | No |
|Materialization: Incremental - Merge | Yes | Yes |
|Materialization: Ephemeral | No | No |
|Seeds | Yes | Yes |
|Tests | Yes | Yes |
Expand Down
29 changes: 29 additions & 0 deletions tests/functional/adapter/iceberg_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,35 @@
+ model_incremental
)

merge_iceberg_sql = """
{{ config(
materialized = 'incremental',
unique_key = 'id',
incremental_strategy='merge',
merge_exclude_columns=['msg'],
table_type='iceberg'
) }}
{% if not is_incremental() %}
-- data for first invocation of model
select 1 as id, 'hello' as msg, 'blue' as color
union all
select 2 as id, 'goodbye' as msg, 'red' as color
{% else %}
-- data for subsequent incremental update
select 1 as id, 'hey' as msg, 'blue' as color
union all
select 2 as id, 'yo' as msg, 'green' as color
union all
select 3 as id, 'anyway' as msg, 'purple' as color
{% endif %}
"""

incremental_partition_iceberg_sql = """
{{
Expand Down
7 changes: 7 additions & 0 deletions tests/functional/adapter/test_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
BaseIncremental,
BaseIncrementalNotSchemaChange,
)
from dbt.tests.adapter.incremental.test_incremental_merge_exclude_columns import (
BaseMergeExcludeColumns,
)
from dbt.tests.adapter.basic.test_generic_tests import BaseGenericTests
from dbt.tests.adapter.basic.test_adapter_methods import BaseAdapterMethod
from dbt.tests.adapter.utils.base_utils import BaseUtils
Expand Down Expand Up @@ -203,3 +206,7 @@ class TestBaseIncrementalNotSchemaChange(BaseIncrementalNotSchemaChange):
@pytest.fixture(scope="class")
def models(self):
return {"incremental_not_schema_change.sql": incremental_not_schema_change_sql}


class TestBaseMergeExcludeColumns(BaseMergeExcludeColumns):
pass
12 changes: 12 additions & 0 deletions tests/functional/adapter/test_iceberg_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,15 @@
)

from dbt.tests.adapter.basic.test_base import BaseSimpleMaterializations

from dbt.tests.adapter.basic.test_incremental import (
BaseIncremental,
)

from dbt.tests.adapter.incremental.test_incremental_merge_exclude_columns import (
BaseMergeExcludeColumns,
)

from dbt.tests.adapter.basic.files import (
model_base,
model_incremental,
Expand All @@ -40,6 +45,7 @@
incremental_iceberg_sql,
incremental_partition_iceberg_sql,
incremental_multiple_partition_iceberg_sql,
merge_iceberg_sql,
)


Expand Down Expand Up @@ -203,6 +209,12 @@ def models(self):
}


class TestMergeIcebergHive(BaseMergeExcludeColumns):
@pytest.fixture(scope="class")
def models(self):
return {"merge_exclude_columns.sql": merge_iceberg_sql}


class TestIncrementalPartitionIcebergHive(BaseIncrementalForIceberg):
@pytest.fixture(scope="class")
def models(self):
Expand Down
11 changes: 11 additions & 0 deletions tests/functional/adapter/test_iceberg_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,18 @@
incremental_iceberg_sql,
incremental_partition_iceberg_sql,
incremental_multiple_partition_iceberg_sql,
merge_iceberg_sql,
)

from tests.functional.adapter.test_iceberg_v1 import (
BaseSimpleMaterializationsForIceberg,
BaseIncrementalForIceberg,
)

from dbt.tests.adapter.incremental.test_incremental_merge_exclude_columns import (
BaseMergeExcludeColumns,
)

from dbt.tests.adapter.basic.files import model_base, base_view_sql, schema_base_yml

iceberg_base_materialized_var_sql = (
Expand Down Expand Up @@ -59,6 +64,12 @@ def models(self):
}


class TestMergeIcebergV2Hive(BaseMergeExcludeColumns):
@pytest.fixture(scope="class")
def models(self):
return {"merge_exclude_columns.sql": replace_with_iceberg_v2(merge_iceberg_sql)}


class TestIncrementalPartitionIcebergV2Hive(BaseIncrementalForIceberg):
@pytest.fixture(scope="class")
def models(self):
Expand Down

0 comments on commit d8fb502

Please sign in to comment.