diff --git a/macros/edr/dbt_artifacts/upload_dbt_columns.sql b/macros/edr/dbt_artifacts/upload_dbt_columns.sql index de6ca6df5..00c7fc8b5 100644 --- a/macros/edr/dbt_artifacts/upload_dbt_columns.sql +++ b/macros/edr/dbt_artifacts/upload_dbt_columns.sql @@ -89,7 +89,7 @@ "tags": elementary.filter_none_and_sort(tags), "meta": meta_dict, "description": column_node.get("description") or none, - "database_name": table_node.get("database"), + "database_name": elementary.get_node_database(table_node), "schema_name": table_node.get("schema"), "table_name": table_node.get("alias"), "resource_type": table_node.get("resource_type"), diff --git a/macros/edr/dbt_artifacts/upload_dbt_models.sql b/macros/edr/dbt_artifacts/upload_dbt_models.sql index 60d36b965..473490740 100644 --- a/macros/edr/dbt_artifacts/upload_dbt_models.sql +++ b/macros/edr/dbt_artifacts/upload_dbt_models.sql @@ -93,7 +93,7 @@ "tags": elementary.filter_none_and_sort(tags), "meta": meta_dict, "owner": elementary.filter_none_and_sort(formatted_owner), - "database_name": node_dict.get("database"), + "database_name": elementary.get_node_database(node_dict), "schema_name": node_dict.get("schema"), "depends_on_macros": elementary.filter_none_and_sort( depends_on_dict.get("macros", []) diff --git a/macros/edr/dbt_artifacts/upload_dbt_seeds.sql b/macros/edr/dbt_artifacts/upload_dbt_seeds.sql index b70f26957..f7943d437 100644 --- a/macros/edr/dbt_artifacts/upload_dbt_seeds.sql +++ b/macros/edr/dbt_artifacts/upload_dbt_seeds.sql @@ -75,7 +75,7 @@ "tags": elementary.filter_none_and_sort(tags), "meta": meta_dict, "owner": elementary.filter_none_and_sort(formatted_owner), - "database_name": node_dict.get("database"), + "database_name": elementary.get_node_database(node_dict), "schema_name": node_dict.get("schema"), "description": node_dict.get("description"), "name": node_dict.get("name"), diff --git a/macros/edr/dbt_artifacts/upload_dbt_sources.sql b/macros/edr/dbt_artifacts/upload_dbt_sources.sql index 198d67146..fbfd38784 100644 --- a/macros/edr/dbt_artifacts/upload_dbt_sources.sql +++ b/macros/edr/dbt_artifacts/upload_dbt_sources.sql @@ -77,7 +77,7 @@ {% set tags = elementary.union_lists(tags, meta_tags) %} {% set flatten_source_metadata_dict = { "unique_id": node_dict.get("unique_id"), - "database_name": node_dict.get("database"), + "database_name": elementary.get_node_database(node_dict), "schema_name": node_dict.get("schema"), "source_name": node_dict.get("source_name"), "name": node_dict.get("name"), diff --git a/macros/edr/dbt_artifacts/upload_dbt_tests.sql b/macros/edr/dbt_artifacts/upload_dbt_tests.sql index 78593581d..6c2fe4739 100644 --- a/macros/edr/dbt_artifacts/upload_dbt_tests.sql +++ b/macros/edr/dbt_artifacts/upload_dbt_tests.sql @@ -150,7 +150,9 @@ {%- if primary_test_model_id.data is not none -%} {% set tested_model_node = elementary.get_node(primary_test_model_id.data) %} {%- if tested_model_node -%} - {% set primary_test_model_database = tested_model_node.get("database") %} + {% set primary_test_model_database = elementary.get_node_database( + tested_model_node + ) %} {% set primary_test_model_schema = tested_model_node.get("schema") %} {% set group_name = group_name or tested_model_node.get("group") %} {% set flatten_primary_model_node = elementary.flatten_node( diff --git a/macros/utils/graph/get_model_database_and_schema_from_test_node.sql b/macros/utils/graph/get_model_database_and_schema_from_test_node.sql index d3b24bd93..c12103d13 100644 --- a/macros/utils/graph/get_model_database_and_schema_from_test_node.sql +++ b/macros/utils/graph/get_model_database_and_schema_from_test_node.sql @@ -1,5 +1,5 @@ {% macro get_model_database_and_schema_from_test_node(test_node) %} - {% set test_database = test_node.get("database") %} + {% set test_database = elementary.get_node_database(test_node) %} {% set test_schema = test_node.get("schema") %} {% set config_dict = elementary.safe_get_with_default(test_node, "config", {}) %} {% set test_schema_sufix = config_dict.get("schema") %} diff --git a/macros/utils/graph/get_node_database.sql b/macros/utils/graph/get_node_database.sql new file mode 100644 index 000000000..934b96c9a --- /dev/null +++ b/macros/utils/graph/get_node_database.sql @@ -0,0 +1,20 @@ +{# + Returns the database name from a node dict. + + ClickHouse does not have a separate database / schema concept — the + dbt-clickhouse adapter sets node.database to None. ClickHouse's own + information_schema populates both the database and schema columns with + the same value (the database name), so we mirror that behaviour here + by falling back to the node's schema when the database is None. +#} +{% macro get_node_database(node) %} + {% do return(adapter.dispatch("get_node_database", "elementary")(node)) %} +{% endmacro %} + +{% macro default__get_node_database(node) %} + {% do return(node.get("database")) %} +{% endmacro %} + +{% macro clickhouse__get_node_database(node) %} + {% do return(node.get("database") or node.get("schema")) %} +{% endmacro %} diff --git a/macros/utils/graph/get_relevant_databases.sql b/macros/utils/graph/get_relevant_databases.sql index e61600f33..a107626eb 100644 --- a/macros/utils/graph/get_relevant_databases.sql +++ b/macros/utils/graph/get_relevant_databases.sql @@ -1,5 +1,5 @@ {% macro get_relevant_databases() %} - {% set database_names = [target.database] %} + {% set database_names = [target.database or target.schema] %} {% set models = ( graph.nodes.values() | selectattr("resource_type", "==", "model") @@ -12,7 +12,7 @@ ) %} {% set nodes = models + sources %} {% for node in nodes %} - {% set database_name = node.get("database") %} + {% set database_name = elementary.get_node_database(node) %} {% if database_name %} {% do database_names.append(database_name) %} {% endif %} {% endfor %} {% set unique_database_names = database_names | unique | list %}