From 93a22397c38f79a7abe1ccdf4678a219b9859a7b Mon Sep 17 00:00:00 2001 From: Tatiana Al-Chueyr Date: Thu, 27 Jun 2024 12:39:04 +0100 Subject: [PATCH 1/4] Support partial parsing when cache is disabled Fix: #1041 --- cosmos/dbt/graph.py | 25 +- dev/dags/dbt/jaffle_shop/target/manifest.json | 8213 +++++++++++------ tests/dbt/test_graph.py | 36 +- 3 files changed, 5414 insertions(+), 2860 deletions(-) diff --git a/cosmos/dbt/graph.py b/cosmos/dbt/graph.py index 8dba0a92ed..62b6d88bf0 100644 --- a/cosmos/dbt/graph.py +++ b/cosmos/dbt/graph.py @@ -404,6 +404,10 @@ def load_via_dbt_ls_cache(self) -> bool: logger.info(f"Cosmos performance: Cache miss for {self.dbt_ls_cache_key} - skipped") return False + def should_use_partial_parse_cache(self) -> bool: + """Identify if Cosmos should use/store dbt partial parse cache or not.""" + return settings.enable_cache_partial_parse and settings.enable_cache and bool(self.cache_dir) + def load_via_dbt_ls_without_cache(self) -> None: """ This is the most accurate way of loading `dbt` projects and filtering them out, since it uses the `dbt` command @@ -424,18 +428,21 @@ def load_via_dbt_ls_without_cache(self) -> None: raise CosmosLoadDbtException("Unable to load project via dbt ls without a profile config.") with tempfile.TemporaryDirectory() as tmpdir: - logger.debug( - f"Content of the dbt project dir {self.render_config.project_path}: `{os.listdir(self.render_config.project_path)}`" - ) + logger.debug(f"Content of the dbt project dir {project_path}: `{os.listdir(project_path)}`") tmpdir_path = Path(tmpdir) create_symlinks(project_path, tmpdir_path, self.render_config.dbt_deps) - if self.project.partial_parse and self.cache_dir: - latest_partial_parse = cache._get_latest_partial_parse(project_path, self.cache_dir) + latest_partial_parse = None + if self.project.partial_parse: + if self.should_use_partial_parse_cache() and self.cache_dir: + latest_partial_parse = cache._get_latest_partial_parse(project_path, self.cache_dir) + else: + latest_partial_parse = get_partial_parse_path(project_path) + + if latest_partial_parse is not None and latest_partial_parse.exists(): logger.info("Partial parse is enabled and the latest partial parse file is %s", latest_partial_parse) - if latest_partial_parse is not None: - cache._copy_partial_parse_to_project(latest_partial_parse, tmpdir_path) + cache._copy_partial_parse_to_project(latest_partial_parse, tmpdir_path) with self.profile_config.ensure_profile( use_mock_values=self.render_config.enable_mock_profile @@ -470,9 +477,9 @@ def load_via_dbt_ls_without_cache(self) -> None: self.nodes = nodes self.filtered_nodes = nodes - if self.project.partial_parse and self.cache_dir: + if self.should_use_partial_parse_cache(): partial_parse_file = get_partial_parse_path(tmpdir_path) - if partial_parse_file.exists(): + if partial_parse_file.exists() and self.cache_dir: cache._update_partial_parse_cache(partial_parse_file, self.cache_dir) def load_via_dbt_ls_file(self) -> None: diff --git a/dev/dags/dbt/jaffle_shop/target/manifest.json b/dev/dags/dbt/jaffle_shop/target/manifest.json index 9446d80c3a..c8ba975540 100644 --- a/dev/dags/dbt/jaffle_shop/target/manifest.json +++ b/dev/dags/dbt/jaffle_shop/target/manifest.json @@ -68,39 +68,41 @@ }, "disabled": {}, "docs": { - "dbt.__overview__": { + "doc.dbt.__overview__": { "block_contents": "### Welcome!\n\nWelcome to the auto-generated documentation for your dbt project!\n\n### Navigation\n\nYou can use the `Project` and `Database` navigation tabs on the left side of the window to explore the models\nin your project.\n\n#### Project Tab\nThe `Project` tab mirrors the directory structure of your dbt project. In this tab, you can see all of the\nmodels defined in your dbt project, as well as models imported from dbt packages.\n\n#### Database Tab\nThe `Database` tab also exposes your models, but in a format that looks more like a database explorer. This view\nshows relations (tables and views) grouped into database schemas. Note that ephemeral models are _not_ shown\nin this interface, as they do not exist in the database.\n\n### Graph Exploration\nYou can click the blue icon on the bottom-right corner of the page to view the lineage graph of your models.\n\nOn model pages, you'll see the immediate parents and children of the model you're exploring. By clicking the `Expand`\nbutton at the top-right of this lineage pane, you'll be able to see all of the models that are used to build,\nor are built from, the model you're exploring.\n\nOnce expanded, you'll be able to use the `--select` and `--exclude` model selection syntax to filter the\nmodels in the graph. For more information on model selection, check out the [dbt docs](https://docs.getdbt.com/docs/model-selection-syntax).\n\nNote that you can also right-click on models to interactively filter and explore the graph.\n\n---\n\n### More information\n\n- [What is dbt](https://docs.getdbt.com/docs/introduction)?\n- Read the [dbt viewpoint](https://docs.getdbt.com/docs/viewpoint)\n- [Installation](https://docs.getdbt.com/docs/installation)\n- Join the [dbt Community](https://www.getdbt.com/community/) for questions and discussion", "name": "__overview__", "original_file_path": "docs/overview.md", "package_name": "dbt", "path": "overview.md", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", - "unique_id": "dbt.__overview__" + "resource_type": "doc", + "unique_id": "doc.dbt.__overview__" }, - "jaffle_shop.__overview__": { + "doc.jaffle_shop.__overview__": { "block_contents": "## Data Documentation for Jaffle Shop\n\n`jaffle_shop` is a fictional ecommerce store.\n\nThis [dbt](https://www.getdbt.com/) project is for testing out code.\n\nThe source code can be found [here](https://github.com/clrcrl/jaffle_shop).", "name": "__overview__", "original_file_path": "models/overview.md", "package_name": "jaffle_shop", "path": "overview.md", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", - "unique_id": "jaffle_shop.__overview__" + "resource_type": "doc", + "unique_id": "doc.jaffle_shop.__overview__" }, - "jaffle_shop.orders_status": { + "doc.jaffle_shop.orders_status": { "block_contents": "Orders can be one of the following statuses:\n\n| status | description |\n|----------------|------------------------------------------------------------------------------------------------------------------------|\n| placed | The order has been placed but has not yet left the warehouse |\n| shipped | The order has ben shipped to the customer and is currently in transit |\n| completed | The order has been received by the customer |\n| return_pending | The customer has indicated that they would like to return the order, but it has not yet been received at the warehouse |\n| returned | The order has been returned by the customer and received at the warehouse |", "name": "orders_status", "original_file_path": "models/docs.md", "package_name": "jaffle_shop", "path": "docs.md", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", - "unique_id": "jaffle_shop.orders_status" + "resource_type": "doc", + "unique_id": "doc.jaffle_shop.orders_status" } }, "exposures": {}, + "group_map": {}, + "groups": {}, "macros": { "macro.dbt._split_part_negative": { "arguments": [], - "created_at": 1696458269.796739, + "created_at": 1719485736.555134, "depends_on": { "macros": [] }, @@ -109,7 +111,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro _split_part_negative(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n length({{ string_text }})\n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 2 {{ part_number }}\n )\n\n{% endmacro %}", + "macro_sql": "{% macro _split_part_negative(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n length({{ string_text }})\n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 2 + {{ part_number }}\n )\n\n{% endmacro %}", "meta": {}, "name": "_split_part_negative", "original_file_path": "macros/utils/split_part.sql", @@ -117,14 +119,12 @@ "patch_path": null, "path": "macros/utils/split_part.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt._split_part_negative" }, "macro.dbt.after_commit": { "arguments": [], - "created_at": 1696458269.591864, + "created_at": 1719485736.337471, "depends_on": { "macros": [ "macro.dbt.make_hook_config" @@ -143,14 +143,12 @@ "patch_path": null, "path": "macros/materializations/hooks.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.after_commit" }, "macro.dbt.alter_column_comment": { "arguments": [], - "created_at": 1696458269.832114, + "created_at": 1719485736.583679, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__alter_column_comment" @@ -169,14 +167,12 @@ "patch_path": null, "path": "macros/adapters/persist_docs.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.alter_column_comment" }, "macro.dbt.alter_column_type": { "arguments": [], - "created_at": 1696458269.845595, + "created_at": 1719485736.599694, "depends_on": { "macros": [ "macro.dbt.default__alter_column_type" @@ -195,14 +191,12 @@ "patch_path": null, "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.alter_column_type" }, "macro.dbt.alter_relation_add_remove_columns": { "arguments": [], - "created_at": 1696458269.847001, + "created_at": 1719485736.600589, "depends_on": { "macros": [ "macro.dbt.default__alter_relation_add_remove_columns" @@ -221,14 +215,12 @@ "patch_path": null, "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.alter_relation_add_remove_columns" }, "macro.dbt.alter_relation_comment": { "arguments": [], - "created_at": 1696458269.832729, + "created_at": 1719485736.585442, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__alter_relation_comment" @@ -247,14 +239,12 @@ "patch_path": null, "path": "macros/adapters/persist_docs.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.alter_relation_comment" }, "macro.dbt.any_value": { "arguments": [], - "created_at": 1696458269.7846951, + "created_at": 1719485736.542892, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__any_value" @@ -273,14 +263,12 @@ "patch_path": null, "path": "macros/utils/any_value.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.any_value" }, "macro.dbt.apply_grants": { "arguments": [], - "created_at": 1696458269.828692, + "created_at": 1719485736.577766, "depends_on": { "macros": [ "macro.dbt.default__apply_grants" @@ -299,14 +287,12 @@ "patch_path": null, "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.apply_grants" }, "macro.dbt.array_append": { "arguments": [], - "created_at": 1696458269.7995489, + "created_at": 1719485736.5569642, "depends_on": { "macros": [ "macro.dbt.default__array_append" @@ -325,14 +311,12 @@ "patch_path": null, "path": "macros/utils/array_append.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.array_append" }, "macro.dbt.array_concat": { "arguments": [], - "created_at": 1696458269.792314, + "created_at": 1719485736.5521111, "depends_on": { "macros": [ "macro.dbt.default__array_concat" @@ -351,14 +335,12 @@ "patch_path": null, "path": "macros/utils/array_concat.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.array_concat" }, "macro.dbt.array_construct": { "arguments": [], - "created_at": 1696458269.798442, + "created_at": 1719485736.556025, "depends_on": { "macros": [ "macro.dbt.default__array_construct" @@ -377,14 +359,38 @@ "patch_path": null, "path": "macros/utils/array_construct.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.array_construct" }, + "macro.dbt.assert_columns_equivalent": { + "arguments": [], + "created_at": 1719485736.5031989, + "depends_on": { + "macros": [ + "macro.dbt.get_column_schema_from_query", + "macro.dbt.get_empty_schema_sql", + "macro.dbt.format_columns" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro assert_columns_equivalent(sql) %}\n\n {#-- First ensure the user has defined 'columns' in yaml specification --#}\n {%- set user_defined_columns = model['columns'] -%}\n {%- if not user_defined_columns -%}\n {{ exceptions.raise_contract_error([], []) }}\n {%- endif -%}\n\n {#-- Obtain the column schema provided by sql file. #}\n {%- set sql_file_provided_columns = get_column_schema_from_query(sql, config.get('sql_header', none)) -%}\n {#--Obtain the column schema provided by the schema file by generating an 'empty schema' query from the model's columns. #}\n {%- set schema_file_provided_columns = get_column_schema_from_query(get_empty_schema_sql(user_defined_columns)) -%}\n\n {#-- create dictionaries with name and formatted data type and strings for exception #}\n {%- set sql_columns = format_columns(sql_file_provided_columns) -%}\n {%- set yaml_columns = format_columns(schema_file_provided_columns) -%}\n\n {%- if sql_columns|length != yaml_columns|length -%}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n\n {%- for sql_col in sql_columns -%}\n {%- set yaml_col = [] -%}\n {%- for this_col in yaml_columns -%}\n {%- if this_col['name'] == sql_col['name'] -%}\n {%- do yaml_col.append(this_col) -%}\n {%- break -%}\n {%- endif -%}\n {%- endfor -%}\n {%- if not yaml_col -%}\n {#-- Column with name not found in yaml #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- if sql_col['formatted'] != yaml_col[0]['formatted'] -%}\n {#-- Column data types don't match #}\n {%- do exceptions.raise_contract_error(yaml_columns, sql_columns) -%}\n {%- endif -%}\n {%- endfor -%}\n\n{% endmacro %}", + "meta": {}, + "name": "assert_columns_equivalent", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/column/columns_spec_ddl.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.assert_columns_equivalent" + }, "macro.dbt.before_begin": { "arguments": [], - "created_at": 1696458269.591393, + "created_at": 1719485736.336732, "depends_on": { "macros": [ "macro.dbt.make_hook_config" @@ -403,14 +409,12 @@ "patch_path": null, "path": "macros/materializations/hooks.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.before_begin" }, "macro.dbt.bool_or": { "arguments": [], - "created_at": 1696458269.7931142, + "created_at": 1719485736.5525389, "depends_on": { "macros": [ "macro.dbt.default__bool_or" @@ -429,14 +433,12 @@ "patch_path": null, "path": "macros/utils/bool_or.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.bool_or" }, "macro.dbt.build_config_dict": { "arguments": [], - "created_at": 1696458269.852396, + "created_at": 1719485736.617571, "depends_on": { "macros": [] }, @@ -445,7 +447,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro build_config_dict(model) %}\n {%- set config_dict = {} -%}\n {%- for key in model.config.config_keys_used -%}\n {# weird type testing with enum, would be much easier to write this logic in Python! #}\n {%- if key == 'language' -%}\n {%- set value = 'python' -%}\n {%- endif -%}\n {%- set value = model.config[key] -%}\n {%- do config_dict.update({key: value}) -%}\n {%- endfor -%}\nconfig_dict = {{ config_dict }}\n{% endmacro %}", + "macro_sql": "{% macro build_config_dict(model) %}\n {%- set config_dict = {} -%}\n {% set config_dbt_used = zip(model.config.config_keys_used, model.config.config_keys_defaults) | list %}\n {%- for key, default in config_dbt_used -%}\n {# weird type testing with enum, would be much easier to write this logic in Python! #}\n {%- if key == \"language\" -%}\n {%- set value = \"python\" -%}\n {%- endif -%}\n {%- set value = model.config.get(key, default) -%}\n {%- do config_dict.update({key: value}) -%}\n {%- endfor -%}\nconfig_dict = {{ config_dict }}\n{% endmacro %}", "meta": {}, "name": "build_config_dict", "original_file_path": "macros/python_model/python.sql", @@ -453,23 +455,23 @@ "patch_path": null, "path": "macros/python_model/python.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.build_config_dict" }, "macro.dbt.build_ref_function": { "arguments": [], - "created_at": 1696458269.850849, + "created_at": 1719485736.616483, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.resolve_model_name" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro build_ref_function(model) %}\n\n {%- set ref_dict = {} -%}\n {%- for _ref in model.refs -%}\n {%- set resolved = ref(*_ref) -%}\n {%- do ref_dict.update({_ref | join(\".\"): resolved.quote(database=False, schema=False, identifier=False) | string}) -%}\n {%- endfor -%}\n\ndef ref(*args,dbt_load_df_function):\n refs = {{ ref_dict | tojson }}\n key = \".\".join(args)\n return dbt_load_df_function(refs[key])\n\n{% endmacro %}", + "macro_sql": "{% macro build_ref_function(model) %}\n\n {%- set ref_dict = {} -%}\n {%- for _ref in model.refs -%}\n {% set _ref_args = [_ref.get('package'), _ref['name']] if _ref.get('package') else [_ref['name'],] %}\n {%- set resolved = ref(*_ref_args, v=_ref.get('version')) -%}\n {%- if _ref.get('version') -%}\n {% do _ref_args.extend([\"v\" ~ _ref['version']]) %}\n {%- endif -%}\n {%- do ref_dict.update({_ref_args | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef ref(*args, **kwargs):\n refs = {{ ref_dict | tojson }}\n key = '.'.join(args)\n version = kwargs.get(\"v\") or kwargs.get(\"version\")\n if version:\n key += f\".v{version}\"\n dbt_load_df_function = kwargs.get(\"dbt_load_df_function\")\n return dbt_load_df_function(refs[key])\n\n{% endmacro %}", "meta": {}, "name": "build_ref_function", "original_file_path": "macros/python_model/python.sql", @@ -477,14 +479,12 @@ "patch_path": null, "path": "macros/python_model/python.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.build_ref_function" }, "macro.dbt.build_snapshot_staging_table": { "arguments": [], - "created_at": 1696458269.620571, + "created_at": 1719485736.358976, "depends_on": { "macros": [ "macro.dbt.make_temp_relation", @@ -506,14 +506,12 @@ "patch_path": null, "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.build_snapshot_staging_table" }, "macro.dbt.build_snapshot_table": { "arguments": [], - "created_at": 1696458269.619425, + "created_at": 1719485736.3569238, "depends_on": { "macros": [ "macro.dbt.default__build_snapshot_table" @@ -532,23 +530,23 @@ "patch_path": null, "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.build_snapshot_table" }, "macro.dbt.build_source_function": { "arguments": [], - "created_at": 1696458269.851639, + "created_at": 1719485736.616947, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.resolve_model_name" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro build_source_function(model) %}\n\n {%- set source_dict = {} -%}\n {%- for _source in model.sources -%}\n {%- set resolved = source(*_source) -%}\n {%- do source_dict.update({_source | join(\".\"): resolved.quote(database=False, schema=False, identifier=False) | string}) -%}\n {%- endfor -%}\n\ndef source(*args, dbt_load_df_function):\n sources = {{ source_dict | tojson }}\n key = \".\".join(args)\n return dbt_load_df_function(sources[key])\n\n{% endmacro %}", + "macro_sql": "{% macro build_source_function(model) %}\n\n {%- set source_dict = {} -%}\n {%- for _source in model.sources -%}\n {%- set resolved = source(*_source) -%}\n {%- do source_dict.update({_source | join('.'): resolve_model_name(resolved)}) -%}\n {%- endfor -%}\n\ndef source(*args, dbt_load_df_function):\n sources = {{ source_dict | tojson }}\n key = '.'.join(args)\n return dbt_load_df_function(sources[key])\n\n{% endmacro %}", "meta": {}, "name": "build_source_function", "original_file_path": "macros/python_model/python.sql", @@ -556,14 +554,12 @@ "patch_path": null, "path": "macros/python_model/python.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.build_source_function" }, "macro.dbt.call_dcl_statements": { "arguments": [], - "created_at": 1696458269.827903, + "created_at": 1719485736.576986, "depends_on": { "macros": [ "macro.dbt.default__call_dcl_statements" @@ -582,14 +578,60 @@ "patch_path": null, "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.call_dcl_statements" }, + "macro.dbt.can_clone_table": { + "arguments": [], + "created_at": 1719485736.4429, + "depends_on": { + "macros": [ + "macro.dbt.default__can_clone_table" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro can_clone_table() %}\n {{ return(adapter.dispatch('can_clone_table', 'dbt')()) }}\n{% endmacro %}", + "meta": {}, + "name": "can_clone_table", + "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/clone/can_clone_table.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.can_clone_table" + }, + "macro.dbt.cast": { + "arguments": [], + "created_at": 1719485736.542182, + "depends_on": { + "macros": [ + "macro.dbt.default__cast" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro cast(field, type) %}\n {{ return(adapter.dispatch('cast', 'dbt') (field, type)) }}\n{% endmacro %}", + "meta": {}, + "name": "cast", + "original_file_path": "macros/utils/cast.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/cast.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.cast" + }, "macro.dbt.cast_bool_to_text": { "arguments": [], - "created_at": 1696458269.783756, + "created_at": 1719485736.541704, "depends_on": { "macros": [ "macro.dbt.default__cast_bool_to_text" @@ -608,14 +650,12 @@ "patch_path": null, "path": "macros/utils/cast_bool_to_text.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.cast_bool_to_text" }, "macro.dbt.check_for_schema_changes": { "arguments": [], - "created_at": 1696458269.71107, + "created_at": 1719485736.43984, "depends_on": { "macros": [ "macro.dbt.diff_columns", @@ -635,14 +675,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/on_schema_change.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.check_for_schema_changes" }, "macro.dbt.check_schema_exists": { "arguments": [], - "created_at": 1696458269.8388941, + "created_at": 1719485736.591485, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__check_schema_exists" @@ -661,14 +699,12 @@ "patch_path": null, "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.check_schema_exists" }, "macro.dbt.collect_freshness": { "arguments": [], - "created_at": 1696458269.819403, + "created_at": 1719485736.569225, "depends_on": { "macros": [ "macro.dbt.default__collect_freshness" @@ -687,14 +723,12 @@ "patch_path": null, "path": "macros/adapters/freshness.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.collect_freshness" }, "macro.dbt.concat": { "arguments": [], - "created_at": 1696458269.774415, + "created_at": 1719485736.533403, "depends_on": { "macros": [ "macro.dbt.default__concat" @@ -713,14 +747,12 @@ "patch_path": null, "path": "macros/utils/concat.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.concat" }, "macro.dbt.convert_datetime": { "arguments": [], - "created_at": 1696458269.768708, + "created_at": 1719485736.522349, "depends_on": { "macros": [] }, @@ -737,14 +769,12 @@ "patch_path": null, "path": "macros/etc/datetime.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.convert_datetime" }, "macro.dbt.copy_grants": { "arguments": [], - "created_at": 1696458269.822963, + "created_at": 1719485736.5725539, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__copy_grants" @@ -763,14 +793,12 @@ "patch_path": null, "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.copy_grants" }, "macro.dbt.create_columns": { "arguments": [], - "created_at": 1696458269.6159968, + "created_at": 1719485736.354676, "depends_on": { "macros": [ "macro.dbt.default__create_columns" @@ -789,14 +817,12 @@ "patch_path": null, "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.create_columns" }, "macro.dbt.create_csv_table": { "arguments": [], - "created_at": 1696458269.7461991, + "created_at": 1719485736.45865, "depends_on": { "macros": [ "macro.dbt.default__create_csv_table" @@ -815,14 +841,12 @@ "patch_path": null, "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.create_csv_table" }, "macro.dbt.create_indexes": { "arguments": [], - "created_at": 1696458269.8056178, + "created_at": 1719485736.561525, "depends_on": { "macros": [ "macro.dbt.default__create_indexes" @@ -841,14 +865,36 @@ "patch_path": null, "path": "macros/adapters/indexes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.create_indexes" }, + "macro.dbt.create_or_replace_clone": { + "arguments": [], + "created_at": 1719485736.443349, + "depends_on": { + "macros": [ + "macro.dbt.default__create_or_replace_clone" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro create_or_replace_clone(this_relation, defer_relation) %}\n {{ return(adapter.dispatch('create_or_replace_clone', 'dbt')(this_relation, defer_relation)) }}\n{% endmacro %}", + "meta": {}, + "name": "create_or_replace_clone", + "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/clone/create_or_replace_clone.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.create_or_replace_clone" + }, "macro.dbt.create_or_replace_view": { "arguments": [], - "created_at": 1696458269.730096, + "created_at": 1719485736.513715, "depends_on": { "macros": [ "macro.dbt.run_hooks", @@ -865,22 +911,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {% set should_revoke = should_revoke(exists_as_view, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=True) %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", + "macro_sql": "{% macro create_or_replace_view() %}\n {%- set identifier = model['alias'] -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database,\n type='view') -%}\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks) }}\n\n -- If there's a table with the same name and we weren't told to full refresh,\n -- that's an error. If we were told to full refresh, drop it. This behavior differs\n -- for Snowflake and BigQuery, so multiple dispatch is used.\n {%- if old_relation is not none and old_relation.is_table -%}\n {{ handle_existing_table(should_full_refresh(), old_relation) }}\n {%- endif -%}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(target_relation, sql) }}\n {%- endcall %}\n\n {% set should_revoke = should_revoke(exists_as_view, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {{ run_hooks(post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmacro %}", "meta": {}, "name": "create_or_replace_view", - "original_file_path": "macros/materializations/models/view/create_or_replace_view.sql", + "original_file_path": "macros/relations/view/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/create_or_replace_view.sql", + "path": "macros/relations/view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.create_or_replace_view" }, "macro.dbt.create_schema": { "arguments": [], - "created_at": 1696458269.800509, + "created_at": 1719485736.558099, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__create_schema" @@ -899,14 +943,12 @@ "patch_path": null, "path": "macros/adapters/schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.create_schema" }, "macro.dbt.create_table_as": { "arguments": [], - "created_at": 1696458269.720823, + "created_at": 1719485736.508673, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__create_table_as" @@ -920,19 +962,17 @@ "macro_sql": "{% macro create_table_as(temporary, relation, compiled_code, language='sql') -%}\n {# backward compatibility for create_table_as that does not support language #}\n {% if language == \"sql\" %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code)}}\n {% else %}\n {{ adapter.dispatch('create_table_as', 'dbt')(temporary, relation, compiled_code, language) }}\n {% endif %}\n\n{%- endmacro %}", "meta": {}, "name": "create_table_as", - "original_file_path": "macros/materializations/models/table/create_table_as.sql", + "original_file_path": "macros/relations/table/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/table/create_table_as.sql", + "path": "macros/relations/table/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.create_table_as" }, "macro.dbt.create_view_as": { "arguments": [], - "created_at": 1696458269.731384, + "created_at": 1719485736.515506, "depends_on": { "macros": [ "macro.dbt.default__create_view_as" @@ -946,19 +986,17 @@ "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "meta": {}, "name": "create_view_as", - "original_file_path": "macros/materializations/models/view/create_view_as.sql", + "original_file_path": "macros/relations/view/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/create_view_as.sql", + "path": "macros/relations/view/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.create_view_as" }, "macro.dbt.current_timestamp": { "arguments": [], - "created_at": 1696458269.802294, + "created_at": 1719485736.55921, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__current_timestamp" @@ -977,14 +1015,12 @@ "patch_path": null, "path": "macros/adapters/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.current_timestamp" }, "macro.dbt.current_timestamp_backcompat": { "arguments": [], - "created_at": 1696458269.8032, + "created_at": 1719485736.559824, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__current_timestamp_backcompat" @@ -1003,14 +1039,12 @@ "patch_path": null, "path": "macros/adapters/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.current_timestamp_backcompat" }, "macro.dbt.current_timestamp_in_utc_backcompat": { "arguments": [], - "created_at": 1696458269.803582, + "created_at": 1719485736.5600908, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat" @@ -1029,14 +1063,60 @@ "patch_path": null, "path": "macros/adapters/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.current_timestamp_in_utc_backcompat" }, + "macro.dbt.date": { + "arguments": [], + "created_at": 1719485736.531044, + "depends_on": { + "macros": [ + "macro.dbt.default__date" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro date(year, month, day) %}\n {{ return(adapter.dispatch('date', 'dbt') (year, month, day)) }}\n{% endmacro %}", + "meta": {}, + "name": "date", + "original_file_path": "macros/utils/date.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/date.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.date" + }, + "macro.dbt.date_spine": { + "arguments": [], + "created_at": 1719485736.529869, + "depends_on": { + "macros": [ + "macro.dbt.default__date_spine" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt')(datepart, start_date, end_date)) }}\n{%- endmacro %}", + "meta": {}, + "name": "date_spine", + "original_file_path": "macros/utils/date_spine.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/date_spine.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.date_spine" + }, "macro.dbt.date_trunc": { "arguments": [], - "created_at": 1696458269.797339, + "created_at": 1719485736.55547, "depends_on": { "macros": [ "macro.dbt.default__date_trunc" @@ -1055,14 +1135,12 @@ "patch_path": null, "path": "macros/utils/date_trunc.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.date_trunc" }, "macro.dbt.dateadd": { "arguments": [], - "created_at": 1696458269.776004, + "created_at": 1719485736.5368361, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__dateadd" @@ -1081,14 +1159,12 @@ "patch_path": null, "path": "macros/utils/dateadd.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.dateadd" }, "macro.dbt.datediff": { "arguments": [], - "created_at": 1696458269.781129, + "created_at": 1719485736.5402482, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__datediff" @@ -1107,14 +1183,12 @@ "patch_path": null, "path": "macros/utils/datediff.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.datediff" }, "macro.dbt.dates_in_range": { "arguments": [], - "created_at": 1696458269.7706811, + "created_at": 1719485736.524234, "depends_on": { "macros": [ "macro.dbt.convert_datetime" @@ -1125,7 +1199,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partiton start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", + "macro_sql": "{% macro dates_in_range(start_date_str, end_date_str=none, in_fmt=\"%Y%m%d\", out_fmt=\"%Y%m%d\") %}\n {% set end_date_str = start_date_str if end_date_str is none else end_date_str %}\n\n {% set start_date = convert_datetime(start_date_str, in_fmt) %}\n {% set end_date = convert_datetime(end_date_str, in_fmt) %}\n\n {% set day_count = (end_date - start_date).days %}\n {% if day_count < 0 %}\n {% set msg -%}\n Partition start date is after the end date ({{ start_date }}, {{ end_date }})\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg, model) }}\n {% endif %}\n\n {% set date_list = [] %}\n {% for i in range(0, day_count + 1) %}\n {% set the_date = (modules.datetime.timedelta(days=i) + start_date) %}\n {% if not out_fmt %}\n {% set _ = date_list.append(the_date) %}\n {% else %}\n {% set _ = date_list.append(the_date.strftime(out_fmt)) %}\n {% endif %}\n {% endfor %}\n\n {{ return(date_list) }}\n{% endmacro %}", "meta": {}, "name": "dates_in_range", "original_file_path": "macros/etc/datetime.sql", @@ -1133,14 +1207,12 @@ "patch_path": null, "path": "macros/etc/datetime.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.dates_in_range" }, "macro.dbt.default__alter_column_comment": { "arguments": [], - "created_at": 1696458269.832395, + "created_at": 1719485736.5851688, "depends_on": { "macros": [] }, @@ -1157,14 +1229,12 @@ "patch_path": null, "path": "macros/adapters/persist_docs.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__alter_column_comment" }, "macro.dbt.default__alter_column_type": { "arguments": [], - "created_at": 1696458269.846581, + "created_at": 1719485736.6003149, "depends_on": { "macros": [ "macro.dbt.statement" @@ -1183,14 +1253,12 @@ "patch_path": null, "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__alter_column_type" }, "macro.dbt.default__alter_relation_add_remove_columns": { "arguments": [], - "created_at": 1696458269.848277, + "created_at": 1719485736.601542, "depends_on": { "macros": [ "macro.dbt.run_query" @@ -1209,14 +1277,12 @@ "patch_path": null, "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__alter_relation_add_remove_columns" }, "macro.dbt.default__alter_relation_comment": { "arguments": [], - "created_at": 1696458269.83301, + "created_at": 1719485736.585629, "depends_on": { "macros": [] }, @@ -1233,14 +1299,12 @@ "patch_path": null, "path": "macros/adapters/persist_docs.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__alter_relation_comment" }, "macro.dbt.default__any_value": { "arguments": [], - "created_at": 1696458269.7848792, + "created_at": 1719485736.5430348, "depends_on": { "macros": [] }, @@ -1257,14 +1321,12 @@ "patch_path": null, "path": "macros/utils/any_value.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__any_value" }, "macro.dbt.default__apply_grants": { "arguments": [], - "created_at": 1696458269.830645, + "created_at": 1719485736.580575, "depends_on": { "macros": [ "macro.dbt.run_query", @@ -1286,14 +1348,12 @@ "patch_path": null, "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__apply_grants" }, "macro.dbt.default__array_append": { "arguments": [], - "created_at": 1696458269.7997708, + "created_at": 1719485736.557557, "depends_on": { "macros": [] }, @@ -1310,14 +1370,12 @@ "patch_path": null, "path": "macros/utils/array_append.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__array_append" }, "macro.dbt.default__array_concat": { "arguments": [], - "created_at": 1696458269.792536, + "created_at": 1719485736.552268, "depends_on": { "macros": [] }, @@ -1334,14 +1392,12 @@ "patch_path": null, "path": "macros/utils/array_concat.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__array_concat" }, "macro.dbt.default__array_construct": { "arguments": [], - "created_at": 1696458269.7988842, + "created_at": 1719485736.556629, "depends_on": { "macros": [] }, @@ -1358,14 +1414,12 @@ "patch_path": null, "path": "macros/utils/array_construct.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__array_construct" }, "macro.dbt.default__bool_or": { "arguments": [], - "created_at": 1696458269.793303, + "created_at": 1719485736.552653, "depends_on": { "macros": [] }, @@ -1382,14 +1436,12 @@ "patch_path": null, "path": "macros/utils/bool_or.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__bool_or" }, "macro.dbt.default__build_snapshot_table": { "arguments": [], - "created_at": 1696458269.619839, + "created_at": 1719485736.3577101, "depends_on": { "macros": [] }, @@ -1406,14 +1458,12 @@ "patch_path": null, "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__build_snapshot_table" }, "macro.dbt.default__call_dcl_statements": { "arguments": [], - "created_at": 1696458269.828314, + "created_at": 1719485736.577475, "depends_on": { "macros": [ "macro.dbt.statement" @@ -1432,14 +1482,56 @@ "patch_path": null, "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__call_dcl_statements" }, + "macro.dbt.default__can_clone_table": { + "arguments": [], + "created_at": 1719485736.443028, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__can_clone_table() %}\n {{ return(False) }}\n{% endmacro %}", + "meta": {}, + "name": "default__can_clone_table", + "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/clone/can_clone_table.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__can_clone_table" + }, + "macro.dbt.default__cast": { + "arguments": [], + "created_at": 1719485736.5423732, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__cast(field, type) %}\n cast({{field}} as {{type}})\n{% endmacro %}", + "meta": {}, + "name": "default__cast", + "original_file_path": "macros/utils/cast.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/cast.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__cast" + }, "macro.dbt.default__cast_bool_to_text": { "arguments": [], - "created_at": 1696458269.784034, + "created_at": 1719485736.541875, "depends_on": { "macros": [] }, @@ -1456,14 +1548,12 @@ "patch_path": null, "path": "macros/utils/cast_bool_to_text.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__cast_bool_to_text" }, "macro.dbt.default__check_schema_exists": { "arguments": [], - "created_at": 1696458269.8393972, + "created_at": 1719485736.591805, "depends_on": { "macros": [ "macro.dbt.replace", @@ -1483,14 +1573,12 @@ "patch_path": null, "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__check_schema_exists" }, "macro.dbt.default__collect_freshness": { "arguments": [], - "created_at": 1696458269.820089, + "created_at": 1719485736.569667, "depends_on": { "macros": [ "macro.dbt.statement", @@ -1502,7 +1590,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness').table) }}\n{% endmacro %}", + "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n select\n max({{ loaded_at_field }}) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endcall %}\n {{ return(load_result('collect_freshness')) }}\n{% endmacro %}", "meta": {}, "name": "default__collect_freshness", "original_file_path": "macros/adapters/freshness.sql", @@ -1510,14 +1598,12 @@ "patch_path": null, "path": "macros/adapters/freshness.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__collect_freshness" }, "macro.dbt.default__concat": { "arguments": [], - "created_at": 1696458269.774613, + "created_at": 1719485736.5335412, "depends_on": { "macros": [] }, @@ -1534,14 +1620,12 @@ "patch_path": null, "path": "macros/utils/concat.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__concat" }, "macro.dbt.default__copy_grants": { "arguments": [], - "created_at": 1696458269.823154, + "created_at": 1719485736.5727968, "depends_on": { "macros": [] }, @@ -1558,14 +1642,12 @@ "patch_path": null, "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__copy_grants" }, "macro.dbt.default__create_columns": { "arguments": [], - "created_at": 1696458269.616479, + "created_at": 1719485736.354986, "depends_on": { "macros": [ "macro.dbt.statement" @@ -1584,14 +1666,12 @@ "patch_path": null, "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__create_columns" }, "macro.dbt.default__create_csv_table": { "arguments": [], - "created_at": 1696458269.747761, + "created_at": 1719485736.4600089, "depends_on": { "macros": [ "macro.dbt.statement" @@ -1610,14 +1690,12 @@ "patch_path": null, "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__create_csv_table" }, "macro.dbt.default__create_indexes": { "arguments": [], - "created_at": 1696458269.806336, + "created_at": 1719485736.562071, "depends_on": { "macros": [ "macro.dbt.get_create_index_sql", @@ -1637,14 +1715,34 @@ "patch_path": null, "path": "macros/adapters/indexes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__create_indexes" }, + "macro.dbt.default__create_or_replace_clone": { + "arguments": [], + "created_at": 1719485736.4434948, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__create_or_replace_clone(this_relation, defer_relation) %}\n create or replace table {{ this_relation }} clone {{ defer_relation }}\n{% endmacro %}", + "meta": {}, + "name": "default__create_or_replace_clone", + "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/clone/create_or_replace_clone.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__create_or_replace_clone" + }, "macro.dbt.default__create_schema": { "arguments": [], - "created_at": 1696458269.800829, + "created_at": 1719485736.5583, "depends_on": { "macros": [ "macro.dbt.statement" @@ -1663,62 +1761,62 @@ "patch_path": null, "path": "macros/adapters/schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__create_schema" }, "macro.dbt.default__create_table_as": { "arguments": [], - "created_at": 1696458269.721521, + "created_at": 1719485736.509567, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.get_assert_columns_equivalent", + "macro.dbt.get_table_columns_and_constraints", + "macro.dbt.get_select_subquery" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n as (\n {{ sql }}\n );\n{%- endmacro %}", + "macro_sql": "{% macro default__create_table_as(temporary, relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary: -%}temporary{%- endif %} table\n {{ relation.include(database=(not temporary), schema=(not temporary)) }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced and (not temporary) %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "meta": {}, "name": "default__create_table_as", - "original_file_path": "macros/materializations/models/table/create_table_as.sql", + "original_file_path": "macros/relations/table/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/table/create_table_as.sql", + "path": "macros/relations/table/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__create_table_as" }, "macro.dbt.default__create_view_as": { "arguments": [], - "created_at": 1696458269.7317991, + "created_at": 1719485736.515955, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.get_assert_columns_equivalent" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation }} as (\n {{ sql }}\n );\n{%- endmacro %}", + "macro_sql": "{% macro default__create_view_as(relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n create view {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n{%- endmacro %}", "meta": {}, "name": "default__create_view_as", - "original_file_path": "macros/materializations/models/view/create_view_as.sql", + "original_file_path": "macros/relations/view/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/create_view_as.sql", + "path": "macros/relations/view/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__create_view_as" }, "macro.dbt.default__current_timestamp": { "arguments": [], - "created_at": 1696458269.802537, + "created_at": 1719485736.5593758, "depends_on": { "macros": [] }, @@ -1735,14 +1833,12 @@ "patch_path": null, "path": "macros/adapters/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__current_timestamp" }, "macro.dbt.default__current_timestamp_backcompat": { "arguments": [], - "created_at": 1696458269.8033202, + "created_at": 1719485736.559911, "depends_on": { "macros": [] }, @@ -1759,14 +1855,12 @@ "patch_path": null, "path": "macros/adapters/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__current_timestamp_backcompat" }, "macro.dbt.default__current_timestamp_in_utc_backcompat": { "arguments": [], - "created_at": 1696458269.803849, + "created_at": 1719485736.560272, "depends_on": { "macros": [ "macro.dbt.current_timestamp_backcompat", @@ -1786,14 +1880,60 @@ "patch_path": null, "path": "macros/adapters/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__current_timestamp_in_utc_backcompat" }, + "macro.dbt.default__date": { + "arguments": [], + "created_at": 1719485736.531544, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__date(year, month, day) -%}\n {%- set dt = modules.datetime.date(year, month, day) -%}\n {%- set iso_8601_formatted_date = dt.strftime('%Y-%m-%d') -%}\n to_date('{{ iso_8601_formatted_date }}', 'YYYY-MM-DD')\n{%- endmacro %}", + "meta": {}, + "name": "default__date", + "original_file_path": "macros/utils/date.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/date.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__date" + }, + "macro.dbt.default__date_spine": { + "arguments": [], + "created_at": 1719485736.53054, + "depends_on": { + "macros": [ + "macro.dbt.generate_series", + "macro.dbt.get_intervals_between", + "macro.dbt.dateadd" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n {# call as follows:\n\n date_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n ) #}\n\n\n with rawdata as (\n\n {{dbt.generate_series(\n dbt.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n ),\n\n all_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n \"row_number() over (order by 1) - 1\",\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\n\n ),\n\n filtered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n )\n\n select * from filtered\n\n{% endmacro %}", + "meta": {}, + "name": "default__date_spine", + "original_file_path": "macros/utils/date_spine.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/date_spine.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__date_spine" + }, "macro.dbt.default__date_trunc": { "arguments": [], - "created_at": 1696458269.7975512, + "created_at": 1719485736.555618, "depends_on": { "macros": [] }, @@ -1810,14 +1950,12 @@ "patch_path": null, "path": "macros/utils/date_trunc.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__date_trunc" }, "macro.dbt.default__dateadd": { "arguments": [], - "created_at": 1696458269.7762759, + "created_at": 1719485736.537018, "depends_on": { "macros": [] }, @@ -1834,14 +1972,12 @@ "patch_path": null, "path": "macros/utils/dateadd.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__dateadd" }, "macro.dbt.default__datediff": { "arguments": [], - "created_at": 1696458269.7814112, + "created_at": 1719485736.540429, "depends_on": { "macros": [] }, @@ -1858,17 +1994,38 @@ "patch_path": null, "path": "macros/utils/datediff.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__datediff" }, + "macro.dbt.default__drop_materialized_view": { + "arguments": [], + "created_at": 1719485736.4865391, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation }} cascade\n{%- endmacro %}", + "meta": {}, + "name": "default__drop_materialized_view", + "original_file_path": "macros/relations/materialized_view/drop.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/materialized_view/drop.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__drop_materialized_view" + }, "macro.dbt.default__drop_relation": { "arguments": [], - "created_at": 1696458269.8147898, + "created_at": 1719485736.4714549, "depends_on": { "macros": [ - "macro.dbt.statement" + "macro.dbt.statement", + "macro.dbt.get_drop_sql" ] }, "description": "", @@ -1876,22 +2033,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n drop {{ relation.type }} if exists {{ relation }} cascade\n {%- endcall %}\n{% endmacro %}", + "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n {{ get_drop_sql(relation) }}\n {%- endcall %}\n{% endmacro %}", "meta": {}, "name": "default__drop_relation", - "original_file_path": "macros/adapters/relation.sql", + "original_file_path": "macros/relations/drop.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/relations/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__drop_relation" }, "macro.dbt.default__drop_schema": { "arguments": [], - "created_at": 1696458269.8013818, + "created_at": 1719485736.558672, "depends_on": { "macros": [ "macro.dbt.statement" @@ -1910,14 +2065,78 @@ "patch_path": null, "path": "macros/adapters/schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__drop_schema" }, + "macro.dbt.default__drop_schema_named": { + "arguments": [], + "created_at": 1719485736.476362, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__drop_schema_named(schema_name) %}\n {% set schema_relation = api.Relation.create(schema=schema_name) %}\n {{ adapter.drop_schema(schema_relation) }}\n{% endmacro %}", + "meta": {}, + "name": "default__drop_schema_named", + "original_file_path": "macros/relations/schema.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/schema.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__drop_schema_named" + }, + "macro.dbt.default__drop_table": { + "arguments": [], + "created_at": 1719485736.505599, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__drop_table(relation) -%}\n drop table if exists {{ relation }} cascade\n{%- endmacro %}", + "meta": {}, + "name": "default__drop_table", + "original_file_path": "macros/relations/table/drop.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/table/drop.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__drop_table" + }, + "macro.dbt.default__drop_view": { + "arguments": [], + "created_at": 1719485736.511198, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__drop_view(relation) -%}\n drop view if exists {{ relation }} cascade\n{%- endmacro %}", + "meta": {}, + "name": "default__drop_view", + "original_file_path": "macros/relations/view/drop.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/view/drop.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__drop_view" + }, "macro.dbt.default__escape_single_quotes": { "arguments": [], - "created_at": 1696458269.777675, + "created_at": 1719485736.538025, "depends_on": { "macros": [] }, @@ -1934,14 +2153,12 @@ "patch_path": null, "path": "macros/utils/escape_single_quotes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__escape_single_quotes" }, "macro.dbt.default__except": { "arguments": [], - "created_at": 1696458269.7729568, + "created_at": 1719485736.526438, "depends_on": { "macros": [] }, @@ -1958,14 +2175,34 @@ "patch_path": null, "path": "macros/utils/except.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__except" }, + "macro.dbt.default__format_column": { + "arguments": [], + "created_at": 1719485736.504833, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__format_column(column) -%}\n {% set data_type = column.dtype %}\n {% set formatted = column.column.lower() ~ \" \" ~ data_type %}\n {{ return({'name': column.name, 'data_type': data_type, 'formatted': formatted}) }}\n{%- endmacro -%}", + "meta": {}, + "name": "default__format_column", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/column/columns_spec_ddl.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__format_column" + }, "macro.dbt.default__generate_alias_name": { "arguments": [], - "created_at": 1696458269.7549078, + "created_at": 1719485736.466625, "depends_on": { "macros": [] }, @@ -1974,7 +2211,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name is none -%}\n\n {{ node.name }}\n\n {%- else -%}\n\n {{ custom_alias_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", + "macro_sql": "{% macro default__generate_alias_name(custom_alias_name=none, node=none) -%}\n\n {%- if custom_alias_name -%}\n\n {{ custom_alias_name | trim }}\n\n {%- elif node.version -%}\n\n {{ return(node.name ~ \"_v\" ~ (node.version | replace(\".\", \"_\"))) }}\n\n {%- else -%}\n\n {{ node.name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "meta": {}, "name": "default__generate_alias_name", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", @@ -1982,14 +2219,12 @@ "patch_path": null, "path": "macros/get_custom_name/get_custom_alias.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__generate_alias_name" }, "macro.dbt.default__generate_database_name": { "arguments": [], - "created_at": 1696458269.758259, + "created_at": 1719485736.469049, "depends_on": { "macros": [] }, @@ -2006,14 +2241,12 @@ "patch_path": null, "path": "macros/get_custom_name/get_custom_database.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__generate_database_name" }, "macro.dbt.default__generate_schema_name": { "arguments": [], - "created_at": 1696458269.756475, + "created_at": 1719485736.4677172, "depends_on": { "macros": [] }, @@ -2030,14 +2263,82 @@ "patch_path": null, "path": "macros/get_custom_name/get_custom_schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__generate_schema_name" }, + "macro.dbt.default__generate_series": { + "arguments": [], + "created_at": 1719485736.535907, + "depends_on": { + "macros": [ + "macro.dbt.get_powers_of_two" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt.get_powers_of_two(upper_bound) %}\n\n with p as (\n select 0 as generated_number union all select 1\n ), unioned as (\n\n select\n\n {% for i in range(n) %}\n p{{i}}.generated_number * power(2, {{i}})\n {% if not loop.last %} + {% endif %}\n {% endfor %}\n + 1\n as generated_number\n\n from\n\n {% for i in range(n) %}\n p as p{{i}}\n {% if not loop.last %} cross join {% endif %}\n {% endfor %}\n\n )\n\n select *\n from unioned\n where generated_number <= {{upper_bound}}\n order by generated_number\n\n{% endmacro %}", + "meta": {}, + "name": "default__generate_series", + "original_file_path": "macros/utils/generate_series.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/generate_series.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__generate_series" + }, + "macro.dbt.default__get_alter_materialized_view_as_sql": { + "arguments": [], + "created_at": 1719485736.4936142, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", + "meta": {}, + "name": "default__get_alter_materialized_view_as_sql", + "original_file_path": "macros/relations/materialized_view/alter.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/materialized_view/alter.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_alter_materialized_view_as_sql" + }, + "macro.dbt.default__get_assert_columns_equivalent": { + "arguments": [], + "created_at": 1719485736.501285, + "depends_on": { + "macros": [ + "macro.dbt.assert_columns_equivalent" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_assert_columns_equivalent(sql) -%}\n {{ return(assert_columns_equivalent(sql)) }}\n{%- endmacro %}", + "meta": {}, + "name": "default__get_assert_columns_equivalent", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/column/columns_spec_ddl.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_assert_columns_equivalent" + }, "macro.dbt.default__get_batch_size": { "arguments": [], - "created_at": 1696458269.750355, + "created_at": 1719485736.4618182, "depends_on": { "macros": [] }, @@ -2054,14 +2355,12 @@ "patch_path": null, "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_batch_size" }, "macro.dbt.default__get_binding_char": { "arguments": [], - "created_at": 1696458269.749901, + "created_at": 1719485736.461474, "depends_on": { "macros": [] }, @@ -2078,14 +2377,12 @@ "patch_path": null, "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_binding_char" }, "macro.dbt.default__get_catalog": { "arguments": [], - "created_at": 1696458269.8372722, + "created_at": 1719485736.590454, "depends_on": { "macros": [] }, @@ -2102,17 +2399,60 @@ "patch_path": null, "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_catalog" }, + "macro.dbt.default__get_catalog_relations": { + "arguments": [], + "created_at": 1719485736.589964, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_catalog_relations(information_schema, relations) -%}\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog_relations not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{%- endmacro %}", + "meta": {}, + "name": "default__get_catalog_relations", + "original_file_path": "macros/adapters/metadata.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/metadata.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_catalog_relations" + }, + "macro.dbt.default__get_column_names": { + "arguments": [], + "created_at": 1719485736.5100741, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_column_names() %}\n {#- loop through user_provided_columns to get column names -#}\n {%- set user_provided_columns = model['columns'] -%}\n {%- for i in user_provided_columns %}\n {%- set col = user_provided_columns[i] -%}\n {%- set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] -%}\n {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n{% endmacro %}", + "meta": {}, + "name": "default__get_column_names", + "original_file_path": "macros/relations/table/create.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/table/create.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_column_names" + }, "macro.dbt.default__get_columns_in_query": { "arguments": [], - "created_at": 1696458269.8452191, + "created_at": 1719485736.599448, "depends_on": { "macros": [ - "macro.dbt.statement" + "macro.dbt.statement", + "macro.dbt.get_empty_subquery_sql" ] }, "description": "", @@ -2120,7 +2460,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n {% endcall %}\n\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", + "macro_sql": "{% macro default__get_columns_in_query(select_sql) %}\n {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n {{ get_empty_subquery_sql(select_sql) }}\n {% endcall %}\n {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}", "meta": {}, "name": "default__get_columns_in_query", "original_file_path": "macros/adapters/columns.sql", @@ -2128,14 +2468,12 @@ "patch_path": null, "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_columns_in_query" }, "macro.dbt.default__get_columns_in_relation": { "arguments": [], - "created_at": 1696458269.843777, + "created_at": 1719485736.59628, "depends_on": { "macros": [] }, @@ -2152,14 +2490,38 @@ "patch_path": null, "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_columns_in_relation" }, + "macro.dbt.default__get_create_backup_sql": { + "arguments": [], + "created_at": 1719485736.47981, + "depends_on": { + "macros": [ + "macro.dbt.make_backup_relation", + "macro.dbt.get_drop_sql", + "macro.dbt.get_rename_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- macro default__get_create_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n -- drop any pre-existing backup\n {{ get_drop_sql(backup_relation) }};\n\n {{ get_rename_sql(relation, backup_relation.identifier) }}\n\n{%- endmacro -%}", + "meta": {}, + "name": "default__get_create_backup_sql", + "original_file_path": "macros/relations/create_backup.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/create_backup.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_create_backup_sql" + }, "macro.dbt.default__get_create_index_sql": { "arguments": [], - "created_at": 1696458269.805347, + "created_at": 1719485736.561354, "depends_on": { "macros": [] }, @@ -2176,14 +2538,86 @@ "patch_path": null, "path": "macros/adapters/indexes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_create_index_sql" }, + "macro.dbt.default__get_create_intermediate_sql": { + "arguments": [], + "created_at": 1719485736.475838, + "depends_on": { + "macros": [ + "macro.dbt.make_intermediate_relation", + "macro.dbt.get_drop_sql", + "macro.dbt.get_create_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- macro default__get_create_intermediate_sql(relation, sql) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n -- drop any pre-existing intermediate\n {{ get_drop_sql(intermediate_relation) }};\n\n {{ get_create_sql(intermediate_relation, sql) }}\n\n{%- endmacro -%}", + "meta": {}, + "name": "default__get_create_intermediate_sql", + "original_file_path": "macros/relations/create_intermediate.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/create_intermediate.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_create_intermediate_sql" + }, + "macro.dbt.default__get_create_materialized_view_as_sql": { + "arguments": [], + "created_at": 1719485736.494792, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_create_materialized_view_as_sql(relation, sql) -%}\n {{ exceptions.raise_compiler_error(\n \"`get_create_materialized_view_as_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", + "meta": {}, + "name": "default__get_create_materialized_view_as_sql", + "original_file_path": "macros/relations/materialized_view/create.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/materialized_view/create.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_create_materialized_view_as_sql" + }, + "macro.dbt.default__get_create_sql": { + "arguments": [], + "created_at": 1719485736.483476, + "depends_on": { + "macros": [ + "macro.dbt.get_create_view_as_sql", + "macro.dbt.get_create_table_as_sql", + "macro.dbt.get_create_materialized_view_as_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- macro default__get_create_sql(relation, sql) -%}\n\n {%- if relation.is_view -%}\n {{ get_create_view_as_sql(relation, sql) }}\n\n {%- elif relation.is_table -%}\n {{ get_create_table_as_sql(False, relation, sql) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_create_materialized_view_as_sql(relation, sql) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_create_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}", + "meta": {}, + "name": "default__get_create_sql", + "original_file_path": "macros/relations/create.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/create.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_create_sql" + }, "macro.dbt.default__get_create_table_as_sql": { "arguments": [], - "created_at": 1696458269.720119, + "created_at": 1719485736.508211, "depends_on": { "macros": [ "macro.dbt.create_table_as" @@ -2197,19 +2631,17 @@ "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "meta": {}, "name": "default__get_create_table_as_sql", - "original_file_path": "macros/materializations/models/table/create_table_as.sql", + "original_file_path": "macros/relations/table/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/table/create_table_as.sql", + "path": "macros/relations/table/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_create_table_as_sql" }, "macro.dbt.default__get_create_view_as_sql": { "arguments": [], - "created_at": 1696458269.7310889, + "created_at": 1719485736.515317, "depends_on": { "macros": [ "macro.dbt.create_view_as" @@ -2223,19 +2655,17 @@ "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "meta": {}, "name": "default__get_create_view_as_sql", - "original_file_path": "macros/materializations/models/view/create_view_as.sql", + "original_file_path": "macros/relations/view/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/create_view_as.sql", + "path": "macros/relations/view/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_create_view_as_sql" }, "macro.dbt.default__get_csv_sql": { "arguments": [], - "created_at": 1696458269.749481, + "created_at": 1719485736.461133, "depends_on": { "macros": [] }, @@ -2252,14 +2682,12 @@ "patch_path": null, "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_csv_sql" }, "macro.dbt.default__get_dcl_statement_list": { "arguments": [], - "created_at": 1696458269.827488, + "created_at": 1719485736.5756311, "depends_on": { "macros": [ "macro.dbt.support_multiple_grantees_per_dcl_statement" @@ -2278,14 +2706,12 @@ "patch_path": null, "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_dcl_statement_list" }, "macro.dbt.default__get_delete_insert_merge_sql": { "arguments": [], - "created_at": 1696458269.6825862, + "created_at": 1719485736.415282, "depends_on": { "macros": [ "macro.dbt.get_quoted_csv" @@ -2296,7 +2722,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not string %}\n delete from {{target }}\n using {{ source }}\n where (\n {% for key in unique_key %}\n {{ source }}.{{ key }} = {{ target }}.{{ key }}\n {{ \"and \" if not loop.last }}\n {% endfor %}\n );\n {% else %}\n delete from {{ target }}\n where (\n {{ unique_key }}) in (\n select ({{ unique_key }})\n from {{ source }}\n );\n\n {% endif %}\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", + "macro_sql": "{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not string %}\n delete from {{target }}\n using {{ source }}\n where (\n {% for key in unique_key %}\n {{ source }}.{{ key }} = {{ target }}.{{ key }}\n {{ \"and \" if not loop.last}}\n {% endfor %}\n {% if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {% endif %}\n );\n {% else %}\n delete from {{ target }}\n where (\n {{ unique_key }}) in (\n select ({{ unique_key }})\n from {{ source }}\n )\n {%- if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {%- endif -%};\n\n {% endif %}\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "meta": {}, "name": "default__get_delete_insert_merge_sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", @@ -2304,38 +2730,153 @@ "patch_path": null, "path": "macros/materializations/models/incremental/merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_delete_insert_merge_sql" }, - "macro.dbt.default__get_grant_sql": { + "macro.dbt.default__get_drop_backup_sql": { "arguments": [], - "created_at": 1696458269.825314, + "created_at": 1719485736.476908, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.make_backup_relation", + "macro.dbt.get_drop_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro default__get_grant_sql(relation, privilege, grantees) -%}\n grant {{ privilege }} on {{ relation }} to {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", + "macro_sql": "{%- macro default__get_drop_backup_sql(relation) -%}\n\n -- get the standard backup name\n {% set backup_relation = make_backup_relation(relation, relation.type) %}\n\n {{ get_drop_sql(backup_relation) }}\n\n{%- endmacro -%}", "meta": {}, - "name": "default__get_grant_sql", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "default__get_drop_backup_sql", + "original_file_path": "macros/relations/drop_backup.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/relations/drop_backup.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_drop_backup_sql" + }, + "macro.dbt.default__get_drop_index_sql": { + "arguments": [], + "created_at": 1719485736.562772, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_drop_index_sql(relation, index_name) -%}\n {{ exceptions.raise_compiler_error(\"`get_drop_index_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", + "meta": {}, + "name": "default__get_drop_index_sql", + "original_file_path": "macros/adapters/indexes.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/indexes.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_drop_index_sql" + }, + "macro.dbt.default__get_drop_sql": { + "arguments": [], + "created_at": 1719485736.471034, + "depends_on": { + "macros": [ + "macro.dbt.drop_view", + "macro.dbt.drop_table", + "macro.dbt.drop_materialized_view" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- macro default__get_drop_sql(relation) -%}\n\n {%- if relation.is_view -%}\n {{ drop_view(relation) }}\n\n {%- elif relation.is_table -%}\n {{ drop_table(relation) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ drop_materialized_view(relation) }}\n\n {%- else -%}\n drop {{ relation.type }} if exists {{ relation }} cascade\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", + "meta": {}, + "name": "default__get_drop_sql", + "original_file_path": "macros/relations/drop.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/drop.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_drop_sql" + }, + "macro.dbt.default__get_empty_schema_sql": { + "arguments": [], + "created_at": 1719485736.5985012, + "depends_on": { + "macros": [ + "macro.dbt.cast" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_empty_schema_sql(columns) %}\n {%- set col_err = [] -%}\n {%- set col_naked_numeric = [] -%}\n select\n {% for i in columns %}\n {%- set col = columns[i] -%}\n {%- if col['data_type'] is not defined -%}\n {%- do col_err.append(col['name']) -%}\n {#-- If this column's type is just 'numeric' then it is missing precision/scale, raise a warning --#}\n {%- elif col['data_type'].strip().lower() in ('numeric', 'decimal', 'number') -%}\n {%- do col_naked_numeric.append(col['name']) -%}\n {%- endif -%}\n {% set col_name = adapter.quote(col['name']) if col.get('quote') else col['name'] %}\n {{ cast('null', col['data_type']) }} as {{ col_name }}{{ \", \" if not loop.last }}\n {%- endfor -%}\n {%- if (col_err | length) > 0 -%}\n {{ exceptions.column_type_missing(column_names=col_err) }}\n {%- elif (col_naked_numeric | length) > 0 -%}\n {{ exceptions.warn(\"Detected columns with numeric type and unspecified precision/scale, this can lead to unintended rounding: \" ~ col_naked_numeric ~ \"`\") }}\n {%- endif -%}\n{% endmacro %}", + "meta": {}, + "name": "default__get_empty_schema_sql", + "original_file_path": "macros/adapters/columns.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/columns.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_empty_schema_sql" + }, + "macro.dbt.default__get_empty_subquery_sql": { + "arguments": [], + "created_at": 1719485736.597066, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_empty_subquery_sql(select_sql, select_sql_header=none) %}\n {%- if select_sql_header is not none -%}\n {{ select_sql_header }}\n {%- endif -%}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n{% endmacro %}", + "meta": {}, + "name": "default__get_empty_subquery_sql", + "original_file_path": "macros/adapters/columns.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/columns.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_empty_subquery_sql" + }, + "macro.dbt.default__get_grant_sql": { + "arguments": [], + "created_at": 1719485736.5742211, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro default__get_grant_sql(relation, privilege, grantees) -%}\n grant {{ privilege }} on {{ relation }} to {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", + "meta": {}, + "name": "default__get_grant_sql", + "original_file_path": "macros/adapters/apply_grants.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_grant_sql" }, "macro.dbt.default__get_incremental_append_sql": { "arguments": [], - "created_at": 1696458269.687379, + "created_at": 1719485736.418623, "depends_on": { "macros": [ "macro.dbt.get_insert_into_sql" @@ -2354,14 +2895,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_incremental_append_sql" }, "macro.dbt.default__get_incremental_default_sql": { "arguments": [], - "created_at": 1696458269.690251, + "created_at": 1719485736.4215739, "depends_on": { "macros": [ "macro.dbt.get_incremental_append_sql" @@ -2380,14 +2919,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_incremental_default_sql" }, "macro.dbt.default__get_incremental_delete_insert_sql": { "arguments": [], - "created_at": 1696458269.688123, + "created_at": 1719485736.419171, "depends_on": { "macros": [ "macro.dbt.get_delete_insert_merge_sql" @@ -2398,7 +2935,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_incremental_delete_insert_sql(arg_dict) %}\n\n {% do return(get_delete_insert_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", + "macro_sql": "{% macro default__get_incremental_delete_insert_sql(arg_dict) %}\n\n {% do return(get_delete_insert_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "meta": {}, "name": "default__get_incremental_delete_insert_sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", @@ -2406,14 +2943,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_incremental_delete_insert_sql" }, "macro.dbt.default__get_incremental_insert_overwrite_sql": { "arguments": [], - "created_at": 1696458269.689686, + "created_at": 1719485736.421212, "depends_on": { "macros": [ "macro.dbt.get_insert_overwrite_merge_sql" @@ -2424,7 +2959,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {% do return(get_insert_overwrite_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"], arg_dict[\"predicates\"])) %}\n\n{% endmacro %}", + "macro_sql": "{% macro default__get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {% do return(get_insert_overwrite_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "meta": {}, "name": "default__get_incremental_insert_overwrite_sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", @@ -2432,14 +2967,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_incremental_insert_overwrite_sql" }, "macro.dbt.default__get_incremental_merge_sql": { "arguments": [], - "created_at": 1696458269.6889029, + "created_at": 1719485736.420272, "depends_on": { "macros": [ "macro.dbt.get_merge_sql" @@ -2450,7 +2983,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_incremental_merge_sql(arg_dict) %}\n\n {% do return(get_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", + "macro_sql": "{% macro default__get_incremental_merge_sql(arg_dict) %}\n\n {% do return(get_merge_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"unique_key\"], arg_dict[\"dest_columns\"], arg_dict[\"incremental_predicates\"])) %}\n\n{% endmacro %}", "meta": {}, "name": "default__get_incremental_merge_sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", @@ -2458,14 +2991,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_incremental_merge_sql" }, "macro.dbt.default__get_insert_overwrite_merge_sql": { "arguments": [], - "created_at": 1696458269.684117, + "created_at": 1719485736.416304, "depends_on": { "macros": [ "macro.dbt.get_quoted_csv" @@ -2484,14 +3015,81 @@ "patch_path": null, "path": "macros/materializations/models/incremental/merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql" }, + "macro.dbt.default__get_intervals_between": { + "arguments": [], + "created_at": 1719485736.5290911, + "depends_on": { + "macros": [ + "macro.dbt.statement", + "macro.dbt.datediff" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_intervals_between(start_date, end_date, datepart) -%}\n {%- call statement('get_intervals_between', fetch_result=True) %}\n\n select {{ dbt.datediff(start_date, end_date, datepart) }}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_intervals_between') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values[0]) }}\n {%- else -%}\n {{ return(1) }}\n {%- endif -%}\n\n{%- endmacro %}", + "meta": {}, + "name": "default__get_intervals_between", + "original_file_path": "macros/utils/date_spine.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/date_spine.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_intervals_between" + }, + "macro.dbt.default__get_limit_subquery_sql": { + "arguments": [], + "created_at": 1719485736.581942, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_limit_subquery_sql(sql, limit) %}\n select *\n from (\n {{ sql }}\n ) as model_limit_subq\n limit {{ limit }}\n{% endmacro %}", + "meta": {}, + "name": "default__get_limit_subquery_sql", + "original_file_path": "macros/adapters/show.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/show.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_limit_subquery_sql" + }, + "macro.dbt.default__get_materialized_view_configuration_changes": { + "arguments": [], + "created_at": 1719485736.4943428, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro default__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {{ exceptions.raise_compiler_error(\"Materialized views have not been implemented for this adapter.\") }}\n{% endmacro %}", + "meta": {}, + "name": "default__get_materialized_view_configuration_changes", + "original_file_path": "macros/relations/materialized_view/alter.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/materialized_view/alter.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.default__get_materialized_view_configuration_changes" + }, "macro.dbt.default__get_merge_sql": { "arguments": [], - "created_at": 1696458269.680794, + "created_at": 1719485736.413476, "depends_on": { "macros": [ "macro.dbt.get_quoted_csv", @@ -2503,7 +3101,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, predicates) -%}\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set merge_update_columns = config.get('merge_update_columns') -%}\n {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%}\n {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not mapping and unique_key is not string %}\n {% for key in unique_key %}\n {% set this_key_match %}\n DBT_INTERNAL_SOURCE.{{ key }} = DBT_INTERNAL_DEST.{{ key }}\n {% endset %}\n {% do predicates.append(this_key_match) %}\n {% endfor %}\n {% else %}\n {% set unique_key_match %}\n DBT_INTERNAL_SOURCE.{{ unique_key }} = DBT_INTERNAL_DEST.{{ unique_key }}\n {% endset %}\n {% do predicates.append(unique_key_match) %}\n {% endif %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{ predicates | join(' and ') }}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", + "macro_sql": "{% macro default__get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n {%- set predicates = [] if incremental_predicates is none else [] + incremental_predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set merge_update_columns = config.get('merge_update_columns') -%}\n {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%}\n {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {% if unique_key %}\n {% if unique_key is sequence and unique_key is not mapping and unique_key is not string %}\n {% for key in unique_key %}\n {% set this_key_match %}\n DBT_INTERNAL_SOURCE.{{ key }} = DBT_INTERNAL_DEST.{{ key }}\n {% endset %}\n {% do predicates.append(this_key_match) %}\n {% endfor %}\n {% else %}\n {% set unique_key_match %}\n DBT_INTERNAL_SOURCE.{{ unique_key }} = DBT_INTERNAL_DEST.{{ unique_key }}\n {% endset %}\n {% do predicates.append(unique_key_match) %}\n {% endif %}\n {% else %}\n {% do predicates.append('FALSE') %}\n {% endif %}\n\n {{ sql_header if sql_header is not none }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on {{\"(\" ~ predicates | join(\") and (\") ~ \")\"}}\n\n {% if unique_key %}\n when matched then update set\n {% for column_name in update_columns -%}\n {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n {% endif %}\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "meta": {}, "name": "default__get_merge_sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", @@ -2511,14 +3109,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_merge_sql" }, "macro.dbt.default__get_merge_update_columns": { "arguments": [], - "created_at": 1696458269.67032, + "created_at": 1719485736.399054, "depends_on": { "macros": [] }, @@ -2535,14 +3131,12 @@ "patch_path": null, "path": "macros/materializations/models/incremental/column_helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_merge_update_columns" }, "macro.dbt.default__get_or_create_relation": { "arguments": [], - "created_at": 1696458269.817579, + "created_at": 1719485736.568331, "depends_on": { "macros": [] }, @@ -2559,14 +3153,12 @@ "patch_path": null, "path": "macros/adapters/relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt.default__get_or_create_relation" }, - "macro.dbt.default__get_revoke_sql": { + "macro.dbt.default__get_powers_of_two": { "arguments": [], - "created_at": 1696458269.8259919, + "created_at": 1719485736.534994, "depends_on": { "macros": [] }, @@ -2575,22 +3167,20 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro default__get_revoke_sql(relation, privilege, grantees) -%}\n revoke {{ privilege }} on {{ relation }} from {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", + "macro_sql": "{% macro default__get_powers_of_two(upper_bound) %}\n\n {% if upper_bound <= 0 %}\n {{ exceptions.raise_compiler_error(\"upper bound must be positive\") }}\n {% endif %}\n\n {% for _ in range(1, 100) %}\n {% if upper_bound <= 2 ** loop.index %}{{ return(loop.index) }}{% endif %}\n {% endfor %}\n\n{% endmacro %}", "meta": {}, - "name": "default__get_revoke_sql", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "default__get_powers_of_two", + "original_file_path": "macros/utils/generate_series.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/utils/generate_series.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__get_revoke_sql" + "unique_id": "macro.dbt.default__get_powers_of_two" }, - "macro.dbt.default__get_show_grant_sql": { + "macro.dbt.default__get_relation_last_modified": { "arguments": [], - "created_at": 1696458269.824637, + "created_at": 1719485736.5935519, "depends_on": { "macros": [] }, @@ -2599,22 +3189,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation }}\n{% endmacro %}", + "macro_sql": "{% macro default__get_relation_last_modified(information_schema, relations) %}\n {{ exceptions.raise_not_implemented(\n 'get_relation_last_modified macro not implemented for adapter ' + adapter.type()) }}\n{% endmacro %}", "meta": {}, - "name": "default__get_show_grant_sql", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "default__get_relation_last_modified", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__get_show_grant_sql" + "unique_id": "macro.dbt.default__get_relation_last_modified" }, - "macro.dbt.default__get_test_sql": { + "macro.dbt.default__get_relations": { "arguments": [], - "created_at": 1696458269.662534, + "created_at": 1719485736.592618, "depends_on": { "macros": [] }, @@ -2623,46 +3211,45 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", + "macro_sql": "{% macro default__get_relations() %}\n {{ exceptions.raise_not_implemented(\n 'get_relations macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "meta": {}, - "name": "default__get_test_sql", - "original_file_path": "macros/materializations/tests/helpers.sql", + "name": "default__get_relations", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/tests/helpers.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__get_test_sql" + "unique_id": "macro.dbt.default__get_relations" }, - "macro.dbt.default__get_true_sql": { + "macro.dbt.default__get_rename_intermediate_sql": { "arguments": [], - "created_at": 1696458269.6173341, + "created_at": 1719485736.485399, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.make_intermediate_relation", + "macro.dbt.get_rename_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", + "macro_sql": "{%- macro default__get_rename_intermediate_sql(relation) -%}\n\n -- get the standard intermediate name\n {% set intermediate_relation = make_intermediate_relation(relation) %}\n\n {{ get_rename_sql(intermediate_relation, relation.identifier) }}\n\n{%- endmacro -%}", "meta": {}, - "name": "default__get_true_sql", - "original_file_path": "macros/materializations/snapshots/helpers.sql", + "name": "default__get_rename_intermediate_sql", + "original_file_path": "macros/relations/rename_intermediate.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/helpers.sql", + "path": "macros/relations/rename_intermediate.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__get_true_sql" + "unique_id": "macro.dbt.default__get_rename_intermediate_sql" }, - "macro.dbt.default__get_where_subquery": { + "macro.dbt.default__get_rename_materialized_view_sql": { "arguments": [], - "created_at": 1696458269.6639218, + "created_at": 1719485736.491203, "depends_on": { "macros": [] }, @@ -2671,46 +3258,46 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", + "macro_sql": "{% macro default__get_rename_materialized_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "meta": {}, - "name": "default__get_where_subquery", - "original_file_path": "macros/materializations/tests/where_subquery.sql", + "name": "default__get_rename_materialized_view_sql", + "original_file_path": "macros/relations/materialized_view/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/tests/where_subquery.sql", + "path": "macros/relations/materialized_view/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__get_where_subquery" + "unique_id": "macro.dbt.default__get_rename_materialized_view_sql" }, - "macro.dbt.default__handle_existing_table": { + "macro.dbt.default__get_rename_sql": { "arguments": [], - "created_at": 1696458269.727338, + "created_at": 1719485736.4781098, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.get_rename_view_sql", + "macro.dbt.get_rename_table_sql", + "macro.dbt.get_rename_materialized_view_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", + "macro_sql": "{%- macro default__get_rename_sql(relation, new_name) -%}\n\n {%- if relation.is_view -%}\n {{ get_rename_view_sql(relation, new_name) }}\n\n {%- elif relation.is_table -%}\n {{ get_rename_table_sql(relation, new_name) }}\n\n {%- elif relation.is_materialized_view -%}\n {{ get_rename_materialized_view_sql(relation, new_name) }}\n\n {%- else -%}\n {{- exceptions.raise_compiler_error(\"`get_rename_sql` has not been implemented for: \" ~ relation.type ) -}}\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "default__handle_existing_table", - "original_file_path": "macros/materializations/models/view/helpers.sql", + "name": "default__get_rename_sql", + "original_file_path": "macros/relations/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/helpers.sql", + "path": "macros/relations/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__handle_existing_table" + "unique_id": "macro.dbt.default__get_rename_sql" }, - "macro.dbt.default__hash": { + "macro.dbt.default__get_rename_table_sql": { "arguments": [], - "created_at": 1696458269.783129, + "created_at": 1719485736.507071, "depends_on": { "macros": [] }, @@ -2719,22 +3306,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", + "macro_sql": "{% macro default__get_rename_table_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "meta": {}, - "name": "default__hash", - "original_file_path": "macros/utils/hash.sql", + "name": "default__get_rename_table_sql", + "original_file_path": "macros/relations/table/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/hash.sql", + "path": "macros/relations/table/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__hash" + "unique_id": "macro.dbt.default__get_rename_table_sql" }, - "macro.dbt.default__information_schema_name": { + "macro.dbt.default__get_rename_view_sql": { "arguments": [], - "created_at": 1696458269.8378282, + "created_at": 1719485736.514697, "depends_on": { "macros": [] }, @@ -2743,22 +3328,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", + "macro_sql": "{% macro default__get_rename_view_sql(relation, new_name) %}\n {{ exceptions.raise_compiler_error(\n \"`get_rename_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "meta": {}, - "name": "default__information_schema_name", - "original_file_path": "macros/adapters/metadata.sql", + "name": "default__get_rename_view_sql", + "original_file_path": "macros/relations/view/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/metadata.sql", + "path": "macros/relations/view/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__information_schema_name" + "unique_id": "macro.dbt.default__get_rename_view_sql" }, - "macro.dbt.default__intersect": { + "macro.dbt.default__get_replace_materialized_view_sql": { "arguments": [], - "created_at": 1696458269.776896, + "created_at": 1719485736.4885828, "depends_on": { "macros": [] }, @@ -2767,25 +3350,31 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", + "macro_sql": "{% macro default__get_replace_materialized_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_materialized_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "meta": {}, - "name": "default__intersect", - "original_file_path": "macros/utils/intersect.sql", + "name": "default__get_replace_materialized_view_sql", + "original_file_path": "macros/relations/materialized_view/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/intersect.sql", + "path": "macros/relations/materialized_view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__intersect" + "unique_id": "macro.dbt.default__get_replace_materialized_view_sql" }, - "macro.dbt.default__last_day": { + "macro.dbt.default__get_replace_sql": { "arguments": [], - "created_at": 1696458269.794904, + "created_at": 1719485736.475151, "depends_on": { "macros": [ - "macro.dbt.default_last_day" + "macro.dbt.get_replace_view_sql", + "macro.dbt.get_replace_table_sql", + "macro.dbt.get_replace_materialized_view_sql", + "macro.dbt.get_create_intermediate_sql", + "macro.dbt.get_create_backup_sql", + "macro.dbt.get_rename_intermediate_sql", + "macro.dbt.get_drop_backup_sql", + "macro.dbt.get_drop_sql", + "macro.dbt.get_create_sql" ] }, "description": "", @@ -2793,22 +3382,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", + "macro_sql": "{% macro default__get_replace_sql(existing_relation, target_relation, sql) %}\n\n {# /* use a create or replace statement if possible */ #}\n\n {% set is_replaceable = existing_relation.type == target_relation_type and existing_relation.can_be_replaced %}\n\n {% if is_replaceable and existing_relation.is_view %}\n {{ get_replace_view_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_table %}\n {{ get_replace_table_sql(target_relation, sql) }}\n\n {% elif is_replaceable and existing_relation.is_materialized_view %}\n {{ get_replace_materialized_view_sql(target_relation, sql) }}\n\n {# /* a create or replace statement is not possible, so try to stage and/or backup to be safe */ #}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one using a backup */ #}\n {%- elif target_relation.can_be_renamed and existing_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* create target_relation as an intermediate relation, then swap it out with the existing one without using a backup */ #}\n {%- elif target_relation.can_be_renamed -%}\n {{ get_create_intermediate_sql(target_relation, sql) }};\n {{ get_drop_sql(existing_relation) }};\n {{ get_rename_intermediate_sql(target_relation) }}\n\n {# /* create target_relation in place by first backing up the existing relation */ #}\n {%- elif existing_relation.can_be_renamed -%}\n {{ get_create_backup_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }};\n {{ get_drop_backup_sql(existing_relation) }}\n\n {# /* no renaming is allowed, so just drop and create */ #}\n {%- else -%}\n {{ get_drop_sql(existing_relation) }};\n {{ get_create_sql(target_relation, sql) }}\n\n {%- endif -%}\n\n{% endmacro %}", "meta": {}, - "name": "default__last_day", - "original_file_path": "macros/utils/last_day.sql", + "name": "default__get_replace_sql", + "original_file_path": "macros/relations/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/last_day.sql", + "path": "macros/relations/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__last_day" + "unique_id": "macro.dbt.default__get_replace_sql" }, - "macro.dbt.default__length": { + "macro.dbt.default__get_replace_table_sql": { "arguments": [], - "created_at": 1696458269.7753239, + "created_at": 1719485736.506342, "depends_on": { "macros": [] }, @@ -2817,22 +3404,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", + "macro_sql": "{% macro default__get_replace_table_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_table_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "meta": {}, - "name": "default__length", - "original_file_path": "macros/utils/length.sql", + "name": "default__get_replace_table_sql", + "original_file_path": "macros/relations/table/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/length.sql", + "path": "macros/relations/table/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__length" + "unique_id": "macro.dbt.default__get_replace_table_sql" }, - "macro.dbt.default__list_relations_without_caching": { + "macro.dbt.default__get_replace_view_sql": { "arguments": [], - "created_at": 1696458269.839978, + "created_at": 1719485736.512308, "depends_on": { "macros": [] }, @@ -2841,101 +3426,88 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", + "macro_sql": "{% macro default__get_replace_view_sql(relation, sql) %}\n {{ exceptions.raise_compiler_error(\n \"`get_replace_view_sql` has not been implemented for this adapter.\"\n ) }}\n{% endmacro %}", "meta": {}, - "name": "default__list_relations_without_caching", - "original_file_path": "macros/adapters/metadata.sql", + "name": "default__get_replace_view_sql", + "original_file_path": "macros/relations/view/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/metadata.sql", + "path": "macros/relations/view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__list_relations_without_caching" + "unique_id": "macro.dbt.default__get_replace_view_sql" }, - "macro.dbt.default__list_schemas": { + "macro.dbt.default__get_revoke_sql": { "arguments": [], - "created_at": 1696458269.83854, + "created_at": 1719485736.574667, "depends_on": { - "macros": [ - "macro.dbt.information_schema_name", - "macro.dbt.run_query" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", + "macro_sql": "\n\n{%- macro default__get_revoke_sql(relation, privilege, grantees) -%}\n revoke {{ privilege }} on {{ relation }} from {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "default__list_schemas", - "original_file_path": "macros/adapters/metadata.sql", + "name": "default__get_revoke_sql", + "original_file_path": "macros/adapters/apply_grants.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/metadata.sql", + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__list_schemas" + "unique_id": "macro.dbt.default__get_revoke_sql" }, - "macro.dbt.default__listagg": { + "macro.dbt.default__get_select_subquery": { "arguments": [], - "created_at": 1696458269.780426, + "created_at": 1719485736.510467, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__get_column_names" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n array_slice(\n array_agg(\n {{ measure }}\n ){% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,0\n ,{{ limit_num }}\n ),\n {{ delimiter_text }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", + "macro_sql": "{% macro default__get_select_subquery(sql) %}\n select {{ adapter.dispatch('get_column_names', 'dbt')() }}\n from (\n {{ sql }}\n ) as model_subq\n{%- endmacro %}", "meta": {}, - "name": "default__listagg", - "original_file_path": "macros/utils/listagg.sql", + "name": "default__get_select_subquery", + "original_file_path": "macros/relations/table/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/listagg.sql", + "path": "macros/relations/table/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__listagg" + "unique_id": "macro.dbt.default__get_select_subquery" }, - "macro.dbt.default__load_csv_rows": { + "macro.dbt.default__get_show_grant_sql": { "arguments": [], - "created_at": 1696458269.753568, + "created_at": 1719485736.573777, "depends_on": { - "macros": [ - "macro.dbt.get_batch_size", - "macro.dbt.get_seed_column_quoted_csv", - "macro.dbt.get_binding_char" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", + "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation }}\n{% endmacro %}", "meta": {}, - "name": "default__load_csv_rows", - "original_file_path": "macros/materializations/seeds/helpers.sql", + "name": "default__get_show_grant_sql", + "original_file_path": "macros/adapters/apply_grants.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/helpers.sql", + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__load_csv_rows" + "unique_id": "macro.dbt.default__get_show_grant_sql" }, - "macro.dbt.default__make_backup_relation": { + "macro.dbt.default__get_show_indexes_sql": { "arguments": [], - "created_at": 1696458269.814139, + "created_at": 1719485736.563092, "depends_on": { "macros": [] }, @@ -2944,25 +3516,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {%- set backup_identifier = base_relation.identifier ~ suffix -%}\n {%- set backup_relation = base_relation.incorporate(\n path={\"identifier\": backup_identifier},\n type=backup_relation_type\n ) -%}\n {{ return(backup_relation) }}\n{% endmacro %}", + "macro_sql": "{% macro default__get_show_indexes_sql(relation) -%}\n {{ exceptions.raise_compiler_error(\"`get_show_indexes_sql has not been implemented for this adapter.\") }}\n{%- endmacro %}", "meta": {}, - "name": "default__make_backup_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "default__get_show_indexes_sql", + "original_file_path": "macros/adapters/indexes.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/adapters/indexes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__make_backup_relation" + "unique_id": "macro.dbt.default__get_show_indexes_sql" }, - "macro.dbt.default__make_intermediate_relation": { + "macro.dbt.default__get_table_columns_and_constraints": { "arguments": [], - "created_at": 1696458269.812382, + "created_at": 1719485736.497637, "depends_on": { "macros": [ - "macro.dbt.default__make_temp_relation" + "macro.dbt.table_columns_and_constraints" ] }, "description": "", @@ -2970,22 +3540,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__get_table_columns_and_constraints() -%}\n {{ return(table_columns_and_constraints()) }}\n{%- endmacro %}", "meta": {}, - "name": "default__make_intermediate_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "default__get_table_columns_and_constraints", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/relations/column/columns_spec_ddl.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__make_intermediate_relation" + "unique_id": "macro.dbt.default__get_table_columns_and_constraints" }, - "macro.dbt.default__make_temp_relation": { + "macro.dbt.default__get_test_sql": { "arguments": [], - "created_at": 1696458269.8132212, + "created_at": 1719485736.372639, "depends_on": { "macros": [] }, @@ -2994,74 +3562,66 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {%- set temp_identifier = base_relation.identifier ~ suffix -%}\n {%- set temp_relation = base_relation.incorporate(\n path={\"identifier\": temp_identifier}) -%}\n\n {{ return(temp_relation) }}\n{% endmacro %}", + "macro_sql": "{% macro default__get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n select\n {{ fail_calc }} as failures,\n {{ fail_calc }} {{ warn_if }} as should_warn,\n {{ fail_calc }} {{ error_if }} as should_error\n from (\n {{ main_sql }}\n {{ \"limit \" ~ limit if limit != none }}\n ) dbt_internal_test\n{%- endmacro %}", "meta": {}, - "name": "default__make_temp_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "default__get_test_sql", + "original_file_path": "macros/materializations/tests/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/materializations/tests/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__make_temp_relation" + "unique_id": "macro.dbt.default__get_test_sql" }, - "macro.dbt.default__persist_docs": { + "macro.dbt.default__get_true_sql": { "arguments": [], - "created_at": 1696458269.834239, + "created_at": 1719485736.3555431, "depends_on": { - "macros": [ - "macro.dbt.run_query", - "macro.dbt.alter_relation_comment", - "macro.dbt.alter_column_comment" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% do run_query(alter_column_comment(relation, model.columns)) %}\n {% endif %}\n{% endmacro %}", + "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", "meta": {}, - "name": "default__persist_docs", - "original_file_path": "macros/adapters/persist_docs.sql", + "name": "default__get_true_sql", + "original_file_path": "macros/materializations/snapshots/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/persist_docs.sql", + "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__persist_docs" + "unique_id": "macro.dbt.default__get_true_sql" }, - "macro.dbt.default__position": { + "macro.dbt.default__get_unit_test_sql": { "arguments": [], - "created_at": 1696458269.785729, + "created_at": 1719485736.3736708, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.string_literal" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", + "macro_sql": "{% macro default__get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n-- Build actual result given inputs\nwith dbt_internal_unit_test_actual as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%},{% endif %}{%- endfor -%}, {{ dbt.string_literal(\"actual\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ main_sql }}\n ) _dbt_internal_unit_test_actual\n),\n-- Build expected result\ndbt_internal_unit_test_expected as (\n select\n {% for expected_column_name in expected_column_names %}{{expected_column_name}}{% if not loop.last -%}, {% endif %}{%- endfor -%}, {{ dbt.string_literal(\"expected\") }} as {{ adapter.quote(\"actual_or_expected\") }}\n from (\n {{ expected_fixture_sql }}\n ) _dbt_internal_unit_test_expected\n)\n-- Union actual and expected results\nselect * from dbt_internal_unit_test_actual\nunion all\nselect * from dbt_internal_unit_test_expected\n{%- endmacro %}", "meta": {}, - "name": "default__position", - "original_file_path": "macros/utils/position.sql", + "name": "default__get_unit_test_sql", + "original_file_path": "macros/materializations/tests/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/position.sql", + "path": "macros/materializations/tests/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__position" + "unique_id": "macro.dbt.default__get_unit_test_sql" }, - "macro.dbt.default__post_snapshot": { + "macro.dbt.default__get_where_subquery": { "arguments": [], - "created_at": 1696458269.6169112, + "created_at": 1719485736.374502, "depends_on": { "macros": [] }, @@ -3070,48 +3630,42 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", + "macro_sql": "{% macro default__get_where_subquery(relation) -%}\n {% set where = config.get('where', '') %}\n {% if where %}\n {%- set filtered -%}\n (select * from {{ relation }} where {{ where }}) dbt_subquery\n {%- endset -%}\n {% do return(filtered) %}\n {%- else -%}\n {% do return(relation) %}\n {%- endif -%}\n{%- endmacro %}", "meta": {}, - "name": "default__post_snapshot", - "original_file_path": "macros/materializations/snapshots/helpers.sql", + "name": "default__get_where_subquery", + "original_file_path": "macros/materializations/tests/where_subquery.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/helpers.sql", + "path": "macros/materializations/tests/where_subquery.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__post_snapshot" + "unique_id": "macro.dbt.default__get_where_subquery" }, - "macro.dbt.default__rename_relation": { + "macro.dbt.default__handle_existing_table": { "arguments": [], - "created_at": 1696458269.8161411, + "created_at": 1719485736.514176, "depends_on": { - "macros": [ - "macro.dbt.statement" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", + "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "meta": {}, - "name": "default__rename_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "default__handle_existing_table", + "original_file_path": "macros/relations/view/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/relations/view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__rename_relation" + "unique_id": "macro.dbt.default__handle_existing_table" }, - "macro.dbt.default__replace": { + "macro.dbt.default__hash": { "arguments": [], - "created_at": 1696458269.77388, + "created_at": 1719485736.541434, "depends_on": { "macros": [] }, @@ -3120,48 +3674,42 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n\n\n{% endmacro %}", + "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", "meta": {}, - "name": "default__replace", - "original_file_path": "macros/utils/replace.sql", + "name": "default__hash", + "original_file_path": "macros/utils/hash.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/replace.sql", + "path": "macros/utils/hash.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__replace" + "unique_id": "macro.dbt.default__hash" }, - "macro.dbt.default__reset_csv_table": { + "macro.dbt.default__information_schema_name": { "arguments": [], - "created_at": 1696458269.748949, + "created_at": 1719485736.590823, "depends_on": { - "macros": [ - "macro.dbt.create_csv_table" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", + "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "meta": {}, - "name": "default__reset_csv_table", - "original_file_path": "macros/materializations/seeds/helpers.sql", + "name": "default__information_schema_name", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/helpers.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__reset_csv_table" + "unique_id": "macro.dbt.default__information_schema_name" }, - "macro.dbt.default__right": { + "macro.dbt.default__intersect": { "arguments": [], - "created_at": 1696458269.778592, + "created_at": 1719485736.537451, "depends_on": { "macros": [] }, @@ -3170,72 +3718,66 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", + "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "meta": {}, - "name": "default__right", - "original_file_path": "macros/utils/right.sql", + "name": "default__intersect", + "original_file_path": "macros/utils/intersect.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/right.sql", + "path": "macros/utils/intersect.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__right" + "unique_id": "macro.dbt.default__intersect" }, - "macro.dbt.default__safe_cast": { + "macro.dbt.default__last_day": { "arguments": [], - "created_at": 1696458269.782259, + "created_at": 1719485736.55349, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default_last_day" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", + "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", "meta": {}, - "name": "default__safe_cast", - "original_file_path": "macros/utils/safe_cast.sql", + "name": "default__last_day", + "original_file_path": "macros/utils/last_day.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/safe_cast.sql", + "path": "macros/utils/last_day.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__safe_cast" + "unique_id": "macro.dbt.default__last_day" }, - "macro.dbt.default__snapshot_get_time": { + "macro.dbt.default__length": { "arguments": [], - "created_at": 1696458269.8029382, + "created_at": 1719485736.536426, "depends_on": { - "macros": [ - "macro.dbt.current_timestamp" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", + "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", "meta": {}, - "name": "default__snapshot_get_time", - "original_file_path": "macros/adapters/timestamps.sql", + "name": "default__length", + "original_file_path": "macros/utils/length.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/timestamps.sql", + "path": "macros/utils/length.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__snapshot_get_time" + "unique_id": "macro.dbt.default__length" }, - "macro.dbt.default__snapshot_hash_arguments": { + "macro.dbt.default__list_relations_without_caching": { "arguments": [], - "created_at": 1696458269.601996, + "created_at": 1719485736.592287, "depends_on": { "macros": [] }, @@ -3244,96 +3786,93 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", + "macro_sql": "{% macro default__list_relations_without_caching(schema_relation) %}\n {{ exceptions.raise_not_implemented(\n 'list_relations_without_caching macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "meta": {}, - "name": "default__snapshot_hash_arguments", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "default__list_relations_without_caching", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__snapshot_hash_arguments" + "unique_id": "macro.dbt.default__list_relations_without_caching" }, - "macro.dbt.default__snapshot_merge_sql": { + "macro.dbt.default__list_schemas": { "arguments": [], - "created_at": 1696458269.595372, + "created_at": 1719485736.591269, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.information_schema_name", + "macro.dbt.run_query" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.dbt_scd_id = DBT_INTERNAL_DEST.dbt_scd_id\n\n when matched\n and DBT_INTERNAL_DEST.dbt_valid_to is null\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", + "macro_sql": "{% macro default__list_schemas(database) -%}\n {% set sql %}\n select distinct schema_name\n from {{ information_schema_name(database) }}.SCHEMATA\n where catalog_name ilike '{{ database }}'\n {% endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "meta": {}, - "name": "default__snapshot_merge_sql", - "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", + "name": "default__list_schemas", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/snapshot_merge.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__snapshot_merge_sql" + "unique_id": "macro.dbt.default__list_schemas" }, - "macro.dbt.default__snapshot_staging_table": { + "macro.dbt.default__listagg": { "arguments": [], - "created_at": 1696458269.619116, + "created_at": 1719485736.539655, "depends_on": { - "macros": [ - "macro.dbt.snapshot_get_time" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *,\n {{ strategy.unique_key }} as dbt_unique_key\n\n from {{ target_relation }}\n where dbt_valid_to is null\n\n ),\n\n insertions_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to,\n {{ strategy.scd_id }} as dbt_scd_id\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n {{ strategy.updated_at }} as dbt_valid_to\n\n from snapshot_query\n ),\n\n {%- if strategy.invalidate_hard_deletes %}\n\n deletes_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n\n from insertions_source_data as source_data\n left outer join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where snapshotted_data.dbt_unique_key is null\n or (\n snapshotted_data.dbt_unique_key is not null\n and (\n {{ strategy.row_changed }}\n )\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.dbt_scd_id\n\n from updates_source_data as source_data\n join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where (\n {{ strategy.row_changed }}\n )\n )\n\n {%- if strategy.invalidate_hard_deletes -%}\n ,\n\n deletes as (\n\n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as dbt_valid_from,\n {{ snapshot_get_time() }} as dbt_updated_at,\n {{ snapshot_get_time() }} as dbt_valid_to,\n snapshotted_data.dbt_scd_id\n\n from snapshotted_data\n left join deletes_source_data as source_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where source_data.dbt_unique_key is null\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.invalidate_hard_deletes %}\n union all\n select * from deletes\n {%- endif %}\n\n{%- endmacro %}", + "macro_sql": "{% macro default__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n array_slice(\n array_agg(\n {{ measure }}\n ){% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n ,0\n ,{{ limit_num }}\n ),\n {{ delimiter_text }}\n )\n {%- else %}\n listagg(\n {{ measure }},\n {{ delimiter_text }}\n )\n {% if order_by_clause -%}\n within group ({{ order_by_clause }})\n {%- endif %}\n {%- endif %}\n\n{%- endmacro %}", "meta": {}, - "name": "default__snapshot_staging_table", - "original_file_path": "macros/materializations/snapshots/helpers.sql", + "name": "default__listagg", + "original_file_path": "macros/utils/listagg.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/helpers.sql", + "path": "macros/utils/listagg.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__snapshot_staging_table" + "unique_id": "macro.dbt.default__listagg" }, - "macro.dbt.default__snapshot_string_as_time": { + "macro.dbt.default__load_csv_rows": { "arguments": [], - "created_at": 1696458269.60375, + "created_at": 1719485736.465408, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.get_batch_size", + "macro.dbt.get_seed_column_quoted_csv", + "macro.dbt.get_binding_char" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", + "macro_sql": "{% macro default__load_csv_rows(model, agate_table) %}\n\n {% set batch_size = get_batch_size() %}\n\n {% set cols_sql = get_seed_column_quoted_csv(model, agate_table.column_names) %}\n {% set bindings = [] %}\n\n {% set statements = [] %}\n\n {% for chunk in agate_table.rows | batch(batch_size) %}\n {% set bindings = [] %}\n\n {% for row in chunk %}\n {% do bindings.extend(row) %}\n {% endfor %}\n\n {% set sql %}\n insert into {{ this.render() }} ({{ cols_sql }}) values\n {% for row in chunk -%}\n ({%- for column in agate_table.column_names -%}\n {{ get_binding_char() }}\n {%- if not loop.last%},{%- endif %}\n {%- endfor -%})\n {%- if not loop.last%},{%- endif %}\n {%- endfor %}\n {% endset %}\n\n {% do adapter.add_query(sql, bindings=bindings, abridge_sql_log=True) %}\n\n {% if loop.index0 == 0 %}\n {% do statements.append(sql) %}\n {% endif %}\n {% endfor %}\n\n {# Return SQL so we can render it out into the compiled files #}\n {{ return(statements[0]) }}\n{% endmacro %}", "meta": {}, - "name": "default__snapshot_string_as_time", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "default__load_csv_rows", + "original_file_path": "macros/materializations/seeds/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__snapshot_string_as_time" + "unique_id": "macro.dbt.default__load_csv_rows" }, - "macro.dbt.default__split_part": { + "macro.dbt.default__make_backup_relation": { "arguments": [], - "created_at": 1696458269.796368, + "created_at": 1719485736.5670989, "depends_on": { "macros": [] }, @@ -3342,46 +3881,44 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", + "macro_sql": "{% macro default__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {%- set backup_identifier = base_relation.identifier ~ suffix -%}\n {%- set backup_relation = base_relation.incorporate(\n path={\"identifier\": backup_identifier},\n type=backup_relation_type\n ) -%}\n {{ return(backup_relation) }}\n{% endmacro %}", "meta": {}, - "name": "default__split_part", - "original_file_path": "macros/utils/split_part.sql", + "name": "default__make_backup_relation", + "original_file_path": "macros/adapters/relation.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/split_part.sql", + "path": "macros/adapters/relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__split_part" + "unique_id": "macro.dbt.default__make_backup_relation" }, - "macro.dbt.default__string_literal": { + "macro.dbt.default__make_intermediate_relation": { "arguments": [], - "created_at": 1696458269.786437, + "created_at": 1719485736.56591, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__make_temp_relation" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", + "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", "meta": {}, - "name": "default__string_literal", - "original_file_path": "macros/utils/literal.sql", + "name": "default__make_intermediate_relation", + "original_file_path": "macros/adapters/relation.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/literal.sql", + "path": "macros/adapters/relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__string_literal" + "unique_id": "macro.dbt.default__make_intermediate_relation" }, - "macro.dbt.default__support_multiple_grantees_per_dcl_statement": { + "macro.dbt.default__make_temp_relation": { "arguments": [], - "created_at": 1696458269.823607, + "created_at": 1719485736.566462, "depends_on": { "macros": [] }, @@ -3390,72 +3927,68 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", + "macro_sql": "{% macro default__make_temp_relation(base_relation, suffix) %}\n {%- set temp_identifier = base_relation.identifier ~ suffix -%}\n {%- set temp_relation = base_relation.incorporate(\n path={\"identifier\": temp_identifier}) -%}\n\n {{ return(temp_relation) }}\n{% endmacro %}", "meta": {}, - "name": "default__support_multiple_grantees_per_dcl_statement", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "default__make_temp_relation", + "original_file_path": "macros/adapters/relation.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/adapters/relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement" + "unique_id": "macro.dbt.default__make_temp_relation" }, - "macro.dbt.default__test_accepted_values": { + "macro.dbt.default__persist_docs": { "arguments": [], - "created_at": 1696458269.761441, + "created_at": 1719485736.586432, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.run_query", + "macro.dbt.alter_relation_comment", + "macro.dbt.alter_column_comment" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", + "macro_sql": "{% macro default__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_relation and config.persist_relation_docs() and model.description %}\n {% do run_query(alter_relation_comment(relation, model.description)) %}\n {% endif %}\n\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% do run_query(alter_column_comment(relation, model.columns)) %}\n {% endif %}\n{% endmacro %}", "meta": {}, - "name": "default__test_accepted_values", - "original_file_path": "macros/generic_test_sql/accepted_values.sql", + "name": "default__persist_docs", + "original_file_path": "macros/adapters/persist_docs.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/generic_test_sql/accepted_values.sql", + "path": "macros/adapters/persist_docs.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__test_accepted_values" + "unique_id": "macro.dbt.default__persist_docs" }, - "macro.dbt.default__test_not_null": { + "macro.dbt.default__position": { "arguments": [], - "created_at": 1696458269.7597172, + "created_at": 1719485736.543534, "depends_on": { - "macros": [ - "macro.dbt.should_store_failures" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else column_name %}\n\nselect {{ column_list }}\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", + "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", "meta": {}, - "name": "default__test_not_null", - "original_file_path": "macros/generic_test_sql/not_null.sql", + "name": "default__position", + "original_file_path": "macros/utils/position.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/generic_test_sql/not_null.sql", + "path": "macros/utils/position.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__test_not_null" + "unique_id": "macro.dbt.default__position" }, - "macro.dbt.default__test_relationships": { + "macro.dbt.default__post_snapshot": { "arguments": [], - "created_at": 1696458269.759, + "created_at": 1719485736.3552608, "depends_on": { "macros": [] }, @@ -3464,22 +3997,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", + "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "meta": {}, - "name": "default__test_relationships", - "original_file_path": "macros/generic_test_sql/relationships.sql", + "name": "default__post_snapshot", + "original_file_path": "macros/materializations/snapshots/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/generic_test_sql/relationships.sql", + "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__test_relationships" + "unique_id": "macro.dbt.default__post_snapshot" }, - "macro.dbt.default__test_unique": { + "macro.dbt.default__refresh_materialized_view": { "arguments": [], - "created_at": 1696458269.760334, + "created_at": 1719485736.49013, "depends_on": { "macros": [] }, @@ -3488,22 +4019,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", + "macro_sql": "{% macro default__refresh_materialized_view(relation) %}\n {{ exceptions.raise_compiler_error(\"`refresh_materialized_view` has not been implemented for this adapter.\") }}\n{% endmacro %}", "meta": {}, - "name": "default__test_unique", - "original_file_path": "macros/generic_test_sql/unique.sql", + "name": "default__refresh_materialized_view", + "original_file_path": "macros/relations/materialized_view/refresh.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/generic_test_sql/unique.sql", + "path": "macros/relations/materialized_view/refresh.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__test_unique" + "unique_id": "macro.dbt.default__refresh_materialized_view" }, - "macro.dbt.default__truncate_relation": { + "macro.dbt.default__rename_relation": { "arguments": [], - "created_at": 1696458269.815354, + "created_at": 1719485736.4786189, "depends_on": { "macros": [ "macro.dbt.statement" @@ -3514,22 +4043,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation }}\n {%- endcall %}\n{% endmacro %}", + "macro_sql": "{% macro default__rename_relation(from_relation, to_relation) -%}\n {% set target_name = adapter.quote_as_configured(to_relation.identifier, 'identifier') %}\n {% call statement('rename_relation') -%}\n alter table {{ from_relation }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "meta": {}, - "name": "default__truncate_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "default__rename_relation", + "original_file_path": "macros/relations/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/relations/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__truncate_relation" + "unique_id": "macro.dbt.default__rename_relation" }, - "macro.dbt.default__type_bigint": { + "macro.dbt.default__replace": { "arguments": [], - "created_at": 1696458269.790592, + "created_at": 1719485736.533091, "depends_on": { "macros": [] }, @@ -3538,46 +4065,44 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", + "macro_sql": "{% macro default__replace(field, old_chars, new_chars) %}\n\n replace(\n {{ field }},\n {{ old_chars }},\n {{ new_chars }}\n )\n\n\n{% endmacro %}", "meta": {}, - "name": "default__type_bigint", - "original_file_path": "macros/utils/data_types.sql", + "name": "default__replace", + "original_file_path": "macros/utils/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/utils/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__type_bigint" + "unique_id": "macro.dbt.default__replace" }, - "macro.dbt.default__type_boolean": { + "macro.dbt.default__reset_csv_table": { "arguments": [], - "created_at": 1696458269.791612, + "created_at": 1719485736.460783, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.create_csv_table" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro default__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {% set sql = \"\" %}\n {% if full_refresh %}\n {{ adapter.drop_relation(old_relation) }}\n {% set sql = create_csv_table(model, agate_table) %}\n {% else %}\n {{ adapter.truncate_relation(old_relation) }}\n {% set sql = \"truncate table \" ~ old_relation %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "meta": {}, - "name": "default__type_boolean", - "original_file_path": "macros/utils/data_types.sql", + "name": "default__reset_csv_table", + "original_file_path": "macros/materializations/seeds/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__type_boolean" + "unique_id": "macro.dbt.default__reset_csv_table" }, - "macro.dbt.default__type_float": { + "macro.dbt.default__resolve_model_name": { "arguments": [], - "created_at": 1696458269.789509, + "created_at": 1719485736.615371, "depends_on": { "macros": [] }, @@ -3586,22 +4111,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", + "macro_sql": "\n\n{%- macro default__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('\"', '\\\"') }}\n{%- endmacro -%}\n\n", "meta": {}, - "name": "default__type_float", - "original_file_path": "macros/utils/data_types.sql", + "name": "default__resolve_model_name", + "original_file_path": "macros/python_model/python.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/python_model/python.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__type_float" + "unique_id": "macro.dbt.default__resolve_model_name" }, - "macro.dbt.default__type_int": { + "macro.dbt.default__right": { "arguments": [], - "created_at": 1696458269.7910988, + "created_at": 1719485736.538501, "depends_on": { "macros": [] }, @@ -3610,22 +4133,20 @@ "node_color": null, "show": true }, - "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", "meta": {}, - "name": "default__type_int", - "original_file_path": "macros/utils/data_types.sql", + "name": "default__right", + "original_file_path": "macros/utils/right.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/utils/right.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__type_int" + "unique_id": "macro.dbt.default__right" }, - "macro.dbt.default__type_numeric": { + "macro.dbt.default__safe_cast": { "arguments": [], - "created_at": 1696458269.790067, + "created_at": 1719485736.540907, "depends_on": { "macros": [] }, @@ -3634,46 +4155,44 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__safe_cast(field, type) %}\n {# most databases don't support this function yet\n so we just need to use cast #}\n cast({{field}} as {{type}})\n{% endmacro %}", "meta": {}, - "name": "default__type_numeric", - "original_file_path": "macros/utils/data_types.sql", + "name": "default__safe_cast", + "original_file_path": "macros/utils/safe_cast.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/utils/safe_cast.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__type_numeric" + "unique_id": "macro.dbt.default__safe_cast" }, - "macro.dbt.default__type_string": { + "macro.dbt.default__snapshot_get_time": { "arguments": [], - "created_at": 1696458269.788338, + "created_at": 1719485736.559646, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.current_timestamp" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", + "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", "meta": {}, - "name": "default__type_string", - "original_file_path": "macros/utils/data_types.sql", + "name": "default__snapshot_get_time", + "original_file_path": "macros/adapters/timestamps.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/adapters/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__type_string" + "unique_id": "macro.dbt.default__snapshot_get_time" }, - "macro.dbt.default__type_timestamp": { + "macro.dbt.default__snapshot_hash_arguments": { "arguments": [], - "created_at": 1696458269.788992, + "created_at": 1719485736.345648, "depends_on": { "macros": [] }, @@ -3682,73 +4201,66 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", + "macro_sql": "{% macro default__snapshot_hash_arguments(args) -%}\n md5({%- for arg in args -%}\n coalesce(cast({{ arg }} as varchar ), '')\n {% if not loop.last %} || '|' || {% endif %}\n {%- endfor -%})\n{%- endmacro %}", "meta": {}, - "name": "default__type_timestamp", - "original_file_path": "macros/utils/data_types.sql", + "name": "default__snapshot_hash_arguments", + "original_file_path": "macros/materializations/snapshots/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/materializations/snapshots/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default__type_timestamp" + "unique_id": "macro.dbt.default__snapshot_hash_arguments" }, - "macro.dbt.default_last_day": { + "macro.dbt.default__snapshot_merge_sql": { "arguments": [], - "created_at": 1696458269.7946408, + "created_at": 1719485736.340331, "depends_on": { - "macros": [ - "macro.dbt.dateadd", - "macro.dbt.date_trunc" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd(datepart, '1', dbt.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.dbt_scd_id = DBT_INTERNAL_DEST.dbt_scd_id\n\n when matched\n and DBT_INTERNAL_DEST.dbt_valid_to is null\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n\n when not matched\n and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n then insert ({{ insert_cols_csv }})\n values ({{ insert_cols_csv }})\n\n{% endmacro %}", "meta": {}, - "name": "default_last_day", - "original_file_path": "macros/utils/last_day.sql", + "name": "default__snapshot_merge_sql", + "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/last_day.sql", + "path": "macros/materializations/snapshots/snapshot_merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.default_last_day" + "unique_id": "macro.dbt.default__snapshot_merge_sql" }, - "macro.dbt.diff_column_data_types": { + "macro.dbt.default__snapshot_staging_table": { "arguments": [], - "created_at": 1696458269.6687229, + "created_at": 1719485736.356719, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.snapshot_get_time" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.data_type != tc.data_type and not sc.can_expand_to(other_column=tc) %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.data_type } ) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", + "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *,\n {{ strategy.unique_key }} as dbt_unique_key\n\n from {{ target_relation }}\n where dbt_valid_to is null\n\n ),\n\n insertions_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as dbt_valid_to,\n {{ strategy.scd_id }} as dbt_scd_id\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key,\n {{ strategy.updated_at }} as dbt_updated_at,\n {{ strategy.updated_at }} as dbt_valid_from,\n {{ strategy.updated_at }} as dbt_valid_to\n\n from snapshot_query\n ),\n\n {%- if strategy.invalidate_hard_deletes %}\n\n deletes_source_data as (\n\n select\n *,\n {{ strategy.unique_key }} as dbt_unique_key\n from snapshot_query\n ),\n {% endif %}\n\n insertions as (\n\n select\n 'insert' as dbt_change_type,\n source_data.*\n\n from insertions_source_data as source_data\n left outer join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where snapshotted_data.dbt_unique_key is null\n or (\n snapshotted_data.dbt_unique_key is not null\n and (\n {{ strategy.row_changed }}\n )\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.dbt_scd_id\n\n from updates_source_data as source_data\n join snapshotted_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where (\n {{ strategy.row_changed }}\n )\n )\n\n {%- if strategy.invalidate_hard_deletes -%}\n ,\n\n deletes as (\n\n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as dbt_valid_from,\n {{ snapshot_get_time() }} as dbt_updated_at,\n {{ snapshot_get_time() }} as dbt_valid_to,\n snapshotted_data.dbt_scd_id\n\n from snapshotted_data\n left join deletes_source_data as source_data on snapshotted_data.dbt_unique_key = source_data.dbt_unique_key\n where source_data.dbt_unique_key is null\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.invalidate_hard_deletes %}\n union all\n select * from deletes\n {%- endif %}\n\n{%- endmacro %}", "meta": {}, - "name": "diff_column_data_types", - "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", + "name": "default__snapshot_staging_table", + "original_file_path": "macros/materializations/snapshots/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/column_helpers.sql", + "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.diff_column_data_types" + "unique_id": "macro.dbt.default__snapshot_staging_table" }, - "macro.dbt.diff_columns": { + "macro.dbt.default__snapshot_string_as_time": { "arguments": [], - "created_at": 1696458269.667535, + "created_at": 1719485736.346766, "depends_on": { "macros": [] }, @@ -3757,48 +4269,42 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n\n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", + "macro_sql": "{% macro default__snapshot_string_as_time(timestamp) %}\n {% do exceptions.raise_not_implemented(\n 'snapshot_string_as_time macro not implemented for adapter '+adapter.type()\n ) %}\n{% endmacro %}", "meta": {}, - "name": "diff_columns", - "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", + "name": "default__snapshot_string_as_time", + "original_file_path": "macros/materializations/snapshots/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/column_helpers.sql", + "path": "macros/materializations/snapshots/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.diff_columns" + "unique_id": "macro.dbt.default__snapshot_string_as_time" }, - "macro.dbt.drop_relation": { + "macro.dbt.default__split_part": { "arguments": [], - "created_at": 1696458269.814443, + "created_at": 1719485736.554402, "depends_on": { - "macros": [ - "macro.dbt.default__drop_relation" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__split_part(string_text, delimiter_text, part_number) %}\n\n split_part(\n {{ string_text }},\n {{ delimiter_text }},\n {{ part_number }}\n )\n\n{% endmacro %}", "meta": {}, - "name": "drop_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "default__split_part", + "original_file_path": "macros/utils/split_part.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/utils/split_part.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.drop_relation" + "unique_id": "macro.dbt.default__split_part" }, - "macro.dbt.drop_relation_if_exists": { + "macro.dbt.default__string_literal": { "arguments": [], - "created_at": 1696458269.8185081, + "created_at": 1719485736.544776, "depends_on": { "macros": [] }, @@ -3807,77 +4313,67 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", + "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "meta": {}, - "name": "drop_relation_if_exists", - "original_file_path": "macros/adapters/relation.sql", + "name": "default__string_literal", + "original_file_path": "macros/utils/literal.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/utils/literal.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.drop_relation_if_exists" + "unique_id": "macro.dbt.default__string_literal" }, - "macro.dbt.drop_schema": { + "macro.dbt.default__support_multiple_grantees_per_dcl_statement": { "arguments": [], - "created_at": 1696458269.8010921, + "created_at": 1719485736.573099, "depends_on": { - "macros": [ - "macro.dbt_postgres.postgres__drop_schema" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", + "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "drop_schema", - "original_file_path": "macros/adapters/schema.sql", + "name": "default__support_multiple_grantees_per_dcl_statement", + "original_file_path": "macros/adapters/apply_grants.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/schema.sql", + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.drop_schema" + "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement" }, - "macro.dbt.escape_single_quotes": { + "macro.dbt.default__test_accepted_values": { "arguments": [], - "created_at": 1696458269.777445, + "created_at": 1719485736.517527, "depends_on": { - "macros": [ - "macro.dbt.default__escape_single_quotes" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__test_accepted_values(model, column_name, values, quote=True) %}\n\nwith all_values as (\n\n select\n {{ column_name }} as value_field,\n count(*) as n_records\n\n from {{ model }}\n group by {{ column_name }}\n\n)\n\nselect *\nfrom all_values\nwhere value_field not in (\n {% for value in values -%}\n {% if quote -%}\n '{{ value }}'\n {%- else -%}\n {{ value }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {%- endfor %}\n)\n\n{% endmacro %}", "meta": {}, - "name": "escape_single_quotes", - "original_file_path": "macros/utils/escape_single_quotes.sql", + "name": "default__test_accepted_values", + "original_file_path": "macros/generic_test_sql/accepted_values.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/escape_single_quotes.sql", + "path": "macros/generic_test_sql/accepted_values.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.escape_single_quotes" + "unique_id": "macro.dbt.default__test_accepted_values" }, - "macro.dbt.except": { + "macro.dbt.default__test_not_null": { "arguments": [], - "created_at": 1696458269.7728372, + "created_at": 1719485736.516648, "depends_on": { "macros": [ - "macro.dbt.default__except" + "macro.dbt.should_store_failures" ] }, "description": "", @@ -3885,77 +4381,67 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", + "macro_sql": "{% macro default__test_not_null(model, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else column_name %}\n\nselect {{ column_list }}\nfrom {{ model }}\nwhere {{ column_name }} is null\n\n{% endmacro %}", "meta": {}, - "name": "except", - "original_file_path": "macros/utils/except.sql", + "name": "default__test_not_null", + "original_file_path": "macros/generic_test_sql/not_null.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/except.sql", + "path": "macros/generic_test_sql/not_null.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.except" + "unique_id": "macro.dbt.default__test_not_null" }, - "macro.dbt.generate_alias_name": { + "macro.dbt.default__test_relationships": { "arguments": [], - "created_at": 1696458269.7544892, + "created_at": 1719485736.516331, "depends_on": { - "macros": [ - "macro.dbt.default__generate_alias_name" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", + "macro_sql": "{% macro default__test_relationships(model, column_name, to, field) %}\n\nwith child as (\n select {{ column_name }} as from_field\n from {{ model }}\n where {{ column_name }} is not null\n),\n\nparent as (\n select {{ field }} as to_field\n from {{ to }}\n)\n\nselect\n from_field\n\nfrom child\nleft join parent\n on child.from_field = parent.to_field\n\nwhere parent.to_field is null\n\n{% endmacro %}", "meta": {}, - "name": "generate_alias_name", - "original_file_path": "macros/get_custom_name/get_custom_alias.sql", + "name": "default__test_relationships", + "original_file_path": "macros/generic_test_sql/relationships.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/get_custom_name/get_custom_alias.sql", + "path": "macros/generic_test_sql/relationships.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.generate_alias_name" + "unique_id": "macro.dbt.default__test_relationships" }, - "macro.dbt.generate_database_name": { + "macro.dbt.default__test_unique": { "arguments": [], - "created_at": 1696458269.757828, + "created_at": 1719485736.5169122, "depends_on": { - "macros": [ - "macro.dbt.default__generate_database_name" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", + "macro_sql": "{% macro default__test_unique(model, column_name) %}\n\nselect\n {{ column_name }} as unique_field,\n count(*) as n_records\n\nfrom {{ model }}\nwhere {{ column_name }} is not null\ngroup by {{ column_name }}\nhaving count(*) > 1\n\n{% endmacro %}", "meta": {}, - "name": "generate_database_name", - "original_file_path": "macros/get_custom_name/get_custom_database.sql", + "name": "default__test_unique", + "original_file_path": "macros/generic_test_sql/unique.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/get_custom_name/get_custom_database.sql", + "path": "macros/generic_test_sql/unique.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.generate_database_name" + "unique_id": "macro.dbt.default__test_unique" }, - "macro.dbt.generate_schema_name": { + "macro.dbt.default__truncate_relation": { "arguments": [], - "created_at": 1696458269.756017, + "created_at": 1719485736.5674748, "depends_on": { "macros": [ - "macro.dbt.default__generate_schema_name" + "macro.dbt.statement" ] }, "description": "", @@ -3963,22 +4449,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation }}\n {%- endcall %}\n{% endmacro %}", "meta": {}, - "name": "generate_schema_name", - "original_file_path": "macros/get_custom_name/get_custom_schema.sql", + "name": "default__truncate_relation", + "original_file_path": "macros/adapters/relation.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/get_custom_name/get_custom_schema.sql", + "path": "macros/adapters/relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.generate_schema_name" + "unique_id": "macro.dbt.default__truncate_relation" }, - "macro.dbt.generate_schema_name_for_env": { + "macro.dbt.default__type_bigint": { "arguments": [], - "created_at": 1696458269.756963, + "created_at": 1719485736.5486028, "depends_on": { "macros": [] }, @@ -3987,181 +4471,155 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", + "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", "meta": {}, - "name": "generate_schema_name_for_env", - "original_file_path": "macros/get_custom_name/get_custom_schema.sql", + "name": "default__type_bigint", + "original_file_path": "macros/utils/data_types.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/get_custom_name/get_custom_schema.sql", + "path": "macros/utils/data_types.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.generate_schema_name_for_env" + "unique_id": "macro.dbt.default__type_bigint" }, - "macro.dbt.get_batch_size": { + "macro.dbt.default__type_boolean": { "arguments": [], - "created_at": 1696458269.750157, + "created_at": 1719485736.550734, "depends_on": { - "macros": [ - "macro.dbt.default__get_batch_size" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", + "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", "meta": {}, - "name": "get_batch_size", - "original_file_path": "macros/materializations/seeds/helpers.sql", + "name": "default__type_boolean", + "original_file_path": "macros/utils/data_types.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/helpers.sql", + "path": "macros/utils/data_types.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_batch_size" + "unique_id": "macro.dbt.default__type_boolean" }, - "macro.dbt.get_binding_char": { + "macro.dbt.default__type_float": { "arguments": [], - "created_at": 1696458269.749717, + "created_at": 1719485736.5472598, "depends_on": { - "macros": [ - "macro.dbt.default__get_binding_char" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", + "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", "meta": {}, - "name": "get_binding_char", - "original_file_path": "macros/materializations/seeds/helpers.sql", + "name": "default__type_float", + "original_file_path": "macros/utils/data_types.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/helpers.sql", + "path": "macros/utils/data_types.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_binding_char" + "unique_id": "macro.dbt.default__type_float" }, - "macro.dbt.get_catalog": { + "macro.dbt.default__type_int": { "arguments": [], - "created_at": 1696458269.836847, + "created_at": 1719485736.549174, "depends_on": { - "macros": [ - "macro.dbt_postgres.postgres__get_catalog" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", + "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", "meta": {}, - "name": "get_catalog", - "original_file_path": "macros/adapters/metadata.sql", + "name": "default__type_int", + "original_file_path": "macros/utils/data_types.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/metadata.sql", + "path": "macros/utils/data_types.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_catalog" + "unique_id": "macro.dbt.default__type_int" }, - "macro.dbt.get_columns_in_query": { + "macro.dbt.default__type_numeric": { "arguments": [], - "created_at": 1696458269.844657, + "created_at": 1719485736.547792, "depends_on": { - "macros": [ - "macro.dbt.default__get_columns_in_query" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", "meta": {}, - "name": "get_columns_in_query", - "original_file_path": "macros/adapters/columns.sql", + "name": "default__type_numeric", + "original_file_path": "macros/utils/data_types.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/columns.sql", + "path": "macros/utils/data_types.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_columns_in_query" + "unique_id": "macro.dbt.default__type_numeric" }, - "macro.dbt.get_columns_in_relation": { + "macro.dbt.default__type_string": { "arguments": [], - "created_at": 1696458269.843055, + "created_at": 1719485736.5461628, "depends_on": { - "macros": [ - "macro.dbt_postgres.postgres__get_columns_in_relation" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", "meta": {}, - "name": "get_columns_in_relation", - "original_file_path": "macros/adapters/columns.sql", + "name": "default__type_string", + "original_file_path": "macros/utils/data_types.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/columns.sql", + "path": "macros/utils/data_types.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_columns_in_relation" + "unique_id": "macro.dbt.default__type_string" }, - "macro.dbt.get_create_index_sql": { + "macro.dbt.default__type_timestamp": { "arguments": [], - "created_at": 1696458269.8050802, + "created_at": 1719485736.5468001, "depends_on": { - "macros": [ - "macro.dbt_postgres.postgres__get_create_index_sql" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", + "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", "meta": {}, - "name": "get_create_index_sql", - "original_file_path": "macros/adapters/indexes.sql", + "name": "default__type_timestamp", + "original_file_path": "macros/utils/data_types.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/indexes.sql", + "path": "macros/utils/data_types.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_create_index_sql" + "unique_id": "macro.dbt.default__type_timestamp" }, - "macro.dbt.get_create_table_as_sql": { + "macro.dbt.default__validate_sql": { "arguments": [], - "created_at": 1696458269.719821, + "created_at": 1719485736.570561, "depends_on": { "macros": [ - "macro.dbt.default__get_create_table_as_sql" + "macro.dbt.statement" ] }, "description": "", @@ -4169,25 +4627,24 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", + "macro_sql": "{% macro default__validate_sql(sql) -%}\n {% call statement('validate_sql') -%}\n explain {{ sql }}\n {% endcall %}\n {{ return(load_result('validate_sql')) }}\n{% endmacro %}", "meta": {}, - "name": "get_create_table_as_sql", - "original_file_path": "macros/materializations/models/table/create_table_as.sql", + "name": "default__validate_sql", + "original_file_path": "macros/adapters/validate_sql.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/table/create_table_as.sql", + "path": "macros/adapters/validate_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_create_table_as_sql" + "unique_id": "macro.dbt.default__validate_sql" }, - "macro.dbt.get_create_view_as_sql": { + "macro.dbt.default_last_day": { "arguments": [], - "created_at": 1696458269.730824, + "created_at": 1719485736.5533261, "depends_on": { "macros": [ - "macro.dbt.default__get_create_view_as_sql" + "macro.dbt.dateadd", + "macro.dbt.date_trunc" ] }, "description": "", @@ -4195,77 +4652,67 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", + "macro_sql": "\n\n{%- macro default_last_day(date, datepart) -%}\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd(datepart, '1', dbt.date_trunc(datepart, date))\n )}}\n as date)\n{%- endmacro -%}\n\n", "meta": {}, - "name": "get_create_view_as_sql", - "original_file_path": "macros/materializations/models/view/create_view_as.sql", + "name": "default_last_day", + "original_file_path": "macros/utils/last_day.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/create_view_as.sql", + "path": "macros/utils/last_day.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_create_view_as_sql" + "unique_id": "macro.dbt.default_last_day" }, - "macro.dbt.get_csv_sql": { + "macro.dbt.diff_column_data_types": { "arguments": [], - "created_at": 1696458269.749263, + "created_at": 1719485736.397441, "depends_on": { - "macros": [ - "macro.dbt.default__get_csv_sql" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ adapter.dispatch('get_csv_sql', 'dbt')(create_or_truncate_sql, insert_sql) }}\n{% endmacro %}", + "macro_sql": "{% macro diff_column_data_types(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% for sc in source_columns %}\n {% set tc = target_columns | selectattr(\"name\", \"equalto\", sc.name) | list | first %}\n {% if tc %}\n {% if sc.data_type != tc.data_type and not sc.can_expand_to(other_column=tc) %}\n {{ result.append( { 'column_name': tc.name, 'new_type': sc.data_type } ) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "meta": {}, - "name": "get_csv_sql", - "original_file_path": "macros/materializations/seeds/helpers.sql", + "name": "diff_column_data_types", + "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/helpers.sql", + "path": "macros/materializations/models/incremental/column_helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_csv_sql" + "unique_id": "macro.dbt.diff_column_data_types" }, - "macro.dbt.get_dcl_statement_list": { + "macro.dbt.diff_columns": { "arguments": [], - "created_at": 1696458269.826365, + "created_at": 1719485736.396736, "depends_on": { - "macros": [ - "macro.dbt.default__get_dcl_statement_list" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_dcl_statement_list(relation, grant_config, get_dcl_macro) %}\n {{ return(adapter.dispatch('get_dcl_statement_list', 'dbt')(relation, grant_config, get_dcl_macro)) }}\n{% endmacro %}", + "macro_sql": "{% macro diff_columns(source_columns, target_columns) %}\n\n {% set result = [] %}\n {% set source_names = source_columns | map(attribute = 'column') | list %}\n {% set target_names = target_columns | map(attribute = 'column') | list %}\n\n {# --check whether the name attribute exists in the target - this does not perform a data type check #}\n {% for sc in source_columns %}\n {% if sc.name not in target_names %}\n {{ result.append(sc) }}\n {% endif %}\n {% endfor %}\n\n {{ return(result) }}\n\n{% endmacro %}", "meta": {}, - "name": "get_dcl_statement_list", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "diff_columns", + "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/materializations/models/incremental/column_helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_dcl_statement_list" + "unique_id": "macro.dbt.diff_columns" }, - "macro.dbt.get_delete_insert_merge_sql": { + "macro.dbt.drop_materialized_view": { "arguments": [], - "created_at": 1696458269.6812491, + "created_at": 1719485736.486141, "depends_on": { "macros": [ - "macro.dbt.default__get_delete_insert_merge_sql" + "macro.dbt_postgres.postgres__drop_materialized_view" ] }, "description": "", @@ -4273,25 +4720,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns) }}\n{%- endmacro %}", + "macro_sql": "{% macro drop_materialized_view(relation) -%}\n {{- adapter.dispatch('drop_materialized_view', 'dbt')(relation) -}}\n{%- endmacro %}", "meta": {}, - "name": "get_delete_insert_merge_sql", - "original_file_path": "macros/materializations/models/incremental/merge.sql", + "name": "drop_materialized_view", + "original_file_path": "macros/relations/materialized_view/drop.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/merge.sql", + "path": "macros/relations/materialized_view/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_delete_insert_merge_sql" + "unique_id": "macro.dbt.drop_materialized_view" }, - "macro.dbt.get_grant_sql": { + "macro.dbt.drop_relation": { "arguments": [], - "created_at": 1696458269.8250072, + "created_at": 1719485736.471232, "depends_on": { "macros": [ - "macro.dbt.default__get_grant_sql" + "macro.dbt.default__drop_relation" ] }, "description": "", @@ -4299,51 +4744,45 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", + "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "meta": {}, - "name": "get_grant_sql", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "drop_relation", + "original_file_path": "macros/relations/drop.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/relations/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_grant_sql" + "unique_id": "macro.dbt.drop_relation" }, - "macro.dbt.get_incremental_append_sql": { + "macro.dbt.drop_relation_if_exists": { "arguments": [], - "created_at": 1696458269.686978, + "created_at": 1719485736.471669, "depends_on": { - "macros": [ - "macro.dbt.default__get_incremental_append_sql" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", + "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "meta": {}, - "name": "get_incremental_append_sql", - "original_file_path": "macros/materializations/models/incremental/strategies.sql", + "name": "drop_relation_if_exists", + "original_file_path": "macros/relations/drop.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/strategies.sql", + "path": "macros/relations/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_incremental_append_sql" + "unique_id": "macro.dbt.drop_relation_if_exists" }, - "macro.dbt.get_incremental_default_sql": { + "macro.dbt.drop_schema": { "arguments": [], - "created_at": 1696458269.690001, + "created_at": 1719485736.558478, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__get_incremental_default_sql" + "macro.dbt_postgres.postgres__drop_schema" ] }, "description": "", @@ -4351,25 +4790,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", + "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "meta": {}, - "name": "get_incremental_default_sql", - "original_file_path": "macros/materializations/models/incremental/strategies.sql", + "name": "drop_schema", + "original_file_path": "macros/adapters/schema.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/strategies.sql", + "path": "macros/adapters/schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_incremental_default_sql" + "unique_id": "macro.dbt.drop_schema" }, - "macro.dbt.get_incremental_delete_insert_sql": { + "macro.dbt.drop_schema_named": { "arguments": [], - "created_at": 1696458269.6876879, + "created_at": 1719485736.4761379, "depends_on": { "macros": [ - "macro.dbt.default__get_incremental_delete_insert_sql" + "macro.dbt.default__drop_schema_named" ] }, "description": "", @@ -4377,25 +4814,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_incremental_delete_insert_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_delete_insert_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", + "macro_sql": "{% macro drop_schema_named(schema_name) %}\n {{ return(adapter.dispatch('drop_schema_named', 'dbt') (schema_name)) }}\n{% endmacro %}", "meta": {}, - "name": "get_incremental_delete_insert_sql", - "original_file_path": "macros/materializations/models/incremental/strategies.sql", + "name": "drop_schema_named", + "original_file_path": "macros/relations/schema.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/strategies.sql", + "path": "macros/relations/schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_incremental_delete_insert_sql" + "unique_id": "macro.dbt.drop_schema_named" }, - "macro.dbt.get_incremental_insert_overwrite_sql": { + "macro.dbt.drop_table": { "arguments": [], - "created_at": 1696458269.6892319, + "created_at": 1719485736.505447, "depends_on": { "macros": [ - "macro.dbt.default__get_incremental_insert_overwrite_sql" + "macro.dbt_postgres.postgres__drop_table" ] }, "description": "", @@ -4403,25 +4838,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_insert_overwrite_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", + "macro_sql": "{% macro drop_table(relation) -%}\n {{- adapter.dispatch('drop_table', 'dbt')(relation) -}}\n{%- endmacro %}", "meta": {}, - "name": "get_incremental_insert_overwrite_sql", - "original_file_path": "macros/materializations/models/incremental/strategies.sql", + "name": "drop_table", + "original_file_path": "macros/relations/table/drop.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/strategies.sql", + "path": "macros/relations/table/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql" + "unique_id": "macro.dbt.drop_table" }, - "macro.dbt.get_incremental_merge_sql": { + "macro.dbt.drop_view": { "arguments": [], - "created_at": 1696458269.688441, + "created_at": 1719485736.511067, "depends_on": { "macros": [ - "macro.dbt.default__get_incremental_merge_sql" + "macro.dbt_postgres.postgres__drop_view" ] }, "description": "", @@ -4429,25 +4862,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", + "macro_sql": "{% macro drop_view(relation) -%}\n {{- adapter.dispatch('drop_view', 'dbt')(relation) -}}\n{%- endmacro %}", "meta": {}, - "name": "get_incremental_merge_sql", - "original_file_path": "macros/materializations/models/incremental/strategies.sql", + "name": "drop_view", + "original_file_path": "macros/relations/view/drop.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/strategies.sql", + "path": "macros/relations/view/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_incremental_merge_sql" + "unique_id": "macro.dbt.drop_view" }, - "macro.dbt.get_insert_into_sql": { + "macro.dbt.escape_single_quotes": { "arguments": [], - "created_at": 1696458269.6907241, + "created_at": 1719485736.537864, "depends_on": { "macros": [ - "macro.dbt.get_quoted_csv" + "macro.dbt.default__escape_single_quotes" ] }, "description": "", @@ -4455,25 +4886,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n insert into {{ target_relation }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ temp_relation }}\n )\n\n{% endmacro %}", + "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", "meta": {}, - "name": "get_insert_into_sql", - "original_file_path": "macros/materializations/models/incremental/strategies.sql", + "name": "escape_single_quotes", + "original_file_path": "macros/utils/escape_single_quotes.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/strategies.sql", + "path": "macros/utils/escape_single_quotes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_insert_into_sql" + "unique_id": "macro.dbt.escape_single_quotes" }, - "macro.dbt.get_insert_overwrite_merge_sql": { + "macro.dbt.except": { "arguments": [], - "created_at": 1696458269.683062, + "created_at": 1719485736.5260952, "depends_on": { "macros": [ - "macro.dbt.default__get_insert_overwrite_merge_sql" + "macro.dbt.default__except" ] }, "description": "", @@ -4481,25 +4910,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", + "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", "meta": {}, - "name": "get_insert_overwrite_merge_sql", - "original_file_path": "macros/materializations/models/incremental/merge.sql", + "name": "except", + "original_file_path": "macros/utils/except.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/merge.sql", + "path": "macros/utils/except.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_insert_overwrite_merge_sql" + "unique_id": "macro.dbt.except" }, - "macro.dbt.get_merge_sql": { + "macro.dbt.format_columns": { "arguments": [], - "created_at": 1696458269.67798, + "created_at": 1719485736.504094, "depends_on": { "macros": [ - "macro.dbt.default__get_merge_sql" + "macro.dbt.default__format_column" ] }, "description": "", @@ -4507,25 +4934,25 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, predicates=none) -%}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, predicates) }}\n{%- endmacro %}", + "macro_sql": "{% macro format_columns(columns) %}\n {% set formatted_columns = [] %}\n {% for column in columns %}\n {%- set formatted_column = adapter.dispatch('format_column', 'dbt')(column) -%}\n {%- do formatted_columns.append(formatted_column) -%}\n {% endfor %}\n {{ return(formatted_columns) }}\n{% endmacro %}", "meta": {}, - "name": "get_merge_sql", - "original_file_path": "macros/materializations/models/incremental/merge.sql", + "name": "format_columns", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/merge.sql", + "path": "macros/relations/column/columns_spec_ddl.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_merge_sql" + "unique_id": "macro.dbt.format_columns" }, - "macro.dbt.get_merge_update_columns": { + "macro.dbt.format_row": { "arguments": [], - "created_at": 1696458269.6691232, + "created_at": 1719485736.611443, "depends_on": { "macros": [ - "macro.dbt.default__get_merge_update_columns" + "macro.dbt.string_literal", + "macro.dbt.escape_single_quotes", + "macro.dbt.safe_cast" ] }, "description": "", @@ -4533,25 +4960,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {{ return(adapter.dispatch('get_merge_update_columns', 'dbt')(merge_update_columns, merge_exclude_columns, dest_columns)) }}\n{% endmacro %}", + "macro_sql": "\n\n{%- macro format_row(row, column_name_to_data_types) -%}\n {#-- generate case-insensitive formatted row --#}\n {% set formatted_row = {} %}\n {%- for column_name, column_value in row.items() -%}\n {% set column_name = column_name|lower %}\n\n {%- if column_name not in column_name_to_data_types %}\n {#-- if user-provided row contains column name that relation does not contain, raise an error --#}\n {% set fixture_name = \"expected output\" if model.resource_type == 'unit_test' else (\"'\" ~ model.name ~ \"'\") %}\n {{ exceptions.raise_compiler_error(\n \"Invalid column name: '\" ~ column_name ~ \"' in unit test fixture for \" ~ fixture_name ~ \".\"\n \"\\nAccepted columns for \" ~ fixture_name ~ \" are: \" ~ (column_name_to_data_types.keys()|list)\n ) }}\n {%- endif -%}\n\n {%- set column_type = column_name_to_data_types[column_name] %}\n\n {#-- sanitize column_value: wrap yaml strings in quotes, apply cast --#}\n {%- set column_value_clean = column_value -%}\n {%- if column_value is string -%}\n {%- set column_value_clean = dbt.string_literal(dbt.escape_single_quotes(column_value)) -%}\n {%- elif column_value is none -%}\n {%- set column_value_clean = 'null' -%}\n {%- endif -%}\n\n {%- set row_update = {column_name: safe_cast(column_value_clean, column_type) } -%}\n {%- do formatted_row.update(row_update) -%}\n {%- endfor -%}\n {{ return(formatted_row) }}\n{%- endmacro -%}", "meta": {}, - "name": "get_merge_update_columns", - "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", + "name": "format_row", + "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/column_helpers.sql", + "path": "macros/unit_test_sql/get_fixture_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_merge_update_columns" + "unique_id": "macro.dbt.format_row" }, - "macro.dbt.get_or_create_relation": { + "macro.dbt.generate_alias_name": { "arguments": [], - "created_at": 1696458269.816565, + "created_at": 1719485736.466082, "depends_on": { "macros": [ - "macro.dbt.default__get_or_create_relation" + "macro.dbt.default__generate_alias_name" ] }, "description": "", @@ -4559,49 +4984,47 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", + "macro_sql": "{% macro generate_alias_name(custom_alias_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_alias_name', 'dbt')(custom_alias_name, node)) %}\n{%- endmacro %}", "meta": {}, - "name": "get_or_create_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "generate_alias_name", + "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/get_custom_name/get_custom_alias.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_or_create_relation" + "unique_id": "macro.dbt.generate_alias_name" }, - "macro.dbt.get_quoted_csv": { + "macro.dbt.generate_database_name": { "arguments": [], - "created_at": 1696458269.666624, + "created_at": 1719485736.468485, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__generate_database_name" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro get_quoted_csv(column_names) %}\n\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", + "macro_sql": "{% macro generate_database_name(custom_database_name=none, node=none) -%}\n {% do return(adapter.dispatch('generate_database_name', 'dbt')(custom_database_name, node)) %}\n{%- endmacro %}", "meta": {}, - "name": "get_quoted_csv", - "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", + "name": "generate_database_name", + "original_file_path": "macros/get_custom_name/get_custom_database.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/column_helpers.sql", + "path": "macros/get_custom_name/get_custom_database.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_quoted_csv" + "unique_id": "macro.dbt.generate_database_name" }, - "macro.dbt.get_revoke_sql": { + "macro.dbt.generate_schema_name": { "arguments": [], - "created_at": 1696458269.825689, + "created_at": 1719485736.467374, "depends_on": { "macros": [ - "macro.dbt.default__get_revoke_sql" + "macro.dbt.default__generate_schema_name" ] }, "description": "", @@ -4609,22 +5032,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", + "macro_sql": "{% macro generate_schema_name(custom_schema_name=none, node=none) -%}\n {{ return(adapter.dispatch('generate_schema_name', 'dbt')(custom_schema_name, node)) }}\n{% endmacro %}", "meta": {}, - "name": "get_revoke_sql", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "generate_schema_name", + "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/get_custom_name/get_custom_schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_revoke_sql" + "unique_id": "macro.dbt.generate_schema_name" }, - "macro.dbt.get_seed_column_quoted_csv": { + "macro.dbt.generate_schema_name_for_env": { "arguments": [], - "created_at": 1696458269.75114, + "created_at": 1719485736.46803, "depends_on": { "macros": [] }, @@ -4633,25 +5054,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", + "macro_sql": "{% macro generate_schema_name_for_env(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if target.name == 'prod' and custom_schema_name is not none -%}\n\n {{ custom_schema_name | trim }}\n\n {%- else -%}\n\n {{ default_schema }}\n\n {%- endif -%}\n\n{%- endmacro %}", "meta": {}, - "name": "get_seed_column_quoted_csv", - "original_file_path": "macros/materializations/seeds/helpers.sql", + "name": "generate_schema_name_for_env", + "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/helpers.sql", + "path": "macros/get_custom_name/get_custom_schema.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_seed_column_quoted_csv" + "unique_id": "macro.dbt.generate_schema_name_for_env" }, - "macro.dbt.get_show_grant_sql": { + "macro.dbt.generate_series": { "arguments": [], - "created_at": 1696458269.8244731, + "created_at": 1719485736.5352, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__get_show_grant_sql" + "macro.dbt.default__generate_series" ] }, "description": "", @@ -4659,25 +5078,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", + "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt')(upper_bound)) }}\n{% endmacro %}", "meta": {}, - "name": "get_show_grant_sql", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "generate_series", + "original_file_path": "macros/utils/generate_series.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/utils/generate_series.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_show_grant_sql" + "unique_id": "macro.dbt.generate_series" }, - "macro.dbt.get_test_sql": { + "macro.dbt.get_alter_materialized_view_as_sql": { "arguments": [], - "created_at": 1696458269.662025, + "created_at": 1719485736.492841, "depends_on": { "macros": [ - "macro.dbt.default__get_test_sql" + "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql" ] }, "description": "", @@ -4685,25 +5102,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n {{- log('Applying ALTER to: ' ~ relation) -}}\n {{- adapter.dispatch('get_alter_materialized_view_as_sql', 'dbt')(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n ) -}}\n{% endmacro %}", "meta": {}, - "name": "get_test_sql", - "original_file_path": "macros/materializations/tests/helpers.sql", + "name": "get_alter_materialized_view_as_sql", + "original_file_path": "macros/relations/materialized_view/alter.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/tests/helpers.sql", + "path": "macros/relations/materialized_view/alter.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_test_sql" + "unique_id": "macro.dbt.get_alter_materialized_view_as_sql" }, - "macro.dbt.get_true_sql": { + "macro.dbt.get_assert_columns_equivalent": { "arguments": [], - "created_at": 1696458269.617147, + "created_at": 1719485736.5009642, "depends_on": { "macros": [ - "macro.dbt.default__get_true_sql" + "macro.dbt.default__get_assert_columns_equivalent" ] }, "description": "", @@ -4711,25 +5126,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", + "macro_sql": "\n\n{%- macro get_assert_columns_equivalent(sql) -%}\n {{ adapter.dispatch('get_assert_columns_equivalent', 'dbt')(sql) }}\n{%- endmacro -%}\n\n", "meta": {}, - "name": "get_true_sql", - "original_file_path": "macros/materializations/snapshots/helpers.sql", + "name": "get_assert_columns_equivalent", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/helpers.sql", + "path": "macros/relations/column/columns_spec_ddl.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_true_sql" + "unique_id": "macro.dbt.get_assert_columns_equivalent" }, - "macro.dbt.get_where_subquery": { + "macro.dbt.get_batch_size": { "arguments": [], - "created_at": 1696458269.663287, + "created_at": 1719485736.461688, "depends_on": { "macros": [ - "macro.dbt.default__get_where_subquery" + "macro.dbt.default__get_batch_size" ] }, "description": "", @@ -4737,25 +5150,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", + "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "meta": {}, - "name": "get_where_subquery", - "original_file_path": "macros/materializations/tests/where_subquery.sql", + "name": "get_batch_size", + "original_file_path": "macros/materializations/seeds/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/tests/where_subquery.sql", + "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.get_where_subquery" + "unique_id": "macro.dbt.get_batch_size" }, - "macro.dbt.handle_existing_table": { + "macro.dbt.get_binding_char": { "arguments": [], - "created_at": 1696458269.7268028, + "created_at": 1719485736.461306, "depends_on": { "macros": [ - "macro.dbt.default__handle_existing_table" + "macro.dbt.default__get_binding_char" ] }, "description": "", @@ -4763,25 +5174,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", + "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "meta": {}, - "name": "handle_existing_table", - "original_file_path": "macros/materializations/models/view/helpers.sql", + "name": "get_binding_char", + "original_file_path": "macros/materializations/seeds/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/helpers.sql", + "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.handle_existing_table" + "unique_id": "macro.dbt.get_binding_char" }, - "macro.dbt.hash": { + "macro.dbt.get_catalog": { "arguments": [], - "created_at": 1696458269.7828329, + "created_at": 1719485736.590185, "depends_on": { "macros": [ - "macro.dbt.default__hash" + "macro.dbt_postgres.postgres__get_catalog" ] }, "description": "", @@ -4789,25 +5198,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "meta": {}, - "name": "hash", - "original_file_path": "macros/utils/hash.sql", + "name": "get_catalog", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/hash.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.hash" + "unique_id": "macro.dbt.get_catalog" }, - "macro.dbt.in_transaction": { + "macro.dbt.get_catalog_relations": { "arguments": [], - "created_at": 1696458269.591626, + "created_at": 1719485736.5896802, "depends_on": { "macros": [ - "macro.dbt.make_hook_config" + "macro.dbt_postgres.postgres__get_catalog_relations" ] }, "description": "", @@ -4815,49 +5222,47 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", + "macro_sql": "{% macro get_catalog_relations(information_schema, relations) -%}\n {{ return(adapter.dispatch('get_catalog_relations', 'dbt')(information_schema, relations)) }}\n{%- endmacro %}", "meta": {}, - "name": "in_transaction", - "original_file_path": "macros/materializations/hooks.sql", + "name": "get_catalog_relations", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/hooks.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.in_transaction" + "unique_id": "macro.dbt.get_catalog_relations" }, - "macro.dbt.incremental_validate_on_schema_change": { + "macro.dbt.get_column_schema_from_query": { "arguments": [], - "created_at": 1696458269.708918, + "created_at": 1719485736.598866, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.get_empty_subquery_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n\n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n\n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n\n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n\n {% endif %}\n\n{% endmacro %}", + "macro_sql": "{% macro get_column_schema_from_query(select_sql, select_sql_header=none) -%}\n {% set columns = [] %}\n {# -- Using an 'empty subquery' here to get the same schema as the given select_sql statement, without necessitating a data scan.#}\n {% set sql = get_empty_subquery_sql(select_sql, select_sql_header) %}\n {% set column_schema = adapter.get_column_schema_from_query(sql) %}\n {{ return(column_schema) }}\n{% endmacro %}", "meta": {}, - "name": "incremental_validate_on_schema_change", - "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", + "name": "get_column_schema_from_query", + "original_file_path": "macros/adapters/columns.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/on_schema_change.sql", + "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.incremental_validate_on_schema_change" + "unique_id": "macro.dbt.get_column_schema_from_query" }, - "macro.dbt.information_schema_name": { + "macro.dbt.get_columns_in_query": { "arguments": [], - "created_at": 1696458269.837573, + "created_at": 1719485736.5990841, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__information_schema_name" + "macro.dbt.default__get_columns_in_query" ] }, "description": "", @@ -4865,25 +5270,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "meta": {}, - "name": "information_schema_name", - "original_file_path": "macros/adapters/metadata.sql", + "name": "get_columns_in_query", + "original_file_path": "macros/adapters/columns.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/metadata.sql", + "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.information_schema_name" + "unique_id": "macro.dbt.get_columns_in_query" }, - "macro.dbt.intersect": { + "macro.dbt.get_columns_in_relation": { "arguments": [], - "created_at": 1696458269.776766, + "created_at": 1719485736.596093, "depends_on": { "macros": [ - "macro.dbt.default__intersect" + "macro.dbt_postgres.postgres__get_columns_in_relation" ] }, "description": "", @@ -4891,25 +5294,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", + "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "meta": {}, - "name": "intersect", - "original_file_path": "macros/utils/intersect.sql", + "name": "get_columns_in_relation", + "original_file_path": "macros/adapters/columns.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/intersect.sql", + "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.intersect" + "unique_id": "macro.dbt.get_columns_in_relation" }, - "macro.dbt.is_incremental": { + "macro.dbt.get_create_backup_sql": { "arguments": [], - "created_at": 1696458269.6853771, + "created_at": 1719485736.478982, "depends_on": { "macros": [ - "macro.dbt.should_full_refresh" + "macro.dbt.default__get_create_backup_sql" ] }, "description": "", @@ -4917,25 +5318,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", + "macro_sql": "{%- macro get_create_backup_sql(relation) -%}\n {{- log('Applying CREATE BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "is_incremental", - "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", + "name": "get_create_backup_sql", + "original_file_path": "macros/relations/create_backup.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/is_incremental.sql", + "path": "macros/relations/create_backup.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.is_incremental" + "unique_id": "macro.dbt.get_create_backup_sql" }, - "macro.dbt.last_day": { + "macro.dbt.get_create_index_sql": { "arguments": [], - "created_at": 1696458269.794115, + "created_at": 1719485736.561203, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__last_day" + "macro.dbt_postgres.postgres__get_create_index_sql" ] }, "description": "", @@ -4943,25 +5342,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "meta": {}, - "name": "last_day", - "original_file_path": "macros/utils/last_day.sql", + "name": "get_create_index_sql", + "original_file_path": "macros/adapters/indexes.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/last_day.sql", + "path": "macros/adapters/indexes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.last_day" + "unique_id": "macro.dbt.get_create_index_sql" }, - "macro.dbt.length": { + "macro.dbt.get_create_intermediate_sql": { "arguments": [], - "created_at": 1696458269.775149, + "created_at": 1719485736.4755762, "depends_on": { "macros": [ - "macro.dbt.default__length" + "macro.dbt.default__get_create_intermediate_sql" ] }, "description": "", @@ -4969,25 +5366,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", + "macro_sql": "{%- macro get_create_intermediate_sql(relation, sql) -%}\n {{- log('Applying CREATE INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_intermediate_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "length", - "original_file_path": "macros/utils/length.sql", + "name": "get_create_intermediate_sql", + "original_file_path": "macros/relations/create_intermediate.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/length.sql", + "path": "macros/relations/create_intermediate.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.length" + "unique_id": "macro.dbt.get_create_intermediate_sql" }, - "macro.dbt.list_relations_without_caching": { + "macro.dbt.get_create_materialized_view_as_sql": { "arguments": [], - "created_at": 1696458269.839705, + "created_at": 1719485736.4946408, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__list_relations_without_caching" + "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql" ] }, "description": "", @@ -4995,25 +5390,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_create_materialized_view_as_sql(relation, sql) -%}\n {{- adapter.dispatch('get_create_materialized_view_as_sql', 'dbt')(relation, sql) -}}\n{%- endmacro %}", "meta": {}, - "name": "list_relations_without_caching", - "original_file_path": "macros/adapters/metadata.sql", + "name": "get_create_materialized_view_as_sql", + "original_file_path": "macros/relations/materialized_view/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/metadata.sql", + "path": "macros/relations/materialized_view/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.list_relations_without_caching" + "unique_id": "macro.dbt.get_create_materialized_view_as_sql" }, - "macro.dbt.list_schemas": { + "macro.dbt.get_create_sql": { "arguments": [], - "created_at": 1696458269.838121, + "created_at": 1719485736.481704, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__list_schemas" + "macro.dbt.default__get_create_sql" ] }, "description": "", @@ -5021,25 +5414,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", + "macro_sql": "{%- macro get_create_sql(relation, sql) -%}\n {{- log('Applying CREATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_create_sql', 'dbt')(relation, sql) -}}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "list_schemas", - "original_file_path": "macros/adapters/metadata.sql", + "name": "get_create_sql", + "original_file_path": "macros/relations/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/metadata.sql", + "path": "macros/relations/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.list_schemas" + "unique_id": "macro.dbt.get_create_sql" }, - "macro.dbt.listagg": { + "macro.dbt.get_create_table_as_sql": { "arguments": [], - "created_at": 1696458269.779763, + "created_at": 1719485736.50801, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__listagg" + "macro.dbt.default__get_create_table_as_sql" ] }, "description": "", @@ -5047,49 +5438,47 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro listagg(measure, delimiter_text=\"','\", order_by_clause=none, limit_num=none) -%}\n {{ return(adapter.dispatch('listagg', 'dbt') (measure, delimiter_text, order_by_clause, limit_num)) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_create_table_as_sql(temporary, relation, sql) -%}\n {{ adapter.dispatch('get_create_table_as_sql', 'dbt')(temporary, relation, sql) }}\n{%- endmacro %}", "meta": {}, - "name": "listagg", - "original_file_path": "macros/utils/listagg.sql", + "name": "get_create_table_as_sql", + "original_file_path": "macros/relations/table/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/listagg.sql", + "path": "macros/relations/table/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.listagg" + "unique_id": "macro.dbt.get_create_table_as_sql" }, - "macro.dbt.load_cached_relation": { + "macro.dbt.get_create_view_as_sql": { "arguments": [], - "created_at": 1696458269.817961, + "created_at": 1719485736.515145, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__get_create_view_as_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro load_cached_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", + "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "meta": {}, - "name": "load_cached_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "get_create_view_as_sql", + "original_file_path": "macros/relations/view/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/relations/view/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.load_cached_relation" + "unique_id": "macro.dbt.get_create_view_as_sql" }, - "macro.dbt.load_csv_rows": { + "macro.dbt.get_csv_sql": { "arguments": [], - "created_at": 1696458269.751443, + "created_at": 1719485736.460989, "depends_on": { "macros": [ - "macro.dbt.default__load_csv_rows" + "macro.dbt.default__get_csv_sql" ] }, "description": "", @@ -5097,25 +5486,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ adapter.dispatch('get_csv_sql', 'dbt')(create_or_truncate_sql, insert_sql) }}\n{% endmacro %}", "meta": {}, - "name": "load_csv_rows", + "name": "get_csv_sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "package_name": "dbt", "patch_path": null, "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.load_csv_rows" + "unique_id": "macro.dbt.get_csv_sql" }, - "macro.dbt.load_relation": { + "macro.dbt.get_dcl_statement_list": { "arguments": [], - "created_at": 1696458269.8181918, + "created_at": 1719485736.574908, "depends_on": { "macros": [ - "macro.dbt.load_cached_relation" + "macro.dbt.default__get_dcl_statement_list" ] }, "description": "", @@ -5123,25 +5510,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_dcl_statement_list(relation, grant_config, get_dcl_macro) %}\n {{ return(adapter.dispatch('get_dcl_statement_list', 'dbt')(relation, grant_config, get_dcl_macro)) }}\n{% endmacro %}", "meta": {}, - "name": "load_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "get_dcl_statement_list", + "original_file_path": "macros/adapters/apply_grants.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.load_relation" + "unique_id": "macro.dbt.get_dcl_statement_list" }, - "macro.dbt.make_backup_relation": { + "macro.dbt.get_delete_insert_merge_sql": { "arguments": [], - "created_at": 1696458269.813613, + "created_at": 1719485736.414207, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__make_backup_relation" + "macro.dbt.default__get_delete_insert_merge_sql" ] }, "description": "", @@ -5149,49 +5534,47 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro make_backup_relation(base_relation, backup_relation_type, suffix='__dbt_backup') %}\n {{ return(adapter.dispatch('make_backup_relation', 'dbt')(base_relation, backup_relation_type, suffix)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n {{ adapter.dispatch('get_delete_insert_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "meta": {}, - "name": "make_backup_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "get_delete_insert_merge_sql", + "original_file_path": "macros/materializations/models/incremental/merge.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/materializations/models/incremental/merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.make_backup_relation" + "unique_id": "macro.dbt.get_delete_insert_merge_sql" }, - "macro.dbt.make_hook_config": { + "macro.dbt.get_drop_backup_sql": { "arguments": [], - "created_at": 1696458269.591149, + "created_at": 1719485736.476695, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__get_drop_backup_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", + "macro_sql": "{%- macro get_drop_backup_sql(relation) -%}\n {{- log('Applying DROP BACKUP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_backup_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "make_hook_config", - "original_file_path": "macros/materializations/hooks.sql", + "name": "get_drop_backup_sql", + "original_file_path": "macros/relations/drop_backup.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/hooks.sql", + "path": "macros/relations/drop_backup.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.make_hook_config" + "unique_id": "macro.dbt.get_drop_backup_sql" }, - "macro.dbt.make_intermediate_relation": { + "macro.dbt.get_drop_index_sql": { "arguments": [], - "created_at": 1696458269.8121102, + "created_at": 1719485736.562388, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__make_intermediate_relation" + "macro.dbt_postgres.postgres__get_drop_index_sql" ] }, "description": "", @@ -5199,25 +5582,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_drop_index_sql(relation, index_name) -%}\n {{ adapter.dispatch('get_drop_index_sql', 'dbt')(relation, index_name) }}\n{%- endmacro %}", "meta": {}, - "name": "make_intermediate_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "get_drop_index_sql", + "original_file_path": "macros/adapters/indexes.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/adapters/indexes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.make_intermediate_relation" + "unique_id": "macro.dbt.get_drop_index_sql" }, - "macro.dbt.make_temp_relation": { + "macro.dbt.get_drop_sql": { "arguments": [], - "created_at": 1696458269.812738, + "created_at": 1719485736.470603, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__make_temp_relation" + "macro.dbt.default__get_drop_sql" ] }, "description": "", @@ -5225,40 +5606,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", + "macro_sql": "{%- macro get_drop_sql(relation) -%}\n {{- log('Applying DROP to: ' ~ relation) -}}\n {{- adapter.dispatch('get_drop_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "make_temp_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "get_drop_sql", + "original_file_path": "macros/relations/drop.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/relations/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.make_temp_relation" + "unique_id": "macro.dbt.get_drop_sql" }, - "macro.dbt.materialization_incremental_default": { + "macro.dbt.get_empty_schema_sql": { "arguments": [], - "created_at": 1696458269.699362, + "created_at": 1719485736.597257, "depends_on": { "macros": [ - "macro.dbt.load_cached_relation", - "macro.dbt.make_temp_relation", - "macro.dbt.make_intermediate_relation", - "macro.dbt.make_backup_relation", - "macro.dbt.should_full_refresh", - "macro.dbt.incremental_validate_on_schema_change", - "macro.dbt.drop_relation_if_exists", - "macro.dbt.run_hooks", - "macro.dbt.get_create_table_as_sql", - "macro.dbt.run_query", - "macro.dbt.process_schema_changes", - "macro.dbt.statement", - "macro.dbt.should_revoke", - "macro.dbt.apply_grants", - "macro.dbt.persist_docs", - "macro.dbt.create_indexes" + "macro.dbt.default__get_empty_schema_sql" ] }, "description": "", @@ -5266,37 +5630,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% materialization incremental, default -%}\n\n -- relations\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation)-%}\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n\n -- configs\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh() or existing_relation.is_view) -%}\n {%- set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') -%}\n\n -- the temp_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparison later on\n {% set grant_config = config.get('grants') %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {% if existing_relation is none %}\n {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n {% elif full_refresh_mode %}\n {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n {% set need_swap = true %}\n {% else %}\n {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n {% do adapter.expand_target_column_types(\n from_relation=temp_relation,\n to_relation=target_relation) %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n\n {#-- Get the incremental_strategy, the macro to use for the strategy, and build the sql --#}\n {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n {% set incremental_predicates = config.get('incremental_predicates', none) %}\n {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n {% set strategy_arg_dict = ({'target_relation': target_relation, 'temp_relation': temp_relation, 'unique_key': unique_key, 'dest_columns': dest_columns, 'predicates': incremental_predicates }) %}\n {% set build_sql = strategy_sql_macro_func(strategy_arg_dict) %}\n\n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if need_swap %}\n {% do adapter.rename_relation(target_relation, backup_relation) %}\n {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n {% do to_drop.append(backup_relation) %}\n {% endif %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", + "macro_sql": "{% macro get_empty_schema_sql(columns) -%}\n {{ return(adapter.dispatch('get_empty_schema_sql', 'dbt')(columns)) }}\n{% endmacro %}", "meta": {}, - "name": "materialization_incremental_default", - "original_file_path": "macros/materializations/models/incremental/incremental.sql", + "name": "get_empty_schema_sql", + "original_file_path": "macros/adapters/columns.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/incremental.sql", + "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", - "supported_languages": [ - "sql" - ], - "tags": [], - "unique_id": "macro.dbt.materialization_incremental_default" + "supported_languages": null, + "unique_id": "macro.dbt.get_empty_schema_sql" }, - "macro.dbt.materialization_seed_default": { + "macro.dbt.get_empty_subquery_sql": { "arguments": [], - "created_at": 1696458269.737411, + "created_at": 1719485736.596842, "depends_on": { "macros": [ - "macro.dbt.should_full_refresh", - "macro.dbt.run_hooks", - "macro.dbt.reset_csv_table", - "macro.dbt.create_csv_table", - "macro.dbt.load_csv_rows", - "macro.dbt.noop_statement", - "macro.dbt.get_csv_sql", - "macro.dbt.should_revoke", - "macro.dbt.apply_grants", - "macro.dbt.persist_docs", - "macro.dbt.create_indexes" + "macro.dbt.default__get_empty_subquery_sql" ] }, "description": "", @@ -5304,40 +5654,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set grant_config = config.get('grants') -%}\n {%- set agate_table = load_agate_table() -%}\n -- grab current tables grants config for comparison later on\n\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation)) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = load_csv_rows(model, agate_table) %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ get_csv_sql(create_table_sql, sql) }};\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n\n {% set should_revoke = should_revoke(old_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", + "macro_sql": "{% macro get_empty_subquery_sql(select_sql, select_sql_header=none) -%}\n {{ return(adapter.dispatch('get_empty_subquery_sql', 'dbt')(select_sql, select_sql_header)) }}\n{% endmacro %}", "meta": {}, - "name": "materialization_seed_default", - "original_file_path": "macros/materializations/seeds/seed.sql", + "name": "get_empty_subquery_sql", + "original_file_path": "macros/adapters/columns.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/seed.sql", + "path": "macros/adapters/columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", - "supported_languages": [ - "sql" - ], - "tags": [], - "unique_id": "macro.dbt.materialization_seed_default" + "supported_languages": null, + "unique_id": "macro.dbt.get_empty_subquery_sql" }, - "macro.dbt.materialization_snapshot_default": { + "macro.dbt.get_expected_sql": { "arguments": [], - "created_at": 1696458269.65698, + "created_at": 1719485736.608841, "depends_on": { "macros": [ - "macro.dbt.get_or_create_relation", - "macro.dbt.run_hooks", - "macro.dbt.strategy_dispatch", - "macro.dbt.build_snapshot_table", - "macro.dbt.create_table_as", - "macro.dbt.build_snapshot_staging_table", - "macro.dbt.create_columns", - "macro.dbt.snapshot_merge_sql", - "macro.dbt.statement", - "macro.dbt.should_revoke", - "macro.dbt.apply_grants", - "macro.dbt.persist_docs", - "macro.dbt.create_indexes", - "macro.dbt.post_snapshot" + "macro.dbt.format_row" ] }, "description": "", @@ -5345,37 +5678,25 @@ "node_color": null, "show": true }, - "macro_sql": "{% materialization snapshot, default %}\n {%- set config = model['config'] -%}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n -- grab current tables grants config for comparison later on\n {%- set grant_config = config.get('grants') -%}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", config, target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {{ adapter.valid_snapshot_target(target_relation) }}\n\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(target_relation_exists, full_refresh_mode=False) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", + "macro_sql": "{% macro get_expected_sql(rows, column_name_to_data_types) %}\n\n{%- if (rows | length) == 0 -%}\n select * from dbt_internal_unit_test_actual\n limit 0\n{%- else -%}\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\nselect\n{%- for column_name, column_value in formatted_row.items() %} {{ column_value }} as {{ column_name }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n{%- endif -%}\n\n{% endmacro %}", "meta": {}, - "name": "materialization_snapshot_default", - "original_file_path": "macros/materializations/snapshots/snapshot.sql", + "name": "get_expected_sql", + "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/snapshot.sql", + "path": "macros/unit_test_sql/get_fixture_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", - "supported_languages": [ - "sql" - ], - "tags": [], - "unique_id": "macro.dbt.materialization_snapshot_default" + "supported_languages": null, + "unique_id": "macro.dbt.get_expected_sql" }, - "macro.dbt.materialization_table_default": { + "macro.dbt.get_fixture_sql": { "arguments": [], - "created_at": 1696458269.718855, + "created_at": 1719485736.607797, "depends_on": { "macros": [ - "macro.dbt.load_cached_relation", - "macro.dbt.make_intermediate_relation", - "macro.dbt.make_backup_relation", - "macro.dbt.drop_relation_if_exists", - "macro.dbt.run_hooks", - "macro.dbt.statement", - "macro.dbt.get_create_table_as_sql", - "macro.dbt.create_indexes", - "macro.dbt.should_revoke", - "macro.dbt.apply_grants", - "macro.dbt.persist_docs" + "macro.dbt.load_relation", + "macro.dbt.safe_cast", + "macro.dbt.format_row" ] }, "description": "", @@ -5383,30 +5704,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% materialization table, default %}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') %}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparison later on\n {% set grant_config = config.get('grants') %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do create_indexes(target_relation) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", + "macro_sql": "{% macro get_fixture_sql(rows, column_name_to_data_types) %}\n-- Fixture for {{ model.name }}\n{% set default_row = {} %}\n\n{%- if not column_name_to_data_types -%}\n{#-- Use defer_relation IFF it is available in the manifest and 'this' is missing from the database --#}\n{%- set this_or_defer_relation = defer_relation if (defer_relation and not load_relation(this)) else this -%}\n{%- set columns_in_relation = adapter.get_columns_in_relation(this_or_defer_relation) -%}\n\n{%- set column_name_to_data_types = {} -%}\n{%- for column in columns_in_relation -%}\n{#-- This needs to be a case-insensitive comparison --#}\n{%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n{%- endfor -%}\n{%- endif -%}\n\n{%- if not column_name_to_data_types -%}\n {{ exceptions.raise_compiler_error(\"Not able to get columns for unit test '\" ~ model.name ~ \"' from relation \" ~ this ~ \" because the relation doesn't exist\") }}\n{%- endif -%}\n\n{%- for column_name, column_type in column_name_to_data_types.items() -%}\n {%- do default_row.update({column_name: (safe_cast(\"null\", column_type) | trim )}) -%}\n{%- endfor -%}\n\n\n{%- for row in rows -%}\n{%- set formatted_row = format_row(row, column_name_to_data_types) -%}\n{%- set default_row_copy = default_row.copy() -%}\n{%- do default_row_copy.update(formatted_row) -%}\nselect\n{%- for column_name, column_value in default_row_copy.items() %} {{ column_value }} as {{ column_name }}{% if not loop.last -%}, {%- endif %}\n{%- endfor %}\n{%- if not loop.last %}\nunion all\n{% endif %}\n{%- endfor -%}\n\n{%- if (rows | length) == 0 -%}\n select\n {%- for column_name, column_value in default_row.items() %} {{ column_value }} as {{ column_name }}{% if not loop.last -%},{%- endif %}\n {%- endfor %}\n limit 0\n{%- endif -%}\n{% endmacro %}", "meta": {}, - "name": "materialization_table_default", - "original_file_path": "macros/materializations/models/table/table.sql", + "name": "get_fixture_sql", + "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/table/table.sql", + "path": "macros/unit_test_sql/get_fixture_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", - "supported_languages": [ - "sql" - ], - "tags": [], - "unique_id": "macro.dbt.materialization_table_default" + "supported_languages": null, + "unique_id": "macro.dbt.get_fixture_sql" }, - "macro.dbt.materialization_test_default": { + "macro.dbt.get_grant_sql": { "arguments": [], - "created_at": 1696458269.660993, + "created_at": 1719485736.574021, "depends_on": { "macros": [ - "macro.dbt.should_store_failures", - "macro.dbt.statement", - "macro.dbt.create_table_as", - "macro.dbt.get_test_sql" + "macro.dbt.default__get_grant_sql" ] }, "description": "", @@ -5414,36 +5728,23 @@ "node_color": null, "show": true }, - "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type='table') -%} %}\n\n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n\n {% call statement(auto_begin=True) %}\n {{ create_table_as(False, target_relation, sql) }}\n {% endcall %}\n\n {% do relations.append(target_relation) %}\n\n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n\n {{ adapter.commit() }}\n\n {% else %}\n\n {% set main_sql = sql %}\n\n {% endif %}\n\n {% set limit = config.get('limit') %}\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit)}}\n\n {%- endcall %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", + "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "meta": {}, - "name": "materialization_test_default", - "original_file_path": "macros/materializations/tests/test.sql", + "name": "get_grant_sql", + "original_file_path": "macros/adapters/apply_grants.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/tests/test.sql", + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", - "supported_languages": [ - "sql" - ], - "tags": [], - "unique_id": "macro.dbt.materialization_test_default" + "supported_languages": null, + "unique_id": "macro.dbt.get_grant_sql" }, - "macro.dbt.materialization_view_default": { + "macro.dbt.get_incremental_append_sql": { "arguments": [], - "created_at": 1696458269.726018, + "created_at": 1719485736.418218, "depends_on": { "macros": [ - "macro.dbt.load_cached_relation", - "macro.dbt.make_intermediate_relation", - "macro.dbt.make_backup_relation", - "macro.dbt.run_hooks", - "macro.dbt.drop_relation_if_exists", - "macro.dbt.statement", - "macro.dbt.get_create_view_as_sql", - "macro.dbt.should_revoke", - "macro.dbt.apply_grants", - "macro.dbt.persist_docs" + "macro.dbt.default__get_incremental_append_sql" ] }, "description": "", @@ -5451,51 +5752,47 @@ "node_color": null, "show": true }, - "macro_sql": "{%- materialization view, default -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='view') -%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"existing_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the existing_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the existing_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparison later on\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", + "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "meta": {}, - "name": "materialization_view_default", - "original_file_path": "macros/materializations/models/view/view.sql", + "name": "get_incremental_append_sql", + "original_file_path": "macros/materializations/models/incremental/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/view/view.sql", + "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", - "supported_languages": [ - "sql" - ], - "tags": [], - "unique_id": "macro.dbt.materialization_view_default" + "supported_languages": null, + "unique_id": "macro.dbt.get_incremental_append_sql" }, - "macro.dbt.noop_statement": { + "macro.dbt.get_incremental_default_sql": { "arguments": [], - "created_at": 1696458269.7650838, + "created_at": 1719485736.421412, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt_postgres.postgres__get_incremental_default_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", + "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "meta": {}, - "name": "noop_statement", - "original_file_path": "macros/etc/statement.sql", + "name": "get_incremental_default_sql", + "original_file_path": "macros/materializations/models/incremental/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/etc/statement.sql", + "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.noop_statement" + "unique_id": "macro.dbt.get_incremental_default_sql" }, - "macro.dbt.partition_range": { + "macro.dbt.get_incremental_delete_insert_sql": { "arguments": [], - "created_at": 1696458269.7719522, + "created_at": 1719485736.4188569, "depends_on": { "macros": [ - "macro.dbt.dates_in_range" + "macro.dbt.default__get_incremental_delete_insert_sql" ] }, "description": "", @@ -5503,25 +5800,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_incremental_delete_insert_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_delete_insert_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "meta": {}, - "name": "partition_range", - "original_file_path": "macros/etc/datetime.sql", + "name": "get_incremental_delete_insert_sql", + "original_file_path": "macros/materializations/models/incremental/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/etc/datetime.sql", + "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.partition_range" + "unique_id": "macro.dbt.get_incremental_delete_insert_sql" }, - "macro.dbt.persist_docs": { + "macro.dbt.get_incremental_insert_overwrite_sql": { "arguments": [], - "created_at": 1696458269.833451, + "created_at": 1719485736.420912, "depends_on": { "macros": [ - "macro.dbt.default__persist_docs" + "macro.dbt.default__get_incremental_insert_overwrite_sql" ] }, "description": "", @@ -5529,25 +5824,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_incremental_insert_overwrite_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_insert_overwrite_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "meta": {}, - "name": "persist_docs", - "original_file_path": "macros/adapters/persist_docs.sql", + "name": "get_incremental_insert_overwrite_sql", + "original_file_path": "macros/materializations/models/incremental/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/persist_docs.sql", + "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.persist_docs" + "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql" }, - "macro.dbt.position": { + "macro.dbt.get_incremental_merge_sql": { "arguments": [], - "created_at": 1696458269.7855082, + "created_at": 1719485736.419648, "depends_on": { "macros": [ - "macro.dbt.default__position" + "macro.dbt.default__get_incremental_merge_sql" ] }, "description": "", @@ -5555,25 +5848,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "meta": {}, - "name": "position", - "original_file_path": "macros/utils/position.sql", + "name": "get_incremental_merge_sql", + "original_file_path": "macros/materializations/models/incremental/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/position.sql", + "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.position" + "unique_id": "macro.dbt.get_incremental_merge_sql" }, - "macro.dbt.post_snapshot": { + "macro.dbt.get_insert_into_sql": { "arguments": [], - "created_at": 1696458269.6167622, + "created_at": 1719485736.4218738, "depends_on": { "macros": [ - "macro.dbt.default__post_snapshot" + "macro.dbt.get_quoted_csv" ] }, "description": "", @@ -5581,26 +5872,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", + "macro_sql": "{% macro get_insert_into_sql(target_relation, temp_relation, dest_columns) %}\n\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n insert into {{ target_relation }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ temp_relation }}\n )\n\n{% endmacro %}", "meta": {}, - "name": "post_snapshot", - "original_file_path": "macros/materializations/snapshots/helpers.sql", + "name": "get_insert_into_sql", + "original_file_path": "macros/materializations/models/incremental/strategies.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/helpers.sql", + "path": "macros/materializations/models/incremental/strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.post_snapshot" + "unique_id": "macro.dbt.get_insert_into_sql" }, - "macro.dbt.process_schema_changes": { + "macro.dbt.get_insert_overwrite_merge_sql": { "arguments": [], - "created_at": 1696458269.714473, + "created_at": 1719485736.415607, "depends_on": { "macros": [ - "macro.dbt.check_for_schema_changes", - "macro.dbt.sync_column_schemas" + "macro.dbt.default__get_insert_overwrite_merge_sql" ] }, "description": "", @@ -5608,77 +5896,71 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n\n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n\n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n\n {% if schema_changes_dict['schema_changed'] %}\n\n {% if on_schema_change == 'fail' %}\n\n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways:\n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n\n Additional troubleshooting context:\n Source columns not in target: {{ schema_changes_dict['source_not_in_target'] }}\n Target columns not in source: {{ schema_changes_dict['target_not_in_source'] }}\n New column types: {{ schema_changes_dict['new_target_types'] }}\n {% endset %}\n\n {% do exceptions.raise_compiler_error(fail_msg) %}\n\n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n\n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {% endif %}\n\n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n\n {% endif %}\n\n{% endmacro %}", + "macro_sql": "{% macro get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header=false) -%}\n {{ adapter.dispatch('get_insert_overwrite_merge_sql', 'dbt')(target, source, dest_columns, predicates, include_sql_header) }}\n{%- endmacro %}", "meta": {}, - "name": "process_schema_changes", - "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", + "name": "get_insert_overwrite_merge_sql", + "original_file_path": "macros/materializations/models/incremental/merge.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/on_schema_change.sql", + "path": "macros/materializations/models/incremental/merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.process_schema_changes" + "unique_id": "macro.dbt.get_insert_overwrite_merge_sql" }, - "macro.dbt.py_current_timestring": { + "macro.dbt.get_intervals_between": { "arguments": [], - "created_at": 1696458269.7723362, + "created_at": 1719485736.527589, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__get_intervals_between" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", + "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "meta": {}, - "name": "py_current_timestring", - "original_file_path": "macros/etc/datetime.sql", + "name": "get_intervals_between", + "original_file_path": "macros/utils/date_spine.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/etc/datetime.sql", + "path": "macros/utils/date_spine.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.py_current_timestring" + "unique_id": "macro.dbt.get_intervals_between" }, - "macro.dbt.py_script_comment": { + "macro.dbt.get_limit_subquery_sql": { "arguments": [], - "created_at": 1696458269.853185, + "created_at": 1719485736.58177, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__get_limit_subquery_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", + "macro_sql": "{% macro get_limit_subquery_sql(sql, limit) %}\n {{ adapter.dispatch('get_limit_subquery_sql', 'dbt')(sql, limit) }}\n{% endmacro %}", "meta": {}, - "name": "py_script_comment", - "original_file_path": "macros/python_model/python.sql", + "name": "get_limit_subquery_sql", + "original_file_path": "macros/adapters/show.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/python_model/python.sql", + "path": "macros/adapters/show.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.py_script_comment" + "unique_id": "macro.dbt.get_limit_subquery_sql" }, - "macro.dbt.py_script_postfix": { + "macro.dbt.get_materialized_view_configuration_changes": { "arguments": [], - "created_at": 1696458269.85307, + "created_at": 1719485736.494153, "depends_on": { "macros": [ - "macro.dbt.build_ref_function", - "macro.dbt.build_source_function", - "macro.dbt.build_config_dict", - "macro.dbt.is_incremental", - "macro.dbt.py_script_comment" + "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes" ] }, "description": "", @@ -5686,25 +5968,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro py_script_postfix(model) %}\n# This part is user provided model code\n# you will need to copy the next section to run the code\n# COMMAND ----------\n# this part is dbt logic for get ref work, do not modify\n\n{{ build_ref_function(model ) }}\n{{ build_source_function(model ) }}\n{{ build_config_dict(model) }}\n\nclass config:\n def __init__(self, *args, **kwargs):\n pass\n\n @staticmethod\n def get(key, default=None):\n return config_dict.get(key, default)\n\nclass this:\n \"\"\"dbt.this() or dbt.this.identifier\"\"\"\n database = '{{ this.database }}'\n schema = '{{ this.schema }}'\n identifier = '{{ this.identifier }}'\n def __repr__(self):\n return '{{ this }}'\n\n\nclass dbtObj:\n def __init__(self, load_df_function) -> None:\n self.source = lambda *args: source(*args, dbt_load_df_function=load_df_function)\n self.ref = lambda *args: ref(*args, dbt_load_df_function=load_df_function)\n self.config = config\n self.this = this()\n self.is_incremental = {{ is_incremental() }}\n\n# COMMAND ----------\n{{py_script_comment()}}\n{% endmacro %}", + "macro_sql": "{% macro get_materialized_view_configuration_changes(existing_relation, new_config) %}\n /* {#\n It's recommended that configuration changes be formatted as follows:\n {\"\": [{\"action\": \"\", \"context\": ...}]}\n\n For example:\n {\n \"indexes\": [\n {\"action\": \"drop\", \"context\": \"index_abc\"},\n {\"action\": \"create\", \"context\": {\"columns\": [\"column_1\", \"column_2\"], \"type\": \"hash\", \"unique\": True}},\n ],\n }\n\n Either way, `get_materialized_view_configuration_changes` needs to align with `get_alter_materialized_view_as_sql`.\n #} */\n {{- log('Determining configuration changes on: ' ~ existing_relation) -}}\n {%- do return(adapter.dispatch('get_materialized_view_configuration_changes', 'dbt')(existing_relation, new_config)) -%}\n{% endmacro %}", "meta": {}, - "name": "py_script_postfix", - "original_file_path": "macros/python_model/python.sql", + "name": "get_materialized_view_configuration_changes", + "original_file_path": "macros/relations/materialized_view/alter.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/python_model/python.sql", + "path": "macros/relations/materialized_view/alter.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.py_script_postfix" + "unique_id": "macro.dbt.get_materialized_view_configuration_changes" }, - "macro.dbt.rename_relation": { + "macro.dbt.get_merge_sql": { "arguments": [], - "created_at": 1696458269.815678, + "created_at": 1719485736.410901, "depends_on": { "macros": [ - "macro.dbt.default__rename_relation" + "macro.dbt.default__get_merge_sql" ] }, "description": "", @@ -5712,25 +5992,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n -- back compat for old kwarg name\n {% set incremental_predicates = kwargs.get('predicates', incremental_predicates) %}\n {{ adapter.dispatch('get_merge_sql', 'dbt')(target, source, unique_key, dest_columns, incremental_predicates) }}\n{%- endmacro %}", "meta": {}, - "name": "rename_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "get_merge_sql", + "original_file_path": "macros/materializations/models/incremental/merge.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/materializations/models/incremental/merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.rename_relation" + "unique_id": "macro.dbt.get_merge_sql" }, - "macro.dbt.replace": { + "macro.dbt.get_merge_update_columns": { "arguments": [], - "created_at": 1696458269.7736168, + "created_at": 1719485736.397727, "depends_on": { "macros": [ - "macro.dbt.default__replace" + "macro.dbt.default__get_merge_update_columns" ] }, "description": "", @@ -5738,25 +6016,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {{ return(adapter.dispatch('get_merge_update_columns', 'dbt')(merge_update_columns, merge_exclude_columns, dest_columns)) }}\n{% endmacro %}", "meta": {}, - "name": "replace", - "original_file_path": "macros/utils/replace.sql", + "name": "get_merge_update_columns", + "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/replace.sql", + "path": "macros/materializations/models/incremental/column_helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.replace" + "unique_id": "macro.dbt.get_merge_update_columns" }, - "macro.dbt.reset_csv_table": { + "macro.dbt.get_or_create_relation": { "arguments": [], - "created_at": 1696458269.748157, + "created_at": 1719485736.567741, "depends_on": { "macros": [ - "macro.dbt.default__reset_csv_table" + "macro.dbt.default__get_or_create_relation" ] }, "description": "", @@ -5764,25 +6040,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_or_create_relation(database, schema, identifier, type) -%}\n {{ return(adapter.dispatch('get_or_create_relation', 'dbt')(database, schema, identifier, type)) }}\n{% endmacro %}", "meta": {}, - "name": "reset_csv_table", - "original_file_path": "macros/materializations/seeds/helpers.sql", + "name": "get_or_create_relation", + "original_file_path": "macros/adapters/relation.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/seeds/helpers.sql", + "path": "macros/adapters/relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.reset_csv_table" + "unique_id": "macro.dbt.get_or_create_relation" }, - "macro.dbt.right": { + "macro.dbt.get_powers_of_two": { "arguments": [], - "created_at": 1696458269.778283, + "created_at": 1719485736.534465, "depends_on": { "macros": [ - "macro.dbt.default__right" + "macro.dbt.default__get_powers_of_two" ] }, "description": "", @@ -5790,51 +6064,45 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt')(upper_bound)) }}\n{% endmacro %}", "meta": {}, - "name": "right", - "original_file_path": "macros/utils/right.sql", + "name": "get_powers_of_two", + "original_file_path": "macros/utils/generate_series.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/right.sql", + "path": "macros/utils/generate_series.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.right" + "unique_id": "macro.dbt.get_powers_of_two" }, - "macro.dbt.run_hooks": { + "macro.dbt.get_quoted_csv": { "arguments": [], - "created_at": 1696458269.590806, + "created_at": 1719485736.395989, "depends_on": { - "macros": [ - "macro.dbt.statement" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", + "macro_sql": "{% macro get_quoted_csv(column_names) %}\n\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote(col)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "meta": {}, - "name": "run_hooks", - "original_file_path": "macros/materializations/hooks.sql", + "name": "get_quoted_csv", + "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/hooks.sql", + "path": "macros/materializations/models/incremental/column_helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.run_hooks" + "unique_id": "macro.dbt.get_quoted_csv" }, - "macro.dbt.run_query": { + "macro.dbt.get_relation_last_modified": { "arguments": [], - "created_at": 1696458269.765571, + "created_at": 1719485736.593024, "depends_on": { "macros": [ - "macro.dbt.statement" + "macro.dbt.default__get_relation_last_modified" ] }, "description": "", @@ -5842,25 +6110,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", + "macro_sql": "{% macro get_relation_last_modified(information_schema, relations) %}\n {{ return(adapter.dispatch('get_relation_last_modified', 'dbt')(information_schema, relations)) }}\n{% endmacro %}", "meta": {}, - "name": "run_query", - "original_file_path": "macros/etc/statement.sql", + "name": "get_relation_last_modified", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/etc/statement.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.run_query" + "unique_id": "macro.dbt.get_relation_last_modified" }, - "macro.dbt.safe_cast": { + "macro.dbt.get_relations": { "arguments": [], - "created_at": 1696458269.7820318, + "created_at": 1719485736.592459, "depends_on": { "macros": [ - "macro.dbt.default__safe_cast" + "macro.dbt_postgres.postgres__get_relations" ] }, "description": "", @@ -5868,73 +6134,71 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_relations() %}\n {{ return(adapter.dispatch('get_relations', 'dbt')()) }}\n{% endmacro %}", "meta": {}, - "name": "safe_cast", - "original_file_path": "macros/utils/safe_cast.sql", + "name": "get_relations", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/safe_cast.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.safe_cast" + "unique_id": "macro.dbt.get_relations" }, - "macro.dbt.set_sql_header": { + "macro.dbt.get_rename_intermediate_sql": { "arguments": [], - "created_at": 1696458269.592764, + "created_at": 1719485736.484606, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__get_rename_intermediate_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", + "macro_sql": "{%- macro get_rename_intermediate_sql(relation) -%}\n {{- log('Applying RENAME INTERMEDIATE to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_intermediate_sql', 'dbt')(relation) -}}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "set_sql_header", - "original_file_path": "macros/materializations/configs.sql", + "name": "get_rename_intermediate_sql", + "original_file_path": "macros/relations/rename_intermediate.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/configs.sql", + "path": "macros/relations/rename_intermediate.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.set_sql_header" + "unique_id": "macro.dbt.get_rename_intermediate_sql" }, - "macro.dbt.should_full_refresh": { + "macro.dbt.get_rename_materialized_view_sql": { "arguments": [], - "created_at": 1696458269.593334, + "created_at": 1719485736.4909282, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt_postgres.postgres__get_rename_materialized_view_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", + "macro_sql": "{% macro get_rename_materialized_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_materialized_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "meta": {}, - "name": "should_full_refresh", - "original_file_path": "macros/materializations/configs.sql", + "name": "get_rename_materialized_view_sql", + "original_file_path": "macros/relations/materialized_view/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/configs.sql", + "path": "macros/relations/materialized_view/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.should_full_refresh" + "unique_id": "macro.dbt.get_rename_materialized_view_sql" }, - "macro.dbt.should_revoke": { + "macro.dbt.get_rename_sql": { "arguments": [], - "created_at": 1696458269.824169, + "created_at": 1719485736.47766, "depends_on": { "macros": [ - "macro.dbt.copy_grants" + "macro.dbt.default__get_rename_sql" ] }, "description": "", @@ -5942,49 +6206,47 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro should_revoke(existing_relation, full_refresh_mode=True) %}\n\n {% if not existing_relation %}\n {#-- The table doesn't already exist, so no grants to copy over --#}\n {{ return(False) }}\n {% elif full_refresh_mode %}\n {#-- The object is being REPLACED -- whether grants are copied over depends on the value of user config --#}\n {{ return(copy_grants()) }}\n {% else %}\n {#-- The table is being merged/upserted/inserted -- grants will be carried over --#}\n {{ return(True) }}\n {% endif %}\n\n{% endmacro %}", + "macro_sql": "{%- macro get_rename_sql(relation, new_name) -%}\n {{- log('Applying RENAME to: ' ~ relation) -}}\n {{- adapter.dispatch('get_rename_sql', 'dbt')(relation, new_name) -}}\n{%- endmacro -%}\n\n\n", "meta": {}, - "name": "should_revoke", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "get_rename_sql", + "original_file_path": "macros/relations/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/relations/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.should_revoke" + "unique_id": "macro.dbt.get_rename_sql" }, - "macro.dbt.should_store_failures": { + "macro.dbt.get_rename_table_sql": { "arguments": [], - "created_at": 1696458269.593961, + "created_at": 1719485736.5068932, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt_postgres.postgres__get_rename_table_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", + "macro_sql": "{% macro get_rename_table_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_table_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "meta": {}, - "name": "should_store_failures", - "original_file_path": "macros/materializations/configs.sql", + "name": "get_rename_table_sql", + "original_file_path": "macros/relations/table/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/configs.sql", + "path": "macros/relations/table/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.should_store_failures" + "unique_id": "macro.dbt.get_rename_table_sql" }, - "macro.dbt.snapshot_check_all_get_existing_columns": { + "macro.dbt.get_rename_view_sql": { "arguments": [], - "created_at": 1696458269.6062112, + "created_at": 1719485736.5145411, "depends_on": { "macros": [ - "macro.dbt.get_columns_in_query" + "macro.dbt_postgres.postgres__get_rename_view_sql" ] }, "description": "", @@ -5992,28 +6254,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) -%}\n {%- if not target_exists -%}\n {#-- no table yet -> return whatever the query does --#}\n {{ return((false, query_columns)) }}\n {%- endif -%}\n\n {#-- handle any schema changes --#}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=node.alias) -%}\n\n {% if check_cols_config == 'all' %}\n {%- set query_columns = get_columns_in_query(node['compiled_code']) -%}\n\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {#-- query for proper casing/quoting, to support comparison below --#}\n {%- set select_check_cols_from_target -%}\n select {{ check_cols_config | join(', ') }} from ({{ node['compiled_code'] }}) subq\n {%- endset -%}\n {% set query_columns = get_columns_in_query(select_check_cols_from_target) %}\n\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set existing_cols = adapter.get_columns_in_relation(target_relation) | map(attribute = 'name') | list -%}\n {%- set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(adapter.quote(col)) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return((ns.column_added, intersection)) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_rename_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "meta": {}, - "name": "snapshot_check_all_get_existing_columns", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "get_rename_view_sql", + "original_file_path": "macros/relations/view/rename.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/relations/view/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns" + "unique_id": "macro.dbt.get_rename_view_sql" }, - "macro.dbt.snapshot_check_strategy": { + "macro.dbt.get_replace_materialized_view_sql": { "arguments": [], - "created_at": 1696458269.6088378, + "created_at": 1719485736.487545, "depends_on": { "macros": [ - "macro.dbt.snapshot_get_time", - "macro.dbt.snapshot_check_all_get_existing_columns", - "macro.dbt.get_true_sql", - "macro.dbt.snapshot_hash_arguments" + "macro.dbt.default__get_replace_materialized_view_sql" ] }, "description": "", @@ -6021,25 +6278,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set check_cols_config = config['check_cols'] %}\n {% set primary_key = config['unique_key'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n {% set updated_at = config.get('updated_at', snapshot_get_time()) %}\n\n {% set column_added = false %}\n\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n {{ get_true_sql() }}\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", + "macro_sql": "{% macro get_replace_materialized_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_materialized_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "meta": {}, - "name": "snapshot_check_strategy", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "get_replace_materialized_view_sql", + "original_file_path": "macros/relations/materialized_view/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/relations/materialized_view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_check_strategy" + "unique_id": "macro.dbt.get_replace_materialized_view_sql" }, - "macro.dbt.snapshot_get_time": { + "macro.dbt.get_replace_sql": { "arguments": [], - "created_at": 1696458269.80277, + "created_at": 1719485736.4724941, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__snapshot_get_time" + "macro.dbt.default__get_replace_sql" ] }, "description": "", @@ -6047,25 +6302,23 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro get_replace_sql(existing_relation, target_relation, sql) %}\n {{- log('Applying REPLACE to: ' ~ existing_relation) -}}\n {{- adapter.dispatch('get_replace_sql', 'dbt')(existing_relation, target_relation, sql) -}}\n{% endmacro %}", "meta": {}, - "name": "snapshot_get_time", - "original_file_path": "macros/adapters/timestamps.sql", + "name": "get_replace_sql", + "original_file_path": "macros/relations/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/timestamps.sql", + "path": "macros/relations/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_get_time" + "unique_id": "macro.dbt.get_replace_sql" }, - "macro.dbt.snapshot_hash_arguments": { + "macro.dbt.get_replace_table_sql": { "arguments": [], - "created_at": 1696458269.6016371, + "created_at": 1719485736.506175, "depends_on": { "macros": [ - "macro.dbt.default__snapshot_hash_arguments" + "macro.dbt_postgres.postgres__get_replace_table_sql" ] }, "description": "", @@ -6073,25 +6326,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_replace_table_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_table_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "meta": {}, - "name": "snapshot_hash_arguments", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "get_replace_table_sql", + "original_file_path": "macros/relations/table/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/relations/table/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_hash_arguments" + "unique_id": "macro.dbt.get_replace_table_sql" }, - "macro.dbt.snapshot_merge_sql": { + "macro.dbt.get_replace_view_sql": { "arguments": [], - "created_at": 1696458269.594904, + "created_at": 1719485736.5121448, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__snapshot_merge_sql" + "macro.dbt_postgres.postgres__get_replace_view_sql" ] }, "description": "", @@ -6099,25 +6350,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_replace_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "meta": {}, - "name": "snapshot_merge_sql", - "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", + "name": "get_replace_view_sql", + "original_file_path": "macros/relations/view/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/snapshot_merge.sql", + "path": "macros/relations/view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_merge_sql" + "unique_id": "macro.dbt.get_replace_view_sql" }, - "macro.dbt.snapshot_staging_table": { + "macro.dbt.get_revoke_sql": { "arguments": [], - "created_at": 1696458269.617667, + "created_at": 1719485736.574466, "depends_on": { "macros": [ - "macro.dbt.default__snapshot_staging_table" + "macro.dbt.default__get_revoke_sql" ] }, "description": "", @@ -6125,51 +6374,45 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", + "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "meta": {}, - "name": "snapshot_staging_table", - "original_file_path": "macros/materializations/snapshots/helpers.sql", + "name": "get_revoke_sql", + "original_file_path": "macros/adapters/apply_grants.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/helpers.sql", + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_staging_table" + "unique_id": "macro.dbt.get_revoke_sql" }, - "macro.dbt.snapshot_string_as_time": { + "macro.dbt.get_seed_column_quoted_csv": { "arguments": [], - "created_at": 1696458269.603466, + "created_at": 1719485736.462852, "depends_on": { - "macros": [ - "macro.dbt_postgres.postgres__snapshot_string_as_time" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", + "macro_sql": "{% macro get_seed_column_quoted_csv(model, column_names) %}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n {% set quoted = [] %}\n {% for col in column_names -%}\n {%- do quoted.append(adapter.quote_seed_column(col, quote_seed_column)) -%}\n {%- endfor %}\n\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n{% endmacro %}", "meta": {}, - "name": "snapshot_string_as_time", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "get_seed_column_quoted_csv", + "original_file_path": "macros/materializations/seeds/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/materializations/seeds/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_string_as_time" + "unique_id": "macro.dbt.get_seed_column_quoted_csv" }, - "macro.dbt.snapshot_timestamp_strategy": { + "macro.dbt.get_select_subquery": { "arguments": [], - "created_at": 1696458269.603195, + "created_at": 1719485736.510276, "depends_on": { "macros": [ - "macro.dbt.snapshot_hash_arguments" + "macro.dbt.default__get_select_subquery" ] }, "description": "", @@ -6177,25 +6420,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set primary_key = config['unique_key'] %}\n {% set updated_at = config['updated_at'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.dbt_valid_from < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", + "macro_sql": "{% macro get_select_subquery(sql) %}\n {{ return(adapter.dispatch('get_select_subquery', 'dbt')(sql)) }}\n{% endmacro %}", "meta": {}, - "name": "snapshot_timestamp_strategy", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "get_select_subquery", + "original_file_path": "macros/relations/table/create.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/relations/table/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.snapshot_timestamp_strategy" + "unique_id": "macro.dbt.get_select_subquery" }, - "macro.dbt.split_part": { + "macro.dbt.get_show_grant_sql": { "arguments": [], - "created_at": 1696458269.795978, + "created_at": 1719485736.573664, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres__split_part" + "macro.dbt_postgres.postgres__get_show_grant_sql" ] }, "description": "", @@ -6203,97 +6444,95 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", + "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", "meta": {}, - "name": "split_part", - "original_file_path": "macros/utils/split_part.sql", + "name": "get_show_grant_sql", + "original_file_path": "macros/adapters/apply_grants.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/split_part.sql", + "path": "macros/adapters/apply_grants.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.split_part" + "unique_id": "macro.dbt.get_show_grant_sql" }, - "macro.dbt.sql_convert_columns_in_relation": { + "macro.dbt.get_show_indexes_sql": { "arguments": [], - "created_at": 1696458269.844328, + "created_at": 1719485736.562955, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt_postgres.postgres__get_show_indexes_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", + "macro_sql": "{% macro get_show_indexes_sql(relation) -%}\n {{ adapter.dispatch('get_show_indexes_sql', 'dbt')(relation) }}\n{%- endmacro %}", "meta": {}, - "name": "sql_convert_columns_in_relation", - "original_file_path": "macros/adapters/columns.sql", + "name": "get_show_indexes_sql", + "original_file_path": "macros/adapters/indexes.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/columns.sql", + "path": "macros/adapters/indexes.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.sql_convert_columns_in_relation" + "unique_id": "macro.dbt.get_show_indexes_sql" }, - "macro.dbt.statement": { + "macro.dbt.get_show_sql": { "arguments": [], - "created_at": 1696458269.764031, + "created_at": 1719485736.581328, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.get_limit_subquery_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "\n{%- macro statement(name=None, fetch_result=False, auto_begin=True, language='sql') -%}\n {%- if execute: -%}\n {%- set compiled_code = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime {} for node \"{}\"'.format(language, model['unique_id'])) }}\n {{ write(compiled_code) }}\n {%- endif -%}\n {%- if language == 'sql'-%}\n {%- set res, table = adapter.execute(compiled_code, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- elif language == 'python' -%}\n {%- set res = submit_python_job(model, compiled_code) -%}\n {#-- TODO: What should table be for python models? --#}\n {%- set table = None -%}\n {%- else -%}\n {% do exceptions.raise_compiler_error(\"statement macro didn't get supported language\") %}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", + "macro_sql": "{% macro get_show_sql(compiled_code, sql_header, limit) -%}\n {%- if sql_header -%}\n {{ sql_header }}\n {%- endif -%}\n {%- if limit is not none -%}\n {{ get_limit_subquery_sql(compiled_code, limit) }}\n {%- else -%}\n {{ compiled_code }}\n {%- endif -%}\n{% endmacro %}", "meta": {}, - "name": "statement", - "original_file_path": "macros/etc/statement.sql", + "name": "get_show_sql", + "original_file_path": "macros/adapters/show.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/etc/statement.sql", + "path": "macros/adapters/show.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.statement" + "unique_id": "macro.dbt.get_show_sql" }, - "macro.dbt.strategy_dispatch": { + "macro.dbt.get_table_columns_and_constraints": { "arguments": [], - "created_at": 1696458269.601364, + "created_at": 1719485736.497471, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.default__get_table_columns_and_constraints" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", + "macro_sql": "{%- macro get_table_columns_and_constraints() -%}\n {{ adapter.dispatch('get_table_columns_and_constraints', 'dbt')() }}\n{%- endmacro -%}\n\n", "meta": {}, - "name": "strategy_dispatch", - "original_file_path": "macros/materializations/snapshots/strategies.sql", + "name": "get_table_columns_and_constraints", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/snapshots/strategies.sql", + "path": "macros/relations/column/columns_spec_ddl.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.strategy_dispatch" + "unique_id": "macro.dbt.get_table_columns_and_constraints" }, - "macro.dbt.string_literal": { + "macro.dbt.get_test_sql": { "arguments": [], - "created_at": 1696458269.786274, + "created_at": 1719485736.37231, "depends_on": { "macros": [ - "macro.dbt.default__string_literal" + "macro.dbt.default__get_test_sql" ] }, "description": "", @@ -6301,25 +6540,23 @@ "node_color": null, "show": true }, - "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro get_test_sql(main_sql, fail_calc, warn_if, error_if, limit) -%}\n {{ adapter.dispatch('get_test_sql', 'dbt')(main_sql, fail_calc, warn_if, error_if, limit) }}\n{%- endmacro %}", "meta": {}, - "name": "string_literal", - "original_file_path": "macros/utils/literal.sql", + "name": "get_test_sql", + "original_file_path": "macros/materializations/tests/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/literal.sql", + "path": "macros/materializations/tests/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.string_literal" + "unique_id": "macro.dbt.get_test_sql" }, - "macro.dbt.support_multiple_grantees_per_dcl_statement": { + "macro.dbt.get_true_sql": { "arguments": [], - "created_at": 1696458269.823423, + "created_at": 1719485736.355415, "depends_on": { "macros": [ - "macro.dbt.default__support_multiple_grantees_per_dcl_statement" + "macro.dbt.default__get_true_sql" ] }, "description": "", @@ -6327,26 +6564,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", + "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", "meta": {}, - "name": "support_multiple_grantees_per_dcl_statement", - "original_file_path": "macros/adapters/apply_grants.sql", + "name": "get_true_sql", + "original_file_path": "macros/materializations/snapshots/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/apply_grants.sql", + "path": "macros/materializations/snapshots/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement" + "unique_id": "macro.dbt.get_true_sql" }, - "macro.dbt.sync_column_schemas": { + "macro.dbt.get_unit_test_sql": { "arguments": [], - "created_at": 1696458269.713077, + "created_at": 1719485736.3730109, "depends_on": { "macros": [ - "macro.dbt.alter_relation_add_remove_columns", - "macro.dbt.alter_column_type" + "macro.dbt.default__get_unit_test_sql" ] }, "description": "", @@ -6354,25 +6588,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n\n {% elif on_schema_change == 'sync_all_columns' %}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n\n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n\n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n\n {% do log(schema_change_message) %}\n\n{% endmacro %}", + "macro_sql": "{% macro get_unit_test_sql(main_sql, expected_fixture_sql, expected_column_names) -%}\n {{ adapter.dispatch('get_unit_test_sql', 'dbt')(main_sql, expected_fixture_sql, expected_column_names) }}\n{%- endmacro %}", "meta": {}, - "name": "sync_column_schemas", - "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", + "name": "get_unit_test_sql", + "original_file_path": "macros/materializations/tests/helpers.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/materializations/models/incremental/on_schema_change.sql", + "path": "macros/materializations/tests/helpers.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.sync_column_schemas" + "unique_id": "macro.dbt.get_unit_test_sql" }, - "macro.dbt.test_accepted_values": { + "macro.dbt.get_where_subquery": { "arguments": [], - "created_at": 1696458269.854999, + "created_at": 1719485736.3740978, "depends_on": { "macros": [ - "macro.dbt.default__test_accepted_values" + "macro.dbt.default__get_where_subquery" ] }, "description": "", @@ -6380,25 +6612,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", + "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "meta": {}, - "name": "test_accepted_values", - "original_file_path": "tests/generic/builtin.sql", + "name": "get_where_subquery", + "original_file_path": "macros/materializations/tests/where_subquery.sql", "package_name": "dbt", "patch_path": null, - "path": "tests/generic/builtin.sql", + "path": "macros/materializations/tests/where_subquery.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.test_accepted_values" + "unique_id": "macro.dbt.get_where_subquery" }, - "macro.dbt.test_not_null": { + "macro.dbt.handle_existing_table": { "arguments": [], - "created_at": 1696458269.854527, + "created_at": 1719485736.513942, "depends_on": { "macros": [ - "macro.dbt.default__test_not_null" + "macro.dbt.default__handle_existing_table" ] }, "description": "", @@ -6406,25 +6636,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", + "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "meta": {}, - "name": "test_not_null", - "original_file_path": "tests/generic/builtin.sql", + "name": "handle_existing_table", + "original_file_path": "macros/relations/view/replace.sql", "package_name": "dbt", "patch_path": null, - "path": "tests/generic/builtin.sql", + "path": "macros/relations/view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.test_not_null" + "unique_id": "macro.dbt.handle_existing_table" }, - "macro.dbt.test_relationships": { + "macro.dbt.hash": { "arguments": [], - "created_at": 1696458269.855469, + "created_at": 1719485736.5412428, "depends_on": { "macros": [ - "macro.dbt.default__test_relationships" + "macro.dbt.default__hash" ] }, "description": "", @@ -6432,25 +6660,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", + "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", "meta": {}, - "name": "test_relationships", - "original_file_path": "tests/generic/builtin.sql", + "name": "hash", + "original_file_path": "macros/utils/hash.sql", "package_name": "dbt", "patch_path": null, - "path": "tests/generic/builtin.sql", + "path": "macros/utils/hash.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.test_relationships" + "unique_id": "macro.dbt.hash" }, - "macro.dbt.test_unique": { + "macro.dbt.in_transaction": { "arguments": [], - "created_at": 1696458269.854142, + "created_at": 1719485736.336884, "depends_on": { "macros": [ - "macro.dbt.default__test_unique" + "macro.dbt.make_hook_config" ] }, "description": "", @@ -6458,25 +6684,45 @@ "node_color": null, "show": true }, - "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", + "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "meta": {}, - "name": "test_unique", - "original_file_path": "tests/generic/builtin.sql", + "name": "in_transaction", + "original_file_path": "macros/materializations/hooks.sql", "package_name": "dbt", "patch_path": null, - "path": "tests/generic/builtin.sql", + "path": "macros/materializations/hooks.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.test_unique" + "unique_id": "macro.dbt.in_transaction" }, - "macro.dbt.truncate_relation": { + "macro.dbt.incremental_validate_on_schema_change": { + "arguments": [], + "created_at": 1719485736.437581, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro incremental_validate_on_schema_change(on_schema_change, default='ignore') %}\n\n {% if on_schema_change not in ['sync_all_columns', 'append_new_columns', 'fail', 'ignore'] %}\n\n {% set log_message = 'Invalid value for on_schema_change (%s) specified. Setting default value of %s.' % (on_schema_change, default) %}\n {% do log(log_message) %}\n\n {{ return(default) }}\n\n {% else %}\n\n {{ return(on_schema_change) }}\n\n {% endif %}\n\n{% endmacro %}", + "meta": {}, + "name": "incremental_validate_on_schema_change", + "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/incremental/on_schema_change.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.incremental_validate_on_schema_change" + }, + "macro.dbt.information_schema_name": { "arguments": [], - "created_at": 1696458269.8150861, + "created_at": 1719485736.590652, "depends_on": { "macros": [ - "macro.dbt.default__truncate_relation" + "macro.dbt_postgres.postgres__information_schema_name" ] }, "description": "", @@ -6484,25 +6730,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", + "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "meta": {}, - "name": "truncate_relation", - "original_file_path": "macros/adapters/relation.sql", + "name": "information_schema_name", + "original_file_path": "macros/adapters/metadata.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/adapters/relation.sql", + "path": "macros/adapters/metadata.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.truncate_relation" + "unique_id": "macro.dbt.information_schema_name" }, - "macro.dbt.type_bigint": { + "macro.dbt.intersect": { "arguments": [], - "created_at": 1696458269.7903318, + "created_at": 1719485736.537264, "depends_on": { "macros": [ - "macro.dbt.default__type_bigint" + "macro.dbt.default__intersect" ] }, "description": "", @@ -6510,25 +6754,23 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", "meta": {}, - "name": "type_bigint", - "original_file_path": "macros/utils/data_types.sql", + "name": "intersect", + "original_file_path": "macros/utils/intersect.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/utils/intersect.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.type_bigint" + "unique_id": "macro.dbt.intersect" }, - "macro.dbt.type_boolean": { + "macro.dbt.is_incremental": { "arguments": [], - "created_at": 1696458269.791368, + "created_at": 1719485736.417088, "depends_on": { "macros": [ - "macro.dbt.default__type_boolean" + "macro.dbt.should_full_refresh" ] }, "description": "", @@ -6536,25 +6778,23 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro is_incremental() %}\n {#-- do not run introspective queries in parsing #}\n {% if not execute %}\n {{ return(False) }}\n {% else %}\n {% set relation = adapter.get_relation(this.database, this.schema, this.table) %}\n {{ return(relation is not none\n and relation.type == 'table'\n and model.config.materialized == 'incremental'\n and not should_full_refresh()) }}\n {% endif %}\n{% endmacro %}", "meta": {}, - "name": "type_boolean", - "original_file_path": "macros/utils/data_types.sql", + "name": "is_incremental", + "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/materializations/models/incremental/is_incremental.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.type_boolean" + "unique_id": "macro.dbt.is_incremental" }, - "macro.dbt.type_float": { + "macro.dbt.last_day": { "arguments": [], - "created_at": 1696458269.789262, + "created_at": 1719485736.553028, "depends_on": { "macros": [ - "macro.dbt.default__type_float" + "macro.dbt_postgres.postgres__last_day" ] }, "description": "", @@ -6562,25 +6802,23 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", "meta": {}, - "name": "type_float", - "original_file_path": "macros/utils/data_types.sql", + "name": "last_day", + "original_file_path": "macros/utils/last_day.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/utils/last_day.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.type_float" + "unique_id": "macro.dbt.last_day" }, - "macro.dbt.type_int": { + "macro.dbt.length": { "arguments": [], - "created_at": 1696458269.790855, + "created_at": 1719485736.536302, "depends_on": { "macros": [ - "macro.dbt.default__type_int" + "macro.dbt.default__length" ] }, "description": "", @@ -6588,25 +6826,2248 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", "meta": {}, - "name": "type_int", - "original_file_path": "macros/utils/data_types.sql", + "name": "length", + "original_file_path": "macros/utils/length.sql", "package_name": "dbt", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/utils/length.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.type_int" + "unique_id": "macro.dbt.length" + }, + "macro.dbt.list_relations_without_caching": { + "arguments": [], + "created_at": 1719485736.592111, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__list_relations_without_caching" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", + "meta": {}, + "name": "list_relations_without_caching", + "original_file_path": "macros/adapters/metadata.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/metadata.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.list_relations_without_caching" + }, + "macro.dbt.list_schemas": { + "arguments": [], + "created_at": 1719485736.591011, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__list_schemas" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", + "meta": {}, + "name": "list_schemas", + "original_file_path": "macros/adapters/metadata.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/metadata.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.list_schemas" + }, + "macro.dbt.listagg": { + "arguments": [], + "created_at": 1719485736.5392041, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__listagg" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro listagg(measure, delimiter_text=\"','\", order_by_clause=none, limit_num=none) -%}\n {{ return(adapter.dispatch('listagg', 'dbt') (measure, delimiter_text, order_by_clause, limit_num)) }}\n{%- endmacro %}", + "meta": {}, + "name": "listagg", + "original_file_path": "macros/utils/listagg.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/listagg.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.listagg" + }, + "macro.dbt.load_cached_relation": { + "arguments": [], + "created_at": 1719485736.568574, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro load_cached_relation(relation) %}\n {% do return(adapter.get_relation(\n database=relation.database,\n schema=relation.schema,\n identifier=relation.identifier\n )) -%}\n{% endmacro %}", + "meta": {}, + "name": "load_cached_relation", + "original_file_path": "macros/adapters/relation.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/relation.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.load_cached_relation" + }, + "macro.dbt.load_csv_rows": { + "arguments": [], + "created_at": 1719485736.4631271, + "depends_on": { + "macros": [ + "macro.dbt.default__load_csv_rows" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", + "meta": {}, + "name": "load_csv_rows", + "original_file_path": "macros/materializations/seeds/helpers.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/seeds/helpers.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.load_csv_rows" + }, + "macro.dbt.load_relation": { + "arguments": [], + "created_at": 1719485736.568728, + "depends_on": { + "macros": [ + "macro.dbt.load_cached_relation" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", + "meta": {}, + "name": "load_relation", + "original_file_path": "macros/adapters/relation.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/relation.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.load_relation" + }, + "macro.dbt.make_backup_relation": { + "arguments": [], + "created_at": 1719485736.566729, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__make_backup_relation" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro make_backup_relation(base_relation, backup_relation_type, suffix='__dbt_backup') %}\n {{ return(adapter.dispatch('make_backup_relation', 'dbt')(base_relation, backup_relation_type, suffix)) }}\n{% endmacro %}", + "meta": {}, + "name": "make_backup_relation", + "original_file_path": "macros/adapters/relation.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/relation.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.make_backup_relation" + }, + "macro.dbt.make_hook_config": { + "arguments": [], + "created_at": 1719485736.336577, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", + "meta": {}, + "name": "make_hook_config", + "original_file_path": "macros/materializations/hooks.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/hooks.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.make_hook_config" + }, + "macro.dbt.make_intermediate_relation": { + "arguments": [], + "created_at": 1719485736.565727, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__make_intermediate_relation" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", + "meta": {}, + "name": "make_intermediate_relation", + "original_file_path": "macros/adapters/relation.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/relation.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.make_intermediate_relation" + }, + "macro.dbt.make_temp_relation": { + "arguments": [], + "created_at": 1719485736.5661461, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__make_temp_relation" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", + "meta": {}, + "name": "make_temp_relation", + "original_file_path": "macros/adapters/relation.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/relation.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.make_temp_relation" + }, + "macro.dbt.materialization_clone_default": { + "arguments": [], + "created_at": 1719485736.448061, + "depends_on": { + "macros": [ + "macro.dbt.load_cached_relation", + "macro.dbt.can_clone_table", + "macro.dbt.drop_relation_if_exists", + "macro.dbt.statement", + "macro.dbt.create_or_replace_clone", + "macro.dbt.should_revoke", + "macro.dbt.apply_grants", + "macro.dbt.persist_docs" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- materialization clone, default -%}\n\n {%- set relations = {'relations': []} -%}\n\n {%- if not defer_relation -%}\n -- nothing to do\n {{ log(\"No relation found in state manifest for \" ~ model.unique_id, info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n\n {%- if existing_relation and not flags.FULL_REFRESH -%}\n -- noop!\n {{ log(\"Relation \" ~ existing_relation ~ \" already exists\", info=True) }}\n {{ return(relations) }}\n {%- endif -%}\n\n {%- set other_existing_relation = load_cached_relation(defer_relation) -%}\n\n -- If this is a database that can do zero-copy cloning of tables, and the other relation is a table, then this will be a table\n -- Otherwise, this will be a view\n\n {% set can_clone_table = can_clone_table() %}\n\n {%- if other_existing_relation and other_existing_relation.type == 'table' and can_clone_table -%}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {% if existing_relation is not none and not existing_relation.is_table %}\n {{ log(\"Dropping relation \" ~ existing_relation ~ \" because it is of type \" ~ existing_relation.type) }}\n {{ drop_relation_if_exists(existing_relation) }}\n {% endif %}\n\n -- as a general rule, data platforms that can clone tables can also do atomic 'create or replace'\n {% call statement('main') %}\n {% if target_relation and defer_relation and target_relation == defer_relation %}\n {{ log(\"Target relation and defer relation are the same, skipping clone for relation: \" ~ target_relation) }}\n {% else %}\n {{ create_or_replace_clone(target_relation, defer_relation) }}\n {% endif %}\n\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n {% do persist_docs(target_relation, model) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n {%- else -%}\n\n {%- set target_relation = this.incorporate(type='view') -%}\n\n -- reuse the view materialization\n -- TODO: support actual dispatch for materialization macros\n -- Tracking ticket: https://github.com/dbt-labs/dbt-core/issues/7799\n {% set search_name = \"materialization_view_\" ~ adapter.type() %}\n {% if not search_name in context %}\n {% set search_name = \"materialization_view_default\" %}\n {% endif %}\n {% set materialization_macro = context[search_name] %}\n {% set relations = materialization_macro() %}\n {{ return(relations) }}\n\n {%- endif -%}\n\n{%- endmaterialization -%}", + "meta": {}, + "name": "materialization_clone_default", + "original_file_path": "macros/materializations/models/clone/clone.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/clone/clone.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_clone_default" + }, + "macro.dbt.materialization_incremental_default": { + "arguments": [], + "created_at": 1719485736.4306219, + "depends_on": { + "macros": [ + "macro.dbt.load_cached_relation", + "macro.dbt.make_temp_relation", + "macro.dbt.make_intermediate_relation", + "macro.dbt.make_backup_relation", + "macro.dbt.should_full_refresh", + "macro.dbt.incremental_validate_on_schema_change", + "macro.dbt.drop_relation_if_exists", + "macro.dbt.run_hooks", + "macro.dbt.get_create_table_as_sql", + "macro.dbt.run_query", + "macro.dbt.process_schema_changes", + "macro.dbt.statement", + "macro.dbt.should_revoke", + "macro.dbt.apply_grants", + "macro.dbt.persist_docs", + "macro.dbt.create_indexes" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% materialization incremental, default -%}\n\n -- relations\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation)-%}\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n\n -- configs\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh() or existing_relation.is_view) -%}\n {%- set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') -%}\n\n -- the temp_ and backup_ relations should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation. This has to happen before\n -- BEGIN, in a separate transaction\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set to_drop = [] %}\n\n {% if existing_relation is none %}\n {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n {% elif full_refresh_mode %}\n {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n {% set need_swap = true %}\n {% else %}\n {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n {% do adapter.expand_target_column_types(\n from_relation=temp_relation,\n to_relation=target_relation) %}\n {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n\n {#-- Get the incremental_strategy, the macro to use for the strategy, and build the sql --#}\n {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n {% set incremental_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\n {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n {% set strategy_arg_dict = ({'target_relation': target_relation, 'temp_relation': temp_relation, 'unique_key': unique_key, 'dest_columns': dest_columns, 'incremental_predicates': incremental_predicates }) %}\n {% set build_sql = strategy_sql_macro_func(strategy_arg_dict) %}\n\n {% endif %}\n\n {% call statement(\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% if need_swap %}\n {% do adapter.rename_relation(target_relation, backup_relation) %}\n {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n {% do to_drop.append(backup_relation) %}\n {% endif %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {% do adapter.commit() %}\n\n {% for rel in to_drop %}\n {% do adapter.drop_relation(rel) %}\n {% endfor %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", + "meta": {}, + "name": "materialization_incremental_default", + "original_file_path": "macros/materializations/models/incremental/incremental.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/incremental/incremental.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_incremental_default" + }, + "macro.dbt.materialization_materialized_view_default": { + "arguments": [], + "created_at": 1719485736.383056, + "depends_on": { + "macros": [ + "macro.dbt.load_cached_relation", + "macro.dbt.make_intermediate_relation", + "macro.dbt.make_backup_relation", + "macro.dbt.materialized_view_setup", + "macro.dbt.materialized_view_get_build_sql", + "macro.dbt.materialized_view_execute_no_op", + "macro.dbt.materialized_view_execute_build_sql", + "macro.dbt.materialized_view_teardown" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% materialization materialized_view, default %}\n {% set existing_relation = load_cached_relation(this) %}\n {% set target_relation = this.incorporate(type=this.MaterializedView) %}\n {% set intermediate_relation = make_intermediate_relation(target_relation) %}\n {% set backup_relation_type = target_relation.MaterializedView if existing_relation is none else existing_relation.type %}\n {% set backup_relation = make_backup_relation(target_relation, backup_relation_type) %}\n\n {{ materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) }}\n\n {% set build_sql = materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% if build_sql == '' %}\n {{ materialized_view_execute_no_op(target_relation) }}\n {% else %}\n {{ materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) }}\n {% endif %}\n\n {{ materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", + "meta": {}, + "name": "materialization_materialized_view_default", + "original_file_path": "macros/materializations/models/materialized_view.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/materialized_view.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_materialized_view_default" + }, + "macro.dbt.materialization_seed_default": { + "arguments": [], + "created_at": 1719485736.4520829, + "depends_on": { + "macros": [ + "macro.dbt.should_full_refresh", + "macro.dbt.run_hooks", + "macro.dbt.reset_csv_table", + "macro.dbt.create_csv_table", + "macro.dbt.load_csv_rows", + "macro.dbt.noop_statement", + "macro.dbt.get_csv_sql", + "macro.dbt.should_revoke", + "macro.dbt.apply_grants", + "macro.dbt.persist_docs", + "macro.dbt.create_indexes" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% materialization seed, default %}\n\n {%- set identifier = model['alias'] -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n\n {%- set exists_as_table = (old_relation is not none and old_relation.is_table) -%}\n {%- set exists_as_view = (old_relation is not none and old_relation.is_view) -%}\n\n {%- set grant_config = config.get('grants') -%}\n {%- set agate_table = load_agate_table() -%}\n -- grab current tables grants config for comparison later on\n\n {%- do store_result('agate_table', response='OK', agate_table=agate_table) -%}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% set create_table_sql = \"\" %}\n {% if exists_as_view %}\n {{ exceptions.raise_compiler_error(\"Cannot seed to '{}', it is a view\".format(old_relation)) }}\n {% elif exists_as_table %}\n {% set create_table_sql = reset_csv_table(model, full_refresh_mode, old_relation, agate_table) %}\n {% else %}\n {% set create_table_sql = create_csv_table(model, agate_table) %}\n {% endif %}\n\n {% set code = 'CREATE' if full_refresh_mode else 'INSERT' %}\n {% set rows_affected = (agate_table.rows | length) %}\n {% set sql = load_csv_rows(model, agate_table) %}\n\n {% call noop_statement('main', code ~ ' ' ~ rows_affected, code, rows_affected) %}\n {{ get_csv_sql(create_table_sql, sql) }};\n {% endcall %}\n\n {% set target_relation = this.incorporate(type='table') %}\n\n {% set should_revoke = should_revoke(old_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if full_refresh_mode or not exists_as_table %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", + "meta": {}, + "name": "materialization_seed_default", + "original_file_path": "macros/materializations/seeds/seed.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/seeds/seed.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_seed_default" + }, + "macro.dbt.materialization_snapshot_default": { + "arguments": [], + "created_at": 1719485736.3679821, + "depends_on": { + "macros": [ + "macro.dbt.get_or_create_relation", + "macro.dbt.run_hooks", + "macro.dbt.strategy_dispatch", + "macro.dbt.build_snapshot_table", + "macro.dbt.create_table_as", + "macro.dbt.build_snapshot_staging_table", + "macro.dbt.create_columns", + "macro.dbt.snapshot_merge_sql", + "macro.dbt.statement", + "macro.dbt.should_revoke", + "macro.dbt.apply_grants", + "macro.dbt.persist_docs", + "macro.dbt.create_indexes", + "macro.dbt.post_snapshot" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% materialization snapshot, default %}\n {%- set config = model['config'] -%}\n\n {%- set target_table = model.get('alias', model.get('name')) -%}\n\n {%- set strategy_name = config.get('strategy') -%}\n {%- set unique_key = config.get('unique_key') %}\n -- grab current tables grants config for comparision later on\n {%- set grant_config = config.get('grants') -%}\n\n {% set target_relation_exists, target_relation = get_or_create_relation(\n database=model.database,\n schema=model.schema,\n identifier=target_table,\n type='table') -%}\n\n {%- if not target_relation.is_table -%}\n {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n {%- endif -%}\n\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set strategy_macro = strategy_dispatch(strategy_name) %}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", config, target_relation_exists) %}\n\n {% if not target_relation_exists %}\n\n {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {{ adapter.valid_snapshot_target(target_relation) }}\n\n {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n -- this may no-op if the database does not require column expansion\n {% do adapter.expand_target_column_types(from_relation=staging_table,\n to_relation=target_relation) %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% do create_columns(target_relation, missing_columns) %}\n\n {% set source_columns = adapter.get_columns_in_relation(staging_table)\n | rejectattr('name', 'equalto', 'dbt_change_type')\n | rejectattr('name', 'equalto', 'DBT_CHANGE_TYPE')\n | rejectattr('name', 'equalto', 'dbt_unique_key')\n | rejectattr('name', 'equalto', 'DBT_UNIQUE_KEY')\n | list %}\n\n {% set quoted_source_columns = [] %}\n {% for column in source_columns %}\n {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n {% endfor %}\n\n {% set final_sql = snapshot_merge_sql(\n target = target_relation,\n source = staging_table,\n insert_cols = quoted_source_columns\n )\n %}\n\n {% endif %}\n\n {% call statement('main') %}\n {{ final_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(target_relation_exists, full_refresh_mode=False) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if not target_relation_exists %}\n {% do create_indexes(target_relation) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {% if staging_table is defined %}\n {% do post_snapshot(staging_table) %}\n {% endif %}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", + "meta": {}, + "name": "materialization_snapshot_default", + "original_file_path": "macros/materializations/snapshots/snapshot.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/snapshot.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_snapshot_default" + }, + "macro.dbt.materialization_table_default": { + "arguments": [], + "created_at": 1719485736.3933172, + "depends_on": { + "macros": [ + "macro.dbt.load_cached_relation", + "macro.dbt.make_intermediate_relation", + "macro.dbt.make_backup_relation", + "macro.dbt.drop_relation_if_exists", + "macro.dbt.run_hooks", + "macro.dbt.statement", + "macro.dbt.get_create_table_as_sql", + "macro.dbt.create_indexes", + "macro.dbt.should_revoke", + "macro.dbt.apply_grants", + "macro.dbt.persist_docs" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% materialization table, default %}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='table') %}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n See ../view/view.sql for more information about this relation.\n */\n {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% do create_indexes(target_relation) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n -- `COMMIT` happens here\n {{ adapter.commit() }}\n\n -- finally, drop the existing/backup relation after the commit\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}", + "meta": {}, + "name": "materialization_table_default", + "original_file_path": "macros/materializations/models/table.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/table.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_table_default" + }, + "macro.dbt.materialization_test_default": { + "arguments": [], + "created_at": 1719485736.370986, + "depends_on": { + "macros": [ + "macro.dbt.should_store_failures", + "macro.dbt.statement", + "macro.dbt.get_create_sql", + "macro.dbt.get_test_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n\n {% if should_store_failures() %}\n\n {% set identifier = model['alias'] %}\n {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% set store_failures_as = config.get('store_failures_as') %}\n -- if `--store-failures` is invoked via command line and `store_failures_as` is not set,\n -- config.get('store_failures_as', 'table') returns None, not 'table'\n {% if store_failures_as == none %}{% set store_failures_as = 'table' %}{% endif %}\n {% if store_failures_as not in ['table', 'view'] %}\n {{ exceptions.raise_compiler_error(\n \"'\" ~ store_failures_as ~ \"' is not a valid value for `store_failures_as`. \"\n \"Accepted values are: ['ephemeral', 'table', 'view']\"\n ) }}\n {% endif %}\n\n {% set target_relation = api.Relation.create(\n identifier=identifier, schema=schema, database=database, type=store_failures_as) -%} %}\n\n {% if old_relation %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n\n {% call statement(auto_begin=True) %}\n {{ get_create_sql(target_relation, sql) }}\n {% endcall %}\n\n {% do relations.append(target_relation) %}\n\n {% set main_sql %}\n select *\n from {{ target_relation }}\n {% endset %}\n\n {{ adapter.commit() }}\n\n {% else %}\n\n {% set main_sql = sql %}\n\n {% endif %}\n\n {% set limit = config.get('limit') %}\n {% set fail_calc = config.get('fail_calc') %}\n {% set warn_if = config.get('warn_if') %}\n {% set error_if = config.get('error_if') %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit)}}\n\n {%- endcall %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", + "meta": {}, + "name": "materialization_test_default", + "original_file_path": "macros/materializations/tests/test.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/tests/test.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_test_default" + }, + "macro.dbt.materialization_unit_default": { + "arguments": [], + "created_at": 1719485736.3763871, + "depends_on": { + "macros": [ + "macro.dbt.get_columns_in_query", + "macro.dbt.make_temp_relation", + "macro.dbt.run_query", + "macro.dbt.get_create_table_as_sql", + "macro.dbt.get_empty_subquery_sql", + "macro.dbt.get_expected_sql", + "macro.dbt.get_unit_test_sql", + "macro.dbt.statement" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- materialization unit, default -%}\n\n {% set relations = [] %}\n\n {% set expected_rows = config.get('expected_rows') %}\n {% set expected_sql = config.get('expected_sql') %}\n {% set tested_expected_column_names = expected_rows[0].keys() if (expected_rows | length ) > 0 else get_columns_in_query(sql) %} %}\n\n {%- set target_relation = this.incorporate(type='table') -%}\n {%- set temp_relation = make_temp_relation(target_relation)-%}\n {% do run_query(get_create_table_as_sql(True, temp_relation, get_empty_subquery_sql(sql))) %}\n {%- set columns_in_relation = adapter.get_columns_in_relation(temp_relation) -%}\n {%- set column_name_to_data_types = {} -%}\n {%- for column in columns_in_relation -%}\n {%- do column_name_to_data_types.update({column.name|lower: column.data_type}) -%}\n {%- endfor -%}\n\n {% if not expected_sql %}\n {% set expected_sql = get_expected_sql(expected_rows, column_name_to_data_types) %}\n {% endif %}\n {% set unit_test_sql = get_unit_test_sql(sql, expected_sql, tested_expected_column_names) %}\n\n {% call statement('main', fetch_result=True) -%}\n\n {{ unit_test_sql }}\n\n {%- endcall %}\n\n {% do adapter.drop_relation(temp_relation) %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", + "meta": {}, + "name": "materialization_unit_default", + "original_file_path": "macros/materializations/tests/unit.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/tests/unit.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_unit_default" + }, + "macro.dbt.materialization_view_default": { + "arguments": [], + "created_at": 1719485736.390083, + "depends_on": { + "macros": [ + "macro.dbt.load_cached_relation", + "macro.dbt.make_intermediate_relation", + "macro.dbt.make_backup_relation", + "macro.dbt.run_hooks", + "macro.dbt.drop_relation_if_exists", + "macro.dbt.statement", + "macro.dbt.get_create_view_as_sql", + "macro.dbt.should_revoke", + "macro.dbt.apply_grants", + "macro.dbt.persist_docs" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- materialization view, default -%}\n\n {%- set existing_relation = load_cached_relation(this) -%}\n {%- set target_relation = this.incorporate(type='view') -%}\n {%- set intermediate_relation = make_intermediate_relation(target_relation) -%}\n\n -- the intermediate_relation should not already exist in the database; get_relation\n -- will return None in that case. Otherwise, we get a relation that we can drop\n -- later, before we try to use this name for the current operation\n {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n /*\n This relation (probably) doesn't exist yet. If it does exist, it's a leftover from\n a previous run, and we're going to try to drop it immediately. At the end of this\n materialization, we're going to rename the \"existing_relation\" to this identifier,\n and then we're going to drop it. In order to make sure we run the correct one of:\n - drop view ...\n - drop table ...\n\n We need to set the type of this relation to be the type of the existing_relation, if it exists,\n or else \"view\" as a sane default if it does not. Note that if the existing_relation does not\n exist, then there is nothing to move out of the way and subsequentally drop. In that case,\n this relation will be effectively unused.\n */\n {%- set backup_relation_type = 'view' if existing_relation is none else existing_relation.type -%}\n {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n -- as above, the backup_relation should not already exist\n {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n -- build model\n {% call statement('main') -%}\n {{ get_create_view_as_sql(intermediate_relation, sql) }}\n {%- endcall %}\n\n -- cleanup\n -- move the existing view out of the way\n {% if existing_relation is not none %}\n /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n since the variable was first set. */\n {% set existing_relation = load_cached_relation(existing_relation) %}\n {% if existing_relation is not none %}\n {{ adapter.rename_relation(existing_relation, backup_relation) }}\n {% endif %}\n {% endif %}\n {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n {{ drop_relation_if_exists(backup_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization -%}", + "meta": {}, + "name": "materialization_view_default", + "original_file_path": "macros/materializations/models/view.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/view.sql", + "resource_type": "macro", + "supported_languages": [ + "sql" + ], + "unique_id": "macro.dbt.materialization_view_default" + }, + "macro.dbt.materialized_view_execute_build_sql": { + "arguments": [], + "created_at": 1719485736.386875, + "depends_on": { + "macros": [ + "macro.dbt.run_hooks", + "macro.dbt.statement", + "macro.dbt.should_revoke", + "macro.dbt.apply_grants", + "macro.dbt.persist_docs" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro materialized_view_execute_build_sql(build_sql, existing_relation, target_relation, post_hooks) %}\n\n -- `BEGIN` happens here:\n {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n {% set grant_config = config.get('grants') %}\n\n {% call statement(name=\"main\") %}\n {{ build_sql }}\n {% endcall %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n {{ adapter.commit() }}\n\n{% endmacro %}", + "meta": {}, + "name": "materialized_view_execute_build_sql", + "original_file_path": "macros/materializations/models/materialized_view.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/materialized_view.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.materialized_view_execute_build_sql" + }, + "macro.dbt.materialized_view_execute_no_op": { + "arguments": [], + "created_at": 1719485736.385866, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro materialized_view_execute_no_op(target_relation) %}\n {% do store_raw_result(\n name=\"main\",\n message=\"skip \" ~ target_relation,\n code=\"skip\",\n rows_affected=\"-1\"\n ) %}\n{% endmacro %}", + "meta": {}, + "name": "materialized_view_execute_no_op", + "original_file_path": "macros/materializations/models/materialized_view.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/materialized_view.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.materialized_view_execute_no_op" + }, + "macro.dbt.materialized_view_get_build_sql": { + "arguments": [], + "created_at": 1719485736.385609, + "depends_on": { + "macros": [ + "macro.dbt.should_full_refresh", + "macro.dbt.get_create_materialized_view_as_sql", + "macro.dbt.get_replace_sql", + "macro.dbt.get_materialized_view_configuration_changes", + "macro.dbt.refresh_materialized_view", + "macro.dbt.get_alter_materialized_view_as_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro materialized_view_get_build_sql(existing_relation, target_relation, backup_relation, intermediate_relation) %}\n\n {% set full_refresh_mode = should_full_refresh() %}\n\n -- determine the scenario we're in: create, full_refresh, alter, refresh data\n {% if existing_relation is none %}\n {% set build_sql = get_create_materialized_view_as_sql(target_relation, sql) %}\n {% elif full_refresh_mode or not existing_relation.is_materialized_view %}\n {% set build_sql = get_replace_sql(existing_relation, target_relation, sql) %}\n {% else %}\n\n -- get config options\n {% set on_configuration_change = config.get('on_configuration_change') %}\n {% set configuration_changes = get_materialized_view_configuration_changes(existing_relation, config) %}\n\n {% if configuration_changes is none %}\n {% set build_sql = refresh_materialized_view(target_relation) %}\n\n {% elif on_configuration_change == 'apply' %}\n {% set build_sql = get_alter_materialized_view_as_sql(target_relation, configuration_changes, sql, existing_relation, backup_relation, intermediate_relation) %}\n {% elif on_configuration_change == 'continue' %}\n {% set build_sql = '' %}\n {{ exceptions.warn(\"Configuration changes were identified and `on_configuration_change` was set to `continue` for `\" ~ target_relation ~ \"`\") }}\n {% elif on_configuration_change == 'fail' %}\n {{ exceptions.raise_fail_fast_error(\"Configuration changes were identified and `on_configuration_change` was set to `fail` for `\" ~ target_relation ~ \"`\") }}\n\n {% else %}\n -- this only happens if the user provides a value other than `apply`, 'skip', 'fail'\n {{ exceptions.raise_compiler_error(\"Unexpected configuration scenario\") }}\n\n {% endif %}\n\n {% endif %}\n\n {% do return(build_sql) %}\n\n{% endmacro %}", + "meta": {}, + "name": "materialized_view_get_build_sql", + "original_file_path": "macros/materializations/models/materialized_view.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/materialized_view.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.materialized_view_get_build_sql" + }, + "macro.dbt.materialized_view_setup": { + "arguments": [], + "created_at": 1719485736.3838332, + "depends_on": { + "macros": [ + "macro.dbt.load_cached_relation", + "macro.dbt.drop_relation_if_exists", + "macro.dbt.run_hooks" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro materialized_view_setup(backup_relation, intermediate_relation, pre_hooks) %}\n\n -- backup_relation and intermediate_relation should not already exist in the database\n -- it's possible these exist because of a previous run that exited unexpectedly\n {% set preexisting_backup_relation = load_cached_relation(backup_relation) %}\n {% set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) %}\n\n -- drop the temp relations if they exist already in the database\n {{ drop_relation_if_exists(preexisting_backup_relation) }}\n {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n\n {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n{% endmacro %}", + "meta": {}, + "name": "materialized_view_setup", + "original_file_path": "macros/materializations/models/materialized_view.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/materialized_view.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.materialized_view_setup" + }, + "macro.dbt.materialized_view_teardown": { + "arguments": [], + "created_at": 1719485736.384107, + "depends_on": { + "macros": [ + "macro.dbt.drop_relation_if_exists", + "macro.dbt.run_hooks" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro materialized_view_teardown(backup_relation, intermediate_relation, post_hooks) %}\n\n -- drop the temp relations if they exist to leave the database clean for the next run\n {{ drop_relation_if_exists(backup_relation) }}\n {{ drop_relation_if_exists(intermediate_relation) }}\n\n {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n{% endmacro %}", + "meta": {}, + "name": "materialized_view_teardown", + "original_file_path": "macros/materializations/models/materialized_view.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/materialized_view.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.materialized_view_teardown" + }, + "macro.dbt.noop_statement": { + "arguments": [], + "created_at": 1719485736.5199249, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro noop_statement(name=None, message=None, code=None, rows_affected=None, res=None) -%}\n {%- set sql = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime SQL for node \"{}\"'.format(model['unique_id'])) }}\n {{ write(sql) }}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_raw_result(name, message=message, code=code, rows_affected=rows_affected, agate_table=res) }}\n {%- endif -%}\n\n{%- endmacro %}", + "meta": {}, + "name": "noop_statement", + "original_file_path": "macros/etc/statement.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/etc/statement.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.noop_statement" + }, + "macro.dbt.partition_range": { + "arguments": [], + "created_at": 1719485736.5252612, + "depends_on": { + "macros": [ + "macro.dbt.dates_in_range" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro partition_range(raw_partition_date, date_fmt='%Y%m%d') %}\n {% set partition_range = (raw_partition_date | string).split(\",\") %}\n\n {% if (partition_range | length) == 1 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = none %}\n {% elif (partition_range | length) == 2 %}\n {% set start_date = partition_range[0] %}\n {% set end_date = partition_range[1] %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"Invalid partition time. Expected format: {Start Date}[,{End Date}]. Got: \" ~ raw_partition_date) }}\n {% endif %}\n\n {{ return(dates_in_range(start_date, end_date, in_fmt=date_fmt)) }}\n{% endmacro %}", + "meta": {}, + "name": "partition_range", + "original_file_path": "macros/etc/datetime.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/etc/datetime.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.partition_range" + }, + "macro.dbt.persist_docs": { + "arguments": [], + "created_at": 1719485736.585922, + "depends_on": { + "macros": [ + "macro.dbt.default__persist_docs" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro persist_docs(relation, model, for_relation=true, for_columns=true) -%}\n {{ return(adapter.dispatch('persist_docs', 'dbt')(relation, model, for_relation, for_columns)) }}\n{% endmacro %}", + "meta": {}, + "name": "persist_docs", + "original_file_path": "macros/adapters/persist_docs.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/persist_docs.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.persist_docs" + }, + "macro.dbt.position": { + "arguments": [], + "created_at": 1719485736.543356, + "depends_on": { + "macros": [ + "macro.dbt.default__position" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", + "meta": {}, + "name": "position", + "original_file_path": "macros/utils/position.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/position.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.position" + }, + "macro.dbt.post_snapshot": { + "arguments": [], + "created_at": 1719485736.355165, + "depends_on": { + "macros": [ + "macro.dbt.default__post_snapshot" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", + "meta": {}, + "name": "post_snapshot", + "original_file_path": "macros/materializations/snapshots/helpers.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/helpers.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.post_snapshot" + }, + "macro.dbt.process_schema_changes": { + "arguments": [], + "created_at": 1719485736.44261, + "depends_on": { + "macros": [ + "macro.dbt.check_for_schema_changes", + "macro.dbt.sync_column_schemas" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n\n {% if on_schema_change == 'ignore' %}\n\n {{ return({}) }}\n\n {% else %}\n\n {% set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) %}\n\n {% if schema_changes_dict['schema_changed'] %}\n\n {% if on_schema_change == 'fail' %}\n\n {% set fail_msg %}\n The source and target schemas on this incremental model are out of sync!\n They can be reconciled in several ways:\n - set the `on_schema_change` config to either append_new_columns or sync_all_columns, depending on your situation.\n - Re-run the incremental model with `full_refresh: True` to update the target schema.\n - update the schema manually and re-run the process.\n\n Additional troubleshooting context:\n Source columns not in target: {{ schema_changes_dict['source_not_in_target'] }}\n Target columns not in source: {{ schema_changes_dict['target_not_in_source'] }}\n New column types: {{ schema_changes_dict['new_target_types'] }}\n {% endset %}\n\n {% do exceptions.raise_compiler_error(fail_msg) %}\n\n {# -- unless we ignore, run the sync operation per the config #}\n {% else %}\n\n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {% endif %}\n\n {% endif %}\n\n {{ return(schema_changes_dict['source_columns']) }}\n\n {% endif %}\n\n{% endmacro %}", + "meta": {}, + "name": "process_schema_changes", + "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/incremental/on_schema_change.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.process_schema_changes" + }, + "macro.dbt.py_current_timestring": { + "arguments": [], + "created_at": 1719485736.5255191, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro py_current_timestring() %}\n {% set dt = modules.datetime.datetime.now() %}\n {% do return(dt.strftime(\"%Y%m%d%H%M%S%f\")) %}\n{% endmacro %}", + "meta": {}, + "name": "py_current_timestring", + "original_file_path": "macros/etc/datetime.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/etc/datetime.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.py_current_timestring" + }, + "macro.dbt.py_script_comment": { + "arguments": [], + "created_at": 1719485736.6181471, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", + "meta": {}, + "name": "py_script_comment", + "original_file_path": "macros/python_model/python.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/python_model/python.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.py_script_comment" + }, + "macro.dbt.py_script_postfix": { + "arguments": [], + "created_at": 1719485736.618067, + "depends_on": { + "macros": [ + "macro.dbt.build_ref_function", + "macro.dbt.build_source_function", + "macro.dbt.build_config_dict", + "macro.dbt.resolve_model_name", + "macro.dbt.is_incremental", + "macro.dbt.py_script_comment" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro py_script_postfix(model) %}\n# This part is user provided model code\n# you will need to copy the next section to run the code\n# COMMAND ----------\n# this part is dbt logic for get ref work, do not modify\n\n{{ build_ref_function(model ) }}\n{{ build_source_function(model ) }}\n{{ build_config_dict(model) }}\n\nclass config:\n def __init__(self, *args, **kwargs):\n pass\n\n @staticmethod\n def get(key, default=None):\n return config_dict.get(key, default)\n\nclass this:\n \"\"\"dbt.this() or dbt.this.identifier\"\"\"\n database = \"{{ this.database }}\"\n schema = \"{{ this.schema }}\"\n identifier = \"{{ this.identifier }}\"\n {% set this_relation_name = resolve_model_name(this) %}\n def __repr__(self):\n return '{{ this_relation_name }}'\n\n\nclass dbtObj:\n def __init__(self, load_df_function) -> None:\n self.source = lambda *args: source(*args, dbt_load_df_function=load_df_function)\n self.ref = lambda *args, **kwargs: ref(*args, **kwargs, dbt_load_df_function=load_df_function)\n self.config = config\n self.this = this()\n self.is_incremental = {{ is_incremental() }}\n\n# COMMAND ----------\n{{py_script_comment()}}\n{% endmacro %}", + "meta": {}, + "name": "py_script_postfix", + "original_file_path": "macros/python_model/python.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/python_model/python.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.py_script_postfix" + }, + "macro.dbt.refresh_materialized_view": { + "arguments": [], + "created_at": 1719485736.489407, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__refresh_materialized_view" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro refresh_materialized_view(relation) %}\n {{- log('Applying REFRESH to: ' ~ relation) -}}\n {{- adapter.dispatch('refresh_materialized_view', 'dbt')(relation) -}}\n{% endmacro %}", + "meta": {}, + "name": "refresh_materialized_view", + "original_file_path": "macros/relations/materialized_view/refresh.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/materialized_view/refresh.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.refresh_materialized_view" + }, + "macro.dbt.rename_relation": { + "arguments": [], + "created_at": 1719485736.478327, + "depends_on": { + "macros": [ + "macro.dbt.default__rename_relation" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", + "meta": {}, + "name": "rename_relation", + "original_file_path": "macros/relations/rename.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/rename.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.rename_relation" + }, + "macro.dbt.replace": { + "arguments": [], + "created_at": 1719485736.532748, + "depends_on": { + "macros": [ + "macro.dbt.default__replace" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", + "meta": {}, + "name": "replace", + "original_file_path": "macros/utils/replace.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/replace.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.replace" + }, + "macro.dbt.reset_csv_table": { + "arguments": [], + "created_at": 1719485736.460277, + "depends_on": { + "macros": [ + "macro.dbt.default__reset_csv_table" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro reset_csv_table(model, full_refresh, old_relation, agate_table) -%}\n {{ adapter.dispatch('reset_csv_table', 'dbt')(model, full_refresh, old_relation, agate_table) }}\n{%- endmacro %}", + "meta": {}, + "name": "reset_csv_table", + "original_file_path": "macros/materializations/seeds/helpers.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/seeds/helpers.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.reset_csv_table" + }, + "macro.dbt.resolve_model_name": { + "arguments": [], + "created_at": 1719485736.614536, + "depends_on": { + "macros": [ + "macro.dbt.default__resolve_model_name" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro resolve_model_name(input_model_name) %}\n {{ return(adapter.dispatch('resolve_model_name', 'dbt')(input_model_name)) }}\n{% endmacro %}", + "meta": {}, + "name": "resolve_model_name", + "original_file_path": "macros/python_model/python.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/python_model/python.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.resolve_model_name" + }, + "macro.dbt.right": { + "arguments": [], + "created_at": 1719485736.538353, + "depends_on": { + "macros": [ + "macro.dbt.default__right" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", + "meta": {}, + "name": "right", + "original_file_path": "macros/utils/right.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/right.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.right" + }, + "macro.dbt.run_hooks": { + "arguments": [], + "created_at": 1719485736.336357, + "depends_on": { + "macros": [ + "macro.dbt.statement" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro run_hooks(hooks, inside_transaction=True) %}\n {% for hook in hooks | selectattr('transaction', 'equalto', inside_transaction) %}\n {% if not inside_transaction and loop.first %}\n {% call statement(auto_begin=inside_transaction) %}\n commit;\n {% endcall %}\n {% endif %}\n {% set rendered = render(hook.get('sql')) | trim %}\n {% if (rendered | length) > 0 %}\n {% call statement(auto_begin=inside_transaction) %}\n {{ rendered }}\n {% endcall %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", + "meta": {}, + "name": "run_hooks", + "original_file_path": "macros/materializations/hooks.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/hooks.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.run_hooks" + }, + "macro.dbt.run_query": { + "arguments": [], + "created_at": 1719485736.5202482, + "depends_on": { + "macros": [ + "macro.dbt.statement" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro run_query(sql) %}\n {% call statement(\"run_query_statement\", fetch_result=true, auto_begin=false) %}\n {{ sql }}\n {% endcall %}\n\n {% do return(load_result(\"run_query_statement\").table) %}\n{% endmacro %}", + "meta": {}, + "name": "run_query", + "original_file_path": "macros/etc/statement.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/etc/statement.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.run_query" + }, + "macro.dbt.safe_cast": { + "arguments": [], + "created_at": 1719485736.540742, + "depends_on": { + "macros": [ + "macro.dbt.default__safe_cast" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", + "meta": {}, + "name": "safe_cast", + "original_file_path": "macros/utils/safe_cast.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/safe_cast.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.safe_cast" + }, + "macro.dbt.set_sql_header": { + "arguments": [], + "created_at": 1719485736.338798, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", + "meta": {}, + "name": "set_sql_header", + "original_file_path": "macros/materializations/configs.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/configs.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.set_sql_header" + }, + "macro.dbt.should_full_refresh": { + "arguments": [], + "created_at": 1719485736.339242, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro should_full_refresh() %}\n {% set config_full_refresh = config.get('full_refresh') %}\n {% if config_full_refresh is none %}\n {% set config_full_refresh = flags.FULL_REFRESH %}\n {% endif %}\n {% do return(config_full_refresh) %}\n{% endmacro %}", + "meta": {}, + "name": "should_full_refresh", + "original_file_path": "macros/materializations/configs.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/configs.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.should_full_refresh" + }, + "macro.dbt.should_revoke": { + "arguments": [], + "created_at": 1719485736.573465, + "depends_on": { + "macros": [ + "macro.dbt.copy_grants" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro should_revoke(existing_relation, full_refresh_mode=True) %}\n\n {% if not existing_relation %}\n {#-- The table doesn't already exist, so no grants to copy over --#}\n {{ return(False) }}\n {% elif full_refresh_mode %}\n {#-- The object is being REPLACED -- whether grants are copied over depends on the value of user config --#}\n {{ return(copy_grants()) }}\n {% else %}\n {#-- The table is being merged/upserted/inserted -- grants will be carried over --#}\n {{ return(True) }}\n {% endif %}\n\n{% endmacro %}", + "meta": {}, + "name": "should_revoke", + "original_file_path": "macros/adapters/apply_grants.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/apply_grants.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.should_revoke" + }, + "macro.dbt.should_store_failures": { + "arguments": [], + "created_at": 1719485736.339565, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro should_store_failures() %}\n {% set config_store_failures = config.get('store_failures') %}\n {% if config_store_failures is none %}\n {% set config_store_failures = flags.STORE_FAILURES %}\n {% endif %}\n {% do return(config_store_failures) %}\n{% endmacro %}", + "meta": {}, + "name": "should_store_failures", + "original_file_path": "macros/materializations/configs.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/configs.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.should_store_failures" + }, + "macro.dbt.snapshot_check_all_get_existing_columns": { + "arguments": [], + "created_at": 1719485736.3482602, + "depends_on": { + "macros": [ + "macro.dbt.get_columns_in_query" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) -%}\n {%- if not target_exists -%}\n {#-- no table yet -> return whatever the query does --#}\n {{ return((false, query_columns)) }}\n {%- endif -%}\n\n {#-- handle any schema changes --#}\n {%- set target_relation = adapter.get_relation(database=node.database, schema=node.schema, identifier=node.alias) -%}\n\n {% if check_cols_config == 'all' %}\n {%- set query_columns = get_columns_in_query(node['compiled_code']) -%}\n\n {% elif check_cols_config is iterable and (check_cols_config | length) > 0 %}\n {#-- query for proper casing/quoting, to support comparison below --#}\n {%- set select_check_cols_from_target -%}\n {#-- N.B. The whitespace below is necessary to avoid edge case issue with comments --#}\n {#-- See: https://github.com/dbt-labs/dbt-core/issues/6781 --#}\n select {{ check_cols_config | join(', ') }} from (\n {{ node['compiled_code'] }}\n ) subq\n {%- endset -%}\n {% set query_columns = get_columns_in_query(select_check_cols_from_target) %}\n\n {% else %}\n {% do exceptions.raise_compiler_error(\"Invalid value for 'check_cols': \" ~ check_cols_config) %}\n {% endif %}\n\n {%- set existing_cols = adapter.get_columns_in_relation(target_relation) | map(attribute = 'name') | list -%}\n {%- set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {%- set ns.column_added = false -%}\n\n {%- set intersection = [] -%}\n {%- for col in query_columns -%}\n {%- if col in existing_cols -%}\n {%- do intersection.append(adapter.quote(col)) -%}\n {%- else -%}\n {% set ns.column_added = true %}\n {%- endif -%}\n {%- endfor -%}\n {{ return((ns.column_added, intersection)) }}\n{%- endmacro %}", + "meta": {}, + "name": "snapshot_check_all_get_existing_columns", + "original_file_path": "macros/materializations/snapshots/strategies.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/strategies.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns" + }, + "macro.dbt.snapshot_check_strategy": { + "arguments": [], + "created_at": 1719485736.3500328, + "depends_on": { + "macros": [ + "macro.dbt.snapshot_get_time", + "macro.dbt.snapshot_check_all_get_existing_columns", + "macro.dbt.get_true_sql", + "macro.dbt.snapshot_hash_arguments" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set check_cols_config = config['check_cols'] %}\n {% set primary_key = config['unique_key'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n {% set updated_at = config.get('updated_at', snapshot_get_time()) %}\n\n {% set column_added = false %}\n\n {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) %}\n\n {%- set row_changed_expr -%}\n (\n {%- if column_added -%}\n {{ get_true_sql() }}\n {%- else -%}\n {%- for col in check_cols -%}\n {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n or\n (\n (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n or\n ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n )\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", + "meta": {}, + "name": "snapshot_check_strategy", + "original_file_path": "macros/materializations/snapshots/strategies.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/strategies.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_check_strategy" + }, + "macro.dbt.snapshot_get_time": { + "arguments": [], + "created_at": 1719485736.55953, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__snapshot_get_time" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "snapshot_get_time", + "original_file_path": "macros/adapters/timestamps.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/timestamps.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_get_time" + }, + "macro.dbt.snapshot_hash_arguments": { + "arguments": [], + "created_at": 1719485736.3454158, + "depends_on": { + "macros": [ + "macro.dbt.default__snapshot_hash_arguments" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", + "meta": {}, + "name": "snapshot_hash_arguments", + "original_file_path": "macros/materializations/snapshots/strategies.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/strategies.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_hash_arguments" + }, + "macro.dbt.snapshot_merge_sql": { + "arguments": [], + "created_at": 1719485736.3400362, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__snapshot_merge_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", + "meta": {}, + "name": "snapshot_merge_sql", + "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/snapshot_merge.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_merge_sql" + }, + "macro.dbt.snapshot_staging_table": { + "arguments": [], + "created_at": 1719485736.355765, + "depends_on": { + "macros": [ + "macro.dbt.default__snapshot_staging_table" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {{ adapter.dispatch('snapshot_staging_table', 'dbt')(strategy, source_sql, target_relation) }}\n{% endmacro %}", + "meta": {}, + "name": "snapshot_staging_table", + "original_file_path": "macros/materializations/snapshots/helpers.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/helpers.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_staging_table" + }, + "macro.dbt.snapshot_string_as_time": { + "arguments": [], + "created_at": 1719485736.3465831, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__snapshot_string_as_time" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", + "meta": {}, + "name": "snapshot_string_as_time", + "original_file_path": "macros/materializations/snapshots/strategies.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/strategies.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_string_as_time" + }, + "macro.dbt.snapshot_timestamp_strategy": { + "arguments": [], + "created_at": 1719485736.346405, + "depends_on": { + "macros": [ + "macro.dbt.snapshot_hash_arguments" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, config, target_exists) %}\n {% set primary_key = config['unique_key'] %}\n {% set updated_at = config['updated_at'] %}\n {% set invalidate_hard_deletes = config.get('invalidate_hard_deletes', false) %}\n\n {#/*\n The snapshot relation might not have an {{ updated_at }} value if the\n snapshot strategy is changed from `check` to `timestamp`. We\n should use a dbt-created column for the comparison in the snapshot\n table instead of assuming that the user-supplied {{ updated_at }}\n will be present in the historical data.\n\n See https://github.com/dbt-labs/dbt-core/issues/2350\n */ #}\n {% set row_changed_expr -%}\n ({{ snapshotted_rel }}.dbt_valid_from < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_id_expr = snapshot_hash_arguments([primary_key, updated_at]) %}\n\n {% do return({\n \"unique_key\": primary_key,\n \"updated_at\": updated_at,\n \"row_changed\": row_changed_expr,\n \"scd_id\": scd_id_expr,\n \"invalidate_hard_deletes\": invalidate_hard_deletes\n }) %}\n{% endmacro %}", + "meta": {}, + "name": "snapshot_timestamp_strategy", + "original_file_path": "macros/materializations/snapshots/strategies.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/strategies.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.snapshot_timestamp_strategy" + }, + "macro.dbt.split_part": { + "arguments": [], + "created_at": 1719485736.55408, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__split_part" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro split_part(string_text, delimiter_text, part_number) %}\n {{ return(adapter.dispatch('split_part', 'dbt') (string_text, delimiter_text, part_number)) }}\n{% endmacro %}", + "meta": {}, + "name": "split_part", + "original_file_path": "macros/utils/split_part.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/split_part.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.split_part" + }, + "macro.dbt.sql_convert_columns_in_relation": { + "arguments": [], + "created_at": 1719485736.59661, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro sql_convert_columns_in_relation(table) -%}\n {% set columns = [] %}\n {% for row in table %}\n {% do columns.append(api.Column(*row)) %}\n {% endfor %}\n {{ return(columns) }}\n{% endmacro %}", + "meta": {}, + "name": "sql_convert_columns_in_relation", + "original_file_path": "macros/adapters/columns.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/columns.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.sql_convert_columns_in_relation" + }, + "macro.dbt.statement": { + "arguments": [], + "created_at": 1719485736.51912, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n{%- macro statement(name=None, fetch_result=False, auto_begin=True, language='sql') -%}\n {%- if execute: -%}\n {%- set compiled_code = caller() -%}\n\n {%- if name == 'main' -%}\n {{ log('Writing runtime {} for node \"{}\"'.format(language, model['unique_id'])) }}\n {{ write(compiled_code) }}\n {%- endif -%}\n {%- if language == 'sql'-%}\n {%- set res, table = adapter.execute(compiled_code, auto_begin=auto_begin, fetch=fetch_result) -%}\n {%- elif language == 'python' -%}\n {%- set res = submit_python_job(model, compiled_code) -%}\n {#-- TODO: What should table be for python models? --#}\n {%- set table = None -%}\n {%- else -%}\n {% do exceptions.raise_compiler_error(\"statement macro didn't get supported language\") %}\n {%- endif -%}\n\n {%- if name is not none -%}\n {{ store_result(name, response=res, agate_table=table) }}\n {%- endif -%}\n\n {%- endif -%}\n{%- endmacro %}", + "meta": {}, + "name": "statement", + "original_file_path": "macros/etc/statement.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/etc/statement.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.statement" + }, + "macro.dbt.strategy_dispatch": { + "arguments": [], + "created_at": 1719485736.345131, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro strategy_dispatch(name) -%}\n{% set original_name = name %}\n {% if '.' in name %}\n {% set package_name, name = name.split(\".\", 1) %}\n {% else %}\n {% set package_name = none %}\n {% endif %}\n\n {% if package_name is none %}\n {% set package_context = context %}\n {% elif package_name in context %}\n {% set package_context = context[package_name] %}\n {% else %}\n {% set error_msg %}\n Could not find package '{{package_name}}', called with '{{original_name}}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n\n {%- set search_name = 'snapshot_' ~ name ~ '_strategy' -%}\n\n {% if search_name not in package_context %}\n {% set error_msg %}\n The specified strategy macro '{{name}}' was not found in package '{{ package_name }}'\n {% endset %}\n {{ exceptions.raise_compiler_error(error_msg | trim) }}\n {% endif %}\n {{ return(package_context[search_name]) }}\n{%- endmacro %}", + "meta": {}, + "name": "strategy_dispatch", + "original_file_path": "macros/materializations/snapshots/strategies.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/snapshots/strategies.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.strategy_dispatch" + }, + "macro.dbt.string_literal": { + "arguments": [], + "created_at": 1719485736.543961, + "depends_on": { + "macros": [ + "macro.dbt.default__string_literal" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "string_literal", + "original_file_path": "macros/utils/literal.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/literal.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.string_literal" + }, + "macro.dbt.support_multiple_grantees_per_dcl_statement": { + "arguments": [], + "created_at": 1719485736.572978, + "depends_on": { + "macros": [ + "macro.dbt.default__support_multiple_grantees_per_dcl_statement" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", + "meta": {}, + "name": "support_multiple_grantees_per_dcl_statement", + "original_file_path": "macros/adapters/apply_grants.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/apply_grants.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement" + }, + "macro.dbt.sync_column_schemas": { + "arguments": [], + "created_at": 1719485736.4416761, + "depends_on": { + "macros": [ + "macro.dbt.alter_relation_add_remove_columns", + "macro.dbt.alter_column_type" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\n\n {%- set add_to_target_arr = schema_changes_dict['source_not_in_target'] -%}\n\n {%- if on_schema_change == 'append_new_columns'-%}\n {%- if add_to_target_arr | length > 0 -%}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, none) -%}\n {%- endif -%}\n\n {% elif on_schema_change == 'sync_all_columns' %}\n {%- set remove_from_target_arr = schema_changes_dict['target_not_in_source'] -%}\n {%- set new_target_types = schema_changes_dict['new_target_types'] -%}\n\n {% if add_to_target_arr | length > 0 or remove_from_target_arr | length > 0 %}\n {%- do alter_relation_add_remove_columns(target_relation, add_to_target_arr, remove_from_target_arr) -%}\n {% endif %}\n\n {% if new_target_types != [] %}\n {% for ntt in new_target_types %}\n {% set column_name = ntt['column_name'] %}\n {% set new_type = ntt['new_type'] %}\n {% do alter_column_type(target_relation, column_name, new_type) %}\n {% endfor %}\n {% endif %}\n\n {% endif %}\n\n {% set schema_change_message %}\n In {{ target_relation }}:\n Schema change approach: {{ on_schema_change }}\n Columns added: {{ add_to_target_arr }}\n Columns removed: {{ remove_from_target_arr }}\n Data types changed: {{ new_target_types }}\n {% endset %}\n\n {% do log(schema_change_message) %}\n\n{% endmacro %}", + "meta": {}, + "name": "sync_column_schemas", + "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/materializations/models/incremental/on_schema_change.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.sync_column_schemas" + }, + "macro.dbt.table_columns_and_constraints": { + "arguments": [], + "created_at": 1719485736.500673, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro table_columns_and_constraints() %}\n {# loop through user_provided_columns to create DDL with data types and constraints #}\n {%- set raw_column_constraints = adapter.render_raw_columns_constraints(raw_columns=model['columns']) -%}\n {%- set raw_model_constraints = adapter.render_raw_model_constraints(raw_constraints=model['constraints']) -%}\n (\n {% for c in raw_column_constraints -%}\n {{ c }}{{ \",\" if not loop.last or raw_model_constraints }}\n {% endfor %}\n {% for c in raw_model_constraints -%}\n {{ c }}{{ \",\" if not loop.last }}\n {% endfor -%}\n )\n{% endmacro %}", + "meta": {}, + "name": "table_columns_and_constraints", + "original_file_path": "macros/relations/column/columns_spec_ddl.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/relations/column/columns_spec_ddl.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.table_columns_and_constraints" + }, + "macro.dbt.test_accepted_values": { + "arguments": [], + "created_at": 1719485736.6202009, + "depends_on": { + "macros": [ + "macro.dbt.default__test_accepted_values" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% test accepted_values(model, column_name, values, quote=True) %}\n {% set macro = adapter.dispatch('test_accepted_values', 'dbt') %}\n {{ macro(model, column_name, values, quote) }}\n{% endtest %}", + "meta": {}, + "name": "test_accepted_values", + "original_file_path": "tests/generic/builtin.sql", + "package_name": "dbt", + "patch_path": null, + "path": "tests/generic/builtin.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.test_accepted_values" + }, + "macro.dbt.test_not_null": { + "arguments": [], + "created_at": 1719485736.619859, + "depends_on": { + "macros": [ + "macro.dbt.default__test_not_null" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", + "meta": {}, + "name": "test_not_null", + "original_file_path": "tests/generic/builtin.sql", + "package_name": "dbt", + "patch_path": null, + "path": "tests/generic/builtin.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.test_not_null" + }, + "macro.dbt.test_relationships": { + "arguments": [], + "created_at": 1719485736.620512, + "depends_on": { + "macros": [ + "macro.dbt.default__test_relationships" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% test relationships(model, column_name, to, field) %}\n {% set macro = adapter.dispatch('test_relationships', 'dbt') %}\n {{ macro(model, column_name, to, field) }}\n{% endtest %}", + "meta": {}, + "name": "test_relationships", + "original_file_path": "tests/generic/builtin.sql", + "package_name": "dbt", + "patch_path": null, + "path": "tests/generic/builtin.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.test_relationships" + }, + "macro.dbt.test_unique": { + "arguments": [], + "created_at": 1719485736.619491, + "depends_on": { + "macros": [ + "macro.dbt.default__test_unique" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", + "meta": {}, + "name": "test_unique", + "original_file_path": "tests/generic/builtin.sql", + "package_name": "dbt", + "patch_path": null, + "path": "tests/generic/builtin.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.test_unique" + }, + "macro.dbt.truncate_relation": { + "arguments": [], + "created_at": 1719485736.567298, + "depends_on": { + "macros": [ + "macro.dbt.default__truncate_relation" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", + "meta": {}, + "name": "truncate_relation", + "original_file_path": "macros/adapters/relation.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/relation.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.truncate_relation" + }, + "macro.dbt.type_bigint": { + "arguments": [], + "created_at": 1719485736.548424, + "depends_on": { + "macros": [ + "macro.dbt.default__type_bigint" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "type_bigint", + "original_file_path": "macros/utils/data_types.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/data_types.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.type_bigint" + }, + "macro.dbt.type_boolean": { + "arguments": [], + "created_at": 1719485736.55002, + "depends_on": { + "macros": [ + "macro.dbt.default__type_boolean" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "type_boolean", + "original_file_path": "macros/utils/data_types.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/data_types.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.type_boolean" + }, + "macro.dbt.type_float": { + "arguments": [], + "created_at": 1719485736.547037, + "depends_on": { + "macros": [ + "macro.dbt.default__type_float" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "type_float", + "original_file_path": "macros/utils/data_types.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/data_types.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.type_float" + }, + "macro.dbt.type_int": { + "arguments": [], + "created_at": 1719485736.54878, + "depends_on": { + "macros": [ + "macro.dbt.default__type_int" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "type_int", + "original_file_path": "macros/utils/data_types.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/data_types.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.type_int" + }, + "macro.dbt.type_numeric": { + "arguments": [], + "created_at": 1719485736.547442, + "depends_on": { + "macros": [ + "macro.dbt.default__type_numeric" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "type_numeric", + "original_file_path": "macros/utils/data_types.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/data_types.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.type_numeric" + }, + "macro.dbt.type_string": { + "arguments": [], + "created_at": 1719485736.545998, + "depends_on": { + "macros": [ + "macro.dbt.default__type_string" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "type_string", + "original_file_path": "macros/utils/data_types.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/data_types.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.type_string" + }, + "macro.dbt.type_timestamp": { + "arguments": [], + "created_at": 1719485736.546634, + "depends_on": { + "macros": [ + "macro.dbt.default__type_timestamp" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "meta": {}, + "name": "type_timestamp", + "original_file_path": "macros/utils/data_types.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/utils/data_types.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.type_timestamp" + }, + "macro.dbt.validate_sql": { + "arguments": [], + "created_at": 1719485736.5702772, + "depends_on": { + "macros": [ + "macro.dbt.default__validate_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro validate_sql(sql) -%}\n {{ return(adapter.dispatch('validate_sql', 'dbt')(sql)) }}\n{% endmacro %}", + "meta": {}, + "name": "validate_sql", + "original_file_path": "macros/adapters/validate_sql.sql", + "package_name": "dbt", + "patch_path": null, + "path": "macros/adapters/validate_sql.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt.validate_sql" + }, + "macro.dbt_postgres.postgres__alter_column_comment": { + "arguments": [], + "created_at": 1719485736.314291, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres_escape_comment" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__alter_column_comment(relation, column_dict) %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% for column_name in column_dict if (column_name in existing_columns) %}\n {% set comment = column_dict[column_name]['description'] %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on column {{ relation }}.{{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} is {{ escaped_comment }};\n {% endfor %}\n{% endmacro %}", + "meta": {}, + "name": "postgres__alter_column_comment", + "original_file_path": "macros/adapters.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/adapters.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__alter_column_comment" + }, + "macro.dbt_postgres.postgres__alter_relation_comment": { + "arguments": [], + "created_at": 1719485736.312385, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres_escape_comment" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on {{ relation.type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", + "meta": {}, + "name": "postgres__alter_relation_comment", + "original_file_path": "macros/adapters.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/adapters.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__alter_relation_comment" + }, + "macro.dbt_postgres.postgres__any_value": { + "arguments": [], + "created_at": 1719485736.332639, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__any_value(expression) -%}\n\n min({{ expression }})\n\n{%- endmacro %}", + "meta": {}, + "name": "postgres__any_value", + "original_file_path": "macros/utils/any_value.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/utils/any_value.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__any_value" + }, + "macro.dbt_postgres.postgres__check_schema_exists": { + "arguments": [], + "created_at": 1719485736.309761, + "depends_on": { + "macros": [ + "macro.dbt.statement" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__check_schema_exists(information_schema, schema) -%}\n {% if information_schema.database -%}\n {{ adapter.verify_database(information_schema.database) }}\n {%- endif -%}\n {% call statement('check_schema_exists', fetch_result=True, auto_begin=False) %}\n select count(*) from pg_namespace where nspname = '{{ schema }}'\n {% endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{% endmacro %}", + "meta": {}, + "name": "postgres__check_schema_exists", + "original_file_path": "macros/adapters.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/adapters.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__check_schema_exists" + }, + "macro.dbt_postgres.postgres__copy_grants": { + "arguments": [], + "created_at": 1719485736.3146439, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__copy_grants() %}\n {{ return(False) }}\n{% endmacro %}", + "meta": {}, + "name": "postgres__copy_grants", + "original_file_path": "macros/adapters.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/adapters.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__copy_grants" + }, + "macro.dbt_postgres.postgres__create_schema": { + "arguments": [], + "created_at": 1719485736.306344, + "depends_on": { + "macros": [ + "macro.dbt.statement" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__create_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier().include(database=False) }}\n {%- endcall -%}\n{% endmacro %}", + "meta": {}, + "name": "postgres__create_schema", + "original_file_path": "macros/adapters.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/adapters.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__create_schema" + }, + "macro.dbt_postgres.postgres__create_table_as": { + "arguments": [], + "created_at": 1719485736.3053398, + "depends_on": { + "macros": [ + "macro.dbt.get_assert_columns_equivalent", + "macro.dbt.get_table_columns_and_constraints", + "macro.dbt.default__get_column_names", + "macro.dbt.get_select_subquery" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__create_table_as(temporary, relation, sql) -%}\n {%- set unlogged = config.get('unlogged', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary -%}\n temporary\n {%- elif unlogged -%}\n unlogged\n {%- endif %} table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {% endif -%}\n {% if contract_config.enforced and (not temporary) -%}\n {{ get_table_columns_and_constraints() }} ;\n insert into {{ relation }} (\n {{ adapter.dispatch('get_column_names', 'dbt')() }}\n )\n {%- set sql = get_select_subquery(sql) %}\n {% else %}\n as\n {% endif %}\n (\n {{ sql }}\n );\n{%- endmacro %}", + "meta": {}, + "name": "postgres__create_table_as", + "original_file_path": "macros/adapters.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/adapters.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__create_table_as" + }, + "macro.dbt_postgres.postgres__current_timestamp": { + "arguments": [], + "created_at": 1719485736.2888992, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", + "meta": {}, + "name": "postgres__current_timestamp", + "original_file_path": "macros/timestamps.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/timestamps.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__current_timestamp" + }, + "macro.dbt_postgres.postgres__current_timestamp_backcompat": { + "arguments": [], + "created_at": 1719485736.289357, + "depends_on": { + "macros": [ + "macro.dbt.type_timestamp" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__current_timestamp_backcompat() %}\n current_timestamp::{{ type_timestamp() }}\n{% endmacro %}", + "meta": {}, + "name": "postgres__current_timestamp_backcompat", + "original_file_path": "macros/timestamps.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/timestamps.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__current_timestamp_backcompat" + }, + "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat": { + "arguments": [], + "created_at": 1719485736.289477, + "depends_on": { + "macros": [ + "macro.dbt.type_timestamp" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__current_timestamp_in_utc_backcompat() %}\n (current_timestamp at time zone 'utc')::{{ type_timestamp() }}\n{% endmacro %}", + "meta": {}, + "name": "postgres__current_timestamp_in_utc_backcompat", + "original_file_path": "macros/timestamps.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/timestamps.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat" + }, + "macro.dbt_postgres.postgres__dateadd": { + "arguments": [], + "created_at": 1719485736.328303, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", + "meta": {}, + "name": "postgres__dateadd", + "original_file_path": "macros/utils/dateadd.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/utils/dateadd.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__dateadd" + }, + "macro.dbt_postgres.postgres__datediff": { + "arguments": [], + "created_at": 1719485736.332466, + "depends_on": { + "macros": [ + "macro.dbt.datediff" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) -%}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{%- endmacro %}", + "meta": {}, + "name": "postgres__datediff", + "original_file_path": "macros/utils/datediff.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/utils/datediff.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__datediff" + }, + "macro.dbt_postgres.postgres__describe_materialized_view": { + "arguments": [], + "created_at": 1719485736.320213, + "depends_on": { + "macros": [ + "macro.dbt.run_query", + "macro.dbt.get_show_indexes_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__describe_materialized_view(relation) %}\n -- for now just get the indexes, we don't need the name or the query yet\n {% set _indexes = run_query(get_show_indexes_sql(relation)) %}\n {% do return({'indexes': _indexes}) %}\n{% endmacro %}", + "meta": {}, + "name": "postgres__describe_materialized_view", + "original_file_path": "macros/relations/materialized_view/describe.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/relations/materialized_view/describe.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__describe_materialized_view" + }, + "macro.dbt_postgres.postgres__drop_materialized_view": { + "arguments": [], + "created_at": 1719485736.319324, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation }} cascade\n{%- endmacro %}", + "meta": {}, + "name": "postgres__drop_materialized_view", + "original_file_path": "macros/relations/materialized_view/drop.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/relations/materialized_view/drop.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__drop_materialized_view" }, - "macro.dbt.type_numeric": { + "macro.dbt_postgres.postgres__drop_schema": { "arguments": [], - "created_at": 1696458269.789772, + "created_at": 1719485736.307206, "depends_on": { "macros": [ - "macro.dbt.default__type_numeric" + "macro.dbt.statement" ] }, "description": "", @@ -6614,77 +9075,68 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro postgres__drop_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier().include(database=False) }} cascade\n {%- endcall -%}\n{% endmacro %}", "meta": {}, - "name": "type_numeric", - "original_file_path": "macros/utils/data_types.sql", - "package_name": "dbt", + "name": "postgres__drop_schema", + "original_file_path": "macros/adapters.sql", + "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.type_numeric" + "unique_id": "macro.dbt_postgres.postgres__drop_schema" }, - "macro.dbt.type_string": { + "macro.dbt_postgres.postgres__drop_table": { "arguments": [], - "created_at": 1696458269.788082, + "created_at": 1719485736.3256729, "depends_on": { - "macros": [ - "macro.dbt.default__type_string" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro postgres__drop_table(relation) -%}\n drop table if exists {{ relation }} cascade\n{%- endmacro %}", "meta": {}, - "name": "type_string", - "original_file_path": "macros/utils/data_types.sql", - "package_name": "dbt", + "name": "postgres__drop_table", + "original_file_path": "macros/relations/table/drop.sql", + "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/relations/table/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.type_string" + "unique_id": "macro.dbt_postgres.postgres__drop_table" }, - "macro.dbt.type_timestamp": { + "macro.dbt_postgres.postgres__drop_view": { "arguments": [], - "created_at": 1696458269.788734, + "created_at": 1719485736.327039, "depends_on": { - "macros": [ - "macro.dbt.default__type_timestamp" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro postgres__drop_view(relation) -%}\n drop view if exists {{ relation }} cascade\n{%- endmacro %}", "meta": {}, - "name": "type_timestamp", - "original_file_path": "macros/utils/data_types.sql", - "package_name": "dbt", + "name": "postgres__drop_view", + "original_file_path": "macros/relations/view/drop.sql", + "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/utils/data_types.sql", + "path": "macros/relations/view/drop.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/global_project", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt.type_timestamp" + "unique_id": "macro.dbt_postgres.postgres__drop_view" }, - "macro.dbt_postgres.postgres__alter_column_comment": { + "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql": { "arguments": [], - "created_at": 1696458269.575566, + "created_at": 1719485736.3214989, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres_escape_comment" + "macro.dbt.get_replace_sql", + "macro.dbt_postgres.postgres__update_indexes_on_materialized_view" ] }, "description": "", @@ -6692,25 +9144,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__alter_column_comment(relation, column_dict) %}\n {% set existing_columns = adapter.get_columns_in_relation(relation) | map(attribute=\"name\") | list %}\n {% for column_name in column_dict if (column_name in existing_columns) %}\n {% set comment = column_dict[column_name]['description'] %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on column {{ relation }}.{{ adapter.quote(column_name) if column_dict[column_name]['quote'] else column_name }} is {{ escaped_comment }};\n {% endfor %}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_alter_materialized_view_as_sql(\n relation,\n configuration_changes,\n sql,\n existing_relation,\n backup_relation,\n intermediate_relation\n) %}\n\n -- apply a full refresh immediately if needed\n {% if configuration_changes.requires_full_refresh %}\n\n {{ get_replace_sql(existing_relation, relation, sql) }}\n\n -- otherwise apply individual changes as needed\n {% else %}\n\n {{ postgres__update_indexes_on_materialized_view(relation, configuration_changes.indexes) }}\n\n {%- endif -%}\n\n{% endmacro %}", "meta": {}, - "name": "postgres__alter_column_comment", - "original_file_path": "macros/adapters.sql", + "name": "postgres__get_alter_materialized_view_as_sql", + "original_file_path": "macros/relations/materialized_view/alter.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/adapters.sql", + "path": "macros/relations/materialized_view/alter.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__alter_column_comment" + "unique_id": "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql" }, - "macro.dbt_postgres.postgres__alter_relation_comment": { + "macro.dbt_postgres.postgres__get_catalog": { "arguments": [], - "created_at": 1696458269.574534, + "created_at": 1719485736.292309, "depends_on": { "macros": [ - "macro.dbt_postgres.postgres_escape_comment" + "macro.dbt_postgres.postgres__get_catalog_relations" ] }, "description": "", @@ -6718,49 +9168,48 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n comment on {{ relation.type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_catalog(information_schema, schemas) -%}\n {%- set relations = [] -%}\n {%- for schema in schemas -%}\n {%- set dummy = relations.append({'schema': schema}) -%}\n {%- endfor -%}\n {{ return(postgres__get_catalog_relations(information_schema, relations)) }}\n{%- endmacro %}", "meta": {}, - "name": "postgres__alter_relation_comment", - "original_file_path": "macros/adapters.sql", + "name": "postgres__get_catalog", + "original_file_path": "macros/catalog.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/adapters.sql", + "path": "macros/catalog.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__alter_relation_comment" + "unique_id": "macro.dbt_postgres.postgres__get_catalog" }, - "macro.dbt_postgres.postgres__any_value": { + "macro.dbt_postgres.postgres__get_catalog_relations": { "arguments": [], - "created_at": 1696458269.586868, + "created_at": 1719485736.2918808, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.statement" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__any_value(expression) -%}\n\n min({{ expression }})\n\n{%- endmacro %}", + "macro_sql": "{% macro postgres__get_catalog_relations(information_schema, relations) -%}\n {%- call statement('catalog', fetch_result=True) -%}\n\n {#\n If the user has multiple databases set and the first one is wrong, this will fail.\n But we won't fail in the case where there are multiple quoting-difference-only dbs, which is better.\n #}\n {% set database = information_schema.database %}\n {{ adapter.verify_database(database) }}\n\n select\n '{{ database }}' as table_database,\n sch.nspname as table_schema,\n tbl.relname as table_name,\n case tbl.relkind\n when 'v' then 'VIEW'\n when 'm' then 'MATERIALIZED VIEW'\n else 'BASE TABLE'\n end as table_type,\n tbl_desc.description as table_comment,\n col.attname as column_name,\n col.attnum as column_index,\n pg_catalog.format_type(col.atttypid, col.atttypmod) as column_type,\n col_desc.description as column_comment,\n pg_get_userbyid(tbl.relowner) as table_owner\n\n from pg_catalog.pg_namespace sch\n join pg_catalog.pg_class tbl on tbl.relnamespace = sch.oid\n join pg_catalog.pg_attribute col on col.attrelid = tbl.oid\n left outer join pg_catalog.pg_description tbl_desc on (tbl_desc.objoid = tbl.oid and tbl_desc.objsubid = 0)\n left outer join pg_catalog.pg_description col_desc on (col_desc.objoid = tbl.oid and col_desc.objsubid = col.attnum)\n where (\n {%- for relation in relations -%}\n {%- if relation.identifier -%}\n (upper(sch.nspname) = upper('{{ relation.schema }}') and\n upper(tbl.relname) = upper('{{ relation.identifier }}'))\n {%- else-%}\n upper(sch.nspname) = upper('{{ relation.schema }}')\n {%- endif -%}\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n and not pg_is_other_temp_schema(sch.oid) -- not a temporary schema belonging to another session\n and tbl.relpersistence in ('p', 'u') -- [p]ermanent table or [u]nlogged table. Exclude [t]emporary tables\n and tbl.relkind in ('r', 'v', 'f', 'p', 'm') -- o[r]dinary table, [v]iew, [f]oreign table, [p]artitioned table, [m]aterialized view. Other values are [i]ndex, [S]equence, [c]omposite type, [t]OAST table\n and col.attnum > 0 -- negative numbers are used for system columns such as oid\n and not col.attisdropped -- column as not been dropped\n\n order by\n sch.nspname,\n tbl.relname,\n col.attnum\n\n {%- endcall -%}\n\n {{ return(load_result('catalog').table) }}\n{%- endmacro %}", "meta": {}, - "name": "postgres__any_value", - "original_file_path": "macros/utils/any_value.sql", + "name": "postgres__get_catalog_relations", + "original_file_path": "macros/catalog.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/utils/any_value.sql", + "path": "macros/catalog.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__any_value" + "unique_id": "macro.dbt_postgres.postgres__get_catalog_relations" }, - "macro.dbt_postgres.postgres__check_schema_exists": { + "macro.dbt_postgres.postgres__get_columns_in_relation": { "arguments": [], - "created_at": 1696458269.570358, + "created_at": 1719485736.308002, "depends_on": { "macros": [ - "macro.dbt.statement" + "macro.dbt.statement", + "macro.dbt.sql_convert_columns_in_relation" ] }, "description": "", @@ -6768,22 +9217,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__check_schema_exists(information_schema, schema) -%}\n {% if information_schema.database -%}\n {{ adapter.verify_database(information_schema.database) }}\n {%- endif -%}\n {% call statement('check_schema_exists', fetch_result=True, auto_begin=False) %}\n select count(*) from pg_namespace where nspname = '{{ schema }}'\n {% endcall %}\n {{ return(load_result('check_schema_exists').table) }}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_columns_in_relation(relation) -%}\n {% call statement('get_columns_in_relation', fetch_result=True) %}\n select\n column_name,\n data_type,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n\n from {{ relation.information_schema('columns') }}\n where table_name = '{{ relation.identifier }}'\n {% if relation.schema %}\n and table_schema = '{{ relation.schema }}'\n {% endif %}\n order by ordinal_position\n\n {% endcall %}\n {% set table = load_result('get_columns_in_relation').table %}\n {{ return(sql_convert_columns_in_relation(table)) }}\n{% endmacro %}", "meta": {}, - "name": "postgres__check_schema_exists", + "name": "postgres__get_columns_in_relation", "original_file_path": "macros/adapters.sql", "package_name": "dbt_postgres", "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__check_schema_exists" + "unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation" }, - "macro.dbt_postgres.postgres__copy_grants": { + "macro.dbt_postgres.postgres__get_create_index_sql": { "arguments": [], - "created_at": 1696458269.57614, + "created_at": 1719485736.30595, "depends_on": { "macros": [] }, @@ -6792,25 +9239,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__copy_grants() %}\n {{ return(False) }}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_create_index_sql(relation, index_dict) -%}\n {%- set index_config = adapter.parse_index(index_dict) -%}\n {%- set comma_separated_columns = \", \".join(index_config.columns) -%}\n {%- set index_name = index_config.render(relation) -%}\n\n create {% if index_config.unique -%}\n unique\n {%- endif %} index if not exists\n \"{{ index_name }}\"\n on {{ relation }} {% if index_config.type -%}\n using {{ index_config.type }}\n {%- endif %}\n ({{ comma_separated_columns }})\n{%- endmacro %}", "meta": {}, - "name": "postgres__copy_grants", + "name": "postgres__get_create_index_sql", "original_file_path": "macros/adapters.sql", "package_name": "dbt_postgres", "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__copy_grants" + "unique_id": "macro.dbt_postgres.postgres__get_create_index_sql" }, - "macro.dbt_postgres.postgres__create_schema": { + "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql": { "arguments": [], - "created_at": 1696458269.566682, + "created_at": 1719485736.3255181, "depends_on": { "macros": [ - "macro.dbt.statement" + "macro.dbt.get_create_index_sql" ] }, "description": "", @@ -6818,22 +9263,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__create_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier().include(database=False) }}\n {%- endcall -%}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_create_materialized_view_as_sql(relation, sql) %}\n create materialized view if not exists {{ relation }} as {{ sql }};\n\n {% for _index_dict in config.get('indexes', []) -%}\n {{- get_create_index_sql(relation, _index_dict) -}}\n {%- endfor -%}\n\n{% endmacro %}", "meta": {}, - "name": "postgres__create_schema", - "original_file_path": "macros/adapters.sql", + "name": "postgres__get_create_materialized_view_as_sql", + "original_file_path": "macros/relations/materialized_view/create.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/adapters.sql", + "path": "macros/relations/materialized_view/create.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__create_schema" + "unique_id": "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql" }, - "macro.dbt_postgres.postgres__create_table_as": { + "macro.dbt_postgres.postgres__get_drop_index_sql": { "arguments": [], - "created_at": 1696458269.5653162, + "created_at": 1719485736.3150148, "depends_on": { "macros": [] }, @@ -6842,49 +9285,48 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__create_table_as(temporary, relation, sql) -%}\n {%- set unlogged = config.get('unlogged', default=false) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none }}\n\n create {% if temporary -%}\n temporary\n {%- elif unlogged -%}\n unlogged\n {%- endif %} table {{ relation }}\n as (\n {{ sql }}\n );\n{%- endmacro %}", + "macro_sql": "\n\n\n{%- macro postgres__get_drop_index_sql(relation, index_name) -%}\n drop index if exists \"{{ relation.schema }}\".\"{{ index_name }}\"\n{%- endmacro -%}", "meta": {}, - "name": "postgres__create_table_as", + "name": "postgres__get_drop_index_sql", "original_file_path": "macros/adapters.sql", "package_name": "dbt_postgres", "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__create_table_as" + "unique_id": "macro.dbt_postgres.postgres__get_drop_index_sql" }, - "macro.dbt_postgres.postgres__current_timestamp": { + "macro.dbt_postgres.postgres__get_incremental_default_sql": { "arguments": [], - "created_at": 1696458269.5499048, + "created_at": 1719485736.316301, "depends_on": { - "macros": [] + "macros": [ + "macro.dbt.get_incremental_delete_insert_sql", + "macro.dbt.get_incremental_append_sql" + ] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", + "macro_sql": "{% macro postgres__get_incremental_default_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(get_incremental_delete_insert_sql(arg_dict)) %}\n {% else %}\n {% do return(get_incremental_append_sql(arg_dict)) %}\n {% endif %}\n\n{% endmacro %}", "meta": {}, - "name": "postgres__current_timestamp", - "original_file_path": "macros/timestamps.sql", + "name": "postgres__get_incremental_default_sql", + "original_file_path": "macros/materializations/incremental_strategies.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/timestamps.sql", + "path": "macros/materializations/incremental_strategies.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__current_timestamp" + "unique_id": "macro.dbt_postgres.postgres__get_incremental_default_sql" }, - "macro.dbt_postgres.postgres__current_timestamp_backcompat": { + "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes": { "arguments": [], - "created_at": 1696458269.551879, + "created_at": 1719485736.324945, "depends_on": { "macros": [ - "macro.dbt.type_timestamp" + "macro.dbt_postgres.postgres__describe_materialized_view" ] }, "description": "", @@ -6892,25 +9334,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__current_timestamp_backcompat() %}\n current_timestamp::{{ type_timestamp() }}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {% set _existing_materialized_view = postgres__describe_materialized_view(existing_relation) %}\n {% set _configuration_changes = existing_relation.get_materialized_view_config_change_collection(_existing_materialized_view, new_config.model) %}\n {% do return(_configuration_changes) %}\n{% endmacro %}", "meta": {}, - "name": "postgres__current_timestamp_backcompat", - "original_file_path": "macros/timestamps.sql", + "name": "postgres__get_materialized_view_configuration_changes", + "original_file_path": "macros/relations/materialized_view/alter.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/timestamps.sql", + "path": "macros/relations/materialized_view/alter.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__current_timestamp_backcompat" + "unique_id": "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes" }, - "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat": { + "macro.dbt_postgres.postgres__get_relations": { "arguments": [], - "created_at": 1696458269.5520551, + "created_at": 1719485736.293338, "depends_on": { "macros": [ - "macro.dbt.type_timestamp" + "macro.dbt.statement" ] }, "description": "", @@ -6918,22 +9358,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__current_timestamp_in_utc_backcompat() %}\n (current_timestamp at time zone 'utc')::{{ type_timestamp() }}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_relations() -%}\n\n {#\n -- in pg_depend, objid is the dependent, refobjid is the referenced object\n -- > a pg_depend entry indicates that the referenced object cannot be\n -- > dropped without also dropping the dependent object.\n #}\n\n {%- call statement('relations', fetch_result=True) -%}\n with relation as (\n select\n pg_rewrite.ev_class as class,\n pg_rewrite.oid as id\n from pg_rewrite\n ),\n class as (\n select\n oid as id,\n relname as name,\n relnamespace as schema,\n relkind as kind\n from pg_class\n ),\n dependency as (\n select distinct\n pg_depend.objid as id,\n pg_depend.refobjid as ref\n from pg_depend\n ),\n schema as (\n select\n pg_namespace.oid as id,\n pg_namespace.nspname as name\n from pg_namespace\n where nspname != 'information_schema' and nspname not like 'pg\\_%'\n ),\n referenced as (\n select\n relation.id AS id,\n referenced_class.name ,\n referenced_class.schema ,\n referenced_class.kind\n from relation\n join class as referenced_class on relation.class=referenced_class.id\n where referenced_class.kind in ('r', 'v', 'm')\n ),\n relationships as (\n select\n referenced.name as referenced_name,\n referenced.schema as referenced_schema_id,\n dependent_class.name as dependent_name,\n dependent_class.schema as dependent_schema_id,\n referenced.kind as kind\n from referenced\n join dependency on referenced.id=dependency.id\n join class as dependent_class on dependency.ref=dependent_class.id\n where\n (referenced.name != dependent_class.name or\n referenced.schema != dependent_class.schema)\n )\n\n select\n referenced_schema.name as referenced_schema,\n relationships.referenced_name as referenced_name,\n dependent_schema.name as dependent_schema,\n relationships.dependent_name as dependent_name\n from relationships\n join schema as dependent_schema on relationships.dependent_schema_id=dependent_schema.id\n join schema as referenced_schema on relationships.referenced_schema_id=referenced_schema.id\n group by referenced_schema, referenced_name, dependent_schema, dependent_name\n order by referenced_schema, referenced_name, dependent_schema, dependent_name;\n\n {%- endcall -%}\n\n {{ return(load_result('relations').table) }}\n{% endmacro %}", "meta": {}, - "name": "postgres__current_timestamp_in_utc_backcompat", - "original_file_path": "macros/timestamps.sql", + "name": "postgres__get_relations", + "original_file_path": "macros/relations.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/timestamps.sql", + "path": "macros/relations.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat" + "unique_id": "macro.dbt_postgres.postgres__get_relations" }, - "macro.dbt_postgres.postgres__dateadd": { + "macro.dbt_postgres.postgres__get_rename_materialized_view_sql": { "arguments": [], - "created_at": 1696458269.579446, + "created_at": 1719485736.3205602, "depends_on": { "macros": [] }, @@ -6942,77 +9380,69 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_rename_materialized_view_sql(relation, new_name) %}\n alter materialized view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "meta": {}, - "name": "postgres__dateadd", - "original_file_path": "macros/utils/dateadd.sql", + "name": "postgres__get_rename_materialized_view_sql", + "original_file_path": "macros/relations/materialized_view/rename.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/utils/dateadd.sql", + "path": "macros/relations/materialized_view/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__dateadd" + "unique_id": "macro.dbt_postgres.postgres__get_rename_materialized_view_sql" }, - "macro.dbt_postgres.postgres__datediff": { + "macro.dbt_postgres.postgres__get_rename_table_sql": { "arguments": [], - "created_at": 1696458269.586445, + "created_at": 1719485736.326884, "depends_on": { - "macros": [ - "macro.dbt.datediff" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__datediff(first_date, second_date, datepart) -%}\n\n {% if datepart == 'year' %}\n (date_part('year', ({{second_date}})::date) - date_part('year', ({{first_date}})::date))\n {% elif datepart == 'quarter' %}\n ({{ datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ datediff(first_date, second_date, 'year') }} * 12 + date_part('month', ({{second_date}})::date) - date_part('month', ({{first_date}})::date))\n {% elif datepart == 'day' %}\n (({{second_date}})::date - ({{first_date}})::date)\n {% elif datepart == 'week' %}\n ({{ datediff(first_date, second_date, 'day') }} / 7 + case\n when date_part('dow', ({{first_date}})::timestamp) <= date_part('dow', ({{second_date}})::timestamp) then\n case when {{first_date}} <= {{second_date}} then 0 else -1 end\n else\n case when {{first_date}} <= {{second_date}} then 1 else 0 end\n end)\n {% elif datepart == 'hour' %}\n ({{ datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60 + floor(date_part('second', ({{second_date}})::timestamp)) - floor(date_part('second', ({{first_date}})::timestamp)))\n {% elif datepart == 'millisecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000 + floor(date_part('millisecond', ({{second_date}})::timestamp)) - floor(date_part('millisecond', ({{first_date}})::timestamp)))\n {% elif datepart == 'microsecond' %}\n ({{ datediff(first_date, second_date, 'minute') }} * 60000000 + floor(date_part('microsecond', ({{second_date}})::timestamp)) - floor(date_part('microsecond', ({{first_date}})::timestamp)))\n {% else %}\n {{ exceptions.raise_compiler_error(\"Unsupported datepart for macro datediff in postgres: {!r}\".format(datepart)) }}\n {% endif %}\n\n{%- endmacro %}", + "macro_sql": "{% macro postgres__get_rename_table_sql(relation, new_name) %}\n alter table {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "meta": {}, - "name": "postgres__datediff", - "original_file_path": "macros/utils/datediff.sql", + "name": "postgres__get_rename_table_sql", + "original_file_path": "macros/relations/table/rename.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/utils/datediff.sql", + "path": "macros/relations/table/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__datediff" + "unique_id": "macro.dbt_postgres.postgres__get_rename_table_sql" }, - "macro.dbt_postgres.postgres__drop_schema": { + "macro.dbt_postgres.postgres__get_rename_view_sql": { "arguments": [], - "created_at": 1696458269.567198, + "created_at": 1719485736.32807, "depends_on": { - "macros": [ - "macro.dbt.statement" - ] + "macros": [] }, "description": "", "docs": { "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__drop_schema(relation) -%}\n {% if relation.database -%}\n {{ adapter.verify_database(relation.database) }}\n {%- endif -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier().include(database=False) }} cascade\n {%- endcall -%}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_rename_view_sql(relation, new_name) %}\n alter view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "meta": {}, - "name": "postgres__drop_schema", - "original_file_path": "macros/adapters.sql", + "name": "postgres__get_rename_view_sql", + "original_file_path": "macros/relations/view/rename.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/adapters.sql", + "path": "macros/relations/view/rename.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__drop_schema" + "unique_id": "macro.dbt_postgres.postgres__get_rename_view_sql" }, - "macro.dbt_postgres.postgres__get_catalog": { + "macro.dbt_postgres.postgres__get_replace_table_sql": { "arguments": [], - "created_at": 1696458269.5540092, + "created_at": 1719485736.326431, "depends_on": { "macros": [ - "macro.dbt.statement" + "macro.dbt.get_assert_columns_equivalent", + "macro.dbt.get_table_columns_and_constraints", + "macro.dbt.get_select_subquery" ] }, "description": "", @@ -7020,26 +9450,23 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__get_catalog(information_schema, schemas) -%}\n\n {%- call statement('catalog', fetch_result=True) -%}\n {#\n If the user has multiple databases set and the first one is wrong, this will fail.\n But we won't fail in the case where there are multiple quoting-difference-only dbs, which is better.\n #}\n {% set database = information_schema.database %}\n {{ adapter.verify_database(database) }}\n\n select\n '{{ database }}' as table_database,\n sch.nspname as table_schema,\n tbl.relname as table_name,\n case tbl.relkind\n when 'v' then 'VIEW'\n else 'BASE TABLE'\n end as table_type,\n tbl_desc.description as table_comment,\n col.attname as column_name,\n col.attnum as column_index,\n pg_catalog.format_type(col.atttypid, col.atttypmod) as column_type,\n col_desc.description as column_comment,\n pg_get_userbyid(tbl.relowner) as table_owner\n\n from pg_catalog.pg_namespace sch\n join pg_catalog.pg_class tbl on tbl.relnamespace = sch.oid\n join pg_catalog.pg_attribute col on col.attrelid = tbl.oid\n left outer join pg_catalog.pg_description tbl_desc on (tbl_desc.objoid = tbl.oid and tbl_desc.objsubid = 0)\n left outer join pg_catalog.pg_description col_desc on (col_desc.objoid = tbl.oid and col_desc.objsubid = col.attnum)\n\n where (\n {%- for schema in schemas -%}\n upper(sch.nspname) = upper('{{ schema }}'){%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n and not pg_is_other_temp_schema(sch.oid) -- not a temporary schema belonging to another session\n and tbl.relpersistence in ('p', 'u') -- [p]ermanent table or [u]nlogged table. Exclude [t]emporary tables\n and tbl.relkind in ('r', 'v', 'f', 'p') -- o[r]dinary table, [v]iew, [f]oreign table, [p]artitioned table. Other values are [i]ndex, [S]equence, [c]omposite type, [t]OAST table, [m]aterialized view\n and col.attnum > 0 -- negative numbers are used for system columns such as oid\n and not col.attisdropped -- column as not been dropped\n\n order by\n sch.nspname,\n tbl.relname,\n col.attnum\n\n {%- endcall -%}\n\n {{ return(load_result('catalog').table) }}\n\n{%- endmacro %}", + "macro_sql": "{% macro postgres__get_replace_table_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace table {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {{ get_table_columns_and_constraints() }}\n {%- set sql = get_select_subquery(sql) %}\n {% endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "meta": {}, - "name": "postgres__get_catalog", - "original_file_path": "macros/catalog.sql", + "name": "postgres__get_replace_table_sql", + "original_file_path": "macros/relations/table/replace.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/catalog.sql", + "path": "macros/relations/table/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__get_catalog" + "unique_id": "macro.dbt_postgres.postgres__get_replace_table_sql" }, - "macro.dbt_postgres.postgres__get_columns_in_relation": { + "macro.dbt_postgres.postgres__get_replace_view_sql": { "arguments": [], - "created_at": 1696458269.568068, + "created_at": 1719485736.327884, "depends_on": { "macros": [ - "macro.dbt.statement", - "macro.dbt.sql_convert_columns_in_relation" + "macro.dbt.get_assert_columns_equivalent" ] }, "description": "", @@ -7047,22 +9474,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__get_columns_in_relation(relation) -%}\n {% call statement('get_columns_in_relation', fetch_result=True) %}\n select\n column_name,\n data_type,\n character_maximum_length,\n numeric_precision,\n numeric_scale\n\n from {{ relation.information_schema('columns') }}\n where table_name = '{{ relation.identifier }}'\n {% if relation.schema %}\n and table_schema = '{{ relation.schema }}'\n {% endif %}\n order by ordinal_position\n\n {% endcall %}\n {% set table = load_result('get_columns_in_relation').table %}\n {{ return(sql_convert_columns_in_relation(table)) }}\n{% endmacro %}", + "macro_sql": "{% macro postgres__get_replace_view_sql(relation, sql) -%}\n\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n\n create or replace view {{ relation }}\n {% set contract_config = config.get('contract') %}\n {% if contract_config.enforced %}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as (\n {{ sql }}\n );\n\n{%- endmacro %}", "meta": {}, - "name": "postgres__get_columns_in_relation", - "original_file_path": "macros/adapters.sql", + "name": "postgres__get_replace_view_sql", + "original_file_path": "macros/relations/view/replace.sql", "package_name": "dbt_postgres", "patch_path": null, - "path": "macros/adapters.sql", + "path": "macros/relations/view/replace.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation" + "unique_id": "macro.dbt_postgres.postgres__get_replace_view_sql" }, - "macro.dbt_postgres.postgres__get_create_index_sql": { + "macro.dbt_postgres.postgres__get_show_grant_sql": { "arguments": [], - "created_at": 1696458269.566161, + "created_at": 1719485736.314513, "depends_on": { "macros": [] }, @@ -7071,49 +9496,20 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__get_create_index_sql(relation, index_dict) -%}\n {%- set index_config = adapter.parse_index(index_dict) -%}\n {%- set comma_separated_columns = \", \".join(index_config.columns) -%}\n {%- set index_name = index_config.render(relation) -%}\n\n create {% if index_config.unique -%}\n unique\n {%- endif %} index if not exists\n \"{{ index_name }}\"\n on {{ relation }} {% if index_config.type -%}\n using {{ index_config.type }}\n {%- endif %}\n ({{ comma_separated_columns }});\n{%- endmacro %}", + "macro_sql": "\n\n{%- macro postgres__get_show_grant_sql(relation) -%}\n select grantee, privilege_type\n from {{ relation.information_schema('role_table_grants') }}\n where grantor = current_role\n and grantee != current_role\n and table_schema = '{{ relation.schema }}'\n and table_name = '{{ relation.identifier }}'\n{%- endmacro -%}\n\n", "meta": {}, - "name": "postgres__get_create_index_sql", + "name": "postgres__get_show_grant_sql", "original_file_path": "macros/adapters.sql", "package_name": "dbt_postgres", "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", - "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__get_create_index_sql" - }, - "macro.dbt_postgres.postgres__get_incremental_default_sql": { - "arguments": [], - "created_at": 1696458269.577235, - "depends_on": { - "macros": [ - "macro.dbt.get_incremental_delete_insert_sql", - "macro.dbt.get_incremental_append_sql" - ] - }, - "description": "", - "docs": { - "node_color": null, - "show": true - }, - "macro_sql": "{% macro postgres__get_incremental_default_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(get_incremental_delete_insert_sql(arg_dict)) %}\n {% else %}\n {% do return(get_incremental_append_sql(arg_dict)) %}\n {% endif %}\n\n{% endmacro %}", - "meta": {}, - "name": "postgres__get_incremental_default_sql", - "original_file_path": "macros/materializations/incremental_strategies.sql", - "package_name": "dbt_postgres", - "patch_path": null, - "path": "macros/materializations/incremental_strategies.sql", - "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__get_incremental_default_sql" + "unique_id": "macro.dbt_postgres.postgres__get_show_grant_sql" }, - "macro.dbt_postgres.postgres__get_show_grant_sql": { + "macro.dbt_postgres.postgres__get_show_indexes_sql": { "arguments": [], - "created_at": 1696458269.575934, + "created_at": 1719485736.31486, "depends_on": { "macros": [] }, @@ -7122,22 +9518,20 @@ "node_color": null, "show": true }, - "macro_sql": "\n\n{%- macro postgres__get_show_grant_sql(relation) -%}\n select grantee, privilege_type\n from {{ relation.information_schema('role_table_grants') }}\n where grantor = current_role\n and grantee != current_role\n and table_schema = '{{ relation.schema }}'\n and table_name = '{{ relation.identifier }}'\n{%- endmacro -%}\n\n", + "macro_sql": "{% macro postgres__get_show_indexes_sql(relation) %}\n select\n i.relname as name,\n m.amname as method,\n ix.indisunique as \"unique\",\n array_to_string(array_agg(a.attname), ',') as column_names\n from pg_index ix\n join pg_class i\n on i.oid = ix.indexrelid\n join pg_am m\n on m.oid=i.relam\n join pg_class t\n on t.oid = ix.indrelid\n join pg_namespace n\n on n.oid = t.relnamespace\n join pg_attribute a\n on a.attrelid = t.oid\n and a.attnum = ANY(ix.indkey)\n where t.relname = '{{ relation.identifier }}'\n and n.nspname = '{{ relation.schema }}'\n and t.relkind in ('r', 'm')\n group by 1, 2, 3\n order by 1, 2, 3\n{% endmacro %}", "meta": {}, - "name": "postgres__get_show_grant_sql", + "name": "postgres__get_show_indexes_sql", "original_file_path": "macros/adapters.sql", "package_name": "dbt_postgres", "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], - "unique_id": "macro.dbt_postgres.postgres__get_show_grant_sql" + "unique_id": "macro.dbt_postgres.postgres__get_show_indexes_sql" }, "macro.dbt_postgres.postgres__information_schema_name": { "arguments": [], - "created_at": 1696458269.568956, + "created_at": 1719485736.308933, "depends_on": { "macros": [] }, @@ -7154,14 +9548,12 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__information_schema_name" }, "macro.dbt_postgres.postgres__last_day": { "arguments": [], - "created_at": 1696458269.587851, + "created_at": 1719485736.333154, "depends_on": { "macros": [ "macro.dbt.dateadd", @@ -7182,14 +9574,12 @@ "patch_path": null, "path": "macros/utils/last_day.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__last_day" }, "macro.dbt_postgres.postgres__list_relations_without_caching": { "arguments": [], - "created_at": 1696458269.568678, + "created_at": 1719485736.308728, "depends_on": { "macros": [ "macro.dbt.statement" @@ -7200,7 +9590,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres__list_relations_without_caching(schema_relation) %}\n {% call statement('list_relations_without_caching', fetch_result=True) -%}\n select\n '{{ schema_relation.database }}' as database,\n tablename as name,\n schemaname as schema,\n 'table' as type\n from pg_tables\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n viewname as name,\n schemaname as schema,\n 'view' as type\n from pg_views\n where schemaname ilike '{{ schema_relation.schema }}'\n {% endcall %}\n {{ return(load_result('list_relations_without_caching').table) }}\n{% endmacro %}", + "macro_sql": "{% macro postgres__list_relations_without_caching(schema_relation) %}\n {% call statement('list_relations_without_caching', fetch_result=True) -%}\n select\n '{{ schema_relation.database }}' as database,\n tablename as name,\n schemaname as schema,\n 'table' as type\n from pg_tables\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n viewname as name,\n schemaname as schema,\n 'view' as type\n from pg_views\n where schemaname ilike '{{ schema_relation.schema }}'\n union all\n select\n '{{ schema_relation.database }}' as database,\n matviewname as name,\n schemaname as schema,\n 'materialized_view' as type\n from pg_matviews\n where schemaname ilike '{{ schema_relation.schema }}'\n {% endcall %}\n {{ return(load_result('list_relations_without_caching').table) }}\n{% endmacro %}", "meta": {}, "name": "postgres__list_relations_without_caching", "original_file_path": "macros/adapters.sql", @@ -7208,14 +9598,12 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__list_relations_without_caching" }, "macro.dbt_postgres.postgres__list_schemas": { "arguments": [], - "created_at": 1696458269.569512, + "created_at": 1719485736.309331, "depends_on": { "macros": [ "macro.dbt.statement" @@ -7234,14 +9622,12 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__list_schemas" }, "macro.dbt_postgres.postgres__listagg": { "arguments": [], - "created_at": 1696458269.5807512, + "created_at": 1719485736.329083, "depends_on": { "macros": [] }, @@ -7258,14 +9644,12 @@ "patch_path": null, "path": "macros/utils/listagg.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__listagg" }, "macro.dbt_postgres.postgres__make_backup_relation": { "arguments": [], - "created_at": 1696458269.5734138, + "created_at": 1719485736.311583, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__make_relation_with_suffix" @@ -7284,14 +9668,12 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__make_backup_relation" }, "macro.dbt_postgres.postgres__make_intermediate_relation": { "arguments": [], - "created_at": 1696458269.5723772, + "created_at": 1719485736.3109372, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__make_relation_with_suffix" @@ -7310,14 +9692,12 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__make_intermediate_relation" }, "macro.dbt_postgres.postgres__make_relation_with_suffix": { "arguments": [], - "created_at": 1696458269.5720162, + "created_at": 1719485736.31072, "depends_on": { "macros": [] }, @@ -7334,14 +9714,12 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__make_relation_with_suffix" }, "macro.dbt_postgres.postgres__make_temp_relation": { "arguments": [], - "created_at": 1696458269.572947, + "created_at": 1719485736.31129, "depends_on": { "macros": [ "macro.dbt_postgres.postgres__make_relation_with_suffix" @@ -7360,14 +9738,34 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__make_temp_relation" }, + "macro.dbt_postgres.postgres__refresh_materialized_view": { + "arguments": [], + "created_at": 1719485736.32038, + "depends_on": { + "macros": [] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "{% macro postgres__refresh_materialized_view(relation) %}\n refresh materialized view {{ relation }}\n{% endmacro %}", + "meta": {}, + "name": "postgres__refresh_materialized_view", + "original_file_path": "macros/relations/materialized_view/refresh.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/relations/materialized_view/refresh.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__refresh_materialized_view" + }, "macro.dbt_postgres.postgres__snapshot_get_time": { "arguments": [], - "created_at": 1696458269.5516999, + "created_at": 1719485736.289238, "depends_on": { "macros": [ "macro.dbt.current_timestamp" @@ -7386,14 +9784,12 @@ "patch_path": null, "path": "macros/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__snapshot_get_time" }, "macro.dbt_postgres.postgres__snapshot_merge_sql": { "arguments": [], - "created_at": 1696458269.5788622, + "created_at": 1719485736.318985, "depends_on": { "macros": [] }, @@ -7410,14 +9806,12 @@ "patch_path": null, "path": "macros/materializations/snapshot_merge.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__snapshot_merge_sql" }, "macro.dbt_postgres.postgres__snapshot_string_as_time": { "arguments": [], - "created_at": 1696458269.551509, + "created_at": 1719485736.289119, "depends_on": { "macros": [] }, @@ -7434,14 +9828,12 @@ "patch_path": null, "path": "macros/timestamps.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__snapshot_string_as_time" }, "macro.dbt_postgres.postgres__split_part": { "arguments": [], - "created_at": 1696458269.588754, + "created_at": 1719485736.334007, "depends_on": { "macros": [ "macro.dbt.default__split_part", @@ -7461,14 +9853,37 @@ "patch_path": null, "path": "macros/utils/split_part.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres__split_part" }, + "macro.dbt_postgres.postgres__update_indexes_on_materialized_view": { + "arguments": [], + "created_at": 1719485736.3239639, + "depends_on": { + "macros": [ + "macro.dbt_postgres.postgres__get_drop_index_sql", + "macro.dbt_postgres.postgres__get_create_index_sql" + ] + }, + "description": "", + "docs": { + "node_color": null, + "show": true + }, + "macro_sql": "\n\n\n{%- macro postgres__update_indexes_on_materialized_view(relation, index_changes) -%}\n {{- log(\"Applying UPDATE INDEXES to: \" ~ relation) -}}\n\n {%- for _index_change in index_changes -%}\n {%- set _index = _index_change.context -%}\n\n {%- if _index_change.action == \"drop\" -%}\n\n {{ postgres__get_drop_index_sql(relation, _index.name) }};\n\n {%- elif _index_change.action == \"create\" -%}\n\n {{ postgres__get_create_index_sql(relation, _index.as_node_config) }}\n\n {%- endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n\n", + "meta": {}, + "name": "postgres__update_indexes_on_materialized_view", + "original_file_path": "macros/relations/materialized_view/alter.sql", + "package_name": "dbt_postgres", + "patch_path": null, + "path": "macros/relations/materialized_view/alter.sql", + "resource_type": "macro", + "supported_languages": null, + "unique_id": "macro.dbt_postgres.postgres__update_indexes_on_materialized_view" + }, "macro.dbt_postgres.postgres_escape_comment": { "arguments": [], - "created_at": 1696458269.5741508, + "created_at": 1719485736.3121421, "depends_on": { "macros": [] }, @@ -7485,17 +9900,15 @@ "patch_path": null, "path": "macros/adapters.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres_escape_comment" }, "macro.dbt_postgres.postgres_get_relations": { "arguments": [], - "created_at": 1696458269.555246, + "created_at": 1719485736.2934961, "depends_on": { "macros": [ - "macro.dbt.statement" + "macro.dbt_postgres.postgres__get_relations" ] }, "description": "", @@ -7503,7 +9916,7 @@ "node_color": null, "show": true }, - "macro_sql": "{% macro postgres_get_relations () -%}\n\n {#\n -- in pg_depend, objid is the dependent, refobjid is the referenced object\n -- > a pg_depend entry indicates that the referenced object cannot be\n -- > dropped without also dropping the dependent object.\n #}\n\n {%- call statement('relations', fetch_result=True) -%}\n with relation as (\n select\n pg_rewrite.ev_class as class,\n pg_rewrite.oid as id\n from pg_rewrite\n ),\n class as (\n select\n oid as id,\n relname as name,\n relnamespace as schema,\n relkind as kind\n from pg_class\n ),\n dependency as (\n select distinct\n pg_depend.objid as id,\n pg_depend.refobjid as ref\n from pg_depend\n ),\n schema as (\n select\n pg_namespace.oid as id,\n pg_namespace.nspname as name\n from pg_namespace\n where nspname != 'information_schema' and nspname not like 'pg\\_%'\n ),\n referenced as (\n select\n relation.id AS id,\n referenced_class.name ,\n referenced_class.schema ,\n referenced_class.kind\n from relation\n join class as referenced_class on relation.class=referenced_class.id\n where referenced_class.kind in ('r', 'v')\n ),\n relationships as (\n select\n referenced.name as referenced_name,\n referenced.schema as referenced_schema_id,\n dependent_class.name as dependent_name,\n dependent_class.schema as dependent_schema_id,\n referenced.kind as kind\n from referenced\n join dependency on referenced.id=dependency.id\n join class as dependent_class on dependency.ref=dependent_class.id\n where\n (referenced.name != dependent_class.name or\n referenced.schema != dependent_class.schema)\n )\n\n select\n referenced_schema.name as referenced_schema,\n relationships.referenced_name as referenced_name,\n dependent_schema.name as dependent_schema,\n relationships.dependent_name as dependent_name\n from relationships\n join schema as dependent_schema on relationships.dependent_schema_id=dependent_schema.id\n join schema as referenced_schema on relationships.referenced_schema_id=referenced_schema.id\n group by referenced_schema, referenced_name, dependent_schema, dependent_name\n order by referenced_schema, referenced_name, dependent_schema, dependent_name;\n\n {%- endcall -%}\n\n {{ return(load_result('relations').table) }}\n{% endmacro %}", + "macro_sql": "{% macro postgres_get_relations() %}\n {{ return(postgres__get_relations()) }}\n{% endmacro %}", "meta": {}, "name": "postgres_get_relations", "original_file_path": "macros/relations.sql", @@ -7511,14 +9924,12 @@ "patch_path": null, "path": "macros/relations.sql", "resource_type": "macro", - "root_path": "/Users/julian/.pyenv/versions/3.10.0/lib/python3.10/site-packages/dbt/include/postgres", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_postgres.postgres_get_relations" }, "macro.dbt_utils._bigquery__get_matching_schemata": { "arguments": [], - "created_at": 1696458269.967883, + "created_at": 1719485736.7140338, "depends_on": { "macros": [ "macro.dbt.run_query" @@ -7537,14 +9948,12 @@ "patch_path": null, "path": "macros/sql/get_tables_by_pattern_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils._bigquery__get_matching_schemata" }, "macro.dbt_utils._is_ephemeral": { "arguments": [], - "created_at": 1696458269.911734, + "created_at": 1719485736.667329, "depends_on": { "macros": [] }, @@ -7561,14 +9970,12 @@ "patch_path": null, "path": "macros/jinja_helpers/_is_ephemeral.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils._is_ephemeral" }, "macro.dbt_utils._is_relation": { "arguments": [], - "created_at": 1696458269.907017, + "created_at": 1719485736.6636631, "depends_on": { "macros": [] }, @@ -7585,14 +9992,12 @@ "patch_path": null, "path": "macros/jinja_helpers/_is_relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils._is_relation" }, "macro.dbt_utils.bigquery__deduplicate": { "arguments": [], - "created_at": 1696458269.95776, + "created_at": 1719485736.703784, "depends_on": { "macros": [] }, @@ -7609,14 +10014,12 @@ "patch_path": null, "path": "macros/sql/deduplicate.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.bigquery__deduplicate" }, "macro.dbt_utils.bigquery__get_tables_by_pattern_sql": { "arguments": [], - "created_at": 1696458269.9670799, + "created_at": 1719485736.713356, "depends_on": { "macros": [ "macro.dbt_utils._bigquery__get_matching_schemata", @@ -7636,14 +10039,12 @@ "patch_path": null, "path": "macros/sql/get_tables_by_pattern_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.bigquery__get_tables_by_pattern_sql" }, "macro.dbt_utils.bigquery__haversine_distance": { "arguments": [], - "created_at": 1696458269.9946911, + "created_at": 1719485736.73806, "depends_on": { "macros": [ "macro.dbt_utils.degrees_to_radians" @@ -7662,14 +10063,12 @@ "patch_path": null, "path": "macros/sql/haversine_distance.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.bigquery__haversine_distance" }, "macro.dbt_utils.databricks__get_table_types_sql": { "arguments": [], - "created_at": 1696458269.98752, + "created_at": 1719485736.73151, "depends_on": { "macros": [] }, @@ -7686,14 +10085,12 @@ "patch_path": null, "path": "macros/sql/get_table_types_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.databricks__get_table_types_sql" }, "macro.dbt_utils.date_spine": { "arguments": [], - "created_at": 1696458269.914428, + "created_at": 1719485736.669255, "depends_on": { "macros": [ "macro.dbt_utils.default__date_spine" @@ -7712,14 +10109,12 @@ "patch_path": null, "path": "macros/sql/date_spine.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.date_spine" }, "macro.dbt_utils.deduplicate": { "arguments": [], - "created_at": 1696458269.9561112, + "created_at": 1719485736.7012029, "depends_on": { "macros": [ "macro.dbt_utils.postgres__deduplicate" @@ -7738,14 +10133,12 @@ "patch_path": null, "path": "macros/sql/deduplicate.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.deduplicate" }, "macro.dbt_utils.default__date_spine": { "arguments": [], - "created_at": 1696458269.915016, + "created_at": 1719485736.669651, "depends_on": { "macros": [ "macro.dbt_utils.generate_series", @@ -7766,14 +10159,12 @@ "patch_path": null, "path": "macros/sql/date_spine.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__date_spine" }, "macro.dbt_utils.default__deduplicate": { "arguments": [], - "created_at": 1696458269.956494, + "created_at": 1719485736.701886, "depends_on": { "macros": [] }, @@ -7790,14 +10181,12 @@ "patch_path": null, "path": "macros/sql/deduplicate.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__deduplicate" }, "macro.dbt_utils.default__generate_series": { "arguments": [], - "created_at": 1696458269.925334, + "created_at": 1719485736.678598, "depends_on": { "macros": [ "macro.dbt_utils.get_powers_of_two" @@ -7816,14 +10205,12 @@ "patch_path": null, "path": "macros/sql/generate_series.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__generate_series" }, "macro.dbt_utils.default__generate_surrogate_key": { "arguments": [], - "created_at": 1696458269.985795, + "created_at": 1719485736.730099, "depends_on": { "macros": [ "macro.dbt.type_string", @@ -7844,14 +10231,12 @@ "patch_path": null, "path": "macros/sql/generate_surrogate_key.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__generate_surrogate_key" }, "macro.dbt_utils.default__get_column_values": { "arguments": [], - "created_at": 1696458269.9728918, + "created_at": 1719485736.717495, "depends_on": { "macros": [ "macro.dbt_utils._is_ephemeral", @@ -7872,14 +10257,12 @@ "patch_path": null, "path": "macros/sql/get_column_values.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_column_values" }, "macro.dbt_utils.default__get_filtered_columns_in_relation": { "arguments": [], - "created_at": 1696458269.979146, + "created_at": 1719485736.722564, "depends_on": { "macros": [ "macro.dbt_utils._is_relation", @@ -7899,14 +10282,12 @@ "patch_path": null, "path": "macros/sql/get_filtered_columns_in_relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_filtered_columns_in_relation" }, "macro.dbt_utils.default__get_intervals_between": { "arguments": [], - "created_at": 1696458269.914051, + "created_at": 1719485736.668746, "depends_on": { "macros": [ "macro.dbt.statement", @@ -7926,14 +10307,12 @@ "patch_path": null, "path": "macros/sql/date_spine.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_intervals_between" }, "macro.dbt_utils.default__get_powers_of_two": { "arguments": [], - "created_at": 1696458269.923839, + "created_at": 1719485736.677862, "depends_on": { "macros": [] }, @@ -7950,14 +10329,12 @@ "patch_path": null, "path": "macros/sql/generate_series.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_powers_of_two" }, "macro.dbt_utils.default__get_query_results_as_dict": { "arguments": [], - "created_at": 1696458269.9838238, + "created_at": 1719485736.727696, "depends_on": { "macros": [ "macro.dbt.statement" @@ -7976,14 +10353,12 @@ "patch_path": null, "path": "macros/sql/get_query_results_as_dict.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_query_results_as_dict" }, "macro.dbt_utils.default__get_relations_by_pattern": { "arguments": [], - "created_at": 1696458269.921258, + "created_at": 1719485736.674046, "depends_on": { "macros": [ "macro.dbt.statement", @@ -8003,14 +10378,12 @@ "patch_path": null, "path": "macros/sql/get_relations_by_pattern.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_relations_by_pattern" }, "macro.dbt_utils.default__get_relations_by_prefix": { "arguments": [], - "created_at": 1696458269.928546, + "created_at": 1719485736.680293, "depends_on": { "macros": [ "macro.dbt.statement", @@ -8030,14 +10403,12 @@ "patch_path": null, "path": "macros/sql/get_relations_by_prefix.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_relations_by_prefix" }, "macro.dbt_utils.default__get_single_value": { "arguments": [], - "created_at": 1696458269.989894, + "created_at": 1719485736.7332969, "depends_on": { "macros": [ "macro.dbt.statement" @@ -8056,14 +10427,12 @@ "patch_path": null, "path": "macros/sql/get_single_value.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_single_value" }, "macro.dbt_utils.default__get_table_types_sql": { "arguments": [], - "created_at": 1696458269.987062, + "created_at": 1719485736.73105, "depends_on": { "macros": [] }, @@ -8080,14 +10449,12 @@ "patch_path": null, "path": "macros/sql/get_table_types_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_table_types_sql" }, "macro.dbt_utils.default__get_tables_by_pattern_sql": { "arguments": [], - "created_at": 1696458269.965835, + "created_at": 1719485736.7122319, "depends_on": { "macros": [ "macro.dbt_utils.get_table_types_sql" @@ -8106,14 +10473,12 @@ "patch_path": null, "path": "macros/sql/get_tables_by_pattern_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_tables_by_pattern_sql" }, "macro.dbt_utils.default__get_tables_by_prefix_sql": { "arguments": [], - "created_at": 1696458269.930016, + "created_at": 1719485736.681414, "depends_on": { "macros": [ "macro.dbt_utils.get_tables_by_pattern_sql" @@ -8132,14 +10497,12 @@ "patch_path": null, "path": "macros/sql/get_tables_by_prefix_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_tables_by_prefix_sql" }, "macro.dbt_utils.default__get_url_host": { "arguments": [], - "created_at": 1696458269.857218, + "created_at": 1719485736.621399, "depends_on": { "macros": [ "macro.dbt.split_part", @@ -8161,14 +10524,12 @@ "patch_path": null, "path": "macros/web/get_url_host.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_url_host" }, "macro.dbt_utils.default__get_url_parameter": { "arguments": [], - "created_at": 1696458269.860918, + "created_at": 1719485736.624197, "depends_on": { "macros": [ "macro.dbt.split_part" @@ -8187,14 +10548,12 @@ "patch_path": null, "path": "macros/web/get_url_parameter.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_url_parameter" }, "macro.dbt_utils.default__get_url_path": { "arguments": [], - "created_at": 1696458269.859402, + "created_at": 1719485736.6228778, "depends_on": { "macros": [ "macro.dbt.replace", @@ -8219,14 +10578,12 @@ "patch_path": null, "path": "macros/web/get_url_path.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__get_url_path" }, "macro.dbt_utils.default__group_by": { "arguments": [], - "created_at": 1696458269.954616, + "created_at": 1719485736.700402, "depends_on": { "macros": [] }, @@ -8243,14 +10600,12 @@ "patch_path": null, "path": "macros/sql/groupby.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__group_by" }, "macro.dbt_utils.default__haversine_distance": { "arguments": [], - "created_at": 1696458269.993296, + "created_at": 1719485736.736367, "depends_on": { "macros": [] }, @@ -8267,14 +10622,12 @@ "patch_path": null, "path": "macros/sql/haversine_distance.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__haversine_distance" }, "macro.dbt_utils.default__log_info": { "arguments": [], - "created_at": 1696458269.908833, + "created_at": 1719485736.665316, "depends_on": { "macros": [ "macro.dbt_utils.pretty_log_format" @@ -8293,14 +10646,12 @@ "patch_path": null, "path": "macros/jinja_helpers/log_info.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__log_info" }, "macro.dbt_utils.default__nullcheck": { "arguments": [], - "created_at": 1696458269.9623308, + "created_at": 1719485736.7089212, "depends_on": { "macros": [] }, @@ -8317,14 +10668,12 @@ "patch_path": null, "path": "macros/sql/nullcheck.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__nullcheck" }, "macro.dbt_utils.default__nullcheck_table": { "arguments": [], - "created_at": 1696458269.9181361, + "created_at": 1719485736.6715178, "depends_on": { "macros": [ "macro.dbt_utils._is_relation", @@ -8345,14 +10694,12 @@ "patch_path": null, "path": "macros/sql/nullcheck_table.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__nullcheck_table" }, "macro.dbt_utils.default__pivot": { "arguments": [], - "created_at": 1696458269.976574, + "created_at": 1719485736.720366, "depends_on": { "macros": [ "macro.dbt.escape_single_quotes", @@ -8372,14 +10719,12 @@ "patch_path": null, "path": "macros/sql/pivot.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__pivot" }, "macro.dbt_utils.default__pretty_log_format": { "arguments": [], - "created_at": 1696458269.906094, + "created_at": 1719485736.66297, "depends_on": { "macros": [ "macro.dbt_utils.pretty_time" @@ -8398,14 +10743,12 @@ "patch_path": null, "path": "macros/jinja_helpers/pretty_log_format.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__pretty_log_format" }, "macro.dbt_utils.default__pretty_time": { "arguments": [], - "created_at": 1696458269.90797, + "created_at": 1719485736.66434, "depends_on": { "macros": [] }, @@ -8422,14 +10765,12 @@ "patch_path": null, "path": "macros/jinja_helpers/pretty_time.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__pretty_time" }, "macro.dbt_utils.default__safe_add": { "arguments": [], - "created_at": 1696458269.961039, + "created_at": 1719485736.707396, "depends_on": { "macros": [] }, @@ -8446,14 +10787,12 @@ "patch_path": null, "path": "macros/sql/safe_add.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__safe_add" }, "macro.dbt_utils.default__safe_divide": { "arguments": [], - "created_at": 1696458269.941708, + "created_at": 1719485736.689852, "depends_on": { "macros": [] }, @@ -8470,14 +10809,12 @@ "patch_path": null, "path": "macros/sql/safe_divide.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__safe_divide" }, "macro.dbt_utils.default__safe_subtract": { "arguments": [], - "created_at": 1696458269.916886, + "created_at": 1719485736.670645, "depends_on": { "macros": [] }, @@ -8494,14 +10831,12 @@ "patch_path": null, "path": "macros/sql/safe_subtract.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__safe_subtract" }, "macro.dbt_utils.default__star": { "arguments": [], - "created_at": 1696458269.935112, + "created_at": 1719485736.685639, "depends_on": { "macros": [ "macro.dbt_utils._is_relation", @@ -8522,14 +10857,12 @@ "patch_path": null, "path": "macros/sql/star.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__star" }, "macro.dbt_utils.default__surrogate_key": { "arguments": [], - "created_at": 1696458269.959094, + "created_at": 1719485736.7051, "depends_on": { "macros": [] }, @@ -8546,14 +10879,12 @@ "patch_path": null, "path": "macros/sql/surrogate_key.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__surrogate_key" }, "macro.dbt_utils.default__test_accepted_range": { "arguments": [], - "created_at": 1696458269.8764522, + "created_at": 1719485736.6358259, "depends_on": { "macros": [] }, @@ -8570,14 +10901,12 @@ "patch_path": null, "path": "macros/generic_tests/accepted_range.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_accepted_range" }, "macro.dbt_utils.default__test_at_least_one": { "arguments": [], - "created_at": 1696458269.880932, + "created_at": 1719485736.638953, "depends_on": { "macros": [] }, @@ -8594,14 +10923,12 @@ "patch_path": null, "path": "macros/generic_tests/at_least_one.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_at_least_one" }, "macro.dbt_utils.default__test_cardinality_equality": { "arguments": [], - "created_at": 1696458269.884924, + "created_at": 1719485736.646685, "depends_on": { "macros": [ "macro.dbt.except" @@ -8620,14 +10947,12 @@ "patch_path": null, "path": "macros/generic_tests/cardinality_equality.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_cardinality_equality" }, "macro.dbt_utils.default__test_equal_rowcount": { "arguments": [], - "created_at": 1696458269.867796, + "created_at": 1719485736.629295, "depends_on": { "macros": [] }, @@ -8644,14 +10969,12 @@ "patch_path": null, "path": "macros/generic_tests/equal_rowcount.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_equal_rowcount" }, "macro.dbt_utils.default__test_equality": { "arguments": [], - "created_at": 1696458269.8951738, + "created_at": 1719485736.654316, "depends_on": { "macros": [ "macro.dbt_utils._is_relation", @@ -8672,14 +10995,12 @@ "patch_path": null, "path": "macros/generic_tests/equality.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_equality" }, "macro.dbt_utils.default__test_expression_is_true": { "arguments": [], - "created_at": 1696458269.8862998, + "created_at": 1719485736.6476219, "depends_on": { "macros": [ "macro.dbt.should_store_failures" @@ -8698,14 +11019,12 @@ "patch_path": null, "path": "macros/generic_tests/expression_is_true.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_expression_is_true" }, "macro.dbt_utils.default__test_fewer_rows_than": { "arguments": [], - "created_at": 1696458269.864535, + "created_at": 1719485736.626648, "depends_on": { "macros": [] }, @@ -8722,14 +11041,12 @@ "patch_path": null, "path": "macros/generic_tests/fewer_rows_than.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_fewer_rows_than" }, "macro.dbt_utils.default__test_mutually_exclusive_ranges": { "arguments": [], - "created_at": 1696458269.90514, + "created_at": 1719485736.662267, "depends_on": { "macros": [] }, @@ -8746,14 +11063,12 @@ "patch_path": null, "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_mutually_exclusive_ranges" }, "macro.dbt_utils.default__test_not_accepted_values": { "arguments": [], - "created_at": 1696458269.8782852, + "created_at": 1719485736.636965, "depends_on": { "macros": [] }, @@ -8770,14 +11085,12 @@ "patch_path": null, "path": "macros/generic_tests/not_accepted_values.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_not_accepted_values" }, "macro.dbt_utils.default__test_not_constant": { "arguments": [], - "created_at": 1696458269.874454, + "created_at": 1719485736.634388, "depends_on": { "macros": [] }, @@ -8794,14 +11107,12 @@ "patch_path": null, "path": "macros/generic_tests/not_constant.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_not_constant" }, "macro.dbt_utils.default__test_not_empty_string": { "arguments": [], - "created_at": 1696458269.8967302, + "created_at": 1719485736.655891, "depends_on": { "macros": [] }, @@ -8818,14 +11129,12 @@ "patch_path": null, "path": "macros/generic_tests/not_empty_string.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_not_empty_string" }, "macro.dbt_utils.default__test_not_null_proportion": { "arguments": [], - "created_at": 1696458269.8888562, + "created_at": 1719485736.6493912, "depends_on": { "macros": [] }, @@ -8842,14 +11151,12 @@ "patch_path": null, "path": "macros/generic_tests/not_null_proportion.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_not_null_proportion" }, "macro.dbt_utils.default__test_recency": { "arguments": [], - "created_at": 1696458269.8727272, + "created_at": 1719485736.633423, "depends_on": { "macros": [ "macro.dbt.dateadd", @@ -8870,14 +11177,12 @@ "patch_path": null, "path": "macros/generic_tests/recency.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_recency" }, "macro.dbt_utils.default__test_relationships_where": { "arguments": [], - "created_at": 1696458269.8695161, + "created_at": 1719485736.630768, "depends_on": { "macros": [] }, @@ -8894,14 +11199,12 @@ "patch_path": null, "path": "macros/generic_tests/relationships_where.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_relationships_where" }, "macro.dbt_utils.default__test_sequential_values": { "arguments": [], - "created_at": 1696458269.892125, + "created_at": 1719485736.652041, "depends_on": { "macros": [ "macro.dbt_utils.slugify", @@ -8922,14 +11225,12 @@ "patch_path": null, "path": "macros/generic_tests/sequential_values.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_sequential_values" }, "macro.dbt_utils.default__test_unique_combination_of_columns": { "arguments": [], - "created_at": 1696458269.883317, + "created_at": 1719485736.643641, "depends_on": { "macros": [] }, @@ -8946,14 +11247,12 @@ "patch_path": null, "path": "macros/generic_tests/unique_combination_of_columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__test_unique_combination_of_columns" }, "macro.dbt_utils.default__union_relations": { "arguments": [], - "created_at": 1696458269.953401, + "created_at": 1719485736.6993861, "depends_on": { "macros": [ "macro.dbt_utils._is_relation", @@ -8975,14 +11274,12 @@ "patch_path": null, "path": "macros/sql/union.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__union_relations" }, "macro.dbt_utils.default__unpivot": { "arguments": [], - "created_at": 1696458269.940675, + "created_at": 1719485736.689354, "depends_on": { "macros": [ "macro.dbt_utils._is_relation", @@ -9004,14 +11301,12 @@ "patch_path": null, "path": "macros/sql/unpivot.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__unpivot" }, "macro.dbt_utils.default__width_bucket": { "arguments": [], - "created_at": 1696458269.981664, + "created_at": 1719485736.7257888, "depends_on": { "macros": [ "macro.dbt.safe_cast", @@ -9031,14 +11326,12 @@ "patch_path": null, "path": "macros/sql/width_bucket.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.default__width_bucket" }, "macro.dbt_utils.degrees_to_radians": { "arguments": [], - "created_at": 1696458269.991828, + "created_at": 1719485736.735244, "depends_on": { "macros": [] }, @@ -9055,14 +11348,12 @@ "patch_path": null, "path": "macros/sql/haversine_distance.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.degrees_to_radians" }, "macro.dbt_utils.generate_series": { "arguments": [], - "created_at": 1696458269.924184, + "created_at": 1719485736.678059, "depends_on": { "macros": [ "macro.dbt_utils.default__generate_series" @@ -9081,14 +11372,12 @@ "patch_path": null, "path": "macros/sql/generate_series.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.generate_series" }, "macro.dbt_utils.generate_surrogate_key": { "arguments": [], - "created_at": 1696458269.984725, + "created_at": 1719485736.7287118, "depends_on": { "macros": [ "macro.dbt_utils.default__generate_surrogate_key" @@ -9107,14 +11396,12 @@ "patch_path": null, "path": "macros/sql/generate_surrogate_key.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.generate_surrogate_key" }, "macro.dbt_utils.get_column_values": { "arguments": [], - "created_at": 1696458269.9700558, + "created_at": 1719485736.7158039, "depends_on": { "macros": [ "macro.dbt_utils.default__get_column_values" @@ -9133,14 +11420,12 @@ "patch_path": null, "path": "macros/sql/get_column_values.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_column_values" }, "macro.dbt_utils.get_filtered_columns_in_relation": { "arguments": [], - "created_at": 1696458269.977875, + "created_at": 1719485736.7211049, "depends_on": { "macros": [ "macro.dbt_utils.default__get_filtered_columns_in_relation" @@ -9159,14 +11444,12 @@ "patch_path": null, "path": "macros/sql/get_filtered_columns_in_relation.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_filtered_columns_in_relation" }, "macro.dbt_utils.get_intervals_between": { "arguments": [], - "created_at": 1696458269.913064, + "created_at": 1719485736.668108, "depends_on": { "macros": [ "macro.dbt_utils.default__get_intervals_between" @@ -9185,14 +11468,12 @@ "patch_path": null, "path": "macros/sql/date_spine.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_intervals_between" }, "macro.dbt_utils.get_powers_of_two": { "arguments": [], - "created_at": 1696458269.923075, + "created_at": 1719485736.677409, "depends_on": { "macros": [ "macro.dbt_utils.default__get_powers_of_two" @@ -9211,14 +11492,12 @@ "patch_path": null, "path": "macros/sql/generate_series.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_powers_of_two" }, "macro.dbt_utils.get_query_results_as_dict": { "arguments": [], - "created_at": 1696458269.982841, + "created_at": 1719485736.726866, "depends_on": { "macros": [ "macro.dbt_utils.default__get_query_results_as_dict" @@ -9237,14 +11516,12 @@ "patch_path": null, "path": "macros/sql/get_query_results_as_dict.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_query_results_as_dict" }, "macro.dbt_utils.get_relations_by_pattern": { "arguments": [], - "created_at": 1696458269.9195552, + "created_at": 1719485736.6725519, "depends_on": { "macros": [ "macro.dbt_utils.default__get_relations_by_pattern" @@ -9263,14 +11540,12 @@ "patch_path": null, "path": "macros/sql/get_relations_by_pattern.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_relations_by_pattern" }, "macro.dbt_utils.get_relations_by_prefix": { "arguments": [], - "created_at": 1696458269.926965, + "created_at": 1719485736.67938, "depends_on": { "macros": [ "macro.dbt_utils.default__get_relations_by_prefix" @@ -9289,14 +11564,12 @@ "patch_path": null, "path": "macros/sql/get_relations_by_prefix.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_relations_by_prefix" }, "macro.dbt_utils.get_single_value": { "arguments": [], - "created_at": 1696458269.9885209, + "created_at": 1719485736.732079, "depends_on": { "macros": [ "macro.dbt_utils.default__get_single_value" @@ -9315,14 +11588,12 @@ "patch_path": null, "path": "macros/sql/get_single_value.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_single_value" }, "macro.dbt_utils.get_table_types_sql": { "arguments": [], - "created_at": 1696458269.986836, + "created_at": 1719485736.730877, "depends_on": { "macros": [ "macro.dbt_utils.postgres__get_table_types_sql" @@ -9341,14 +11612,12 @@ "patch_path": null, "path": "macros/sql/get_table_types_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_table_types_sql" }, "macro.dbt_utils.get_tables_by_pattern_sql": { "arguments": [], - "created_at": 1696458269.9652421, + "created_at": 1719485736.7118368, "depends_on": { "macros": [ "macro.dbt_utils.default__get_tables_by_pattern_sql" @@ -9367,14 +11636,12 @@ "patch_path": null, "path": "macros/sql/get_tables_by_pattern_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_tables_by_pattern_sql" }, "macro.dbt_utils.get_tables_by_prefix_sql": { "arguments": [], - "created_at": 1696458269.929534, + "created_at": 1719485736.680733, "depends_on": { "macros": [ "macro.dbt_utils.default__get_tables_by_prefix_sql" @@ -9393,14 +11660,12 @@ "patch_path": null, "path": "macros/sql/get_tables_by_prefix_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_tables_by_prefix_sql" }, "macro.dbt_utils.get_url_host": { "arguments": [], - "created_at": 1696458269.856265, + "created_at": 1719485736.6209002, "depends_on": { "macros": [ "macro.dbt_utils.default__get_url_host" @@ -9419,14 +11684,12 @@ "patch_path": null, "path": "macros/web/get_url_host.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_url_host" }, "macro.dbt_utils.get_url_parameter": { "arguments": [], - "created_at": 1696458269.860372, + "created_at": 1719485736.6233978, "depends_on": { "macros": [ "macro.dbt_utils.default__get_url_parameter" @@ -9445,14 +11708,12 @@ "patch_path": null, "path": "macros/web/get_url_parameter.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_url_parameter" }, "macro.dbt_utils.get_url_path": { "arguments": [], - "created_at": 1696458269.858241, + "created_at": 1719485736.62192, "depends_on": { "macros": [ "macro.dbt_utils.default__get_url_path" @@ -9471,14 +11732,12 @@ "patch_path": null, "path": "macros/web/get_url_path.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.get_url_path" }, "macro.dbt_utils.group_by": { "arguments": [], - "created_at": 1696458269.954188, + "created_at": 1719485736.700075, "depends_on": { "macros": [ "macro.dbt_utils.default__group_by" @@ -9497,14 +11756,12 @@ "patch_path": null, "path": "macros/sql/groupby.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.group_by" }, "macro.dbt_utils.haversine_distance": { "arguments": [], - "created_at": 1696458269.992314, + "created_at": 1719485736.7356942, "depends_on": { "macros": [ "macro.dbt_utils.default__haversine_distance" @@ -9523,14 +11780,12 @@ "patch_path": null, "path": "macros/sql/haversine_distance.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.haversine_distance" }, "macro.dbt_utils.log_info": { "arguments": [], - "created_at": 1696458269.90854, + "created_at": 1719485736.664978, "depends_on": { "macros": [ "macro.dbt_utils.default__log_info" @@ -9549,14 +11804,12 @@ "patch_path": null, "path": "macros/jinja_helpers/log_info.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.log_info" }, "macro.dbt_utils.nullcheck": { "arguments": [], - "created_at": 1696458269.961787, + "created_at": 1719485736.708089, "depends_on": { "macros": [ "macro.dbt_utils.default__nullcheck" @@ -9575,14 +11828,12 @@ "patch_path": null, "path": "macros/sql/nullcheck.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.nullcheck" }, "macro.dbt_utils.nullcheck_table": { "arguments": [], - "created_at": 1696458269.917547, + "created_at": 1719485736.671076, "depends_on": { "macros": [ "macro.dbt_utils.default__nullcheck_table" @@ -9601,14 +11852,12 @@ "patch_path": null, "path": "macros/sql/nullcheck_table.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.nullcheck_table" }, "macro.dbt_utils.pivot": { "arguments": [], - "created_at": 1696458269.975067, + "created_at": 1719485736.719448, "depends_on": { "macros": [ "macro.dbt_utils.default__pivot" @@ -9627,14 +11876,12 @@ "patch_path": null, "path": "macros/sql/pivot.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.pivot" }, "macro.dbt_utils.postgres__deduplicate": { "arguments": [], - "created_at": 1696458269.957185, + "created_at": 1719485736.703091, "depends_on": { "macros": [] }, @@ -9651,14 +11898,12 @@ "patch_path": null, "path": "macros/sql/deduplicate.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.postgres__deduplicate" }, "macro.dbt_utils.postgres__get_table_types_sql": { "arguments": [], - "created_at": 1696458269.9872892, + "created_at": 1719485736.731321, "depends_on": { "macros": [] }, @@ -9675,14 +11920,12 @@ "patch_path": null, "path": "macros/sql/get_table_types_sql.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.postgres__get_table_types_sql" }, "macro.dbt_utils.pretty_log_format": { "arguments": [], - "created_at": 1696458269.9058151, + "created_at": 1719485736.6625931, "depends_on": { "macros": [ "macro.dbt_utils.default__pretty_log_format" @@ -9701,14 +11944,12 @@ "patch_path": null, "path": "macros/jinja_helpers/pretty_log_format.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.pretty_log_format" }, "macro.dbt_utils.pretty_time": { "arguments": [], - "created_at": 1696458269.9076412, + "created_at": 1719485736.664063, "depends_on": { "macros": [ "macro.dbt_utils.default__pretty_time" @@ -9727,14 +11968,12 @@ "patch_path": null, "path": "macros/jinja_helpers/pretty_time.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.pretty_time" }, "macro.dbt_utils.redshift__deduplicate": { "arguments": [], - "created_at": 1696458269.9568481, + "created_at": 1719485736.7025979, "depends_on": { "macros": [ "macro.dbt_utils.default__deduplicate" @@ -9753,14 +11992,12 @@ "patch_path": null, "path": "macros/sql/deduplicate.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.redshift__deduplicate" }, "macro.dbt_utils.safe_add": { "arguments": [], - "created_at": 1696458269.95998, + "created_at": 1719485736.7061272, "depends_on": { "macros": [ "macro.dbt_utils.default__safe_add" @@ -9779,14 +12016,12 @@ "patch_path": null, "path": "macros/sql/safe_add.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.safe_add" }, "macro.dbt_utils.safe_divide": { "arguments": [], - "created_at": 1696458269.9414778, + "created_at": 1719485736.689705, "depends_on": { "macros": [ "macro.dbt_utils.default__safe_divide" @@ -9805,14 +12040,12 @@ "patch_path": null, "path": "macros/sql/safe_divide.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.safe_divide" }, "macro.dbt_utils.safe_subtract": { "arguments": [], - "created_at": 1696458269.915779, + "created_at": 1719485736.670065, "depends_on": { "macros": [ "macro.dbt_utils.default__safe_subtract" @@ -9831,14 +12064,12 @@ "patch_path": null, "path": "macros/sql/safe_subtract.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.safe_subtract" }, "macro.dbt_utils.slugify": { "arguments": [], - "created_at": 1696458269.9100301, + "created_at": 1719485736.6662788, "depends_on": { "macros": [] }, @@ -9855,14 +12086,12 @@ "patch_path": null, "path": "macros/jinja_helpers/slugify.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.slugify" }, "macro.dbt_utils.snowflake__deduplicate": { "arguments": [], - "created_at": 1696458269.95747, + "created_at": 1719485736.703385, "depends_on": { "macros": [] }, @@ -9879,14 +12108,12 @@ "patch_path": null, "path": "macros/sql/deduplicate.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.snowflake__deduplicate" }, "macro.dbt_utils.snowflake__width_bucket": { "arguments": [], - "created_at": 1696458269.9819782, + "created_at": 1719485736.72608, "depends_on": { "macros": [] }, @@ -9903,14 +12130,12 @@ "patch_path": null, "path": "macros/sql/width_bucket.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.snowflake__width_bucket" }, "macro.dbt_utils.star": { "arguments": [], - "created_at": 1696458269.9325912, + "created_at": 1719485736.6838112, "depends_on": { "macros": [ "macro.dbt_utils.default__star" @@ -9929,14 +12154,12 @@ "patch_path": null, "path": "macros/sql/star.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.star" }, "macro.dbt_utils.surrogate_key": { "arguments": [], - "created_at": 1696458269.9586718, + "created_at": 1719485736.704803, "depends_on": { "macros": [ "macro.dbt_utils.default__surrogate_key" @@ -9955,14 +12178,12 @@ "patch_path": null, "path": "macros/sql/surrogate_key.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.surrogate_key" }, "macro.dbt_utils.test_accepted_range": { "arguments": [], - "created_at": 1696458269.875644, + "created_at": 1719485736.6351202, "depends_on": { "macros": [ "macro.dbt_utils.default__test_accepted_range" @@ -9981,14 +12202,12 @@ "patch_path": null, "path": "macros/generic_tests/accepted_range.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_accepted_range" }, "macro.dbt_utils.test_at_least_one": { "arguments": [], - "created_at": 1696458269.8795462, + "created_at": 1719485736.637673, "depends_on": { "macros": [ "macro.dbt_utils.default__test_at_least_one" @@ -10007,14 +12226,12 @@ "patch_path": null, "path": "macros/generic_tests/at_least_one.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_at_least_one" }, "macro.dbt_utils.test_cardinality_equality": { "arguments": [], - "created_at": 1696458269.884375, + "created_at": 1719485736.64627, "depends_on": { "macros": [ "macro.dbt_utils.default__test_cardinality_equality" @@ -10033,14 +12250,12 @@ "patch_path": null, "path": "macros/generic_tests/cardinality_equality.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_cardinality_equality" }, "macro.dbt_utils.test_equal_rowcount": { "arguments": [], - "created_at": 1696458269.866045, + "created_at": 1719485736.6276648, "depends_on": { "macros": [ "macro.dbt_utils.default__test_equal_rowcount" @@ -10059,14 +12274,12 @@ "patch_path": null, "path": "macros/generic_tests/equal_rowcount.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_equal_rowcount" }, "macro.dbt_utils.test_equality": { "arguments": [], - "created_at": 1696458269.893547, + "created_at": 1719485736.6529899, "depends_on": { "macros": [ "macro.dbt_utils.default__test_equality" @@ -10085,14 +12298,12 @@ "patch_path": null, "path": "macros/generic_tests/equality.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_equality" }, "macro.dbt_utils.test_expression_is_true": { "arguments": [], - "created_at": 1696458269.885707, + "created_at": 1719485736.64721, "depends_on": { "macros": [ "macro.dbt_utils.default__test_expression_is_true" @@ -10111,14 +12322,12 @@ "patch_path": null, "path": "macros/generic_tests/expression_is_true.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_expression_is_true" }, "macro.dbt_utils.test_fewer_rows_than": { "arguments": [], - "created_at": 1696458269.862845, + "created_at": 1719485736.625401, "depends_on": { "macros": [ "macro.dbt_utils.default__test_fewer_rows_than" @@ -10137,14 +12346,12 @@ "patch_path": null, "path": "macros/generic_tests/fewer_rows_than.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_fewer_rows_than" }, "macro.dbt_utils.test_mutually_exclusive_ranges": { "arguments": [], - "created_at": 1696458269.902503, + "created_at": 1719485736.6603332, "depends_on": { "macros": [ "macro.dbt_utils.default__test_mutually_exclusive_ranges" @@ -10163,14 +12370,12 @@ "patch_path": null, "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_mutually_exclusive_ranges" }, "macro.dbt_utils.test_not_accepted_values": { "arguments": [], - "created_at": 1696458269.877504, + "created_at": 1719485736.6365619, "depends_on": { "macros": [ "macro.dbt_utils.default__test_not_accepted_values" @@ -10189,14 +12394,12 @@ "patch_path": null, "path": "macros/generic_tests/not_accepted_values.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_not_accepted_values" }, "macro.dbt_utils.test_not_constant": { "arguments": [], - "created_at": 1696458269.873664, + "created_at": 1719485736.6339169, "depends_on": { "macros": [ "macro.dbt_utils.default__test_not_constant" @@ -10215,14 +12418,12 @@ "patch_path": null, "path": "macros/generic_tests/not_constant.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_not_constant" }, "macro.dbt_utils.test_not_empty_string": { "arguments": [], - "created_at": 1696458269.896234, + "created_at": 1719485736.655252, "depends_on": { "macros": [ "macro.dbt_utils.default__test_not_empty_string" @@ -10241,14 +12442,12 @@ "patch_path": null, "path": "macros/generic_tests/not_empty_string.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_not_empty_string" }, "macro.dbt_utils.test_not_null_proportion": { "arguments": [], - "created_at": 1696458269.88746, + "created_at": 1719485736.64849, "depends_on": { "macros": [ "macro.dbt_utils.default__test_not_null_proportion" @@ -10267,14 +12466,12 @@ "patch_path": null, "path": "macros/generic_tests/not_null_proportion.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_not_null_proportion" }, "macro.dbt_utils.test_recency": { "arguments": [], - "created_at": 1696458269.8711538, + "created_at": 1719485736.632009, "depends_on": { "macros": [ "macro.dbt_utils.default__test_recency" @@ -10293,14 +12490,12 @@ "patch_path": null, "path": "macros/generic_tests/recency.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_recency" }, "macro.dbt_utils.test_relationships_where": { "arguments": [], - "created_at": 1696458269.868972, + "created_at": 1719485736.6303911, "depends_on": { "macros": [ "macro.dbt_utils.default__test_relationships_where" @@ -10319,14 +12514,12 @@ "patch_path": null, "path": "macros/generic_tests/relationships_where.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_relationships_where" }, "macro.dbt_utils.test_sequential_values": { "arguments": [], - "created_at": 1696458269.890569, + "created_at": 1719485736.650635, "depends_on": { "macros": [ "macro.dbt_utils.default__test_sequential_values" @@ -10345,14 +12538,12 @@ "patch_path": null, "path": "macros/generic_tests/sequential_values.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_sequential_values" }, "macro.dbt_utils.test_unique_combination_of_columns": { "arguments": [], - "created_at": 1696458269.882238, + "created_at": 1719485736.642268, "depends_on": { "macros": [ "macro.dbt_utils.default__test_unique_combination_of_columns" @@ -10371,14 +12562,12 @@ "patch_path": null, "path": "macros/generic_tests/unique_combination_of_columns.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.test_unique_combination_of_columns" }, "macro.dbt_utils.union_relations": { "arguments": [], - "created_at": 1696458269.9474702, + "created_at": 1719485736.6939468, "depends_on": { "macros": [ "macro.dbt_utils.default__union_relations" @@ -10397,14 +12586,12 @@ "patch_path": null, "path": "macros/sql/union.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.union_relations" }, "macro.dbt_utils.unpivot": { "arguments": [], - "created_at": 1696458269.937675, + "created_at": 1719485736.68751, "depends_on": { "macros": [ "macro.dbt_utils.default__unpivot" @@ -10423,14 +12610,12 @@ "patch_path": null, "path": "macros/sql/unpivot.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.unpivot" }, "macro.dbt_utils.width_bucket": { "arguments": [], - "created_at": 1696458269.980886, + "created_at": 1719485736.724451, "depends_on": { "macros": [ "macro.dbt_utils.default__width_bucket" @@ -10449,14 +12634,12 @@ "patch_path": null, "path": "macros/sql/width_bucket.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop/dbt_packages/dbt_utils", "supported_languages": null, - "tags": [], "unique_id": "macro.dbt_utils.width_bucket" }, - "macro.jaffle_shop.drop_table": { + "macro.jaffle_shop.drop_table_by_name": { "arguments": [], - "created_at": 1696458269.549238, + "created_at": 1719485736.288547, "depends_on": { "macros": [ "macro.dbt.run_query" @@ -10467,42 +12650,43 @@ "node_color": null, "show": true }, - "macro_sql": "{%- macro drop_table(table_name) -%}\n {%- set drop_query -%}\n DROP TABLE IF EXISTS {{ target.schema }}.{{ table_name }} CASCADE\n {%- endset -%}\n {% do run_query(drop_query) %}\n{%- endmacro -%}", + "macro_sql": "{%- macro drop_table_by_name(table_name) -%}\n {%- set drop_query -%}\n DROP TABLE IF EXISTS {{ target.schema }}.{{ table_name }} CASCADE\n {%- endset -%}\n {% do run_query(drop_query) %}\n{%- endmacro -%}", "meta": {}, - "name": "drop_table", + "name": "drop_table_by_name", "original_file_path": "macros/drop_table.sql", "package_name": "jaffle_shop", "patch_path": null, "path": "macros/drop_table.sql", "resource_type": "macro", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "supported_languages": null, - "tags": [], - "unique_id": "macro.jaffle_shop.drop_table" + "unique_id": "macro.jaffle_shop.drop_table_by_name" } }, "metadata": { "adapter_type": "postgres", - "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v7.json", - "dbt_version": "1.3.1", + "dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", + "dbt_version": "1.8.0", "env": {}, - "generated_at": "2023-10-04T22:24:29.500301Z", - "invocation_id": "fc9520c6-dfc1-4650-9483-1fd3751dfe42", + "generated_at": "2024-06-27T10:55:36.063508Z", + "invocation_id": "31cdaee6-885b-4bdf-b794-4065f9530edb", "project_id": "06e5b98c2db46f8a72cc4f66410e9b3b", + "project_name": "jaffle_shop", "send_anonymous_usage_stats": true, - "user_id": "43f90c72-db98-41b6-8fce-1337e4d59f98" + "user_id": "f5b1bc43-6cc6-4fd4-849c-18b31ffa1e2d" }, "metrics": {}, "nodes": { "model.jaffle_shop.customers": { + "access": "protected", "alias": "customers", "build_path": null, "checksum": { - "checksum": "455b90a31f418ae776213ad9932c7cb72d19a5269a8c722bd9f4e44957313ce8", + "checksum": "60bd72e33da43fff3a7e7609135c17cd4468bd22afec0735dd36018bfb5af30a", "name": "sha256" }, "columns": { "customer_id": { + "constraints": [], "data_type": null, "description": "This is a unique identifier for a customer", "meta": {}, @@ -10511,6 +12695,7 @@ "tags": [] }, "first_name": { + "constraints": [], "data_type": null, "description": "Customer's first name. PII.", "meta": {}, @@ -10519,6 +12704,7 @@ "tags": [] }, "first_order": { + "constraints": [], "data_type": null, "description": "Date (UTC) of a customer's first order", "meta": {}, @@ -10527,6 +12713,7 @@ "tags": [] }, "last_name": { + "constraints": [], "data_type": null, "description": "Customer's last name. PII.", "meta": {}, @@ -10535,6 +12722,7 @@ "tags": [] }, "most_recent_order": { + "constraints": [], "data_type": null, "description": "Date (UTC) of a customer's most recent order", "meta": {}, @@ -10543,6 +12731,7 @@ "tags": [] }, "number_of_orders": { + "constraints": [], "data_type": null, "description": "Count of the number of orders a customer has placed", "meta": {}, @@ -10551,6 +12740,7 @@ "tags": [] }, "total_order_amount": { + "constraints": [], "data_type": null, "description": "Total value (AUD) of a customer's orders", "meta": {}, @@ -10561,8 +12751,13 @@ }, "compiled_path": null, "config": { + "access": "protected", "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, "docs": { "node_color": null, @@ -10571,9 +12766,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "table", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -10584,9 +12781,14 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.331094, + "constraints": [], + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.5078778, "database": "postgres", - "deferred": false, "depends_on": { "macros": [], "nodes": [ @@ -10595,6 +12797,7 @@ "model.jaffle_shop.stg_payments" ] }, + "deprecation_date": null, "description": "This table has basic information about a customer, as well as some derived facts based on a customer's orders", "docs": { "node_color": null, @@ -10604,7 +12807,9 @@ "jaffle_shop", "customers" ], + "group": null, "language": "sql", + "latest_version": null, "meta": {}, "metrics": [], "name": "customers", @@ -10614,35 +12819,44 @@ "path": "customers.sql", "raw_code": "with customers as (\n\n select * from {{ ref('stg_customers') }}\n\n),\n\norders as (\n\n select * from {{ ref('stg_orders') }}\n\n),\n\npayments as (\n\n select * from {{ ref('stg_payments') }}\n\n),\n\ncustomer_orders as (\n\n select\n customer_id,\n\n min(order_date) as first_order,\n max(order_date) as most_recent_order,\n count(order_id) as number_of_orders\n from orders\n\n group by customer_id\n\n),\n\ncustomer_payments as (\n\n select\n orders.customer_id,\n sum(amount) as total_amount\n\n from payments\n\n left join orders on\n payments.order_id = orders.order_id\n\n group by orders.customer_id\n\n),\n\nfinal as (\n\n select\n customers.customer_id,\n customers.first_name,\n customers.last_name,\n customer_orders.first_order,\n customer_orders.most_recent_order,\n customer_orders.number_of_orders,\n customer_payments.total_amount as customer_lifetime_value\n\n from customers\n\n left join customer_orders\n on customers.customer_id = customer_orders.customer_id\n\n left join customer_payments\n on customers.customer_id = customer_payments.customer_id\n\n)\n\nselect * from final", "refs": [ - [ - "stg_customers" - ], - [ - "stg_orders" - ], - [ - "stg_payments" - ] + { + "name": "stg_customers", + "package": null, + "version": null + }, + { + "name": "stg_orders", + "package": null, + "version": null + }, + { + "name": "stg_payments", + "package": null, + "version": null + } ], + "relation_name": "\"postgres\".\"public\".\"customers\"", "resource_type": "model", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", "sources": [], "tags": [], "unique_id": "model.jaffle_shop.customers", "unrendered_config": { "materialized": "table" - } + }, + "version": null }, "model.jaffle_shop.orders": { + "access": "protected", "alias": "orders", "build_path": null, "checksum": { - "checksum": "53950235d8e29690d259e95ee49bda6a5b7911b44c739b738a646dc6014bcfcd", + "checksum": "27f8c79aad1cfd8411ab9c3d2ce8da1d787f7f05c58bbee1d247510dc426be0f", "name": "sha256" }, "columns": { "amount": { + "constraints": [], "data_type": null, "description": "Total amount (AUD) of the order", "meta": {}, @@ -10651,6 +12865,7 @@ "tags": [] }, "bank_transfer_amount": { + "constraints": [], "data_type": null, "description": "Amount of the order (AUD) paid for by bank transfer", "meta": {}, @@ -10659,6 +12874,7 @@ "tags": [] }, "coupon_amount": { + "constraints": [], "data_type": null, "description": "Amount of the order (AUD) paid for by coupon", "meta": {}, @@ -10667,6 +12883,7 @@ "tags": [] }, "credit_card_amount": { + "constraints": [], "data_type": null, "description": "Amount of the order (AUD) paid for by credit card", "meta": {}, @@ -10675,6 +12892,7 @@ "tags": [] }, "customer_id": { + "constraints": [], "data_type": null, "description": "Foreign key to the customers table", "meta": {}, @@ -10683,6 +12901,7 @@ "tags": [] }, "gift_card_amount": { + "constraints": [], "data_type": null, "description": "Amount of the order (AUD) paid for by gift card", "meta": {}, @@ -10691,6 +12910,7 @@ "tags": [] }, "order_date": { + "constraints": [], "data_type": null, "description": "Date (UTC) that the order was placed", "meta": {}, @@ -10699,6 +12919,7 @@ "tags": [] }, "order_id": { + "constraints": [], "data_type": null, "description": "This is a unique identifier for an order", "meta": {}, @@ -10707,6 +12928,7 @@ "tags": [] }, "status": { + "constraints": [], "data_type": null, "description": "Orders can be one of the following statuses:\n\n| status | description |\n|----------------|------------------------------------------------------------------------------------------------------------------------|\n| placed | The order has been placed but has not yet left the warehouse |\n| shipped | The order has ben shipped to the customer and is currently in transit |\n| completed | The order has been received by the customer |\n| return_pending | The customer has indicated that they would like to return the order, but it has not yet been received at the warehouse |\n| returned | The order has been returned by the customer and received at the warehouse |", "meta": {}, @@ -10717,8 +12939,13 @@ }, "compiled_path": null, "config": { + "access": "protected", "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, "docs": { "node_color": null, @@ -10727,9 +12954,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "table", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -10740,9 +12969,14 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.3345122, + "constraints": [], + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.511349, "database": "postgres", - "deferred": false, "depends_on": { "macros": [], "nodes": [ @@ -10750,6 +12984,7 @@ "model.jaffle_shop.stg_payments" ] }, + "deprecation_date": null, "description": "This table has basic information about orders, as well as some derived facts based on payments", "docs": { "node_color": null, @@ -10759,7 +12994,9 @@ "jaffle_shop", "orders" ], + "group": null, "language": "sql", + "latest_version": null, "meta": {}, "metrics": [], "name": "orders", @@ -10769,32 +13006,39 @@ "path": "orders.sql", "raw_code": "{% set payment_methods = ['credit_card', 'coupon', 'bank_transfer', 'gift_card'] %}\n\nwith orders as (\n\n select * from {{ ref('stg_orders') }}\n\n),\n\npayments as (\n\n select * from {{ ref('stg_payments') }}\n\n),\n\norder_payments as (\n\n select\n order_id,\n\n {% for payment_method in payment_methods -%}\n sum(case when payment_method = '{{ payment_method }}' then amount else 0 end) as {{ payment_method }}_amount,\n {% endfor -%}\n\n sum(amount) as total_amount\n\n from payments\n\n group by order_id\n\n),\n\nfinal as (\n\n select\n orders.order_id,\n orders.customer_id,\n orders.order_date,\n orders.status,\n\n {% for payment_method in payment_methods -%}\n\n order_payments.{{ payment_method }}_amount,\n\n {% endfor -%}\n\n order_payments.total_amount as amount\n\n from orders\n\n\n left join order_payments\n on orders.order_id = order_payments.order_id\n\n)\n\nselect * from final", "refs": [ - [ - "stg_orders" - ], - [ - "stg_payments" - ] + { + "name": "stg_orders", + "package": null, + "version": null + }, + { + "name": "stg_payments", + "package": null, + "version": null + } ], + "relation_name": "\"postgres\".\"public\".\"orders\"", "resource_type": "model", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", "sources": [], "tags": [], "unique_id": "model.jaffle_shop.orders", "unrendered_config": { "materialized": "table" - } + }, + "version": null }, "model.jaffle_shop.stg_customers": { + "access": "protected", "alias": "stg_customers", "build_path": null, "checksum": { - "checksum": "6f18a29204dad1de6dbb0c288144c4990742e0a1e065c3b2a67b5f98334c22ba", + "checksum": "80e3223cd54387e11fa16cd0f4cbe15f8ff74dcd9900b93856b9e39416178c9d", "name": "sha256" }, "columns": { "customer_id": { + "constraints": [], "data_type": null, "description": "", "meta": {}, @@ -10805,8 +13049,13 @@ }, "compiled_path": null, "config": { + "access": "protected", "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, "docs": { "node_color": null, @@ -10815,9 +13064,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "view", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -10828,15 +13079,21 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.372876, + "constraints": [], + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.629529, "database": "postgres", - "deferred": false, "depends_on": { "macros": [], "nodes": [ "seed.jaffle_shop.raw_customers" ] }, + "deprecation_date": null, "description": "", "docs": { "node_color": null, @@ -10847,7 +13104,9 @@ "staging", "stg_customers" ], + "group": null, "language": "sql", + "latest_version": null, "meta": {}, "metrics": [], "name": "stg_customers", @@ -10857,29 +13116,34 @@ "path": "staging/stg_customers.sql", "raw_code": "with source as (\n\n {#-\n Normally we would select from the table here, but we are using seeds to load\n our data in this project\n #}\n select * from {{ ref('raw_customers') }}\n\n),\n\nrenamed as (\n\n select\n id as customer_id,\n first_name,\n last_name\n\n from source\n\n)\n\nselect * from renamed", "refs": [ - [ - "raw_customers" - ] + { + "name": "raw_customers", + "package": null, + "version": null + } ], + "relation_name": "\"postgres\".\"public\".\"stg_customers\"", "resource_type": "model", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", "sources": [], "tags": [], "unique_id": "model.jaffle_shop.stg_customers", "unrendered_config": { "materialized": "view" - } + }, + "version": null }, "model.jaffle_shop.stg_orders": { + "access": "protected", "alias": "stg_orders", "build_path": null, "checksum": { - "checksum": "afffa9cbc57e5fd2cf5898ebf571d444a62c9d6d7929d8133d30567fb9a2ce97", + "checksum": "f4f881cb09d2c4162200fc331d7401df6d1abd4fed492554a7db70dede347108", "name": "sha256" }, "columns": { "order_id": { + "constraints": [], "data_type": null, "description": "", "meta": {}, @@ -10888,6 +13152,7 @@ "tags": [] }, "status": { + "constraints": [], "data_type": null, "description": "", "meta": {}, @@ -10898,8 +13163,13 @@ }, "compiled_path": null, "config": { + "access": "protected", "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, "docs": { "node_color": null, @@ -10908,9 +13178,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "view", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -10921,15 +13193,21 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.374181, + "constraints": [], + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.630356, "database": "postgres", - "deferred": false, "depends_on": { "macros": [], "nodes": [ "seed.jaffle_shop.raw_orders" ] }, + "deprecation_date": null, "description": "", "docs": { "node_color": null, @@ -10940,7 +13218,9 @@ "staging", "stg_orders" ], + "group": null, "language": "sql", + "latest_version": null, "meta": {}, "metrics": [], "name": "stg_orders", @@ -10950,29 +13230,34 @@ "path": "staging/stg_orders.sql", "raw_code": "with source as (\n\n {#-\n Normally we would select from the table here, but we are using seeds to load\n our data in this project\n #}\n select * from {{ ref('raw_orders') }}\n\n),\n\nrenamed as (\n\n select\n id as order_id,\n user_id as customer_id,\n order_date,\n status\n\n from source\n\n)\n\nselect * from renamed", "refs": [ - [ - "raw_orders" - ] + { + "name": "raw_orders", + "package": null, + "version": null + } ], + "relation_name": "\"postgres\".\"public\".\"stg_orders\"", "resource_type": "model", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", "sources": [], "tags": [], "unique_id": "model.jaffle_shop.stg_orders", "unrendered_config": { "materialized": "view" - } + }, + "version": null }, "model.jaffle_shop.stg_payments": { + "access": "protected", "alias": "stg_payments", "build_path": null, "checksum": { - "checksum": "a626f1ad5883c5391dc123be01f81491be5f496654d226d876651a0b8c036362", + "checksum": "30f346f66ef7bca4c8865a471086303720c3daab58870c805b6f45e92d19fd65", "name": "sha256" }, "columns": { "payment_id": { + "constraints": [], "data_type": null, "description": "", "meta": {}, @@ -10981,6 +13266,7 @@ "tags": [] }, "payment_method": { + "constraints": [], "data_type": null, "description": "", "meta": {}, @@ -10991,8 +13277,13 @@ }, "compiled_path": null, "config": { + "access": "protected", "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, "docs": { "node_color": null, @@ -11001,9 +13292,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "view", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -11014,15 +13307,21 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.375178, + "constraints": [], + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.6316102, "database": "postgres", - "deferred": false, "depends_on": { "macros": [], "nodes": [ "seed.jaffle_shop.raw_payments" ] }, + "deprecation_date": null, "description": "", "docs": { "node_color": null, @@ -11033,7 +13332,9 @@ "staging", "stg_payments" ], + "group": null, "language": "sql", + "latest_version": null, "meta": {}, "metrics": [], "name": "stg_payments", @@ -11043,33 +13344,40 @@ "path": "staging/stg_payments.sql", "raw_code": "with source as (\n\n {#-\n Normally we would select from the table here, but we are using seeds to load\n our data in this project\n #}\n select * from {{ ref('raw_payments') }}\n\n),\n\nrenamed as (\n\n select\n id as payment_id,\n order_id,\n payment_method,\n\n -- `amount` is currently stored in cents, so we convert it to dollars\n amount / 100 as amount\n\n from source\n\n)\n\nselect * from renamed", "refs": [ - [ - "raw_payments" - ] + { + "name": "raw_payments", + "package": null, + "version": null + } ], + "relation_name": "\"postgres\".\"public\".\"stg_payments\"", "resource_type": "model", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", "sources": [], "tags": [], "unique_id": "model.jaffle_shop.stg_payments", "unrendered_config": { "materialized": "view" - } + }, + "version": null }, "seed.jaffle_shop.raw_customers": { "alias": "raw_customers", "build_path": null, "checksum": { - "checksum": "24579b4b26098d43265376f3c50be8b10faf8e8fd95f5508074f10f76a12671d", + "checksum": "357d173dda65a741ad97d6683502286cc2655bb396ab5f4dfad12b8c39bd2a63", "name": "sha256" }, "columns": {}, - "compiled_path": null, "config": { "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, + "delimiter": ",", "docs": { "node_color": null, "show": true @@ -11077,9 +13385,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "seed", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -11091,12 +13401,10 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.302308, + "created_at": 1719485737.409044, "database": "postgres", - "deferred": false, "depends_on": { - "macros": [], - "nodes": [] + "macros": [] }, "description": "", "docs": { @@ -11107,20 +13415,18 @@ "jaffle_shop", "raw_customers" ], - "language": "sql", + "group": null, "meta": {}, - "metrics": [], "name": "raw_customers", "original_file_path": "seeds/raw_customers.csv", "package_name": "jaffle_shop", "patch_path": null, "path": "raw_customers.csv", "raw_code": "", - "refs": [], + "relation_name": "\"postgres\".\"public\".\"raw_customers\"", "resource_type": "seed", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", + "root_path": "/Users/tati/Code/cosmos-clean/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", - "sources": [], "tags": [], "unique_id": "seed.jaffle_shop.raw_customers", "unrendered_config": {} @@ -11129,15 +13435,19 @@ "alias": "raw_orders", "build_path": null, "checksum": { - "checksum": "c5f309d84ba32f2a39235c59f2d4f6c855aedba7e215847c957f1a5f2fa80d3e", + "checksum": "6228dde8e17b9621f35c13e272ec67d3ff55b55499433f47d303adf2be72c17f", "name": "sha256" }, "columns": {}, - "compiled_path": null, "config": { "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, + "delimiter": ",", "docs": { "node_color": null, "show": true @@ -11145,9 +13455,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "seed", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -11159,12 +13471,10 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.3040352, + "created_at": 1719485737.411613, "database": "postgres", - "deferred": false, "depends_on": { - "macros": [], - "nodes": [] + "macros": [] }, "description": "", "docs": { @@ -11175,20 +13485,18 @@ "jaffle_shop", "raw_orders" ], - "language": "sql", + "group": null, "meta": {}, - "metrics": [], "name": "raw_orders", "original_file_path": "seeds/raw_orders.csv", "package_name": "jaffle_shop", "patch_path": null, "path": "raw_orders.csv", "raw_code": "", - "refs": [], + "relation_name": "\"postgres\".\"public\".\"raw_orders\"", "resource_type": "seed", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", + "root_path": "/Users/tati/Code/cosmos-clean/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", - "sources": [], "tags": [], "unique_id": "seed.jaffle_shop.raw_orders", "unrendered_config": {} @@ -11197,15 +13505,19 @@ "alias": "raw_payments", "build_path": null, "checksum": { - "checksum": "03fd407f3135f84456431a923f22fc185a2154079e210c20b690e3ab11687d11", + "checksum": "6de0626a8db9c1750eefd1b2e17fac4c2a4b9f778eb50532d8b377b90de395e6", "name": "sha256" }, "columns": {}, - "compiled_path": null, "config": { "alias": null, "column_types": {}, + "contract": { + "alias_types": true, + "enforced": false + }, "database": null, + "delimiter": ",", "docs": { "node_color": null, "show": true @@ -11213,9 +13525,11 @@ "enabled": true, "full_refresh": null, "grants": {}, + "group": null, "incremental_strategy": null, "materialized": "seed", "meta": {}, + "on_configuration_change": "apply", "on_schema_change": "ignore", "packages": [], "persist_docs": {}, @@ -11227,12 +13541,10 @@ "tags": [], "unique_key": null }, - "created_at": 1696458270.30559, + "created_at": 1719485737.4141219, "database": "postgres", - "deferred": false, "depends_on": { - "macros": [], - "nodes": [] + "macros": [] }, "description": "", "docs": { @@ -11243,26 +13555,25 @@ "jaffle_shop", "raw_payments" ], - "language": "sql", + "group": null, "meta": {}, - "metrics": [], "name": "raw_payments", "original_file_path": "seeds/raw_payments.csv", "package_name": "jaffle_shop", "patch_path": null, "path": "raw_payments.csv", "raw_code": "", - "refs": [], + "relation_name": "\"postgres\".\"public\".\"raw_payments\"", "resource_type": "seed", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", + "root_path": "/Users/tati/Code/cosmos-clean/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public", - "sources": [], "tags": [], "unique_id": "seed.jaffle_shop.raw_payments", "unrendered_config": {} }, "test.jaffle_shop.accepted_values_orders_status__placed__shipped__completed__return_pending__returned.be6b5b5ec3": { "alias": "accepted_values_orders_1ce6ab157c285f7cd2ac656013faf758", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -11277,19 +13588,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.35778, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.607407, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_accepted_values", @@ -11309,6 +13626,7 @@ "jaffle_shop", "accepted_values_orders_status__placed__shipped__completed__return_pending__returned" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11319,12 +13637,14 @@ "path": "accepted_values_orders_1ce6ab157c285f7cd2ac656013faf758.sql", "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(alias=\"accepted_values_orders_1ce6ab157c285f7cd2ac656013faf758\") }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11350,6 +13670,7 @@ }, "test.jaffle_shop.accepted_values_stg_orders_status__placed__shipped__completed__return_pending__returned.080fb20aad": { "alias": "accepted_values_stg_orders_4f514bf94b77b7ea437830eec4421c58", + "attached_node": "model.jaffle_shop.stg_orders", "build_path": null, "checksum": { "checksum": "", @@ -11364,19 +13685,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.381258, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.637758, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_accepted_values", @@ -11397,6 +13724,7 @@ "staging", "accepted_values_stg_orders_status__placed__shipped__completed__return_pending__returned" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11407,12 +13735,14 @@ "path": "accepted_values_stg_orders_4f514bf94b77b7ea437830eec4421c58.sql", "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(alias=\"accepted_values_stg_orders_4f514bf94b77b7ea437830eec4421c58\") }}", "refs": [ - [ - "stg_orders" - ] + { + "name": "stg_orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11438,6 +13768,7 @@ }, "test.jaffle_shop.accepted_values_stg_payments_payment_method__credit_card__coupon__bank_transfer__gift_card.3c3820f278": { "alias": "accepted_values_stg_payments_c7909fb19b1f0177c2bf99c7912f06ef", + "attached_node": "model.jaffle_shop.stg_payments", "build_path": null, "checksum": { "checksum": "", @@ -11452,19 +13783,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.3883939, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.6424909, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_accepted_values", @@ -11485,6 +13822,7 @@ "staging", "accepted_values_stg_payments_payment_method__credit_card__coupon__bank_transfer__gift_card" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11495,12 +13833,14 @@ "path": "accepted_values_stg_payments_c7909fb19b1f0177c2bf99c7912f06ef.sql", "raw_code": "{{ test_accepted_values(**_dbt_generic_test_kwargs) }}{{ config(alias=\"accepted_values_stg_payments_c7909fb19b1f0177c2bf99c7912f06ef\") }}", "refs": [ - [ - "stg_payments" - ] + { + "name": "stg_payments", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11525,6 +13865,7 @@ }, "test.jaffle_shop.not_null_customers_customer_id.5c9bf9911d": { "alias": "not_null_customers_customer_id", + "attached_node": "model.jaffle_shop.customers", "build_path": null, "checksum": { "checksum": "", @@ -11539,19 +13880,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.342222, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.5844128, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -11570,6 +13917,7 @@ "jaffle_shop", "not_null_customers_customer_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11580,12 +13928,14 @@ "path": "not_null_customers_customer_id.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "customers" - ] + { + "name": "customers", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11602,6 +13952,7 @@ }, "test.jaffle_shop.not_null_orders_amount.106140f9fd": { "alias": "not_null_orders_amount", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -11616,19 +13967,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.365846, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.6199622, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -11647,6 +14004,7 @@ "jaffle_shop", "not_null_orders_amount" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11657,12 +14015,14 @@ "path": "not_null_orders_amount.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11679,6 +14039,7 @@ }, "test.jaffle_shop.not_null_orders_bank_transfer_amount.7743500c49": { "alias": "not_null_orders_bank_transfer_amount", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -11693,19 +14054,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.369942, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.6258051, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -11724,6 +14091,7 @@ "jaffle_shop", "not_null_orders_bank_transfer_amount" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11734,12 +14102,14 @@ "path": "not_null_orders_bank_transfer_amount.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11756,6 +14126,7 @@ }, "test.jaffle_shop.not_null_orders_coupon_amount.ab90c90625": { "alias": "not_null_orders_coupon_amount", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -11770,19 +14141,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.368623, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.624228, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -11801,6 +14178,7 @@ "jaffle_shop", "not_null_orders_coupon_amount" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11811,12 +14189,14 @@ "path": "not_null_orders_coupon_amount.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11833,6 +14213,7 @@ }, "test.jaffle_shop.not_null_orders_credit_card_amount.d3ca593b59": { "alias": "not_null_orders_credit_card_amount", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -11847,19 +14228,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.367114, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.622118, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -11878,6 +14265,7 @@ "jaffle_shop", "not_null_orders_credit_card_amount" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11888,12 +14276,14 @@ "path": "not_null_orders_credit_card_amount.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11910,6 +14300,7 @@ }, "test.jaffle_shop.not_null_orders_customer_id.c5f02694af": { "alias": "not_null_orders_customer_id", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -11924,19 +14315,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.345952, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.587272, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -11955,6 +14352,7 @@ "jaffle_shop", "not_null_orders_customer_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -11965,12 +14363,14 @@ "path": "not_null_orders_customer_id.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -11987,6 +14387,7 @@ }, "test.jaffle_shop.not_null_orders_gift_card_amount.413a0d2d7a": { "alias": "not_null_orders_gift_card_amount", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -12001,19 +14402,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.371219, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.6277661, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -12032,6 +14439,7 @@ "jaffle_shop", "not_null_orders_gift_card_amount" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12042,12 +14450,14 @@ "path": "not_null_orders_gift_card_amount.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12064,6 +14474,7 @@ }, "test.jaffle_shop.not_null_orders_order_id.cf6c17daed": { "alias": "not_null_orders_order_id", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -12078,19 +14489,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.344596, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.586345, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -12109,6 +14526,7 @@ "jaffle_shop", "not_null_orders_order_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12119,12 +14537,14 @@ "path": "not_null_orders_order_id.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12141,6 +14561,7 @@ }, "test.jaffle_shop.not_null_stg_customers_customer_id.e2cfb1f9aa": { "alias": "not_null_stg_customers_customer_id", + "attached_node": "model.jaffle_shop.stg_customers", "build_path": null, "checksum": { "checksum": "", @@ -12155,19 +14576,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.3773491, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.633585, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -12187,6 +14614,7 @@ "staging", "not_null_stg_customers_customer_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12197,12 +14625,14 @@ "path": "not_null_stg_customers_customer_id.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "stg_customers" - ] + { + "name": "stg_customers", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12219,6 +14649,7 @@ }, "test.jaffle_shop.not_null_stg_orders_order_id.81cfe2fe64": { "alias": "not_null_stg_orders_order_id", + "attached_node": "model.jaffle_shop.stg_orders", "build_path": null, "checksum": { "checksum": "", @@ -12233,19 +14664,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.380042, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.6366348, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -12265,6 +14702,7 @@ "staging", "not_null_stg_orders_order_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12275,12 +14713,14 @@ "path": "not_null_stg_orders_order_id.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "stg_orders" - ] + { + "name": "stg_orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12297,6 +14737,7 @@ }, "test.jaffle_shop.not_null_stg_payments_payment_id.c19cc50075": { "alias": "not_null_stg_payments_payment_id", + "attached_node": "model.jaffle_shop.stg_payments", "build_path": null, "checksum": { "checksum": "", @@ -12311,19 +14752,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.387188, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.641508, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_not_null" @@ -12343,6 +14790,7 @@ "staging", "not_null_stg_payments_payment_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12353,12 +14801,14 @@ "path": "not_null_stg_payments_payment_id.sql", "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "stg_payments" - ] + { + "name": "stg_payments", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12375,6 +14825,7 @@ }, "test.jaffle_shop.relationships_orders_customer_id__customer_id__ref_customers_.c6ec7f58f2": { "alias": "relationships_orders_customer_id__customer_id__ref_customers_", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -12389,19 +14840,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.347137, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.590184, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_relationships", @@ -12422,6 +14879,7 @@ "jaffle_shop", "relationships_orders_customer_id__customer_id__ref_customers_" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12432,15 +14890,19 @@ "path": "relationships_orders_customer_id__customer_id__ref_customers_.sql", "raw_code": "{{ test_relationships(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "customers" - ], - [ - "orders" - ] + { + "name": "customers", + "package": null, + "version": null + }, + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12459,6 +14921,7 @@ }, "test.jaffle_shop.unique_customers_customer_id.c5af1ff4b1": { "alias": "unique_customers_customer_id", + "attached_node": "model.jaffle_shop.customers", "build_path": null, "checksum": { "checksum": "", @@ -12473,19 +14936,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.340836, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.583136, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_unique" @@ -12504,6 +14973,7 @@ "jaffle_shop", "unique_customers_customer_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12514,12 +14984,14 @@ "path": "unique_customers_customer_id.sql", "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "customers" - ] + { + "name": "customers", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12536,6 +15008,7 @@ }, "test.jaffle_shop.unique_orders_order_id.fed79b3a6e": { "alias": "unique_orders_order_id", + "attached_node": "model.jaffle_shop.orders", "build_path": null, "checksum": { "checksum": "", @@ -12550,19 +15023,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.343404, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.5853949, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_unique" @@ -12581,6 +15060,7 @@ "jaffle_shop", "unique_orders_order_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12591,12 +15071,14 @@ "path": "unique_orders_order_id.sql", "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "orders" - ] + { + "name": "orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12613,6 +15095,7 @@ }, "test.jaffle_shop.unique_stg_customers_customer_id.c7614daada": { "alias": "unique_stg_customers_customer_id", + "attached_node": "model.jaffle_shop.stg_customers", "build_path": null, "checksum": { "checksum": "", @@ -12627,19 +15110,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.375885, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.6324039, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_unique" @@ -12659,6 +15148,7 @@ "staging", "unique_stg_customers_customer_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12669,12 +15159,14 @@ "path": "unique_stg_customers_customer_id.sql", "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "stg_customers" - ] + { + "name": "stg_customers", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12691,6 +15183,7 @@ }, "test.jaffle_shop.unique_stg_orders_order_id.e3b841c71a": { "alias": "unique_stg_orders_order_id", + "attached_node": "model.jaffle_shop.stg_orders", "build_path": null, "checksum": { "checksum": "", @@ -12705,19 +15198,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.3786829, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.635364, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_unique" @@ -12737,6 +15236,7 @@ "staging", "unique_stg_orders_order_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12747,12 +15247,14 @@ "path": "unique_stg_orders_order_id.sql", "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "stg_orders" - ] + { + "name": "stg_orders", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12769,6 +15271,7 @@ }, "test.jaffle_shop.unique_stg_payments_payment_id.3744510712": { "alias": "unique_stg_payments_payment_id", + "attached_node": "model.jaffle_shop.stg_payments", "build_path": null, "checksum": { "checksum": "", @@ -12783,19 +15286,25 @@ "enabled": true, "error_if": "!= 0", "fail_calc": "count(*)", + "group": null, "limit": null, "materialized": "test", "meta": {}, "schema": "dbt_test__audit", "severity": "ERROR", "store_failures": null, + "store_failures_as": null, "tags": [], "warn_if": "!= 0", "where": null }, - "created_at": 1696458270.385969, + "contract": { + "alias_types": true, + "checksum": null, + "enforced": false + }, + "created_at": 1719485737.640539, "database": "postgres", - "deferred": false, "depends_on": { "macros": [ "macro.dbt.test_unique" @@ -12815,6 +15324,7 @@ "staging", "unique_stg_payments_payment_id" ], + "group": null, "language": "sql", "meta": {}, "metrics": [], @@ -12825,12 +15335,14 @@ "path": "unique_stg_payments_payment_id.sql", "raw_code": "{{ test_unique(**_dbt_generic_test_kwargs) }}", "refs": [ - [ - "stg_payments" - ] + { + "name": "stg_payments", + "package": null, + "version": null + } ], + "relation_name": null, "resource_type": "test", - "root_path": "/Users/julian/Astronomer/astronomer-cosmos/dev/dags/dbt/jaffle_shop", "schema": "public_dbt_test__audit", "sources": [], "tags": [], @@ -12930,6 +15442,9 @@ "model.jaffle_shop.stg_payments" ] }, + "saved_queries": {}, "selectors": {}, - "sources": {} + "semantic_models": {}, + "sources": {}, + "unit_tests": {} } diff --git a/tests/dbt/test_graph.py b/tests/dbt/test_graph.py index 9e931ba8c9..e98d90436a 100644 --- a/tests/dbt/test_graph.py +++ b/tests/dbt/test_graph.py @@ -1,4 +1,5 @@ import importlib +import logging import os import shutil import sys @@ -643,8 +644,6 @@ def test_load_via_dbt_ls_caching_partial_parsing(tmp_dbt_project_dir, postgres_p When using RenderConfig.enable_mock_profile=False and defining DbtGraph.cache_dir, Cosmos should leverage dbt partial parsing. """ - import logging - caplog.set_level(logging.DEBUG) project_config = ProjectConfig(dbt_project_path=tmp_dbt_project_dir / DBT_PROJECT_NAME) @@ -672,6 +671,39 @@ def test_load_via_dbt_ls_caching_partial_parsing(tmp_dbt_project_dir, postgres_p assert not "Unable to do partial parsing" in caplog.text +@pytest.mark.integration +def test_load_via_dbt_ls_uses_partial_parse_when_cache_is_disabled( + tmp_dbt_project_dir, postgres_profile_config, caplog, tmp_path +): + """ + When using RenderConfig.enable_mock_profile=False and defining DbtGraph.cache_dir, + Cosmos should leverage dbt partial parsing. + """ + partial_parse = Path(__file__).parent.parent / "sample/jaffle_shop_partial_parse.msgpack" + + target_dir = tmp_dbt_project_dir / DBT_PROJECT_NAME / DBT_TARGET_DIR_NAME + target_dir.mkdir(parents=True, exist_ok=True) + shutil.copy(partial_parse, target_dir / "partial_parse.msgpack") + + caplog.set_level(logging.DEBUG) + project_config = ProjectConfig(dbt_project_path=tmp_dbt_project_dir / DBT_PROJECT_NAME) + render_config = RenderConfig( + dbt_project_path=tmp_dbt_project_dir / DBT_PROJECT_NAME, dbt_deps=True, enable_mock_profile=False + ) + execution_config = ExecutionConfig(dbt_project_path=tmp_dbt_project_dir / DBT_PROJECT_NAME) + dbt_graph = DbtGraph( + project=project_config, + render_config=render_config, + execution_config=execution_config, + profile_config=postgres_profile_config, + cache_dir="", # Cache is disabled + ) + + # Should use the partial parse available in the original project folder + dbt_graph.load_via_dbt_ls_without_cache() # should not not raise exception + assert not "Unable to do partial parsing" in caplog.text + + @pytest.mark.integration @patch("cosmos.dbt.graph.Popen") def test_load_via_dbt_ls_with_zero_returncode_and_non_empty_stderr( From 5dd59edfa3a6c53c56ccd12437a228aa9e0858e2 Mon Sep 17 00:00:00 2001 From: Tatiana Al-Chueyr Date: Thu, 27 Jun 2024 13:18:06 +0100 Subject: [PATCH 2/4] Add missing file --- tests/sample/jaffle_shop_partial_parse.msgpack | Bin 0 -> 591740 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/sample/jaffle_shop_partial_parse.msgpack diff --git a/tests/sample/jaffle_shop_partial_parse.msgpack b/tests/sample/jaffle_shop_partial_parse.msgpack new file mode 100644 index 0000000000000000000000000000000000000000..8860ce13eb4b12bc3798c2a5c59772722ef69ef5 GIT binary patch literal 591740 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 E4{atd4FCWD literal 0 HcmV?d00001 From 58e15632817d927335eca3995847103919dc09e6 Mon Sep 17 00:00:00 2001 From: Tatiana Al-Chueyr Date: Thu, 27 Jun 2024 14:29:22 +0100 Subject: [PATCH 3/4] Fix test in CI --- cosmos/cache.py | 1 + tests/dbt/test_graph.py | 24 +++++++++++++++--- .../sample/jaffle_shop_partial_parse.msgpack | Bin 591740 -> 0 bytes 3 files changed, 21 insertions(+), 4 deletions(-) delete mode 100644 tests/sample/jaffle_shop_partial_parse.msgpack diff --git a/cosmos/cache.py b/cosmos/cache.py index fd1dd53f4f..50a04ebd22 100644 --- a/cosmos/cache.py +++ b/cosmos/cache.py @@ -138,6 +138,7 @@ def _update_partial_parse_cache(latest_partial_parse_filepath: Path, cache_dir: :param cache_dir: Path to the Cosmos project cache directory """ cache_path = get_partial_parse_path(cache_dir) + cache_path.parent.mkdir(parents=True, exist_ok=True) manifest_path = get_partial_parse_path(cache_dir).parent / DBT_MANIFEST_FILE_NAME latest_manifest_filepath = latest_partial_parse_filepath.parent / DBT_MANIFEST_FILE_NAME diff --git a/tests/dbt/test_graph.py b/tests/dbt/test_graph.py index e98d90436a..89f3948658 100644 --- a/tests/dbt/test_graph.py +++ b/tests/dbt/test_graph.py @@ -679,11 +679,11 @@ def test_load_via_dbt_ls_uses_partial_parse_when_cache_is_disabled( When using RenderConfig.enable_mock_profile=False and defining DbtGraph.cache_dir, Cosmos should leverage dbt partial parsing. """ - partial_parse = Path(__file__).parent.parent / "sample/jaffle_shop_partial_parse.msgpack" - target_dir = tmp_dbt_project_dir / DBT_PROJECT_NAME / DBT_TARGET_DIR_NAME target_dir.mkdir(parents=True, exist_ok=True) - shutil.copy(partial_parse, target_dir / "partial_parse.msgpack") + + partial_parse_cache_dir = Path("/tmp/cosmos") + partial_parse_cache_dir.mkdir(parents=True, exist_ok=True) caplog.set_level(logging.DEBUG) project_config = ProjectConfig(dbt_project_path=tmp_dbt_project_dir / DBT_PROJECT_NAME) @@ -696,11 +696,27 @@ def test_load_via_dbt_ls_uses_partial_parse_when_cache_is_disabled( render_config=render_config, execution_config=execution_config, profile_config=postgres_profile_config, - cache_dir="", # Cache is disabled + cache_dir=partial_parse_cache_dir, ) + # Creates partial parse file with the expected version + dbt_graph.load_via_dbt_ls_without_cache() # should not not raise exception + caplog.clear() + + # We copy a valid partial parse to the project directory + shutil.copy(partial_parse_cache_dir / "target/partial_parse.msgpack", target_dir / "partial_parse.msgpack") + + # Run dbt ls without cache_dir, which disables cache: + dbt_graph = DbtGraph( + project=project_config, + render_config=render_config, + execution_config=execution_config, + profile_config=postgres_profile_config, + cache_dir="", # Cache is disabled + ) # Should use the partial parse available in the original project folder dbt_graph.load_via_dbt_ls_without_cache() # should not not raise exception + assert not "Unable to do partial parsing" in caplog.text diff --git a/tests/sample/jaffle_shop_partial_parse.msgpack b/tests/sample/jaffle_shop_partial_parse.msgpack deleted file mode 100644 index 8860ce13eb4b12bc3798c2a5c59772722ef69ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591740 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 E4{atd4FCWD From 086c0ce5f99e3a0c0e85e8d3b0397ff023be6334 Mon Sep 17 00:00:00 2001 From: Tatiana Al-Chueyr Date: Thu, 27 Jun 2024 14:34:06 +0100 Subject: [PATCH 4/4] Fix broken unit test --- tests/test_cache.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_cache.py b/tests/test_cache.py index 9cd216998f..49700b8551 100644 --- a/tests/test_cache.py +++ b/tests/test_cache.py @@ -101,7 +101,7 @@ def test_update_partial_parse_cache(mock_get_partial_parse_path, mock_copyfile): mock_get_partial_parse_path.side_effect = lambda cache_dir: cache_dir / "partial_parse.yml" latest_partial_parse_filepath = Path("/path/to/latest_partial_parse.yml") - cache_dir = Path("/path/to/cache_directory") + cache_dir = Path("/tmp/path/to/cache_directory") # Expected paths cache_path = cache_dir / "partial_parse.yml"