From 1f123b746080b1c02c3b34713246db9f69892922 Mon Sep 17 00:00:00 2001 From: Mike Alfare <13974384+mikealfare@users.noreply.github.com> Date: Tue, 31 Oct 2023 00:14:02 -0400 Subject: [PATCH] ADAP-971: Fix issue where dynamic tables were returning null for type (#818) * changelog * create test demonstrating the issue * map nulls to dynamic table --- .../unreleased/Fixes-20231030-212151.yaml | 6 +++ dbt/include/snowflake/macros/catalog.sql | 2 +- .../functional/adapter/catalog_tests/files.py | 32 ++++++++++++++ .../catalog_tests/test_relation_types.py | 44 +++++++++++++++++++ 4 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 .changes/unreleased/Fixes-20231030-212151.yaml create mode 100644 tests/functional/adapter/catalog_tests/files.py create mode 100644 tests/functional/adapter/catalog_tests/test_relation_types.py diff --git a/.changes/unreleased/Fixes-20231030-212151.yaml b/.changes/unreleased/Fixes-20231030-212151.yaml new file mode 100644 index 000000000..10939228f --- /dev/null +++ b/.changes/unreleased/Fixes-20231030-212151.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Dynamic tables now show the proper type in catalog queries +time: 2023-10-30T21:21:51.220225-04:00 +custom: + Author: mikealfare + Issue: "817" diff --git a/dbt/include/snowflake/macros/catalog.sql b/dbt/include/snowflake/macros/catalog.sql index eaa7582e9..f0c766865 100644 --- a/dbt/include/snowflake/macros/catalog.sql +++ b/dbt/include/snowflake/macros/catalog.sql @@ -41,7 +41,7 @@ table_catalog as "table_database", table_schema as "table_schema", table_name as "table_name", - table_type as "table_type", + coalesce(table_type, 'DYNAMIC TABLE') as "table_type", comment as "table_comment", -- note: this is the _role_ that owns the table diff --git a/tests/functional/adapter/catalog_tests/files.py b/tests/functional/adapter/catalog_tests/files.py new file mode 100644 index 000000000..a6759398e --- /dev/null +++ b/tests/functional/adapter/catalog_tests/files.py @@ -0,0 +1,32 @@ +MY_SEED = """ +id,value +1,100 +2,200 +3,300 +""".strip() + + +MY_TABLE = """ +{{ config( + materialized='table', +) }} +select * from {{ ref('my_seed') }} +""" + + +MY_VIEW = """ +{{ config( + materialized='view', +) }} +select * from {{ ref('my_seed') }} +""" + + +MY_DYNAMIC_TABLE = """ +{{ config( + materialized='dynamic_table', + snowflake_warehouse='DBT_TESTING', + target_lag='30 minutes', +) }} +select * from {{ ref('my_seed') }} +""" diff --git a/tests/functional/adapter/catalog_tests/test_relation_types.py b/tests/functional/adapter/catalog_tests/test_relation_types.py new file mode 100644 index 000000000..27267a1c9 --- /dev/null +++ b/tests/functional/adapter/catalog_tests/test_relation_types.py @@ -0,0 +1,44 @@ +from dbt.contracts.results import CatalogArtifact +from dbt.tests.util import run_dbt +import pytest + +from tests.functional.adapter.catalog_tests import files + + +class TestCatalogRelationTypes: + @pytest.fixture(scope="class", autouse=True) + def seeds(self): + return {"my_seed.csv": files.MY_SEED} + + @pytest.fixture(scope="class", autouse=True) + def models(self): + yield { + "my_table.sql": files.MY_TABLE, + "my_view.sql": files.MY_VIEW, + "my_dynamic_table.sql": files.MY_DYNAMIC_TABLE, + } + + @pytest.fixture(scope="class", autouse=True) + def docs(self, project): + run_dbt(["seed"]) + run_dbt(["run"]) + yield run_dbt(["docs", "generate"]) + + @pytest.mark.parametrize( + "node_name,relation_type", + [ + ("seed.test.my_seed", "BASE TABLE"), + ("model.test.my_table", "BASE TABLE"), + ("model.test.my_view", "VIEW"), + ("model.test.my_dynamic_table", "DYNAMIC TABLE"), + ], + ) + def test_relation_types_populate_correctly( + self, docs: CatalogArtifact, node_name: str, relation_type: str + ): + """ + This test addresses: https://github.com/dbt-labs/dbt-snowflake/issues/817 + """ + assert node_name in docs.nodes + node = docs.nodes[node_name] + assert node.metadata.type == relation_type