From 3ceaba1b322ac6348dabfd562764db4a46c636bc Mon Sep 17 00:00:00 2001 From: fivetran-catfritz <111930712+fivetran-catfritz@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:50:42 -0500 Subject: [PATCH 1/8] Consolidate dbt source into transform --- CHANGELOG.md | 22 + README.md | 15 +- dbt_project.yml | 27 +- integration_tests/dbt_project.yml | 4 +- .../amazon_ads_add_pass_though_columns.sql | 28 ++ .../amazon_ads_fill_pass_through_columns.sql | 17 + .../staging/get_ad_group_history_columns.sql | 16 + .../get_ad_group_level_report_columns.sql | 19 + .../get_advertised_product_report_columns.sql | 25 ++ .../staging/get_campaign_history_columns.sql | 23 ++ .../get_campaign_level_report_columns.sql | 25 ++ .../staging/get_keyword_history_columns.sql | 20 + .../staging/get_portfolio_history_columns.sql | 21 + .../get_product_ad_history_columns.sql | 17 + macros/staging/get_profile_columns.sql | 20 + ..._search_term_ad_keyword_report_columns.sql | 27 ++ .../get_targeting_keyword_report_columns.sql | 28 ++ models/amazon_ads.yml | 43 -- models/amazon_ads__account_report.sql | 6 +- models/amazon_ads__ad_group_report.sql | 8 +- models/amazon_ads__ad_report.sql | 10 +- models/amazon_ads__campaign_report.sql | 6 +- models/amazon_ads__keyword_report.sql | 10 +- models/amazon_ads__portfolio_report.sql | 8 +- models/amazon_ads__search_report.sql | 10 +- .../int_amazon_ads__portfolio_history.sql | 4 +- models/staging/docs.md | 187 +++++++++ models/staging/src_amazon_ads.yml | 369 +++++++++++++++++ models/staging/stg_amazon_ads.yml | 376 ++++++++++++++++++ .../stg_amazon_ads__ad_group_history.sql | 44 ++ .../stg_amazon_ads__ad_group_level_report.sql | 45 +++ ..._amazon_ads__advertised_product_report.sql | 52 +++ .../stg_amazon_ads__campaign_history.sql | 51 +++ .../stg_amazon_ads__campaign_level_report.sql | 52 +++ .../stg_amazon_ads__keyword_history.sql | 48 +++ .../stg_amazon_ads__portfolio_history.sql | 49 +++ .../stg_amazon_ads__product_ad_history.sql | 45 +++ models/staging/stg_amazon_ads__profile.sql | 47 +++ ...zon_ads__search_term_ad_keyword_report.sql | 54 +++ ...g_amazon_ads__targeting_keyword_report.sql | 55 +++ .../stg_amazon_ads__ad_group_history_tmp.sql | 14 + ..._amazon_ads__ad_group_level_report_tmp.sql | 14 + ...zon_ads__advertised_product_report_tmp.sql | 14 + .../stg_amazon_ads__campaign_history_tmp.sql | 14 + ..._amazon_ads__campaign_level_report_tmp.sql | 14 + .../stg_amazon_ads__keyword_history_tmp.sql | 14 + .../stg_amazon_ads__portfolio_history_tmp.sql | 14 + ...stg_amazon_ads__product_ad_history_tmp.sql | 14 + .../tmp/stg_amazon_ads__profile_tmp.sql | 14 + ...ads__search_term_ad_keyword_report_tmp.sql | 14 + ...azon_ads__targeting_keyword_report_tmp.sql | 14 + packages.yml | 4 +- 52 files changed, 1992 insertions(+), 99 deletions(-) create mode 100644 macros/staging/amazon_ads_add_pass_though_columns.sql create mode 100644 macros/staging/amazon_ads_fill_pass_through_columns.sql create mode 100644 macros/staging/get_ad_group_history_columns.sql create mode 100644 macros/staging/get_ad_group_level_report_columns.sql create mode 100644 macros/staging/get_advertised_product_report_columns.sql create mode 100644 macros/staging/get_campaign_history_columns.sql create mode 100644 macros/staging/get_campaign_level_report_columns.sql create mode 100644 macros/staging/get_keyword_history_columns.sql create mode 100644 macros/staging/get_portfolio_history_columns.sql create mode 100644 macros/staging/get_product_ad_history_columns.sql create mode 100644 macros/staging/get_profile_columns.sql create mode 100644 macros/staging/get_search_term_ad_keyword_report_columns.sql create mode 100644 macros/staging/get_targeting_keyword_report_columns.sql create mode 100644 models/staging/docs.md create mode 100644 models/staging/src_amazon_ads.yml create mode 100644 models/staging/stg_amazon_ads.yml create mode 100644 models/staging/stg_amazon_ads__ad_group_history.sql create mode 100644 models/staging/stg_amazon_ads__ad_group_level_report.sql create mode 100644 models/staging/stg_amazon_ads__advertised_product_report.sql create mode 100644 models/staging/stg_amazon_ads__campaign_history.sql create mode 100644 models/staging/stg_amazon_ads__campaign_level_report.sql create mode 100644 models/staging/stg_amazon_ads__keyword_history.sql create mode 100644 models/staging/stg_amazon_ads__portfolio_history.sql create mode 100644 models/staging/stg_amazon_ads__product_ad_history.sql create mode 100644 models/staging/stg_amazon_ads__profile.sql create mode 100644 models/staging/stg_amazon_ads__search_term_ad_keyword_report.sql create mode 100644 models/staging/stg_amazon_ads__targeting_keyword_report.sql create mode 100644 models/staging/tmp/stg_amazon_ads__ad_group_history_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__advertised_product_report_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__campaign_history_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__campaign_level_report_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__keyword_history_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__portfolio_history_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__product_ad_history_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__profile_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql create mode 100644 models/staging/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index d90aa06..04ea18e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,25 @@ +# dbt_amazon_ads v1.0.0 + +[PR #28](https://github.com/fivetran/dbt_amazon_ads/pull/28) includes the following updates: + +## Breaking Changes + +### Source Package Consolidation +- Removed the dependency on the `fivetran/amazon_ads_source` package. + - All functionality from the source package has been merged into this transformation package for improved maintainability and clarity. + - If you reference `fivetran/amazon_ads_source` in your `packages.yml`, you must remove this dependency to avoid conflicts. + - Any source overrides referencing the `fivetran/amazon_ads_source` package will also need to be removed or updated to reference this package. + - Update any amazon_ads_source-scoped variables to be scoped to only under this package. See the [README](https://github.com/fivetran/dbt_amazon_ads/blob/main/README.md) for how to configure the build schema of staging models. +- As part of the consolidation, vars are no longer used to reference staging models, and only sources are represented by vars. Staging models are now referenced directly with `ref()` in downstream models. + + +### dbt Fusion Compatibility Updates +- Updated package to maintain compatibility with dbt-core versions both before and after v1.10.6, which introduced a breaking change to multi-argument test syntax (e.g., `unique_combination_of_columns`). +- Temporarily removed unsupported tests to avoid errors and ensure smoother upgrades across different dbt-core versions. These tests will be reintroduced once a safe migration path is available. + - Removed all `dbt_utils.unique_combination_of_columns` tests. + - Removed all accepted_values tests. + - Moved `loaded_at_field: _fivetran_synced` under the `config:` block in `src_amazon_ads.yml`. + # dbt_amazon_ads v0.5.0 [PR #23](https://github.com/fivetran/dbt_amazon_ads/pull/23) includes the following updates: diff --git a/README.md b/README.md index dc7ad61..e54d93a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@

## What does this dbt package do? -- Produces modeled tables that leverage Amazon Ads data from [Fivetran's connector](https://fivetran.com/docs/applications/amazon-ads) in the format described by [this ERD](https://fivetran.com/docs/applications/amazon-ads#schemainformation) and builds off the output of our [Amazon Ads source package](https://github.com/fivetran/dbt_amazon_ads_source). +- Produces modeled tables that leverage Amazon Ads data from [Fivetran's connector](https://fivetran.com/docs/applications/amazon-ads) in the format described by [this ERD](https://fivetran.com/docs/applications/amazon-ads#schemainformation). - Provides insight into your ad performance across the following grains: - Account, portfolio, campaign, ad group, ad, keyword, and search term - Materializes output models designed to work simultaneously with our [multi-platform Ad Reporting package](https://github.com/fivetran/dbt_ad_reporting). @@ -58,10 +58,10 @@ Include the following amazon_ads package version in your `packages.yml` file _if ```yaml packages: - package: fivetran/amazon_ads - version: [">=0.5.0", "<0.6.0"] # we recommend using ranges to capture non-breaking changes automatically + version: [">=1.0.0", "<1.1.0"] # we recommend using ranges to capture non-breaking changes automatically ``` -Do NOT include the `amazon_ads_source` package in this file. The transformation package itself has a dependency on it and will install the source package as well. +> All required sources and staging models are now bundled into this transformation package. Do not include `fivetran/amazon_ads_source` in your `packages.yml` since this package has been deprecated. ### Step 3: Define database and schema variables @@ -126,10 +126,10 @@ By default, this package will build the Amazon Ads staging models (11 views, 11 ```yml models: - amazon_ads_source: - +schema: my_new_schema_name # leave blank for just the target_schema amazon_ads: - +schema: my_new_schema_name # leave blank for just the target_schema + +schema: my_new_schema_name # Leave +schema: blank to use the default target_schema. + staging: + +schema: my_new_schema_name # Leave +schema: blank to use the default target_schema. ``` #### Change the source table references @@ -157,9 +157,6 @@ This dbt package is dependent on the following dbt packages. Be aware that these ```yml packages: - - package: fivetran/amazon_ads_source - version: [">=0.5.0", "<0.6.0"] - - package: fivetran/fivetran_utils version: [">=0.4.0", "<0.5.0"] diff --git a/dbt_project.yml b/dbt_project.yml index 3c00826..ad6f9de 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -1,5 +1,5 @@ name: 'amazon_ads' -version: '0.5.0' +version: '1.0.0' config-version: 2 require-dbt-version: [">=1.3.0", "<2.0.0"] models: @@ -8,16 +8,19 @@ models: +materialized: table intermediate: +materialized: view + staging: + +schema: amazon_ads_source + +materialized: view vars: amazon_ads: - ad_group_history: "{{ ref('stg_amazon_ads__ad_group_history') }}" - ad_group_level_report: "{{ ref('stg_amazon_ads__ad_group_level_report') }}" - advertised_product_report: "{{ ref('stg_amazon_ads__advertised_product_report') }}" - campaign_history: "{{ ref('stg_amazon_ads__campaign_history') }}" - campaign_level_report: "{{ ref('stg_amazon_ads__campaign_level_report') }}" - portfolio_history: "{{ ref('stg_amazon_ads__portfolio_history') }}" - product_ad_history: "{{ ref('stg_amazon_ads__product_ad_history') }}" - profile: "{{ ref('stg_amazon_ads__profile') }}" - keyword_history: "{{ ref('stg_amazon_ads__keyword_history') }}" - targeting_keyword_report: "{{ ref('stg_amazon_ads__targeting_keyword_report') }}" - search_term_ad_keyword_report: "{{ ref('stg_amazon_ads__search_term_ad_keyword_report') }}" \ No newline at end of file + ad_group_history: "{{ source('amazon_ads', 'ad_group_history') }}" + ad_group_level_report: "{{ source('amazon_ads', 'ad_group_level_report') }}" + advertised_product_report: "{{ source('amazon_ads', 'advertised_product_report') }}" + campaign_history: "{{ source('amazon_ads', 'campaign_history') }}" + campaign_level_report: "{{ source('amazon_ads', 'campaign_level_report') }}" + portfolio_history: "{{ source('amazon_ads', 'portfolio_history') }}" + product_ad_history: "{{ source('amazon_ads', 'product_ad_history') }}" + profile: "{{ source('amazon_ads', 'profile') }}" + keyword_history: "{{ source('amazon_ads', 'keyword_history') }}" + targeting_keyword_report: "{{ source('amazon_ads', 'targeting_keyword_report') }}" + search_term_ad_keyword_report: "{{ source('amazon_ads', 'search_term_ad_keyword_report') }}" \ No newline at end of file diff --git a/integration_tests/dbt_project.yml b/integration_tests/dbt_project.yml index 6f19229..751fbbd 100644 --- a/integration_tests/dbt_project.yml +++ b/integration_tests/dbt_project.yml @@ -1,12 +1,12 @@ config-version: 2 name: 'amazon_ads_integration_tests' -version: '0.5.0' +version: '1.0.0' profile: 'integration_tests' vars: - amazon_ads_source: + amazon_ads: amazon_ads_schema: amazon_ads_integration_tests_03 amazon_ads_ad_group_history_identifier: "ad_group_history_data" amazon_ads_ad_group_level_report_identifier: "ad_group_level_report_data" diff --git a/macros/staging/amazon_ads_add_pass_though_columns.sql b/macros/staging/amazon_ads_add_pass_though_columns.sql new file mode 100644 index 0000000..65eec9b --- /dev/null +++ b/macros/staging/amazon_ads_add_pass_though_columns.sql @@ -0,0 +1,28 @@ +{# Backwards compatible version of fivetran_utils.add_pass_through_columns #} + +{% macro amazon_ads_add_pass_through_columns(base_columns, pass_through_fields, except_fields=[]) %} + +{% if pass_through_fields %} + {% for column in pass_through_fields %} + + {% if column is mapping %} + {% set col_name = column.alias|default(column.name)|lower %} + + {% if col_name not in except_fields %} + {% if column.alias %} + {% do base_columns.append({ "name": column.name, "alias": column.alias, "datatype": column.datatype if column.datatype else dbt.type_string()}) %} + {% else %} + {% do base_columns.append({ "name": column.name, "datatype": column.datatype if column.datatype else dbt.type_string()}) %} + {% endif %} + {% endif %} + + {% else %} + {% if column|lower not in except_fields %} + {% do base_columns.append({ "name": column, "datatype": dbt.type_string()}) %} + {% endif %} + {% endif %} + + {% endfor %} +{% endif %} + +{% endmacro %} \ No newline at end of file diff --git a/macros/staging/amazon_ads_fill_pass_through_columns.sql b/macros/staging/amazon_ads_fill_pass_through_columns.sql new file mode 100644 index 0000000..b3fa316 --- /dev/null +++ b/macros/staging/amazon_ads_fill_pass_through_columns.sql @@ -0,0 +1,17 @@ +{# Backwards compatible version of fivetran_utils.fill_pass_through_columns #} + +{% macro amazon_ads_fill_pass_through_columns(pass_through_fields, except=[]) %} + +{% if pass_through_fields %} + {% for field in pass_through_fields %} + {% if (field.alias if field.alias else field.name) not in except %} + {% if field.transform_sql %} + , coalesce(cast({{ field.transform_sql }} as {{ dbt.type_float() }}), 0) as {{ field.alias if field.alias else field.name }} + {% else %} + , coalesce(cast({{ field.alias if field.alias else field.name }} as {{ dbt.type_float() }}), 0) as {{ field.alias if field.alias else field.name }} + {% endif %} + {% endif %} + {% endfor %} +{% endif %} + +{% endmacro %} \ No newline at end of file diff --git a/macros/staging/get_ad_group_history_columns.sql b/macros/staging/get_ad_group_history_columns.sql new file mode 100644 index 0000000..8d28004 --- /dev/null +++ b/macros/staging/get_ad_group_history_columns.sql @@ -0,0 +1,16 @@ +{% macro get_ad_group_history_columns() %} + +{% set columns = [ + {"name": "campaign_id", "datatype": dbt.type_int()}, + {"name": "creation_date", "datatype": dbt.type_timestamp()}, + {"name": "default_bid", "datatype": dbt.type_float()}, + {"name": "id", "datatype": dbt.type_string()}, + {"name": "last_updated_date", "datatype": dbt.type_timestamp()}, + {"name": "name", "datatype": dbt.type_string()}, + {"name": "serving_status", "datatype": dbt.type_string()}, + {"name": "state", "datatype": dbt.type_string()} +] %} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_ad_group_level_report_columns.sql b/macros/staging/get_ad_group_level_report_columns.sql new file mode 100644 index 0000000..9c076a8 --- /dev/null +++ b/macros/staging/get_ad_group_level_report_columns.sql @@ -0,0 +1,19 @@ +{% macro get_ad_group_level_report_columns() %} + +{% set columns = [ + {"name": "ad_group_id", "datatype": dbt.type_int()}, + {"name": "campaign_bidding_strategy", "datatype": dbt.type_string()}, + {"name": "clicks", "datatype": dbt.type_int()}, + {"name": "cost", "datatype": dbt.type_float()}, + {"name": "date", "datatype": "date"}, + {"name": "impressions", "datatype": dbt.type_int()}, + {"name": "purchases_30_d", "datatype": dbt.type_int()}, + {"name": "sales_30_d", "datatype": dbt.type_float()} +] %} + +{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #} +{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__ad_group_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_advertised_product_report_columns.sql b/macros/staging/get_advertised_product_report_columns.sql new file mode 100644 index 0000000..7447056 --- /dev/null +++ b/macros/staging/get_advertised_product_report_columns.sql @@ -0,0 +1,25 @@ +{% macro get_advertised_product_report_columns() %} + +{% set columns = [ + {"name": "ad_group_id", "datatype": dbt.type_int()}, + {"name": "ad_id", "datatype": dbt.type_int()}, + {"name": "advertised_asin", "datatype": dbt.type_string()}, + {"name": "advertised_sku", "datatype": dbt.type_string()}, + {"name": "campaign_budget_amount", "datatype": dbt.type_float()}, + {"name": "campaign_budget_currency_code", "datatype": dbt.type_string()}, + {"name": "campaign_budget_type", "datatype": dbt.type_string()}, + {"name": "campaign_id", "datatype": dbt.type_int()}, + {"name": "clicks", "datatype": dbt.type_int()}, + {"name": "cost", "datatype": dbt.type_float()}, + {"name": "date", "datatype": "date"}, + {"name": "impressions", "datatype": dbt.type_int()}, + {"name": "purchases_30_d", "datatype": dbt.type_int()}, + {"name": "sales_30_d", "datatype": dbt.type_float()} +] %} + +{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #} +{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__advertised_product_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_campaign_history_columns.sql b/macros/staging/get_campaign_history_columns.sql new file mode 100644 index 0000000..52215ab --- /dev/null +++ b/macros/staging/get_campaign_history_columns.sql @@ -0,0 +1,23 @@ +{% macro get_campaign_history_columns() %} + +{% set columns = [ + {"name": "bidding_strategy", "datatype": dbt.type_string()}, + {"name": "creation_date", "datatype": dbt.type_timestamp()}, + {"name": "end_date", "datatype": "date"}, + {"name": "id", "datatype": dbt.type_string()}, + {"name": "last_updated_date", "datatype": dbt.type_timestamp()}, + {"name": "name", "datatype": dbt.type_string()}, + {"name": "portfolio_id", "datatype": dbt.type_int()}, + {"name": "profile_id", "datatype": dbt.type_int()}, + {"name": "serving_status", "datatype": dbt.type_string()}, + {"name": "start_date", "datatype": "date"}, + {"name": "state", "datatype": dbt.type_string()}, + {"name": "targeting_type", "datatype": dbt.type_string()}, + {"name": "budget", "datatype": dbt.type_float()}, + {"name": "budget_type", "datatype": dbt.type_string()}, + {"name": "effective_budget", "datatype": dbt.type_float()} +] %} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_campaign_level_report_columns.sql b/macros/staging/get_campaign_level_report_columns.sql new file mode 100644 index 0000000..977e9d3 --- /dev/null +++ b/macros/staging/get_campaign_level_report_columns.sql @@ -0,0 +1,25 @@ +{% macro get_campaign_level_report_columns() %} + +{% set columns = [ + {"name": "campaign_applicable_budget_rule_id", "datatype": dbt.type_string()}, + {"name": "campaign_applicable_budget_rule_name", "datatype": dbt.type_string()}, + {"name": "campaign_bidding_strategy", "datatype": dbt.type_string()}, + {"name": "campaign_budget_amount", "datatype": dbt.type_float()}, + {"name": "campaign_budget_currency_code", "datatype": dbt.type_string()}, + {"name": "campaign_budget_type", "datatype": dbt.type_string()}, + {"name": "campaign_id", "datatype": dbt.type_int()}, + {"name": "campaign_rule_based_budget_amount", "datatype": dbt.type_float()}, + {"name": "clicks", "datatype": dbt.type_int()}, + {"name": "cost", "datatype": dbt.type_float()}, + {"name": "date", "datatype": "date"}, + {"name": "impressions", "datatype": dbt.type_int()}, + {"name": "purchases_30_d", "datatype": dbt.type_int()}, + {"name": "sales_30_d", "datatype": dbt.type_float()} +] %} + +{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #} +{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__campaign_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_keyword_history_columns.sql b/macros/staging/get_keyword_history_columns.sql new file mode 100644 index 0000000..dc32c8f --- /dev/null +++ b/macros/staging/get_keyword_history_columns.sql @@ -0,0 +1,20 @@ +{% macro get_keyword_history_columns() %} + +{% set columns = [ + {"name": "ad_group_id", "datatype": dbt.type_int()}, + {"name": "bid", "datatype": dbt.type_float()}, + {"name": "campaign_id", "datatype": dbt.type_int()}, + {"name": "creation_date", "datatype": dbt.type_timestamp()}, + {"name": "id", "datatype": dbt.type_string()}, + {"name": "keyword_text", "datatype": dbt.type_string()}, + {"name": "last_updated_date", "datatype": dbt.type_timestamp()}, + {"name": "match_type", "datatype": dbt.type_string()}, + {"name": "native_language_keyword", "datatype": dbt.type_string()}, + {"name": "serving_status", "datatype": dbt.type_string()}, + {"name": "state", "datatype": dbt.type_string()}, + {"name": "native_language_locale", "datatype": dbt.type_string()} +] %} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_portfolio_history_columns.sql b/macros/staging/get_portfolio_history_columns.sql new file mode 100644 index 0000000..bac28e5 --- /dev/null +++ b/macros/staging/get_portfolio_history_columns.sql @@ -0,0 +1,21 @@ +{% macro get_portfolio_history_columns() %} + +{% set columns = [ + {"name": "budget_amount", "datatype": dbt.type_float()}, + {"name": "budget_currency_code", "datatype": dbt.type_string()}, + {"name": "budget_end_date", "datatype": "date"}, + {"name": "budget_policy", "datatype": dbt.type_string()}, + {"name": "budget_start_date", "datatype": "date"}, + {"name": "creation_date", "datatype": dbt.type_timestamp()}, + {"name": "id", "datatype": dbt.type_int()}, + {"name": "in_budget", "datatype": "boolean"}, + {"name": "last_updated_date", "datatype": dbt.type_timestamp()}, + {"name": "name", "datatype": dbt.type_string()}, + {"name": "profile_id", "datatype": dbt.type_int()}, + {"name": "serving_status", "datatype": dbt.type_string()}, + {"name": "state", "datatype": dbt.type_string()} +] %} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_product_ad_history_columns.sql b/macros/staging/get_product_ad_history_columns.sql new file mode 100644 index 0000000..36b5c99 --- /dev/null +++ b/macros/staging/get_product_ad_history_columns.sql @@ -0,0 +1,17 @@ +{% macro get_product_ad_history_columns() %} + +{% set columns = [ + {"name": "ad_group_id", "datatype": dbt.type_int()}, + {"name": "asin", "datatype": dbt.type_string()}, + {"name": "campaign_id", "datatype": dbt.type_int()}, + {"name": "creation_date", "datatype": dbt.type_timestamp()}, + {"name": "id", "datatype": dbt.type_string()}, + {"name": "last_updated_date", "datatype": dbt.type_timestamp()}, + {"name": "serving_status", "datatype": dbt.type_string()}, + {"name": "sku", "datatype": dbt.type_string()}, + {"name": "state", "datatype": dbt.type_string()} +] %} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_profile_columns.sql b/macros/staging/get_profile_columns.sql new file mode 100644 index 0000000..6670012 --- /dev/null +++ b/macros/staging/get_profile_columns.sql @@ -0,0 +1,20 @@ +{% macro get_profile_columns() %} + +{% set columns = [ + {"name": "id", "datatype": dbt.type_int()}, + {"name": "account_id", "datatype": dbt.type_string()}, + {"name": "account_marketplace_string_id", "datatype": dbt.type_string()}, + {"name": "account_name", "datatype": dbt.type_string()}, + {"name": "account_sub_type", "datatype": dbt.type_string()}, + {"name": "account_type", "datatype": dbt.type_string()}, + {"name": "account_valid_payment_method", "datatype": dbt.type_boolean()}, + {"name": "country_code", "datatype": dbt.type_string()}, + {"name": "currency_code", "datatype": dbt.type_string()}, + {"name": "daily_budget", "datatype": dbt.type_int()}, + {"name": "timezone", "datatype": dbt.type_string()}, + {"name": "_fivetran_deleted", "datatype": dbt.type_boolean()} +] %} + +{{ return(columns) }} + +{% endmacro %} \ No newline at end of file diff --git a/macros/staging/get_search_term_ad_keyword_report_columns.sql b/macros/staging/get_search_term_ad_keyword_report_columns.sql new file mode 100644 index 0000000..35900c4 --- /dev/null +++ b/macros/staging/get_search_term_ad_keyword_report_columns.sql @@ -0,0 +1,27 @@ +{% macro get_search_term_ad_keyword_report_columns() %} + +{% set columns = [ + {"name": "ad_group_id", "datatype": dbt.type_int()}, + {"name": "ad_keyword_status", "datatype": dbt.type_string()}, + {"name": "campaign_budget_amount", "datatype": dbt.type_float()}, + {"name": "campaign_budget_currency_code", "datatype": dbt.type_string()}, + {"name": "campaign_budget_type", "datatype": dbt.type_string()}, + {"name": "campaign_id", "datatype": dbt.type_int()}, + {"name": "clicks", "datatype": dbt.type_int()}, + {"name": "cost", "datatype": dbt.type_float()}, + {"name": "date", "datatype": "date"}, + {"name": "impressions", "datatype": dbt.type_int()}, + {"name": "keyword_bid", "datatype": dbt.type_float()}, + {"name": "keyword_id", "datatype": dbt.type_int()}, + {"name": "search_term", "datatype": dbt.type_string()}, + {"name": "targeting", "datatype": dbt.type_string()}, + {"name": "purchases_30_d", "datatype": dbt.type_int()}, + {"name": "sales_30_d", "datatype": dbt.type_float()} +] %} + +{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #} +{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__search_term_ad_keyword_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }} + +{{ return(columns) }} + +{% endmacro %} diff --git a/macros/staging/get_targeting_keyword_report_columns.sql b/macros/staging/get_targeting_keyword_report_columns.sql new file mode 100644 index 0000000..24b557a --- /dev/null +++ b/macros/staging/get_targeting_keyword_report_columns.sql @@ -0,0 +1,28 @@ +{% macro get_targeting_keyword_report_columns() %} + +{% set columns = [ + {"name": "ad_group_id", "datatype": dbt.type_int()}, + {"name": "ad_keyword_status", "datatype": dbt.type_string()}, + {"name": "campaign_budget_amount", "datatype": dbt.type_float()}, + {"name": "campaign_budget_currency_code", "datatype": dbt.type_string()}, + {"name": "campaign_budget_type", "datatype": dbt.type_string()}, + {"name": "campaign_id", "datatype": dbt.type_int()}, + {"name": "clicks", "datatype": dbt.type_int()}, + {"name": "cost", "datatype": dbt.type_float()}, + {"name": "date", "datatype": "date"}, + {"name": "impressions", "datatype": dbt.type_int()}, + {"name": "keyword_bid", "datatype": dbt.type_float()}, + {"name": "keyword_id", "datatype": dbt.type_int()}, + {"name": "keyword_type", "datatype": dbt.type_string()}, + {"name": "match_type", "datatype": dbt.type_string()}, + {"name": "targeting", "datatype": dbt.type_string()}, + {"name": "purchases_30_d", "datatype": dbt.type_int()}, + {"name": "sales_30_d", "datatype": dbt.type_float()} +] %} + +{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #} +{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__targeting_keyword_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }} + +{{ return(columns) }} + +{% endmacro %} diff --git a/models/amazon_ads.yml b/models/amazon_ads.yml index fc8307e..4f256d7 100644 --- a/models/amazon_ads.yml +++ b/models/amazon_ads.yml @@ -3,12 +3,6 @@ version: 2 models: - name: amazon_ads__account_report description: Each record in this table represents the daily performance at the account level. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - source_relation - - date_day - - profile_id columns: - name: source_relation description: "{{ doc('source_relation') }}" @@ -39,12 +33,6 @@ models: - name: amazon_ads__ad_group_report description: Each record in this table represents the daily performance at the ad group level. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - source_relation - - date_day - - ad_group_id columns: - name: source_relation description: "{{ doc('source_relation') }}" @@ -93,12 +81,6 @@ models: - name: amazon_ads__ad_report description: Each record in this table represents the daily performance at the ad level. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - source_relation - - date_day - - ad_id columns: - name: source_relation description: "{{ doc('source_relation') }}" @@ -155,12 +137,6 @@ models: - name: amazon_ads__campaign_report description: Each record in this table represents the daily performance at the campaign level. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - source_relation - - date_day - - campaign_id columns: - name: source_relation description: "{{ doc('source_relation') }}" @@ -205,12 +181,6 @@ models: - name: amazon_ads__portfolio_report description: Each record in this table represents the daily performance at the portfolio level. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - source_relation - - date_day - - portfolio_id columns: - name: source_relation description: "{{ doc('source_relation') }}" @@ -259,12 +229,6 @@ models: - name: amazon_ads__keyword_report description: Each record in this table represents the daily performance at the keyword level. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - source_relation - - date_day - - keyword_id columns: - name: source_relation description: "{{ doc('source_relation') }}" @@ -319,13 +283,6 @@ models: - name: amazon_ads__search_report description: Each record in this table represents the daily performance at the search term level. - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - source_relation - - date_day - - search_term - - keyword_id columns: - name: source_relation description: "{{ doc('source_relation') }}" diff --git a/models/amazon_ads__account_report.sql b/models/amazon_ads__account_report.sql index 487a7a3..f4faafd 100644 --- a/models/amazon_ads__account_report.sql +++ b/models/amazon_ads__account_report.sql @@ -3,18 +3,18 @@ with report as ( select * --use campaign report since account report not provided - from {{ var('campaign_level_report') }} + from {{ ref('stg_amazon_ads__campaign_level_report') }} ), account_info as ( select * - from {{ var('profile') }} + from {{ ref('stg_amazon_ads__profile') }} where _fivetran_deleted = False ), campaigns as ( select * - from {{ var('campaign_history') }} + from {{ ref('stg_amazon_ads__campaign_history') }} where is_most_recent_record = True ), diff --git a/models/amazon_ads__ad_group_report.sql b/models/amazon_ads__ad_group_report.sql index 049725a..e38d3c0 100644 --- a/models/amazon_ads__ad_group_report.sql +++ b/models/amazon_ads__ad_group_report.sql @@ -2,12 +2,12 @@ with report as ( select * - from {{ var('ad_group_level_report') }} + from {{ ref('stg_amazon_ads__ad_group_level_report') }} ), account_info as ( select * - from {{ var('profile') }} + from {{ ref('stg_amazon_ads__profile') }} where _fivetran_deleted = False ), @@ -18,13 +18,13 @@ portfolios as ( campaigns as ( select * - from {{ var('campaign_history') }} + from {{ ref('stg_amazon_ads__campaign_history') }} where is_most_recent_record = True ), ad_groups as ( select * - from {{ var('ad_group_history') }} + from {{ ref('stg_amazon_ads__ad_group_history') }} where is_most_recent_record = True ), diff --git a/models/amazon_ads__ad_report.sql b/models/amazon_ads__ad_report.sql index b11400e..990f19f 100644 --- a/models/amazon_ads__ad_report.sql +++ b/models/amazon_ads__ad_report.sql @@ -2,12 +2,12 @@ with report as ( select * - from {{ var('advertised_product_report') }} + from {{ ref('stg_amazon_ads__advertised_product_report') }} ), account_info as ( select * - from {{ var('profile') }} + from {{ ref('stg_amazon_ads__profile') }} where _fivetran_deleted = False ), @@ -18,19 +18,19 @@ portfolios as ( campaigns as ( select * - from {{ var('campaign_history') }} + from {{ ref('stg_amazon_ads__campaign_history') }} where is_most_recent_record = True ), ad_groups as ( select * - from {{ var('ad_group_history') }} + from {{ ref('stg_amazon_ads__ad_group_history') }} where is_most_recent_record = True ), ads as ( select * - from {{ var('product_ad_history') }} + from {{ ref('stg_amazon_ads__product_ad_history') }} where is_most_recent_record = True ), diff --git a/models/amazon_ads__campaign_report.sql b/models/amazon_ads__campaign_report.sql index f5177f5..c9b1df0 100644 --- a/models/amazon_ads__campaign_report.sql +++ b/models/amazon_ads__campaign_report.sql @@ -2,12 +2,12 @@ with report as ( select * - from {{ var('campaign_level_report') }} + from {{ ref('stg_amazon_ads__campaign_level_report') }} ), account_info as ( select * - from {{ var('profile') }} + from {{ ref('stg_amazon_ads__profile') }} where _fivetran_deleted = False ), @@ -18,7 +18,7 @@ portfolios as ( campaigns as ( select * - from {{ var('campaign_history') }} + from {{ ref('stg_amazon_ads__campaign_history') }} where is_most_recent_record = True ), diff --git a/models/amazon_ads__keyword_report.sql b/models/amazon_ads__keyword_report.sql index 469b047..14f0fa3 100644 --- a/models/amazon_ads__keyword_report.sql +++ b/models/amazon_ads__keyword_report.sql @@ -2,12 +2,12 @@ with report as ( select * - from {{ var('targeting_keyword_report') }} + from {{ ref('stg_amazon_ads__targeting_keyword_report') }} ), account_info as ( select * - from {{ var('profile') }} + from {{ ref('stg_amazon_ads__profile') }} where _fivetran_deleted = False ), @@ -18,19 +18,19 @@ portfolios as ( campaigns as ( select * - from {{ var('campaign_history') }} + from {{ ref('stg_amazon_ads__campaign_history') }} where is_most_recent_record = True ), ad_groups as ( select * - from {{ var('ad_group_history') }} + from {{ ref('stg_amazon_ads__ad_group_history') }} where is_most_recent_record = True ), keywords as ( select * - from {{ var('keyword_history') }} + from {{ ref('stg_amazon_ads__keyword_history') }} where is_most_recent_record = True ), diff --git a/models/amazon_ads__portfolio_report.sql b/models/amazon_ads__portfolio_report.sql index 3e71419..5d46c12 100644 --- a/models/amazon_ads__portfolio_report.sql +++ b/models/amazon_ads__portfolio_report.sql @@ -3,24 +3,24 @@ with report as ( select * --use campaign report since portfolio report not provided - from {{ var('campaign_level_report') }} + from {{ ref('stg_amazon_ads__campaign_level_report') }} ), account_info as ( select * - from {{ var('profile') }} + from {{ ref('stg_amazon_ads__profile') }} where _fivetran_deleted = False ), portfolios as ( select * - from {{ var('portfolio_history') }} + from {{ ref('stg_amazon_ads__portfolio_history') }} where is_most_recent_record = True ), campaigns as ( select * - from {{ var('campaign_history') }} + from {{ ref('stg_amazon_ads__campaign_history') }} where is_most_recent_record = True ), diff --git a/models/amazon_ads__search_report.sql b/models/amazon_ads__search_report.sql index 6f65846..42673d4 100644 --- a/models/amazon_ads__search_report.sql +++ b/models/amazon_ads__search_report.sql @@ -2,12 +2,12 @@ with report as ( select * - from {{ var('search_term_ad_keyword_report') }} + from {{ ref('stg_amazon_ads__search_term_ad_keyword_report') }} ), account_info as ( select * - from {{ var('profile') }} + from {{ ref('stg_amazon_ads__profile') }} where _fivetran_deleted = False ), @@ -18,19 +18,19 @@ portfolios as ( campaigns as ( select * - from {{ var('campaign_history') }} + from {{ ref('stg_amazon_ads__campaign_history') }} where is_most_recent_record = True ), ad_groups as ( select * - from {{ var('ad_group_history') }} + from {{ ref('stg_amazon_ads__ad_group_history') }} where is_most_recent_record = True ), keywords as ( select * - from {{ var('keyword_history') }} + from {{ ref('stg_amazon_ads__keyword_history') }} where is_most_recent_record = True ), diff --git a/models/intermediate/int_amazon_ads__portfolio_history.sql b/models/intermediate/int_amazon_ads__portfolio_history.sql index a659880..5211d99 100644 --- a/models/intermediate/int_amazon_ads__portfolio_history.sql +++ b/models/intermediate/int_amazon_ads__portfolio_history.sql @@ -7,12 +7,12 @@ with portfolios as ( select {% if var('amazon_ads__portfolio_history_enabled', True) %} * - from {{ var('portfolio_history') }} + from {{ ref('stg_amazon_ads__portfolio_history') }} where is_most_recent_record = True {% else %} cast(null as {{ dbt.type_string() }}) as source_relation, {# uses the columns macro from the source package to populate column names #} - {%- set columns = amazon_ads_source.get_portfolio_history_columns() -%} + {%- set columns = amazon_ads.get_portfolio_history_columns() -%} {% for column in columns %} {# set null for each column #} {%- if column['name'] == 'id' -%} diff --git a/models/staging/docs.md b/models/staging/docs.md new file mode 100644 index 0000000..36d45a8 --- /dev/null +++ b/models/staging/docs.md @@ -0,0 +1,187 @@ +{% docs _fivetran_deleted %} +Boolean created by Fivetran to indicate whether the record has been deleted. +{% enddocs %} + +{% docs _fivetran_id %} +Unique ID used by Fivetran to sync and dedupe data. +{% enddocs %} + +{% docs _fivetran_synced %} +Timestamp of when a record was last synced. +{% enddocs %} + +{% docs account_id %} +Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces. +{% enddocs %} + +{% docs account_name %} +Account Name. Not currently populated for sellers. +{% enddocs %} + +{% docs ad_group_id %} +The ID of the AdGroup. +{% enddocs %} + +{% docs ad_group_name %} +The name of the AdGroup. +{% enddocs %} + +{% docs ad_id %} +The ID of the Ad. +{% enddocs %} + +{% docs ad_keyword_status %} +Current status of a keyword. +{% enddocs %} + +{% docs advertised_asin %} +The ASIN associated to an advertised product. +{% enddocs %} + +{% docs advertised_sku %} +The SKU being advertised. +{% enddocs %} + +{% docs bid_keyword %} +Bid associated with this keyword. +{% enddocs %} + +{% docs campaign_applicable_budget_rule_id %} +The ID associated to the active budget rule for a campaign. +{% enddocs %} + +{% docs campaign_applicable_budget_rule_name %} +The name associated to the active budget rule for a campaign. +{% enddocs %} + +{% docs campaign_bidding_strategy %} +The bidding strategy associated with a campaign. +{% enddocs %} + +{% docs campaign_budget_amount %} +Total budget allocated to the campaign. +{% enddocs %} + +{% docs campaign_budget_currency_code %} +The currency code associated with the campaign. +{% enddocs %} + +{% docs campaign_budget_type %} +One of: daily or lifetime. +{% enddocs %} + +{% docs campaign_id %} +The ID of the Campaign. +{% enddocs %} + +{% docs campaign_name %} +The name of the Campaign. +{% enddocs %} + +{% docs campaign_rule_based_budget_amount %} +The value of the rule-based budget for a campaign. +{% enddocs %} + +{% docs clicks %} +Total number of ad clicks. +{% enddocs %} + +{% docs cost %} +Total cost of ad clicks. +{% enddocs %} + +{% docs country_code %} +The code for a given country. +{% enddocs %} + +{% docs creation_date %} +The date of creation of the record. +{% enddocs %} + +{% docs currency_code %} +The currency used for all monetary values for entities under this profile. +{% enddocs %} + +{% docs default_bid %} +The date of creation of the record. +{% enddocs %} + +{% docs impressions %} +Total number of ad impressions. +{% enddocs %} + +{% docs is_most_recent_record %} +Boolean indicating whether record was the most recent instance. +{% enddocs %} + +{% docs keyword_bid %} +Bid associated with a keyword or targeting expression. +{% enddocs %} + +{% docs keyword_id %} +The ID of the keyword. +{% enddocs %} + +{% docs keyword_match_type %} +One of (broad, exact, or phrase.) +{% enddocs %} + +{% docs keyword_type %} +Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT. +{% enddocs %} + +{% docs last_updated_date %} +Date of last update to record. +{% enddocs %} + +{% docs match_type %} +Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT. +{% enddocs %} + +{% docs negative_keyword_id %} +The ID of the negative keyword. +{% enddocs %} + +{% docs portfolio_id %} +The ID of the Portfolio. +{% enddocs %} + +{% docs portfolio_name %} +The name of the Portfolio. +{% enddocs %} + +{% docs profile_id %} +The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace. +{% enddocs %} + +{% docs report_date %} +The date of the report. +{% enddocs %} + +{% docs search_term %} +The search term used by the customer. +{% enddocs %} + +{% docs serving_status %} +The current serving status of the record. +{% enddocs %} + +{% docs state %} +The state of the record (enabled, paused, or archived). +{% enddocs %} + +{% docs targeting %} +A string representation of the expression object used in the targeting clause. +{% enddocs %} + +{% docs source_relation %} +The source of the record if the unioning functionality is being used. If not this field will be empty. +{% enddocs %} + +{% docs purchases_30_d %} +Number of attributed conversion events occurring within 30 days of an ad click. +{% enddocs %} + +{% docs sales_30_d %} +Total value of sales occurring within 30 days of an ad click. +{% enddocs %} \ No newline at end of file diff --git a/models/staging/src_amazon_ads.yml b/models/staging/src_amazon_ads.yml new file mode 100644 index 0000000..4e4fc9e --- /dev/null +++ b/models/staging/src_amazon_ads.yml @@ -0,0 +1,369 @@ +version: 2 + +sources: + - name: amazon_ads # This source will only be used if you are using a single amazon_ads source connector. If multiple sources are being unioned, their tables will be directly referenced via adapter.get_relation. + schema: "{{ var('amazon_ads_schema', 'amazon_ads') }}" + database: "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}" + + loader: Fivetran + + config: + loaded_at_field: _fivetran_synced + enabled: "{{ var('ad_reporting__amazon_ads_enabled', true) }}" + freshness: + warn_after: {count: 48, period: hour} + error_after: {count: 168, period: hour} + + tables: + - name: ad_group_history + description: Each record represents an ad group in Amazon Ads. + identifier: "{{ var('amazon_ads_ad_group_history_identifier', 'ad_group_history') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: id + description: "{{ doc('ad_group_id') }}" + - name: name + description: "{{ doc('ad_group_name') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: default_bid + description: "{{ doc('default_bid') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + + - name: ad_group_level_report + description: Each record in this table represents the daily performance by Amazon ad group. + identifier: "{{ var('amazon_ads_ad_group_level_report_identifier', 'ad_group_level_report') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: date + description: "{{ doc('report_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: campaign_bidding_strategy + description: "{{ doc('campaign_bidding_strategy') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: advertised_product_report + description: Advertised product reports contain performance data for products that are advertised as part of your campaigns. + identifier: "{{ var('amazon_ads_advertised_product_report_identifier', 'advertised_product_report') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: date + description: "{{ doc('report_date') }}" + - name: ad_id + description: "{{ doc('ad_group_id') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: advertised_asin + description: "{{ doc('advertised_asin') }}" + - name: advertised_sku + description: "{{ doc('advertised_sku') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: campaign_history + description: Each record represents a campaign in Amazon Ads. + identifier: "{{ var('amazon_ads_campaign_history_identifier', 'campaign_history') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: id + description: "{{ doc('campaign_id') }}" + - name: name + description: "{{ doc('campaign_name') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: portfolio_id + description: "{{ doc('portfolio_id') }}" + - name: bidding_strategy + description: The bidding strategy associated with a campaign (legacyForSales, autoForSales, or manual.) + - name: budget + description: The budget for the campaign. + - name: budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: effective_budget + description: Adjusted budget for the campaign that has been impacted by a budget rule. + - name: end_date + description: The end date of the campaign. + - name: profile_id + description: "{{ doc('profile_id') }}" + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: start_date + description: The start date of the campaign. + - name: state + description: "{{ doc('state') }}" + - name: targeting_type + description: The type of targeting used for the campaign, either manual or auto. + + - name: campaign_level_report + description: Each record in this table represents the daily performance by Amazon campaign. + identifier: "{{ var('amazon_ads_campaign_level_report_identifier', 'campaign_level_report') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: date + description: "{{ doc('report_date') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: campaign_applicable_budget_rule_id + description: "{{ doc('campaign_applicable_budget_rule_id') }}" + - name: campaign_applicable_budget_rule_name + description: "{{ doc('campaign_applicable_budget_rule_name') }}" + - name: campaign_bidding_strategy + description: "{{ doc('campaign_bidding_strategy') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: campaign_rule_based_budget_amount + description: "{{ doc('campaign_rule_based_budget_amount') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: keyword_history + description: Each record represents a keyword in Amazon Ads. + identifier: "{{ var('amazon_ads_keyword_history_identifier', 'keyword_history') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: id + description: "{{ doc('keyword_id') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: bid + description: "{{ doc('bid_keyword') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: keyword_text + description: The exact text for the keyword. + - name: match_type + description: "{{ doc('keyword_match_type') }}" + - name: native_language_keyword + description: The unlocalized keyword text in the preferred locale of the advertiser. + - name: native_language_locale + description: The preferred language locale of the advertiser. + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + + - name: portfolio_history + description: Each record represents a portfolio in Amazon Ads. + identifier: "{{ var('amazon_ads_portfolio_history_identifier', 'portfolio_history') }}" + config: + enabled: "{{ var('ad_reporting__amazon_ads_enabled', true) and var('amazon_ads__portfolio_history_enabled', true) }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: id + description: "{{ doc('portfolio_id') }}" + - name: name + description: "{{ doc('portfolio_name') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: budget_amount + description: The budget amount associated with the portfolio. Cannot be null. + - name: budget_currency_code + description: The currency used for all monetary values for entities under this profile. Cannot be null. + - name: budget_end_date + description: The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring. + - name: budget_start_date + description: The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set. + - name: budget_policy + description: The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null. + - name: in_budget + description: Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget. + - name: profile_id + description: "{{ doc('profile_id') }}" + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + + - name: product_ad_history + description: Each record represents a product in Amazon Ads. + identifier: "{{ var('amazon_ads_product_ad_history_identifier', 'product_ad_history') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: id + description: "{{ doc('ad_id') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: asin + description: The Amazon Standard Identification Number (ASIN) associated with the ad. + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: sku + description: The product SKU associated with the ad. + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + + - name: profile + description: Each record represents a profile. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace. + identifier: "{{ var('amazon_ads_profile_identifier', 'profile') }}" + columns: + - name: _fivetran_deleted + description: "{{ doc('_fivetran_deleted') }}" + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: id + description: ID of the profile. + - name: account_id + description: Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplace. + - name: account_marketplace_string_id + description: The identifier of the marketplace to which the account is associated. + - name: account_name + description: Account Name. Not currently populated for sellers. + - name: account_sub_type + description: The account subtype. + - name: account_type + description: One of seller, vendor, or agency. + - name: account_valid_payment_method + description: For Vendors, this returns if the Advertiser has set up a valid payment method. + - name: country_code + description: The code for a given country. + - name: currency_code + description: The currency used for all monetary values for entities under this profile. + - name: daily_budget + description: Daily budget for Sponsored Product campaigns for seller type accounts. + - name: timezone + description: The time zone used for all date-based campaign management and reporting. + + - name: targeting_keyword_report + description: Targeting reports contain performance metrics broken down by both targeting expressions and keywords. + identifier: "{{ var('amazon_ads_targeting_keyword_report_identifier', 'targeting_keyword_report') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: date + description: "{{ doc('report_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: ad_keyword_status + description: "{{ doc('ad_keyword_status') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: keyword_bid + description: "{{ doc('keyword_bid') }}" + - name: keyword_id + description: "{{ doc('keyword_id') }}" + - name: keyword_type + description: "{{ doc('keyword_type') }}" + - name: match_type + description: "{{ doc('match_type') }}" + - name: targeting + description: "{{ doc('targeting') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: search_term_ad_keyword_report + description: Search term reports contain search term performance metrics broken down by targeting expressions and keywords. + identifier: "{{ var('amazon_ads_search_term_ad_keyword_report_identifier', 'search_term_ad_keyword_report') }}" + columns: + - name: _fivetran_synced + description: "{{ doc('_fivetran_synced') }}" + - name: date + description: "{{ doc('report_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: keyword_id + description: "{{ doc('keyword_id') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: keyword_bid + description: "{{ doc('keyword_bid') }}" + - name: search_term + description: "{{ doc('search_term') }}" + - name: targeting + description: "{{ doc('targeting') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" diff --git a/models/staging/stg_amazon_ads.yml b/models/staging/stg_amazon_ads.yml new file mode 100644 index 0000000..f18f5ce --- /dev/null +++ b/models/staging/stg_amazon_ads.yml @@ -0,0 +1,376 @@ +version: 2 + +models: + - name: stg_amazon_ads__ad_group_history + description: Each record represents an ad group in Amazon Ads. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + tests: + - not_null + - name: ad_group_name + description: "{{ doc('ad_group_name') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: default_bid + description: "{{ doc('default_bid') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + - name: is_most_recent_record + description: "{{ doc('is_most_recent_record') }}" + + - name: stg_amazon_ads__ad_group_level_report + description: Each record in this table represents the daily performance by Amazon ad group. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: date_day + description: "{{ doc('report_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + tests: + - not_null + - name: campaign_bidding_strategy + description: "{{ doc('campaign_bidding_strategy') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: stg_amazon_ads__advertised_product_report + description: Advertised product reports contain performance data for products that are advertised as part of your campaigns. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: date_day + description: "{{ doc('report_date') }}" + - name: ad_id + description: "{{ doc('ad_group_id') }}" + tests: + - not_null + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: advertised_asin + description: "{{ doc('advertised_asin') }}" + - name: advertised_sku + description: "{{ doc('advertised_sku') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: stg_amazon_ads__campaign_history + description: Each record represents a campaign in Amazon Ads. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + tests: + - not_null + - name: campaign_name + description: "{{ doc('campaign_name') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: portfolio_id + description: "{{ doc('portfolio_id') }}" + - name: bidding_strategy + description: The bidding strategy associated with a campaign (legacyForSales, autoForSales, or manual.) + - name: budget + description: The budget for the campaign. + - name: budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: effective_budget + description: Adjusted budget for the campaign that has been impacted by a budget rule. + - name: end_date + description: The end date of the campaign. + - name: profile_id + description: "{{ doc('profile_id') }}" + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: start_date + description: The start date of the campaign. + - name: state + description: "{{ doc('state') }}" + - name: targeting_type + description: The type of targeting used for the campaign, either manual or auto. + - name: is_most_recent_record + description: "{{ doc('is_most_recent_record') }}" + + - name: stg_amazon_ads__campaign_level_report + description: Campaign reports contain performance data broken down at the campaign level. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: date_day + description: "{{ doc('report_date') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + tests: + - not_null + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: campaign_applicable_budget_rule_id + description: "{{ doc('campaign_applicable_budget_rule_id') }}" + - name: campaign_applicable_budget_rule_name + description: "{{ doc('campaign_applicable_budget_rule_name') }}" + - name: campaign_bidding_strategy + description: "{{ doc('campaign_bidding_strategy') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: campaign_rule_based_budget_amount + description: "{{ doc('campaign_rule_based_budget_amount') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: stg_amazon_ads__keyword_history + description: Each record represents a keyword in Amazon Ads. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: keyword_id + description: "{{ doc('keyword_id') }}" + tests: + - not_null + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: bid + description: "{{ doc('bid_keyword') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: keyword_text + description: The exact text for the keyword. + - name: match_type + description: "{{ doc('keyword_match_type') }}" + - name: native_language_keyword + description: The unlocalized keyword text in the preferred locale of the advertiser. + - name: native_language_locale + description: The preferred language locale of the advertiser. + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + - name: is_most_recent_record + description: "{{ doc('is_most_recent_record') }}" + + - name: stg_amazon_ads__portfolio_history + description: Each record represents a portfolio in Amazon Ads. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: portfolio_id + description: "{{ doc('portfolio_id') }}" + tests: + - not_null + - name: portfolio_name + description: "{{ doc('portfolio_name') }}" + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: budget_amount + description: The budget amount associated with the portfolio. Cannot be null. + - name: budget_currency_code + description: The currency used for all monetary values for entities under this profile. Cannot be null. + - name: budget_end_date + description: The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring. + - name: budget_start_date + description: The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set. + - name: budget_policy + description: The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null. + - name: in_budget + description: Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget. + - name: profile_id + description: "{{ doc('profile_id') }}" + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + - name: is_most_recent_record + description: "{{ doc('is_most_recent_record') }}" + + - name: stg_amazon_ads__product_ad_history + description: Each record represents a product in Amazon Ads. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: ad_id + description: "{{ doc('ad_id') }}" + tests: + - not_null + - name: last_updated_date + description: "{{ doc('last_updated_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: asin + description: The ASIN associated with the ad. + - name: creation_date + description: "{{ doc('creation_date') }}" + - name: sku + description: The product SKU associated with the ad. + - name: serving_status + description: "{{ doc('serving_status') }}" + - name: state + description: "{{ doc('state') }}" + - name: is_most_recent_record + description: "{{ doc('is_most_recent_record') }}" + + - name: stg_amazon_ads__profile + description: Each record represents a profile. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: _fivetran_deleted + description: "{{ doc('_fivetran_deleted') }}" + - name: profile_id + description: "{{ doc('profile_id') }}" + tests: + - not_null + - name: account_id + description: "{{ doc('account_id') }}" + - name: account_marketplace_string_id + description: The identifier of the marketplace to which the account is associated. + - name: account_name + description: "{{ doc('account_name') }}" + - name: account_sub_type + description: The account subtype. + - name: account_type + description: One of seller, vendor, or agency. + - name: account_valid_payment_method + description: For Vendors, this returns if the Advertiser has set up a valid payment method. + - name: country_code + description: "{{ doc('country_code') }}" + - name: currency_code + description: "{{ doc('currency_code') }}" + - name: daily_budget + description: Daily budget for Sponsored Product campaigns for seller type accounts. + - name: timezone + description: The time zone used for all date-based campaign management and reporting. + + - name: stg_amazon_ads__targeting_keyword_report + description: Targeting reports contain performance metrics broken down by both targeting expressions and keywords. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: date_day + description: "{{ doc('report_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: ad_keyword_status + description: "{{ doc('ad_keyword_status') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: keyword_bid + description: "{{ doc('keyword_bid') }}" + - name: keyword_id + description: "{{ doc('keyword_id') }}" + tests: + - not_null + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: keyword_type + description: "{{ doc('keyword_type') }}" + - name: match_type + description: "{{ doc('match_type') }}" + - name: targeting + description: "{{ doc('targeting') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" + + - name: stg_amazon_ads__search_term_ad_keyword_report + description: Search term reports contain search term performance metrics broken down by targeting expressions and keywords. + columns: + - name: source_relation + description: "{{ doc('source_relation') }}" + - name: date_day + description: "{{ doc('report_date') }}" + - name: ad_group_id + description: "{{ doc('ad_group_id') }}" + - name: ad_keyword_status + description: "{{ doc('ad_keyword_status') }}" + - name: campaign_budget_amount + description: "{{ doc('campaign_budget_amount') }}" + - name: campaign_budget_currency_code + description: "{{ doc('campaign_budget_currency_code') }}" + - name: campaign_budget_type + description: "{{ doc('campaign_budget_type') }}" + - name: campaign_id + description: "{{ doc('campaign_id') }}" + - name: keyword_bid + description: "{{ doc('keyword_bid') }}" + - name: keyword_id + description: "{{ doc('keyword_id') }}" + - name: clicks + description: "{{ doc('clicks') }}" + - name: impressions + description: "{{ doc('impressions') }}" + - name: cost + description: "{{ doc('cost') }}" + - name: search_term + description: "{{ doc('search_term') }}" + tests: + - not_null + - name: targeting + description: "{{ doc('targeting') }}" + - name: purchases_30_d + description: "{{ doc('purchases_30_d') }}" + - name: sales_30_d + description: "{{ doc('sales_30_d') }}" \ No newline at end of file diff --git a/models/staging/stg_amazon_ads__ad_group_history.sql b/models/staging/stg_amazon_ads__ad_group_history.sql new file mode 100644 index 0000000..aa9da60 --- /dev/null +++ b/models/staging/stg_amazon_ads__ad_group_history.sql @@ -0,0 +1,44 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__ad_group_history_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__ad_group_history_tmp')), + staging_columns=get_ad_group_history_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(id as {{ dbt.type_string() }}) as ad_group_id, + cast(campaign_id as {{ dbt.type_string() }}) as campaign_id, + creation_date, + default_bid, + last_updated_date, + name as ad_group_name, + serving_status, + state, + row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__ad_group_level_report.sql b/models/staging/stg_amazon_ads__ad_group_level_report.sql new file mode 100644 index 0000000..e4ce5b2 --- /dev/null +++ b/models/staging/stg_amazon_ads__ad_group_level_report.sql @@ -0,0 +1,45 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} +with base as ( + + select * + from {{ ref('stg_amazon_ads__ad_group_level_report_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__ad_group_level_report_tmp')), + staging_columns=get_ad_group_level_report_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id, + campaign_bidding_strategy, + clicks, + cost, + date as date_day, + impressions, + purchases_30_d, + sales_30_d + + {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__ad_group_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }} + + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__advertised_product_report.sql b/models/staging/stg_amazon_ads__advertised_product_report.sql new file mode 100644 index 0000000..3bc8ba2 --- /dev/null +++ b/models/staging/stg_amazon_ads__advertised_product_report.sql @@ -0,0 +1,52 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__advertised_product_report_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__advertised_product_report_tmp')), + staging_columns=get_advertised_product_report_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(ad_id as {{ dbt.type_string() }}) as ad_id, + cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id, + advertised_asin, + advertised_sku, + campaign_budget_amount, + campaign_budget_currency_code, + campaign_budget_type, + cast(campaign_id as {{ dbt.type_string() }}) as campaign_id, + clicks, + cost, + date as date_day, + impressions, + purchases_30_d, + sales_30_d + + {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__advertised_product_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }} + + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__campaign_history.sql b/models/staging/stg_amazon_ads__campaign_history.sql new file mode 100644 index 0000000..97a0e1c --- /dev/null +++ b/models/staging/stg_amazon_ads__campaign_history.sql @@ -0,0 +1,51 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__campaign_history_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__campaign_history_tmp')), + staging_columns=get_campaign_history_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(id as {{ dbt.type_string() }}) as campaign_id, + last_updated_date, + bidding_strategy, + creation_date, + end_date, + name as campaign_name, + cast(portfolio_id as {{ dbt.type_string() }}) as portfolio_id, + cast(profile_id as {{ dbt.type_string() }}) as profile_id, + serving_status, + start_date, + state, + targeting_type, + budget, + budget_type, + effective_budget, + row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__campaign_level_report.sql b/models/staging/stg_amazon_ads__campaign_level_report.sql new file mode 100644 index 0000000..cdab605 --- /dev/null +++ b/models/staging/stg_amazon_ads__campaign_level_report.sql @@ -0,0 +1,52 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__campaign_level_report_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__campaign_level_report_tmp')), + staging_columns=get_campaign_level_report_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + campaign_applicable_budget_rule_id, + campaign_applicable_budget_rule_name, + campaign_bidding_strategy, + campaign_budget_amount, + campaign_budget_currency_code, + campaign_budget_type, + cast(campaign_id as {{ dbt.type_string() }}) as campaign_id, + campaign_rule_based_budget_amount, + clicks, + cost, + date as date_day, + impressions, + purchases_30_d, + sales_30_d + + {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__campaign_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }} + + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__keyword_history.sql b/models/staging/stg_amazon_ads__keyword_history.sql new file mode 100644 index 0000000..6287e7f --- /dev/null +++ b/models/staging/stg_amazon_ads__keyword_history.sql @@ -0,0 +1,48 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__keyword_history_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__keyword_history_tmp')), + staging_columns=get_keyword_history_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(id as {{ dbt.type_string() }}) as keyword_id, + cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id, + bid, + cast(campaign_id as {{ dbt.type_string() }}) as campaign_id, + creation_date, + keyword_text, + last_updated_date, + match_type, + native_language_keyword, + serving_status, + state, + native_language_locale, + row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__portfolio_history.sql b/models/staging/stg_amazon_ads__portfolio_history.sql new file mode 100644 index 0000000..6f242ac --- /dev/null +++ b/models/staging/stg_amazon_ads__portfolio_history.sql @@ -0,0 +1,49 @@ +{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__portfolio_history_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__portfolio_history_tmp')), + staging_columns=get_portfolio_history_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(id as {{ dbt.type_string() }}) as portfolio_id, + budget_amount, + budget_currency_code, + budget_end_date, + budget_policy, + budget_start_date, + creation_date, + in_budget, + last_updated_date, + name as portfolio_name, + cast(profile_id as {{ dbt.type_string() }}) as profile_id, + serving_status, + state, + row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__product_ad_history.sql b/models/staging/stg_amazon_ads__product_ad_history.sql new file mode 100644 index 0000000..25568dc --- /dev/null +++ b/models/staging/stg_amazon_ads__product_ad_history.sql @@ -0,0 +1,45 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__product_ad_history_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__product_ad_history_tmp')), + staging_columns=get_product_ad_history_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(id as {{ dbt.type_string() }}) as ad_id, + cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id, + asin, + cast(campaign_id as {{ dbt.type_string() }}) as campaign_id, + creation_date, + last_updated_date, + serving_status, + sku, + state, + row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__profile.sql b/models/staging/stg_amazon_ads__profile.sql new file mode 100644 index 0000000..99d0cd5 --- /dev/null +++ b/models/staging/stg_amazon_ads__profile.sql @@ -0,0 +1,47 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__profile_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__profile_tmp')), + staging_columns=get_profile_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(id as {{ dbt.type_string() }}) as profile_id, + cast(account_id as {{ dbt.type_string() }}) as account_id, + account_marketplace_string_id, + account_name, + account_sub_type, + account_type, + account_valid_payment_method, + country_code, + currency_code, + daily_budget, + timezone, + _fivetran_deleted + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__search_term_ad_keyword_report.sql b/models/staging/stg_amazon_ads__search_term_ad_keyword_report.sql new file mode 100644 index 0000000..692cc68 --- /dev/null +++ b/models/staging/stg_amazon_ads__search_term_ad_keyword_report.sql @@ -0,0 +1,54 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__search_term_ad_keyword_report_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__search_term_ad_keyword_report_tmp')), + staging_columns=get_search_term_ad_keyword_report_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id, + ad_keyword_status, + campaign_budget_amount, + campaign_budget_currency_code, + campaign_budget_type, + cast(campaign_id as {{ dbt.type_string() }}) as campaign_id, + clicks, + cost, + date as date_day, + impressions, + keyword_bid, + cast(keyword_id as {{ dbt.type_string() }}) as keyword_id, + search_term, + targeting, + purchases_30_d, + sales_30_d + + {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__search_term_ad_keyword_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }} + + from fields +) + +select * +from final diff --git a/models/staging/stg_amazon_ads__targeting_keyword_report.sql b/models/staging/stg_amazon_ads__targeting_keyword_report.sql new file mode 100644 index 0000000..89c2adc --- /dev/null +++ b/models/staging/stg_amazon_ads__targeting_keyword_report.sql @@ -0,0 +1,55 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +with base as ( + + select * + from {{ ref('stg_amazon_ads__targeting_keyword_report_tmp') }} +), + +fields as ( + + select + {{ + fivetran_utils.fill_staging_columns( + source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__targeting_keyword_report_tmp')), + staging_columns=get_targeting_keyword_report_columns() + ) + }} + + {{ fivetran_utils.source_relation( + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases') + }} + + from base +), + +final as ( + + select + source_relation, + cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id, + ad_keyword_status, + campaign_budget_amount, + campaign_budget_currency_code, + campaign_budget_type, + cast(campaign_id as {{ dbt.type_string() }}) as campaign_id, + clicks, + cost, + date as date_day, + impressions, + keyword_bid, + cast(keyword_id as {{ dbt.type_string() }}) as keyword_id, + keyword_type, + match_type, + targeting, + purchases_30_d, + sales_30_d + + {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__targeting_keyword_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }} + + from fields +) + +select * +from final diff --git a/models/staging/tmp/stg_amazon_ads__ad_group_history_tmp.sql b/models/staging/tmp/stg_amazon_ads__ad_group_history_tmp.sql new file mode 100644 index 0000000..730dda3 --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__ad_group_history_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='ad_group_history', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='ad_group_history', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql b/models/staging/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql new file mode 100644 index 0000000..ca9761c --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='ad_group_level_report', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='ad_group_level_report', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__advertised_product_report_tmp.sql b/models/staging/tmp/stg_amazon_ads__advertised_product_report_tmp.sql new file mode 100644 index 0000000..5541589 --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__advertised_product_report_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='advertised_product_report', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='advertised_product_report', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__campaign_history_tmp.sql b/models/staging/tmp/stg_amazon_ads__campaign_history_tmp.sql new file mode 100644 index 0000000..4304f0c --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__campaign_history_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='campaign_history', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='campaign_history', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__campaign_level_report_tmp.sql b/models/staging/tmp/stg_amazon_ads__campaign_level_report_tmp.sql new file mode 100644 index 0000000..b43dec2 --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__campaign_level_report_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='campaign_level_report', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='campaign_level_report', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__keyword_history_tmp.sql b/models/staging/tmp/stg_amazon_ads__keyword_history_tmp.sql new file mode 100644 index 0000000..8b092b7 --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__keyword_history_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='keyword_history', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='keyword_history', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__portfolio_history_tmp.sql b/models/staging/tmp/stg_amazon_ads__portfolio_history_tmp.sql new file mode 100644 index 0000000..1715cff --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__portfolio_history_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }} + +{{ + fivetran_utils.union_data( + table_identifier='portfolio_history', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='portfolio_history', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__product_ad_history_tmp.sql b/models/staging/tmp/stg_amazon_ads__product_ad_history_tmp.sql new file mode 100644 index 0000000..4af454f --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__product_ad_history_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='product_ad_history', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='product_ad_history', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__profile_tmp.sql b/models/staging/tmp/stg_amazon_ads__profile_tmp.sql new file mode 100644 index 0000000..c8bbb33 --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__profile_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='profile', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='profile', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql b/models/staging/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql new file mode 100644 index 0000000..e30ed01 --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='search_term_ad_keyword_report', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='search_term_ad_keyword_report', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/models/staging/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql b/models/staging/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql new file mode 100644 index 0000000..de354b9 --- /dev/null +++ b/models/staging/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql @@ -0,0 +1,14 @@ +{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }} + +{{ + fivetran_utils.union_data( + table_identifier='targeting_keyword_report', + database_variable='amazon_ads_database', + schema_variable='amazon_ads_schema', + default_database=target.database, + default_schema='amazon_ads', + default_variable='targeting_keyword_report', + union_schema_variable='amazon_ads_union_schemas', + union_database_variable='amazon_ads_union_databases' + ) +}} \ No newline at end of file diff --git a/packages.yml b/packages.yml index d4db95c..8911cb1 100644 --- a/packages.yml +++ b/packages.yml @@ -1,3 +1,3 @@ packages: - - package: fivetran/amazon_ads_source - version: [">=0.5.0", "<0.6.0"] \ No newline at end of file +- package: fivetran/fivetran_utils + version: [">=0.4.0", "<0.5.0"] From 539fd03788241422fe9bf4d9ffdc1e2edc716e41 Mon Sep 17 00:00:00 2001 From: fivetran-catfritz <111930712+fivetran-catfritz@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:55:00 -0500 Subject: [PATCH 2/8] Delete models/staging/docs.md --- models/staging/docs.md | 187 ----------------------------------------- 1 file changed, 187 deletions(-) delete mode 100644 models/staging/docs.md diff --git a/models/staging/docs.md b/models/staging/docs.md deleted file mode 100644 index 36d45a8..0000000 --- a/models/staging/docs.md +++ /dev/null @@ -1,187 +0,0 @@ -{% docs _fivetran_deleted %} -Boolean created by Fivetran to indicate whether the record has been deleted. -{% enddocs %} - -{% docs _fivetran_id %} -Unique ID used by Fivetran to sync and dedupe data. -{% enddocs %} - -{% docs _fivetran_synced %} -Timestamp of when a record was last synced. -{% enddocs %} - -{% docs account_id %} -Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces. -{% enddocs %} - -{% docs account_name %} -Account Name. Not currently populated for sellers. -{% enddocs %} - -{% docs ad_group_id %} -The ID of the AdGroup. -{% enddocs %} - -{% docs ad_group_name %} -The name of the AdGroup. -{% enddocs %} - -{% docs ad_id %} -The ID of the Ad. -{% enddocs %} - -{% docs ad_keyword_status %} -Current status of a keyword. -{% enddocs %} - -{% docs advertised_asin %} -The ASIN associated to an advertised product. -{% enddocs %} - -{% docs advertised_sku %} -The SKU being advertised. -{% enddocs %} - -{% docs bid_keyword %} -Bid associated with this keyword. -{% enddocs %} - -{% docs campaign_applicable_budget_rule_id %} -The ID associated to the active budget rule for a campaign. -{% enddocs %} - -{% docs campaign_applicable_budget_rule_name %} -The name associated to the active budget rule for a campaign. -{% enddocs %} - -{% docs campaign_bidding_strategy %} -The bidding strategy associated with a campaign. -{% enddocs %} - -{% docs campaign_budget_amount %} -Total budget allocated to the campaign. -{% enddocs %} - -{% docs campaign_budget_currency_code %} -The currency code associated with the campaign. -{% enddocs %} - -{% docs campaign_budget_type %} -One of: daily or lifetime. -{% enddocs %} - -{% docs campaign_id %} -The ID of the Campaign. -{% enddocs %} - -{% docs campaign_name %} -The name of the Campaign. -{% enddocs %} - -{% docs campaign_rule_based_budget_amount %} -The value of the rule-based budget for a campaign. -{% enddocs %} - -{% docs clicks %} -Total number of ad clicks. -{% enddocs %} - -{% docs cost %} -Total cost of ad clicks. -{% enddocs %} - -{% docs country_code %} -The code for a given country. -{% enddocs %} - -{% docs creation_date %} -The date of creation of the record. -{% enddocs %} - -{% docs currency_code %} -The currency used for all monetary values for entities under this profile. -{% enddocs %} - -{% docs default_bid %} -The date of creation of the record. -{% enddocs %} - -{% docs impressions %} -Total number of ad impressions. -{% enddocs %} - -{% docs is_most_recent_record %} -Boolean indicating whether record was the most recent instance. -{% enddocs %} - -{% docs keyword_bid %} -Bid associated with a keyword or targeting expression. -{% enddocs %} - -{% docs keyword_id %} -The ID of the keyword. -{% enddocs %} - -{% docs keyword_match_type %} -One of (broad, exact, or phrase.) -{% enddocs %} - -{% docs keyword_type %} -Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT. -{% enddocs %} - -{% docs last_updated_date %} -Date of last update to record. -{% enddocs %} - -{% docs match_type %} -Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT. -{% enddocs %} - -{% docs negative_keyword_id %} -The ID of the negative keyword. -{% enddocs %} - -{% docs portfolio_id %} -The ID of the Portfolio. -{% enddocs %} - -{% docs portfolio_name %} -The name of the Portfolio. -{% enddocs %} - -{% docs profile_id %} -The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace. -{% enddocs %} - -{% docs report_date %} -The date of the report. -{% enddocs %} - -{% docs search_term %} -The search term used by the customer. -{% enddocs %} - -{% docs serving_status %} -The current serving status of the record. -{% enddocs %} - -{% docs state %} -The state of the record (enabled, paused, or archived). -{% enddocs %} - -{% docs targeting %} -A string representation of the expression object used in the targeting clause. -{% enddocs %} - -{% docs source_relation %} -The source of the record if the unioning functionality is being used. If not this field will be empty. -{% enddocs %} - -{% docs purchases_30_d %} -Number of attributed conversion events occurring within 30 days of an ad click. -{% enddocs %} - -{% docs sales_30_d %} -Total value of sales occurring within 30 days of an ad click. -{% enddocs %} \ No newline at end of file From 4bac899b2621b55f1cfa27e6d3ed0eaa3526fdc0 Mon Sep 17 00:00:00 2001 From: fivetran-catfritz <111930712+fivetran-catfritz@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:56:25 -0500 Subject: [PATCH 3/8] Update dbt_project.yml --- dbt_project.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dbt_project.yml b/dbt_project.yml index ad6f9de..1f638df 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -23,4 +23,9 @@ vars: profile: "{{ source('amazon_ads', 'profile') }}" keyword_history: "{{ source('amazon_ads', 'keyword_history') }}" targeting_keyword_report: "{{ source('amazon_ads', 'targeting_keyword_report') }}" - search_term_ad_keyword_report: "{{ source('amazon_ads', 'search_term_ad_keyword_report') }}" \ No newline at end of file + search_term_ad_keyword_report: "{{ source('amazon_ads', 'search_term_ad_keyword_report') }}" + amazon_ads__ad_group_passthrough_metrics: [] + amazon_ads__advertised_product_passthrough_metrics: [] + amazon_ads__campaign_passthrough_metrics: [] + amazon_ads__search_term_ad_keyword_passthrough_metrics: [] + amazon_ads__targeting_keyword_passthrough_metrics: [] From 8adc571b3efcf061cac724fc164ada390ccee89a Mon Sep 17 00:00:00 2001 From: fivetran-catfritz <111930712+fivetran-catfritz@users.noreply.github.com> Date: Wed, 13 Aug 2025 15:20:13 -0500 Subject: [PATCH 4/8] Q2 FY26 Automatic Package Updates (#24) * Q2 FY26: Apply automated update. * Update .gitignore * Update generate-docs.yml * Q2 FY26: Update auto-release workflow only. --------- Co-authored-by: Avinash Kunnath <108772760+fivetran-avinash@users.noreply.github.com> --- .buildkite/pipeline.yml | 10 +-- .../maintainer_pull_request_template.md | 9 ++- .github/workflows/auto-release.yml | 11 +-- .github/workflows/generate-docs.yml | 13 ++++ .gitignore | 75 +++++++++++++++++-- CHANGELOG.md | 12 +++ README.md | 8 +- integration_tests/ci/sample.profiles.yml | 4 - integration_tests/dbt_project.yml | 7 +- 9 files changed, 123 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/generate-docs.yml diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 281f1d4..2603602 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -3,7 +3,7 @@ steps: key: "run-dbt-postgres" plugins: - docker#v3.13.0: - image: "python:3.8" + image: "python:3.10.13" shell: [ "/bin/bash", "-e", "-c" ] environment: - "BASH_ENV=/tmp/.bashrc" @@ -18,7 +18,7 @@ steps: key: "run_dbt_snowflake" plugins: - docker#v3.13.0: - image: "python:3.8" + image: "python:3.10.13" shell: [ "/bin/bash", "-e", "-c" ] environment: - "BASH_ENV=/tmp/.bashrc" @@ -35,7 +35,7 @@ steps: key: "run_dbt_bigquery" plugins: - docker#v3.13.0: - image: "python:3.8" + image: "python:3.10.13" shell: [ "/bin/bash", "-e", "-c" ] environment: - "BASH_ENV=/tmp/.bashrc" @@ -47,7 +47,7 @@ steps: key: "run_dbt_redshift" plugins: - docker#v3.13.0: - image: "python:3.8" + image: "python:3.10.13" shell: [ "/bin/bash", "-e", "-c" ] environment: - "BASH_ENV=/tmp/.bashrc" @@ -62,7 +62,7 @@ steps: key: "run_dbt_databricks" plugins: - docker#v3.13.0: - image: "python:3.8" + image: "python:3.10.13" shell: [ "/bin/bash", "-e", "-c" ] environment: - "BASH_ENV=/tmp/.bashrc" diff --git a/.github/PULL_REQUEST_TEMPLATE/maintainer_pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/maintainer_pull_request_template.md index 99c450c..0899dc6 100644 --- a/.github/PULL_REQUEST_TEMPLATE/maintainer_pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/maintainer_pull_request_template.md @@ -12,13 +12,15 @@ Before marking this PR as "ready for review": ## PR Overview **Package version introduced in this PR:** - +- + **This PR addresses the following Issue/Feature(s):** +- **Summary of changes:** - +- ### Submission Checklist - [ ] Alignment meeting with the reviewer (if needed) @@ -27,9 +29,10 @@ Before marking this PR as "ready for review": - [ ] **Validation Steps:** Check for unintentional effects (e.g., add/run consistency & integrity tests) - [ ] **Testing Instructions:** Confirm the change addresses the issue(s) - [ ] **Focus Areas:** Complex logic or queries that need extra attention +- [ ] Merge any relevant open PRs into this PR ### Changelog - [ ] Draft changelog for PR -- [ ] Final changelog for release review \ No newline at end of file +- [ ] Final changelog for release review diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index 8ed5853..e0a7100 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -3,11 +3,12 @@ on: pull_request: types: - closed - branches: - - main + - labeled jobs: - call-workflow-passing-data: - if: github.event.pull_request.merged + release: + if: | + (github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'main') || + github.event.label.name == 'pre-release' uses: fivetran/dbt_package_automations/.github/workflows/auto-release.yml@main - secrets: inherit \ No newline at end of file + secrets: inherit diff --git a/.github/workflows/generate-docs.yml b/.github/workflows/generate-docs.yml new file mode 100644 index 0000000..e13605f --- /dev/null +++ b/.github/workflows/generate-docs.yml @@ -0,0 +1,13 @@ +name: 'generate dbt docs' +on: + pull_request: + types: + - labeled + +jobs: + generate-docs: + if: github.event.label.name == 'docs:ready' + uses: fivetran/dbt_package_automations/.github/workflows/generate-docs.yml@main + secrets: inherit + with: + schema_var_name: amazon_ads_schema diff --git a/.gitignore b/.gitignore index dd4b608..06f4e77 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,73 @@ - -target/ +# dbt +**/package-lock.yml +package-lock.yml +.dbt/ dbt_modules/ +dbt_packages/ logs/ +profiles.yml +target/ +*.log + +# IDE files +.idea/ +.vscode/ +*~ +*.swp +*.swo + +# Jupyter Notebook +.ipynb_checkpoints + +# OS generated files +**/.DS_Store .DS_Store -dbt_packages/ -integration_tests/package-lock.yml -integration_tests/.DS_Store \ No newline at end of file +.Spotlight-V100 +.Trashes +._* +Thumbs.db +ehthumbs.db + +# Python +*.egg +*.egg-info/ +*.py[cod] +*.so +*$py.class +.Python +__pycache__/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.env +.installed.cfg +lib/ +lib64/ +MANIFEST +parts/ +sdist/ +var/ +wheels/ + +# Secrets and credentials +.env.* +.secrets +credentials.json +service-account.json + +# Temporary files +.cache/ +*.temp +*.tmp + +# Virtual environments +.conda/ +.env +.venv +ENV/ +env/ +env.bak/ +venv/ +venv.bak/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 04ea18e..a708366 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,18 @@ - Removed all accepted_values tests. - Moved `loaded_at_field: _fivetran_synced` under the `config:` block in `src_amazon_ads.yml`. +### Under the Hood + +- Updated conditions in `.github/workflows/auto-release.yml`. +- Added `.github/workflows/generate-docs.yml`. +- Added `+docs: show: False` to `integration_tests/dbt_project.yml`. +- Migrated `flags` (e.g., `send_anonymous_usage_stats`, `use_colors`) from `sample.profiles.yml` to `integration_tests/dbt_project.yml`. +- Updated `maintainer_pull_request_template.md` with improved checklist. +- Refreshed README tag block by standardizing Quickstart-compatible badge set. +- Updated Python image version to `3.10.13` in `pipeline.yml`. +- Added `CI_DATABRICKS_DBT_CATALOG` to`pipeline.yml` (under the `environment` block, after `CI_DATABRICKS_DBT_TOKEN`). +- Updated `.gitignore` to exclude additional DBT, Python, and system artifacts. + # dbt_amazon_ads v0.5.0 [PR #23](https://github.com/fivetran/dbt_amazon_ads/pull/23) includes the following updates: diff --git a/README.md b/README.md index e54d93a..560e70a 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,14 @@ href="https://github.com/fivetran/dbt_amazon_ads/blob/main/LICENSE"> - + + +

## What does this dbt package do? @@ -63,7 +66,6 @@ packages: > All required sources and staging models are now bundled into this transformation package. Do not include `fivetran/amazon_ads_source` in your `packages.yml` since this package has been deprecated. - ### Step 3: Define database and schema variables By default, this package uses your destination and the `amazon_ads` schema. If your Amazon Ads data is in a different database or schema (for example, if your Amazon Ads schema is named `amazon_ads_fivetran`), add the following configuration to your root `dbt_project.yml` file: @@ -154,7 +156,7 @@ Fivetran offers the ability for you to orchestrate your dbt project through [Fiv ## Does this package have dependencies? This dbt package is dependent on the following dbt packages. Be aware that these dependencies are installed by default within this package. For more information on these packages, refer to the [dbt hub](https://hub.getdbt.com/) site. > IMPORTANT: If you have any of the dependent packages in your own `packages.yml` file, we highly recommend that you remove them from your root `packages.yml` to avoid package version conflicts. - + ```yml packages: - package: fivetran/fivetran_utils diff --git a/integration_tests/ci/sample.profiles.yml b/integration_tests/ci/sample.profiles.yml index 4b23002..e7c86b2 100644 --- a/integration_tests/ci/sample.profiles.yml +++ b/integration_tests/ci/sample.profiles.yml @@ -2,10 +2,6 @@ # HEY! This file is used in the dbt package integrations tests with Buildkite. # You should __NEVER__ check credentials into version control. Thanks for reading :) -config: - send_anonymous_usage_stats: False - use_colors: True - integration_tests: target: redshift outputs: diff --git a/integration_tests/dbt_project.yml b/integration_tests/dbt_project.yml index 751fbbd..8176563 100644 --- a/integration_tests/dbt_project.yml +++ b/integration_tests/dbt_project.yml @@ -34,6 +34,8 @@ dispatch: search_order: ['spark_utils', 'dbt_utils'] seeds: + +docs: + show: False +quote_columns: "{{ true if target.type == 'redshift' else false }}" amazon_ads_integration_tests: +column_types: @@ -43,4 +45,7 @@ seeds: keyword_bid: "float" clicks: "float" impressions: "float" - cost: "float" \ No newline at end of file + cost: "float" +flags: + send_anonymous_usage_stats: False + use_colors: True From 0f848febea70f764a24a6987c22f330742407a5f Mon Sep 17 00:00:00 2001 From: Avinash Kunnath Date: Wed, 13 Aug 2025 14:15:12 -0700 Subject: [PATCH 5/8] Manual script PR checks --- README.md | 2 +- dbt_project.yml | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 560e70a..02a33a2 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ models: #### Change the source table references If an individual source table has a different name than the package expects, add the table name as it appears in your destination to the respective variable. This is not available when running the package on multiple unioned connections. -> IMPORTANT: See this project's [`dbt_project.yml`](https://github.com/fivetran/dbt_amazon_ads_source/blob/main/dbt_project.yml) variable declarations to see the expected names. +> IMPORTANT: See this project's [`dbt_project.yml`](https://github.com/fivetran/dbt_amazon_ads/blob/main/dbt_project.yml) variable declarations to see the expected names. ```yml vars: diff --git a/dbt_project.yml b/dbt_project.yml index 1f638df..5d77f19 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -10,7 +10,10 @@ models: +materialized: view staging: +schema: amazon_ads_source - +materialized: view + +materialized: table + tmp: + +materialized: view + vars: amazon_ads: ad_group_history: "{{ source('amazon_ads', 'ad_group_history') }}" From 929b301466a42d2dd83eecbaaa7d030ed9dc162e Mon Sep 17 00:00:00 2001 From: Avinash Kunnath Date: Wed, 13 Aug 2025 14:18:29 -0700 Subject: [PATCH 6/8] consolidate changelog --- CHANGELOG.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a708366..cc3a42e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,13 +24,6 @@ - Updated conditions in `.github/workflows/auto-release.yml`. - Added `.github/workflows/generate-docs.yml`. -- Added `+docs: show: False` to `integration_tests/dbt_project.yml`. -- Migrated `flags` (e.g., `send_anonymous_usage_stats`, `use_colors`) from `sample.profiles.yml` to `integration_tests/dbt_project.yml`. -- Updated `maintainer_pull_request_template.md` with improved checklist. -- Refreshed README tag block by standardizing Quickstart-compatible badge set. -- Updated Python image version to `3.10.13` in `pipeline.yml`. -- Added `CI_DATABRICKS_DBT_CATALOG` to`pipeline.yml` (under the `environment` block, after `CI_DATABRICKS_DBT_TOKEN`). -- Updated `.gitignore` to exclude additional DBT, Python, and system artifacts. # dbt_amazon_ads v0.5.0 From de836156f400a77fa179e703d4554bb8c8ba5dad Mon Sep 17 00:00:00 2001 From: Avinash Kunnath Date: Wed, 13 Aug 2025 14:36:19 -0700 Subject: [PATCH 7/8] changelog update --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc3a42e..d3f2cda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,6 @@ - Updated package to maintain compatibility with dbt-core versions both before and after v1.10.6, which introduced a breaking change to multi-argument test syntax (e.g., `unique_combination_of_columns`). - Temporarily removed unsupported tests to avoid errors and ensure smoother upgrades across different dbt-core versions. These tests will be reintroduced once a safe migration path is available. - Removed all `dbt_utils.unique_combination_of_columns` tests. - - Removed all accepted_values tests. - Moved `loaded_at_field: _fivetran_synced` under the `config:` block in `src_amazon_ads.yml`. ### Under the Hood From 3f4798701d111bb3987e9071048c54186c46248c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 13 Aug 2025 22:02:58 +0000 Subject: [PATCH 8/8] Generate dbt docs via GitHub Actions --- docs/catalog.json | 2 +- docs/index.html | 274 ++++++++++++++++++++++++++++++++++----------- docs/manifest.json | 2 +- 3 files changed, 213 insertions(+), 65 deletions(-) diff --git a/docs/catalog.json b/docs/catalog.json index 1212844..13867f6 100644 --- a/docs/catalog.json +++ b/docs/catalog.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/catalog/v1.json", "dbt_version": "1.7.13", "generated_at": "2024-10-25T21:34:07.920143Z", "invocation_id": "2450bca4-1dd3-401a-af85-d853c7b64435", "env": {}}, "nodes": {"seed.amazon_ads_integration_tests.ad_group_history_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "ad_group_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_id": {"type": "INT64", "index": 4, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 5, "name": "creation_date", "comment": null}, "default_bid": {"type": "FLOAT64", "index": 6, "name": "default_bid", "comment": null}, "name": {"type": "STRING", "index": 7, "name": "name", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 9, "name": "state", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 248, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 2, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.ad_group_history_data"}, "seed.amazon_ads_integration_tests.ad_group_level_report_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "ad_group_level_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "date": {"type": "DATE", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "FLOAT64", "index": 5, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 6, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 7, "name": "impressions", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 560, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.ad_group_level_report_data"}, "seed.amazon_ads_integration_tests.advertised_product_report_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "advertised_product_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "INT64", "index": 2, "name": "ad_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 3, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 4, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, " advertised_asin": {"type": "INT64", "index": 12, "name": " advertised_asin", "comment": null}, " advertised_sku": {"type": "INT64", "index": 13, "name": " advertised_sku", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 910, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.advertised_product_report_data"}, "seed.amazon_ads_integration_tests.campaign_history_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "campaign_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "bidding_strategy": {"type": "STRING", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "STRING", "index": 5, "name": "creation_date", "comment": null}, "budget": {"type": "INT64", "index": 6, "name": "budget", "comment": null}, "end_date": {"type": "INT64", "index": 7, "name": "end_date", "comment": null}, "name": {"type": "STRING", "index": 8, "name": "name", "comment": null}, "portfolio_id": {"type": "INT64", "index": 9, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "INT64", "index": 10, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 11, "name": "serving_status", "comment": null}, "start_date": {"type": "DATE", "index": 12, "name": "start_date", "comment": null}, "state": {"type": "STRING", "index": 13, "name": "state", "comment": null}, "targeting_type": {"type": "STRING", "index": 14, "name": "targeting_type", "comment": null}, "budget_type": {"type": "STRING", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "INT64", "index": 16, "name": "effective_budget", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1061, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 6, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.campaign_history_data"}, "seed.amazon_ads_integration_tests.campaign_level_report_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "campaign_level_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"campaign_id": {"type": "INT64", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "INT64", "index": 4, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "INT64", "index": 5, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 6, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 12, "name": "impressions", "comment": null}, "campaign_rule_based_budget_amount": {"type": "INT64", "index": 13, "name": "campaign_rule_based_budget_amount", "comment": null}, "sales_7_d": {"type": "INT64", "index": 14, "name": "sales_7_d", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 15, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "INT64", "index": 16, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 981, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.campaign_level_report_data"}, "seed.amazon_ads_integration_tests.keyword_history_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "keyword_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "INT64", "index": 4, "name": "ad_group_id", "comment": null}, "bid": {"type": "FLOAT64", "index": 5, "name": "bid", "comment": null}, "campaign_id": {"type": "INT64", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 7, "name": "creation_date", "comment": null}, "keyword_text": {"type": "STRING", "index": 8, "name": "keyword_text", "comment": null}, "match_type": {"type": "STRING", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "INT64", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "STRING", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "INT64", "index": 13, "name": "native_language_locale", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1365, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 9, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.keyword_history_data"}, "seed.amazon_ads_integration_tests.portfolio_history_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "portfolio_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "budget_amount": {"type": "INT64", "index": 4, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "INT64", "index": 5, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "INT64", "index": 6, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "INT64", "index": 7, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "INT64", "index": 8, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "STRING", "index": 9, "name": "creation_date", "comment": null}, "in_budget": {"type": "BOOL", "index": 10, "name": "in_budget", "comment": null}, "name": {"type": "STRING", "index": 11, "name": "name", "comment": null}, "profile_id": {"type": "INT64", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 14, "name": "state", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 124, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 1, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.portfolio_history_data"}, "seed.amazon_ads_integration_tests.product_ad_history_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "product_ad_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "INT64", "index": 4, "name": "ad_group_id", "comment": null}, "asin": {"type": "STRING", "index": 5, "name": "asin", "comment": null}, "campaign_id": {"type": "INT64", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 7, "name": "creation_date", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "INT64", "index": 9, "name": "sku", "comment": null}, "state": {"type": "STRING", "index": 10, "name": "state", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 365, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 3, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.product_ad_history_data"}, "seed.amazon_ads_integration_tests.profile_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "profile_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "BOOL", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "STRING", "index": 5, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "STRING", "index": 6, "name": "account_name", "comment": null}, "account_sub_type": {"type": "INT64", "index": 7, "name": "account_sub_type", "comment": null}, "account_type": {"type": "STRING", "index": 8, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "BOOL", "index": 9, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "STRING", "index": 10, "name": "country_code", "comment": null}, "currency_code": {"type": "STRING", "index": 11, "name": "currency_code", "comment": null}, "daily_budget": {"type": "INT64", "index": 12, "name": "daily_budget", "comment": null}, "timezone": {"type": "STRING", "index": 13, "name": "timezone", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 96, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 1, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.profile_data"}, "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "search_term_ad_keyword_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "INT64", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 12, "name": "keyword_bid", "comment": null}, "search_term": {"type": "STRING", "index": 13, "name": "search_term", "comment": null}, "targeting": {"type": "STRING", "index": 14, "name": "targeting", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1270, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data"}, "seed.amazon_ads_integration_tests.targeting_keyword_report_data": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "targeting_keyword_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "INT64", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "ad_keyword_status": {"type": "STRING", "index": 6, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 12, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 13, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "STRING", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "STRING", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "STRING", "index": 16, "name": "targeting", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1360, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.targeting_keyword_report_data"}, "model.amazon_ads.amazon_ads__account_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__account_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "DATE", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "STRING", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "STRING", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "STRING", "index": 6, "name": "profile_id", "comment": null}, "cost": {"type": "FLOAT64", "index": 7, "name": "cost", "comment": null}, "clicks": {"type": "FLOAT64", "index": 8, "name": "clicks", "comment": null}, "impressions": {"type": "FLOAT64", "index": 9, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 10, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "INT64", "index": 11, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 668, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__account_report"}, "model.amazon_ads.amazon_ads__ad_group_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__ad_group_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "DATE", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "STRING", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "STRING", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "STRING", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "STRING", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "STRING", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "STRING", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "STRING", "index": 12, "name": "ad_group_id", "comment": null}, "serving_status": {"type": "STRING", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 14, "name": "state", "comment": null}, "default_bid": {"type": "FLOAT64", "index": 15, "name": "default_bid", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 16, "name": "campaign_bidding_strategy", "comment": null}, "cost": {"type": "FLOAT64", "index": 17, "name": "cost", "comment": null}, "clicks": {"type": "FLOAT64", "index": 18, "name": "clicks", "comment": null}, "impressions": {"type": "FLOAT64", "index": 19, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 20, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 21, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 940, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__ad_group_report"}, "model.amazon_ads.amazon_ads__ad_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__ad_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "DATE", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "STRING", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "STRING", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "STRING", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "STRING", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "STRING", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "STRING", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "STRING", "index": 12, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "STRING", "index": 13, "name": "ad_id", "comment": null}, "serving_status": {"type": "STRING", "index": 14, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 15, "name": "state", "comment": null}, "advertised_asin": {"type": "STRING", "index": 16, "name": "advertised_asin", "comment": null}, "advertised_sku": {"type": "STRING", "index": 17, "name": "advertised_sku", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 18, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 19, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 20, "name": "campaign_budget_type", "comment": null}, "cost": {"type": "FLOAT64", "index": 21, "name": "cost", "comment": null}, "clicks": {"type": "FLOAT64", "index": 22, "name": "clicks", "comment": null}, "impressions": {"type": "FLOAT64", "index": 23, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 24, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 25, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1560, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__ad_report"}, "model.amazon_ads.amazon_ads__campaign_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__campaign_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "DATE", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "STRING", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "STRING", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "STRING", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "STRING", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "STRING", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 10, "name": "campaign_id", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 11, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 12, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 13, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 14, "name": "campaign_budget_type", "comment": null}, "cost": {"type": "FLOAT64", "index": 15, "name": "cost", "comment": null}, "clicks": {"type": "FLOAT64", "index": 16, "name": "clicks", "comment": null}, "impressions": {"type": "FLOAT64", "index": 17, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 18, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "INT64", "index": 19, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1451, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__campaign_report"}, "model.amazon_ads.amazon_ads__keyword_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__keyword_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "DATE", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "STRING", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "STRING", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "STRING", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "STRING", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "STRING", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "STRING", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "STRING", "index": 12, "name": "ad_group_id", "comment": null}, "keyword_id": {"type": "STRING", "index": 13, "name": "keyword_id", "comment": null}, "keyword_text": {"type": "STRING", "index": 14, "name": "keyword_text", "comment": null}, "serving_status": {"type": "STRING", "index": 15, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 16, "name": "state", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 17, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "STRING", "index": 18, "name": "keyword_type", "comment": null}, "match_type": {"type": "STRING", "index": 19, "name": "match_type", "comment": null}, "cost": {"type": "FLOAT64", "index": 20, "name": "cost", "comment": null}, "clicks": {"type": "FLOAT64", "index": 21, "name": "clicks", "comment": null}, "impressions": {"type": "FLOAT64", "index": 22, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 23, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 24, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1820, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__keyword_report"}, "model.amazon_ads.amazon_ads__portfolio_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__portfolio_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "DATE", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "STRING", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "STRING", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "STRING", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "STRING", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "STRING", "index": 8, "name": "portfolio_id", "comment": null}, "budget_amount": {"type": "INT64", "index": 9, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "INT64", "index": 10, "name": "budget_currency_code", "comment": null}, "budget_start_date": {"type": "INT64", "index": 11, "name": "budget_start_date", "comment": null}, "budget_end_date": {"type": "INT64", "index": 12, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "INT64", "index": 13, "name": "budget_policy", "comment": null}, "in_budget": {"type": "BOOL", "index": 14, "name": "in_budget", "comment": null}, "serving_status": {"type": "STRING", "index": 15, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 16, "name": "state", "comment": null}, "cost": {"type": "FLOAT64", "index": 17, "name": "cost", "comment": null}, "clicks": {"type": "FLOAT64", "index": 18, "name": "clicks", "comment": null}, "impressions": {"type": "FLOAT64", "index": 19, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 20, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "INT64", "index": 21, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1168, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__portfolio_report"}, "model.amazon_ads.amazon_ads__search_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__search_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "DATE", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "STRING", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "STRING", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "STRING", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "STRING", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "STRING", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "STRING", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "STRING", "index": 12, "name": "ad_group_id", "comment": null}, "keyword_id": {"type": "STRING", "index": 13, "name": "keyword_id", "comment": null}, "keyword_text": {"type": "STRING", "index": 14, "name": "keyword_text", "comment": null}, "match_type": {"type": "STRING", "index": 15, "name": "match_type", "comment": null}, "serving_status": {"type": "STRING", "index": 16, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 17, "name": "state", "comment": null}, "search_term": {"type": "STRING", "index": 18, "name": "search_term", "comment": null}, "targeting": {"type": "STRING", "index": 19, "name": "targeting", "comment": null}, "cost": {"type": "FLOAT64", "index": 20, "name": "cost", "comment": null}, "clicks": {"type": "FLOAT64", "index": 21, "name": "clicks", "comment": null}, "impressions": {"type": "FLOAT64", "index": 22, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 23, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 24, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1923, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__search_report"}, "model.amazon_ads.int_amazon_ads__portfolio_history": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "int_amazon_ads__portfolio_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "portfolio_id": {"type": "STRING", "index": 2, "name": "portfolio_id", "comment": null}, "budget_amount": {"type": "INT64", "index": 3, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "INT64", "index": 4, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "INT64", "index": 5, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "INT64", "index": 6, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "INT64", "index": 7, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "STRING", "index": 8, "name": "creation_date", "comment": null}, "in_budget": {"type": "BOOL", "index": 9, "name": "in_budget", "comment": null}, "last_updated_date": {"type": "STRING", "index": 10, "name": "last_updated_date", "comment": null}, "portfolio_name": {"type": "STRING", "index": 11, "name": "portfolio_name", "comment": null}, "profile_id": {"type": "STRING", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 14, "name": "state", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 15, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.int_amazon_ads__portfolio_history"}, "model.amazon_ads_source.stg_amazon_ads__ad_group_history": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "STRING", "index": 2, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "STRING", "index": 3, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 4, "name": "creation_date", "comment": null}, "default_bid": {"type": "FLOAT64", "index": 5, "name": "default_bid", "comment": null}, "last_updated_date": {"type": "STRING", "index": 6, "name": "last_updated_date", "comment": null}, "ad_group_name": {"type": "STRING", "index": 7, "name": "ad_group_name", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 9, "name": "state", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 10, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 228, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 2, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_history"}, "model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_id": {"type": "INT64", "index": 4, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 5, "name": "creation_date", "comment": null}, "default_bid": {"type": "FLOAT64", "index": 6, "name": "default_bid", "comment": null}, "name": {"type": "STRING", "index": 7, "name": "name", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 9, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp"}, "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "STRING", "index": 2, "name": "ad_group_id", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 3, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "FLOAT64", "index": 4, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 5, "name": "cost", "comment": null}, "date_day": {"type": "DATE", "index": 6, "name": "date_day", "comment": null}, "impressions": {"type": "FLOAT64", "index": 7, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 8, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 9, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 470, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"}, "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "date": {"type": "DATE", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "FLOAT64", "index": 5, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 6, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 7, "name": "impressions", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp"}, "model.amazon_ads_source.stg_amazon_ads__advertised_product_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_id": {"type": "STRING", "index": 2, "name": "ad_id", "comment": null}, "ad_group_id": {"type": "STRING", "index": 3, "name": "ad_group_id", "comment": null}, "advertised_asin": {"type": "STRING", "index": 4, "name": "advertised_asin", "comment": null}, "advertised_sku": {"type": "STRING", "index": 5, "name": "advertised_sku", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 8, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "STRING", "index": 9, "name": "campaign_id", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "date_day": {"type": "DATE", "index": 12, "name": "date_day", "comment": null}, "impressions": {"type": "FLOAT64", "index": 13, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 14, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 15, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 764, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__advertised_product_report"}, "model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "INT64", "index": 2, "name": "ad_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 3, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 4, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, " advertised_asin": {"type": "INT64", "index": 12, "name": " advertised_asin", "comment": null}, " advertised_sku": {"type": "INT64", "index": 13, "name": " advertised_sku", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp"}, "model.amazon_ads_source.stg_amazon_ads__campaign_history": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "campaign_id": {"type": "STRING", "index": 2, "name": "campaign_id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 3, "name": "last_updated_date", "comment": null}, "bidding_strategy": {"type": "STRING", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "STRING", "index": 5, "name": "creation_date", "comment": null}, "end_date": {"type": "INT64", "index": 6, "name": "end_date", "comment": null}, "campaign_name": {"type": "STRING", "index": 7, "name": "campaign_name", "comment": null}, "portfolio_id": {"type": "STRING", "index": 8, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "STRING", "index": 9, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 10, "name": "serving_status", "comment": null}, "start_date": {"type": "DATE", "index": 11, "name": "start_date", "comment": null}, "state": {"type": "STRING", "index": 12, "name": "state", "comment": null}, "targeting_type": {"type": "STRING", "index": 13, "name": "targeting_type", "comment": null}, "budget": {"type": "INT64", "index": 14, "name": "budget", "comment": null}, "budget_type": {"type": "STRING", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "INT64", "index": 16, "name": "effective_budget", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 17, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 983, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 6, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_history"}, "model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "bidding_strategy": {"type": "STRING", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "STRING", "index": 5, "name": "creation_date", "comment": null}, "budget": {"type": "INT64", "index": 6, "name": "budget", "comment": null}, "end_date": {"type": "INT64", "index": 7, "name": "end_date", "comment": null}, "name": {"type": "STRING", "index": 8, "name": "name", "comment": null}, "portfolio_id": {"type": "INT64", "index": 9, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "INT64", "index": 10, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 11, "name": "serving_status", "comment": null}, "start_date": {"type": "DATE", "index": 12, "name": "start_date", "comment": null}, "state": {"type": "STRING", "index": 13, "name": "state", "comment": null}, "targeting_type": {"type": "STRING", "index": 14, "name": "targeting_type", "comment": null}, "budget_type": {"type": "STRING", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "INT64", "index": 16, "name": "effective_budget", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp"}, "model.amazon_ads_source.stg_amazon_ads__campaign_level_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "INT64", "index": 2, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "INT64", "index": 3, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 5, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 6, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 7, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "STRING", "index": 8, "name": "campaign_id", "comment": null}, "campaign_rule_based_budget_amount": {"type": "INT64", "index": 9, "name": "campaign_rule_based_budget_amount", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "date_day": {"type": "DATE", "index": 12, "name": "date_day", "comment": null}, "impressions": {"type": "FLOAT64", "index": 13, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 14, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "INT64", "index": 15, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 861, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_level_report"}, "model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"campaign_id": {"type": "INT64", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "INT64", "index": 4, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "INT64", "index": 5, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 6, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 12, "name": "impressions", "comment": null}, "campaign_rule_based_budget_amount": {"type": "INT64", "index": 13, "name": "campaign_rule_based_budget_amount", "comment": null}, "sales_7_d": {"type": "INT64", "index": 14, "name": "sales_7_d", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 15, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "INT64", "index": 16, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp"}, "model.amazon_ads_source.stg_amazon_ads__keyword_history": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "keyword_id": {"type": "STRING", "index": 2, "name": "keyword_id", "comment": null}, "ad_group_id": {"type": "STRING", "index": 3, "name": "ad_group_id", "comment": null}, "bid": {"type": "FLOAT64", "index": 4, "name": "bid", "comment": null}, "campaign_id": {"type": "STRING", "index": 5, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 6, "name": "creation_date", "comment": null}, "keyword_text": {"type": "STRING", "index": 7, "name": "keyword_text", "comment": null}, "last_updated_date": {"type": "STRING", "index": 8, "name": "last_updated_date", "comment": null}, "match_type": {"type": "STRING", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "INT64", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "STRING", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "INT64", "index": 13, "name": "native_language_locale", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 14, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1275, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 9, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__keyword_history"}, "model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "INT64", "index": 4, "name": "ad_group_id", "comment": null}, "bid": {"type": "FLOAT64", "index": 5, "name": "bid", "comment": null}, "campaign_id": {"type": "INT64", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 7, "name": "creation_date", "comment": null}, "keyword_text": {"type": "STRING", "index": 8, "name": "keyword_text", "comment": null}, "match_type": {"type": "STRING", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "INT64", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "STRING", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "INT64", "index": 13, "name": "native_language_locale", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp"}, "model.amazon_ads_source.stg_amazon_ads__portfolio_history": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "portfolio_id": {"type": "STRING", "index": 2, "name": "portfolio_id", "comment": null}, "budget_amount": {"type": "INT64", "index": 3, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "INT64", "index": 4, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "INT64", "index": 5, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "INT64", "index": 6, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "INT64", "index": 7, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "STRING", "index": 8, "name": "creation_date", "comment": null}, "in_budget": {"type": "BOOL", "index": 9, "name": "in_budget", "comment": null}, "last_updated_date": {"type": "STRING", "index": 10, "name": "last_updated_date", "comment": null}, "portfolio_name": {"type": "STRING", "index": 11, "name": "portfolio_name", "comment": null}, "profile_id": {"type": "STRING", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 14, "name": "state", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 15, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 113, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 1, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__portfolio_history"}, "model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "budget_amount": {"type": "INT64", "index": 4, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "INT64", "index": 5, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "INT64", "index": 6, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "INT64", "index": 7, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "INT64", "index": 8, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "STRING", "index": 9, "name": "creation_date", "comment": null}, "in_budget": {"type": "BOOL", "index": 10, "name": "in_budget", "comment": null}, "name": {"type": "STRING", "index": 11, "name": "name", "comment": null}, "profile_id": {"type": "INT64", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 14, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp"}, "model.amazon_ads_source.stg_amazon_ads__product_ad_history": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_id": {"type": "STRING", "index": 2, "name": "ad_id", "comment": null}, "ad_group_id": {"type": "STRING", "index": 3, "name": "ad_group_id", "comment": null}, "asin": {"type": "STRING", "index": 4, "name": "asin", "comment": null}, "campaign_id": {"type": "STRING", "index": 5, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 6, "name": "creation_date", "comment": null}, "last_updated_date": {"type": "STRING", "index": 7, "name": "last_updated_date", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "INT64", "index": 9, "name": "sku", "comment": null}, "state": {"type": "STRING", "index": 10, "name": "state", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 11, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 325, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 3, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__product_ad_history"}, "model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "INT64", "index": 4, "name": "ad_group_id", "comment": null}, "asin": {"type": "STRING", "index": 5, "name": "asin", "comment": null}, "campaign_id": {"type": "INT64", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 7, "name": "creation_date", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "INT64", "index": 9, "name": "sku", "comment": null}, "state": {"type": "STRING", "index": 10, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp"}, "model.amazon_ads_source.stg_amazon_ads__profile": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__profile", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "profile_id": {"type": "STRING", "index": 2, "name": "profile_id", "comment": null}, "account_id": {"type": "STRING", "index": 3, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "STRING", "index": 4, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "STRING", "index": 5, "name": "account_name", "comment": null}, "account_sub_type": {"type": "INT64", "index": 6, "name": "account_sub_type", "comment": null}, "account_type": {"type": "STRING", "index": 7, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "BOOL", "index": 8, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "STRING", "index": 9, "name": "country_code", "comment": null}, "currency_code": {"type": "STRING", "index": 10, "name": "currency_code", "comment": null}, "daily_budget": {"type": "INT64", "index": 11, "name": "daily_budget", "comment": null}, "timezone": {"type": "STRING", "index": 12, "name": "timezone", "comment": null}, "_fivetran_deleted": {"type": "BOOL", "index": 13, "name": "_fivetran_deleted", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 86, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 1, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__profile"}, "model.amazon_ads_source.stg_amazon_ads__profile_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__profile_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "BOOL", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "STRING", "index": 5, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "STRING", "index": 6, "name": "account_name", "comment": null}, "account_sub_type": {"type": "INT64", "index": 7, "name": "account_sub_type", "comment": null}, "account_type": {"type": "STRING", "index": 8, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "BOOL", "index": 9, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "STRING", "index": 10, "name": "country_code", "comment": null}, "currency_code": {"type": "STRING", "index": 11, "name": "currency_code", "comment": null}, "daily_budget": {"type": "INT64", "index": 12, "name": "daily_budget", "comment": null}, "timezone": {"type": "STRING", "index": 13, "name": "timezone", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__profile_tmp"}, "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "STRING", "index": 2, "name": "ad_group_id", "comment": null}, "ad_keyword_status": {"type": "STRING", "index": 3, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 4, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 5, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 6, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "STRING", "index": 7, "name": "campaign_id", "comment": null}, "clicks": {"type": "FLOAT64", "index": 8, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 9, "name": "cost", "comment": null}, "date_day": {"type": "DATE", "index": 10, "name": "date_day", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 12, "name": "keyword_bid", "comment": null}, "keyword_id": {"type": "STRING", "index": 13, "name": "keyword_id", "comment": null}, "search_term": {"type": "STRING", "index": 14, "name": "search_term", "comment": null}, "targeting": {"type": "STRING", "index": 15, "name": "targeting", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 16, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 17, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1143, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"}, "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "INT64", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 12, "name": "keyword_bid", "comment": null}, "search_term": {"type": "STRING", "index": 13, "name": "search_term", "comment": null}, "targeting": {"type": "STRING", "index": 14, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp"}, "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report": {"metadata": {"type": "table", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "STRING", "index": 2, "name": "ad_group_id", "comment": null}, "ad_keyword_status": {"type": "STRING", "index": 3, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 4, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 5, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 6, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "STRING", "index": 7, "name": "campaign_id", "comment": null}, "clicks": {"type": "FLOAT64", "index": 8, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 9, "name": "cost", "comment": null}, "date_day": {"type": "DATE", "index": 10, "name": "date_day", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 12, "name": "keyword_bid", "comment": null}, "keyword_id": {"type": "STRING", "index": 13, "name": "keyword_id", "comment": null}, "keyword_type": {"type": "STRING", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "STRING", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "STRING", "index": 16, "name": "targeting", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 17, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "FLOAT64", "index": 18, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1260, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"}, "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp": {"metadata": {"type": "view", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "INT64", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "ad_keyword_status": {"type": "STRING", "index": 6, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 12, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 13, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "STRING", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "STRING", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "STRING", "index": 16, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp"}}, "sources": {"source.amazon_ads_source.amazon_ads.ad_group_history": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "ad_group_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_id": {"type": "INT64", "index": 4, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 5, "name": "creation_date", "comment": null}, "default_bid": {"type": "FLOAT64", "index": 6, "name": "default_bid", "comment": null}, "name": {"type": "STRING", "index": 7, "name": "name", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 9, "name": "state", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 248, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 2, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.ad_group_history"}, "source.amazon_ads_source.amazon_ads.ad_group_level_report": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "ad_group_level_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "date": {"type": "DATE", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "FLOAT64", "index": 5, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 6, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 7, "name": "impressions", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 560, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.ad_group_level_report"}, "source.amazon_ads_source.amazon_ads.advertised_product_report": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "advertised_product_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "INT64", "index": 2, "name": "ad_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 3, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 4, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, " advertised_asin": {"type": "INT64", "index": 12, "name": " advertised_asin", "comment": null}, " advertised_sku": {"type": "INT64", "index": 13, "name": " advertised_sku", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 910, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.advertised_product_report"}, "source.amazon_ads_source.amazon_ads.campaign_history": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "campaign_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "bidding_strategy": {"type": "STRING", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "STRING", "index": 5, "name": "creation_date", "comment": null}, "budget": {"type": "INT64", "index": 6, "name": "budget", "comment": null}, "end_date": {"type": "INT64", "index": 7, "name": "end_date", "comment": null}, "name": {"type": "STRING", "index": 8, "name": "name", "comment": null}, "portfolio_id": {"type": "INT64", "index": 9, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "INT64", "index": 10, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 11, "name": "serving_status", "comment": null}, "start_date": {"type": "DATE", "index": 12, "name": "start_date", "comment": null}, "state": {"type": "STRING", "index": 13, "name": "state", "comment": null}, "targeting_type": {"type": "STRING", "index": 14, "name": "targeting_type", "comment": null}, "budget_type": {"type": "STRING", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "INT64", "index": 16, "name": "effective_budget", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1061, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 6, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.campaign_history"}, "source.amazon_ads_source.amazon_ads.campaign_level_report": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "campaign_level_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"campaign_id": {"type": "INT64", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "INT64", "index": 4, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "INT64", "index": 5, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "STRING", "index": 6, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 12, "name": "impressions", "comment": null}, "campaign_rule_based_budget_amount": {"type": "INT64", "index": 13, "name": "campaign_rule_based_budget_amount", "comment": null}, "sales_7_d": {"type": "INT64", "index": 14, "name": "sales_7_d", "comment": null}, "purchases_30_d": {"type": "INT64", "index": 15, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "INT64", "index": 16, "name": "sales_30_d", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 981, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.campaign_level_report"}, "source.amazon_ads_source.amazon_ads.keyword_history": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "keyword_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "INT64", "index": 4, "name": "ad_group_id", "comment": null}, "bid": {"type": "FLOAT64", "index": 5, "name": "bid", "comment": null}, "campaign_id": {"type": "INT64", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 7, "name": "creation_date", "comment": null}, "keyword_text": {"type": "STRING", "index": 8, "name": "keyword_text", "comment": null}, "match_type": {"type": "STRING", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "INT64", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "STRING", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "INT64", "index": 13, "name": "native_language_locale", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1365, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 9, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.keyword_history"}, "source.amazon_ads_source.amazon_ads.portfolio_history": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "portfolio_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "budget_amount": {"type": "INT64", "index": 4, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "INT64", "index": 5, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "INT64", "index": 6, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "INT64", "index": 7, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "INT64", "index": 8, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "STRING", "index": 9, "name": "creation_date", "comment": null}, "in_budget": {"type": "BOOL", "index": 10, "name": "in_budget", "comment": null}, "name": {"type": "STRING", "index": 11, "name": "name", "comment": null}, "profile_id": {"type": "INT64", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "STRING", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "STRING", "index": 14, "name": "state", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 124, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 1, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.portfolio_history"}, "source.amazon_ads_source.amazon_ads.product_ad_history": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "product_ad_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "STRING", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "INT64", "index": 4, "name": "ad_group_id", "comment": null}, "asin": {"type": "STRING", "index": 5, "name": "asin", "comment": null}, "campaign_id": {"type": "INT64", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "STRING", "index": 7, "name": "creation_date", "comment": null}, "serving_status": {"type": "STRING", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "INT64", "index": 9, "name": "sku", "comment": null}, "state": {"type": "STRING", "index": 10, "name": "state", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 365, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 3, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.product_ad_history"}, "source.amazon_ads_source.amazon_ads.profile": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "profile_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "INT64", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "BOOL", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 3, "name": "_fivetran_synced", "comment": null}, "account_id": {"type": "STRING", "index": 4, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "STRING", "index": 5, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "STRING", "index": 6, "name": "account_name", "comment": null}, "account_sub_type": {"type": "INT64", "index": 7, "name": "account_sub_type", "comment": null}, "account_type": {"type": "STRING", "index": 8, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "BOOL", "index": 9, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "STRING", "index": 10, "name": "country_code", "comment": null}, "currency_code": {"type": "STRING", "index": 11, "name": "currency_code", "comment": null}, "daily_budget": {"type": "INT64", "index": 12, "name": "daily_budget", "comment": null}, "timezone": {"type": "STRING", "index": 13, "name": "timezone", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 96, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 1, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.profile"}, "source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "search_term_ad_keyword_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "INT64", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 12, "name": "keyword_bid", "comment": null}, "search_term": {"type": "STRING", "index": 13, "name": "search_term", "comment": null}, "targeting": {"type": "STRING", "index": 14, "name": "targeting", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1270, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report"}, "source.amazon_ads_source.amazon_ads.targeting_keyword_report": {"metadata": {"type": "table", "schema": "amazon_ads_test", "name": "targeting_keyword_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_group_id": {"type": "INT64", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "INT64", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "DATE", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "INT64", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 5, "name": "_fivetran_synced", "comment": null}, "ad_keyword_status": {"type": "STRING", "index": 6, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "FLOAT64", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "STRING", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "STRING", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "FLOAT64", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "FLOAT64", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "FLOAT64", "index": 12, "name": "impressions", "comment": null}, "keyword_bid": {"type": "FLOAT64", "index": 13, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "STRING", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "STRING", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "STRING", "index": 16, "name": "targeting", "comment": null}}, "stats": {"num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 1360, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads_source.amazon_ads.targeting_keyword_report"}}, "errors": null} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/catalog/v1.json", "dbt_version": "1.10.8", "generated_at": "2025-08-13T22:02:57.654983Z", "invocation_id": "6099043f-bde0-4fd9-9c4a-167fc646ae8b", "invocation_started_at": "2025-08-13T22:02:55.473541Z", "env": {}}, "nodes": {"seed.amazon_ads_integration_tests.ad_group_history_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "ad_group_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_id": {"type": "integer", "index": 4, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 5, "name": "creation_date", "comment": null}, "default_bid": {"type": "double precision", "index": 6, "name": "default_bid", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 9, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.ad_group_history_data"}, "seed.amazon_ads_integration_tests.ad_group_level_report_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "ad_group_level_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "date": {"type": "date", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "double precision", "index": 5, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 6, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 7, "name": "impressions", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.ad_group_level_report_data"}, "seed.amazon_ads_integration_tests.advertised_product_report_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "advertised_product_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "integer", "index": 2, "name": "ad_id", "comment": null}, "campaign_id": {"type": "integer", "index": 3, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 4, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "advertised_asin": {"type": "integer", "index": 12, "name": "advertised_asin", "comment": null}, "advertised_sku": {"type": "integer", "index": 13, "name": "advertised_sku", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.advertised_product_report_data"}, "seed.amazon_ads_integration_tests.campaign_history_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "campaign_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "bidding_strategy": {"type": "text", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "text", "index": 5, "name": "creation_date", "comment": null}, "budget": {"type": "integer", "index": 6, "name": "budget", "comment": null}, "end_date": {"type": "integer", "index": 7, "name": "end_date", "comment": null}, "name": {"type": "text", "index": 8, "name": "name", "comment": null}, "portfolio_id": {"type": "integer", "index": 9, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "integer", "index": 10, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 11, "name": "serving_status", "comment": null}, "start_date": {"type": "date", "index": 12, "name": "start_date", "comment": null}, "state": {"type": "text", "index": 13, "name": "state", "comment": null}, "targeting_type": {"type": "text", "index": 14, "name": "targeting_type", "comment": null}, "budget_type": {"type": "text", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "integer", "index": 16, "name": "effective_budget", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.campaign_history_data"}, "seed.amazon_ads_integration_tests.campaign_level_report_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "campaign_level_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "integer", "index": 4, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "integer", "index": 5, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 6, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 12, "name": "impressions", "comment": null}, "campaign_rule_based_budget_amount": {"type": "integer", "index": 13, "name": "campaign_rule_based_budget_amount", "comment": null}, "sales_7_d": {"type": "integer", "index": 14, "name": "sales_7_d", "comment": null}, "purchases_30_d": {"type": "integer", "index": 15, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "integer", "index": 16, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.campaign_level_report_data"}, "seed.amazon_ads_integration_tests.keyword_history_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "keyword_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "integer", "index": 4, "name": "ad_group_id", "comment": null}, "bid": {"type": "double precision", "index": 5, "name": "bid", "comment": null}, "campaign_id": {"type": "integer", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 7, "name": "creation_date", "comment": null}, "keyword_text": {"type": "text", "index": 8, "name": "keyword_text", "comment": null}, "match_type": {"type": "text", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "integer", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "text", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "integer", "index": 13, "name": "native_language_locale", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.keyword_history_data"}, "seed.amazon_ads_integration_tests.portfolio_history_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "portfolio_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "budget_amount": {"type": "integer", "index": 4, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "integer", "index": 5, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "integer", "index": 6, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "integer", "index": 7, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "integer", "index": 8, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "text", "index": 9, "name": "creation_date", "comment": null}, "in_budget": {"type": "boolean", "index": 10, "name": "in_budget", "comment": null}, "name": {"type": "text", "index": 11, "name": "name", "comment": null}, "profile_id": {"type": "integer", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 14, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.portfolio_history_data"}, "seed.amazon_ads_integration_tests.product_ad_history_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "product_ad_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "integer", "index": 4, "name": "ad_group_id", "comment": null}, "asin": {"type": "text", "index": 5, "name": "asin", "comment": null}, "campaign_id": {"type": "integer", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 7, "name": "creation_date", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "integer", "index": 9, "name": "sku", "comment": null}, "state": {"type": "text", "index": 10, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.product_ad_history_data"}, "seed.amazon_ads_integration_tests.profile_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "profile_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "text", "index": 5, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "text", "index": 6, "name": "account_name", "comment": null}, "account_sub_type": {"type": "integer", "index": 7, "name": "account_sub_type", "comment": null}, "account_type": {"type": "text", "index": 8, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "boolean", "index": 9, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "text", "index": 10, "name": "country_code", "comment": null}, "currency_code": {"type": "text", "index": 11, "name": "currency_code", "comment": null}, "daily_budget": {"type": "integer", "index": 12, "name": "daily_budget", "comment": null}, "timezone": {"type": "text", "index": 13, "name": "timezone", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.profile_data"}, "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "search_term_ad_keyword_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "integer", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "integer", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 12, "name": "keyword_bid", "comment": null}, "search_term": {"type": "text", "index": 13, "name": "search_term", "comment": null}, "targeting": {"type": "text", "index": 14, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data"}, "seed.amazon_ads_integration_tests.targeting_keyword_report_data": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "targeting_keyword_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "integer", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "integer", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "ad_keyword_status": {"type": "text", "index": 6, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 12, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 13, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "text", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "text", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "text", "index": 16, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.amazon_ads_integration_tests.targeting_keyword_report_data"}, "model.amazon_ads.amazon_ads__account_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "amazon_ads__account_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "text", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "text", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "text", "index": 6, "name": "profile_id", "comment": null}, "cost": {"type": "double precision", "index": 7, "name": "cost", "comment": null}, "clicks": {"type": "double precision", "index": 8, "name": "clicks", "comment": null}, "impressions": {"type": "double precision", "index": 9, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "bigint", "index": 10, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "bigint", "index": 11, "name": "sales_30_d", "comment": null}, "sales_7_d": {"type": "double precision", "index": 12, "name": "sales_7_d", "comment": null}, "purchases_alias": {"type": "double precision", "index": 13, "name": "purchases_alias", "comment": null}, "purchases_14_d": {"type": "double precision", "index": 14, "name": "purchases_14_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__account_report"}, "model.amazon_ads.amazon_ads__ad_group_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "amazon_ads__ad_group_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "text", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "text", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "text", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "text", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "text", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "text", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "text", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "text", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "text", "index": 12, "name": "ad_group_id", "comment": null}, "serving_status": {"type": "text", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 14, "name": "state", "comment": null}, "default_bid": {"type": "double precision", "index": 15, "name": "default_bid", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 16, "name": "campaign_bidding_strategy", "comment": null}, "cost": {"type": "double precision", "index": 17, "name": "cost", "comment": null}, "clicks": {"type": "double precision", "index": 18, "name": "clicks", "comment": null}, "impressions": {"type": "double precision", "index": 19, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "bigint", "index": 20, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 21, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__ad_group_report"}, "model.amazon_ads.amazon_ads__ad_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "amazon_ads__ad_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "text", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "text", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "text", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "text", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "text", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "text", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "text", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "text", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "text", "index": 12, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "text", "index": 13, "name": "ad_id", "comment": null}, "serving_status": {"type": "text", "index": 14, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 15, "name": "state", "comment": null}, "advertised_asin": {"type": "integer", "index": 16, "name": "advertised_asin", "comment": null}, "advertised_sku": {"type": "integer", "index": 17, "name": "advertised_sku", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 18, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 19, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 20, "name": "campaign_budget_type", "comment": null}, "cost": {"type": "double precision", "index": 21, "name": "cost", "comment": null}, "clicks": {"type": "double precision", "index": 22, "name": "clicks", "comment": null}, "impressions": {"type": "double precision", "index": 23, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "bigint", "index": 24, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 25, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__ad_report"}, "model.amazon_ads.amazon_ads__campaign_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "amazon_ads__campaign_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "text", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "text", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "text", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "text", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "text", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "text", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "text", "index": 10, "name": "campaign_id", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 11, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 12, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 13, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 14, "name": "campaign_budget_type", "comment": null}, "cost": {"type": "double precision", "index": 15, "name": "cost", "comment": null}, "clicks": {"type": "double precision", "index": 16, "name": "clicks", "comment": null}, "impressions": {"type": "double precision", "index": 17, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "bigint", "index": 18, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "bigint", "index": 19, "name": "sales_30_d", "comment": null}, "sales_7_d": {"type": "double precision", "index": 20, "name": "sales_7_d", "comment": null}, "purchases_alias": {"type": "double precision", "index": 21, "name": "purchases_alias", "comment": null}, "purchases_14_d": {"type": "double precision", "index": 22, "name": "purchases_14_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__campaign_report"}, "model.amazon_ads.amazon_ads__keyword_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "amazon_ads__keyword_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "text", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "text", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "text", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "text", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "text", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "text", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "text", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "text", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "text", "index": 12, "name": "ad_group_id", "comment": null}, "keyword_id": {"type": "text", "index": 13, "name": "keyword_id", "comment": null}, "keyword_text": {"type": "text", "index": 14, "name": "keyword_text", "comment": null}, "serving_status": {"type": "text", "index": 15, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 16, "name": "state", "comment": null}, "keyword_bid": {"type": "double precision", "index": 17, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "text", "index": 18, "name": "keyword_type", "comment": null}, "match_type": {"type": "text", "index": 19, "name": "match_type", "comment": null}, "cost": {"type": "double precision", "index": 20, "name": "cost", "comment": null}, "clicks": {"type": "double precision", "index": 21, "name": "clicks", "comment": null}, "impressions": {"type": "double precision", "index": 22, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "bigint", "index": 23, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 24, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__keyword_report"}, "model.amazon_ads.amazon_ads__portfolio_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "amazon_ads__portfolio_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "text", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "text", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "text", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "text", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "text", "index": 8, "name": "portfolio_id", "comment": null}, "budget_amount": {"type": "integer", "index": 9, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "integer", "index": 10, "name": "budget_currency_code", "comment": null}, "budget_start_date": {"type": "integer", "index": 11, "name": "budget_start_date", "comment": null}, "budget_end_date": {"type": "integer", "index": 12, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "integer", "index": 13, "name": "budget_policy", "comment": null}, "in_budget": {"type": "boolean", "index": 14, "name": "in_budget", "comment": null}, "serving_status": {"type": "text", "index": 15, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 16, "name": "state", "comment": null}, "cost": {"type": "double precision", "index": 17, "name": "cost", "comment": null}, "clicks": {"type": "double precision", "index": 18, "name": "clicks", "comment": null}, "impressions": {"type": "double precision", "index": 19, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "bigint", "index": 20, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "bigint", "index": 21, "name": "sales_30_d", "comment": null}, "sales_7_d": {"type": "double precision", "index": 22, "name": "sales_7_d", "comment": null}, "purchases_alias": {"type": "double precision", "index": 23, "name": "purchases_alias", "comment": null}, "purchases_14_d": {"type": "double precision", "index": 24, "name": "purchases_14_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__portfolio_report"}, "model.amazon_ads.amazon_ads__search_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "amazon_ads__search_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "account_name": {"type": "text", "index": 3, "name": "account_name", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "country_code": {"type": "text", "index": 5, "name": "country_code", "comment": null}, "profile_id": {"type": "text", "index": 6, "name": "profile_id", "comment": null}, "portfolio_name": {"type": "text", "index": 7, "name": "portfolio_name", "comment": null}, "portfolio_id": {"type": "text", "index": 8, "name": "portfolio_id", "comment": null}, "campaign_name": {"type": "text", "index": 9, "name": "campaign_name", "comment": null}, "campaign_id": {"type": "text", "index": 10, "name": "campaign_id", "comment": null}, "ad_group_name": {"type": "text", "index": 11, "name": "ad_group_name", "comment": null}, "ad_group_id": {"type": "text", "index": 12, "name": "ad_group_id", "comment": null}, "keyword_id": {"type": "text", "index": 13, "name": "keyword_id", "comment": null}, "keyword_text": {"type": "text", "index": 14, "name": "keyword_text", "comment": null}, "match_type": {"type": "text", "index": 15, "name": "match_type", "comment": null}, "serving_status": {"type": "text", "index": 16, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 17, "name": "state", "comment": null}, "search_term": {"type": "text", "index": 18, "name": "search_term", "comment": null}, "targeting": {"type": "text", "index": 19, "name": "targeting", "comment": null}, "cost": {"type": "double precision", "index": 20, "name": "cost", "comment": null}, "clicks": {"type": "double precision", "index": 21, "name": "clicks", "comment": null}, "impressions": {"type": "double precision", "index": 22, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "bigint", "index": 23, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 24, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.amazon_ads__search_report"}, "model.amazon_ads.int_amazon_ads__portfolio_history": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "int_amazon_ads__portfolio_history", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "portfolio_id": {"type": "text", "index": 2, "name": "portfolio_id", "comment": null}, "budget_amount": {"type": "integer", "index": 3, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "integer", "index": 4, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "integer", "index": 5, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "integer", "index": 6, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "integer", "index": 7, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "text", "index": 8, "name": "creation_date", "comment": null}, "in_budget": {"type": "boolean", "index": 9, "name": "in_budget", "comment": null}, "last_updated_date": {"type": "text", "index": 10, "name": "last_updated_date", "comment": null}, "portfolio_name": {"type": "text", "index": 11, "name": "portfolio_name", "comment": null}, "profile_id": {"type": "text", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 14, "name": "state", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 15, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.int_amazon_ads__portfolio_history"}, "model.amazon_ads.stg_amazon_ads__ad_group_history": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "text", "index": 2, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "text", "index": 3, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 4, "name": "creation_date", "comment": null}, "default_bid": {"type": "double precision", "index": 5, "name": "default_bid", "comment": null}, "last_updated_date": {"type": "text", "index": 6, "name": "last_updated_date", "comment": null}, "ad_group_name": {"type": "text", "index": 7, "name": "ad_group_name", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 9, "name": "state", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 10, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_history"}, "model.amazon_ads.stg_amazon_ads__ad_group_history_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_id": {"type": "integer", "index": 4, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 5, "name": "creation_date", "comment": null}, "default_bid": {"type": "double precision", "index": 6, "name": "default_bid", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 9, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_history_tmp"}, "model.amazon_ads.stg_amazon_ads__ad_group_level_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "text", "index": 2, "name": "ad_group_id", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 3, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "double precision", "index": 4, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 5, "name": "cost", "comment": null}, "date_day": {"type": "date", "index": 6, "name": "date_day", "comment": null}, "impressions": {"type": "double precision", "index": 7, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "integer", "index": 8, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 9, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_level_report"}, "model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "date": {"type": "date", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "double precision", "index": 5, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 6, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 7, "name": "impressions", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp"}, "model.amazon_ads.stg_amazon_ads__advertised_product_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_id": {"type": "text", "index": 2, "name": "ad_id", "comment": null}, "ad_group_id": {"type": "text", "index": 3, "name": "ad_group_id", "comment": null}, "advertised_asin": {"type": "integer", "index": 4, "name": "advertised_asin", "comment": null}, "advertised_sku": {"type": "integer", "index": 5, "name": "advertised_sku", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 8, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "text", "index": 9, "name": "campaign_id", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "date_day": {"type": "date", "index": 12, "name": "date_day", "comment": null}, "impressions": {"type": "double precision", "index": 13, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "integer", "index": 14, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 15, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__advertised_product_report"}, "model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "integer", "index": 2, "name": "ad_id", "comment": null}, "campaign_id": {"type": "integer", "index": 3, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 4, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "advertised_asin": {"type": "integer", "index": 12, "name": "advertised_asin", "comment": null}, "advertised_sku": {"type": "integer", "index": 13, "name": "advertised_sku", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp"}, "model.amazon_ads.stg_amazon_ads__campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "campaign_id": {"type": "text", "index": 2, "name": "campaign_id", "comment": null}, "last_updated_date": {"type": "text", "index": 3, "name": "last_updated_date", "comment": null}, "bidding_strategy": {"type": "text", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "text", "index": 5, "name": "creation_date", "comment": null}, "end_date": {"type": "integer", "index": 6, "name": "end_date", "comment": null}, "campaign_name": {"type": "text", "index": 7, "name": "campaign_name", "comment": null}, "portfolio_id": {"type": "text", "index": 8, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "text", "index": 9, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 10, "name": "serving_status", "comment": null}, "start_date": {"type": "date", "index": 11, "name": "start_date", "comment": null}, "state": {"type": "text", "index": 12, "name": "state", "comment": null}, "targeting_type": {"type": "text", "index": 13, "name": "targeting_type", "comment": null}, "budget": {"type": "integer", "index": 14, "name": "budget", "comment": null}, "budget_type": {"type": "text", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "integer", "index": 16, "name": "effective_budget", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 17, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_history"}, "model.amazon_ads.stg_amazon_ads__campaign_history_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "bidding_strategy": {"type": "text", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "text", "index": 5, "name": "creation_date", "comment": null}, "budget": {"type": "integer", "index": 6, "name": "budget", "comment": null}, "end_date": {"type": "integer", "index": 7, "name": "end_date", "comment": null}, "name": {"type": "text", "index": 8, "name": "name", "comment": null}, "portfolio_id": {"type": "integer", "index": 9, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "integer", "index": 10, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 11, "name": "serving_status", "comment": null}, "start_date": {"type": "date", "index": 12, "name": "start_date", "comment": null}, "state": {"type": "text", "index": 13, "name": "state", "comment": null}, "targeting_type": {"type": "text", "index": 14, "name": "targeting_type", "comment": null}, "budget_type": {"type": "text", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "integer", "index": 16, "name": "effective_budget", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_history_tmp"}, "model.amazon_ads.stg_amazon_ads__campaign_level_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "integer", "index": 2, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "integer", "index": 3, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 5, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 6, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 7, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "text", "index": 8, "name": "campaign_id", "comment": null}, "campaign_rule_based_budget_amount": {"type": "integer", "index": 9, "name": "campaign_rule_based_budget_amount", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "date_day": {"type": "date", "index": 12, "name": "date_day", "comment": null}, "impressions": {"type": "double precision", "index": 13, "name": "impressions", "comment": null}, "purchases_30_d": {"type": "integer", "index": 14, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "integer", "index": 15, "name": "sales_30_d", "comment": null}, "sales_7_d": {"type": "double precision", "index": 16, "name": "sales_7_d", "comment": null}, "purchases_alias": {"type": "double precision", "index": 17, "name": "purchases_alias", "comment": null}, "purchases_14_d": {"type": "double precision", "index": 18, "name": "purchases_14_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_level_report"}, "model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "integer", "index": 4, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "integer", "index": 5, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 6, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 12, "name": "impressions", "comment": null}, "campaign_rule_based_budget_amount": {"type": "integer", "index": 13, "name": "campaign_rule_based_budget_amount", "comment": null}, "sales_7_d": {"type": "integer", "index": 14, "name": "sales_7_d", "comment": null}, "purchases_30_d": {"type": "integer", "index": 15, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "integer", "index": 16, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp"}, "model.amazon_ads.stg_amazon_ads__keyword_history": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "keyword_id": {"type": "text", "index": 2, "name": "keyword_id", "comment": null}, "ad_group_id": {"type": "text", "index": 3, "name": "ad_group_id", "comment": null}, "bid": {"type": "double precision", "index": 4, "name": "bid", "comment": null}, "campaign_id": {"type": "text", "index": 5, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 6, "name": "creation_date", "comment": null}, "keyword_text": {"type": "text", "index": 7, "name": "keyword_text", "comment": null}, "last_updated_date": {"type": "text", "index": 8, "name": "last_updated_date", "comment": null}, "match_type": {"type": "text", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "integer", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "text", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "integer", "index": 13, "name": "native_language_locale", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 14, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__keyword_history"}, "model.amazon_ads.stg_amazon_ads__keyword_history_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "integer", "index": 4, "name": "ad_group_id", "comment": null}, "bid": {"type": "double precision", "index": 5, "name": "bid", "comment": null}, "campaign_id": {"type": "integer", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 7, "name": "creation_date", "comment": null}, "keyword_text": {"type": "text", "index": 8, "name": "keyword_text", "comment": null}, "match_type": {"type": "text", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "integer", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "text", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "integer", "index": 13, "name": "native_language_locale", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__keyword_history_tmp"}, "model.amazon_ads.stg_amazon_ads__portfolio_history": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "portfolio_id": {"type": "text", "index": 2, "name": "portfolio_id", "comment": null}, "budget_amount": {"type": "integer", "index": 3, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "integer", "index": 4, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "integer", "index": 5, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "integer", "index": 6, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "integer", "index": 7, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "text", "index": 8, "name": "creation_date", "comment": null}, "in_budget": {"type": "boolean", "index": 9, "name": "in_budget", "comment": null}, "last_updated_date": {"type": "text", "index": 10, "name": "last_updated_date", "comment": null}, "portfolio_name": {"type": "text", "index": 11, "name": "portfolio_name", "comment": null}, "profile_id": {"type": "text", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 14, "name": "state", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 15, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__portfolio_history"}, "model.amazon_ads.stg_amazon_ads__portfolio_history_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "budget_amount": {"type": "integer", "index": 4, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "integer", "index": 5, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "integer", "index": 6, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "integer", "index": 7, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "integer", "index": 8, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "text", "index": 9, "name": "creation_date", "comment": null}, "in_budget": {"type": "boolean", "index": 10, "name": "in_budget", "comment": null}, "name": {"type": "text", "index": 11, "name": "name", "comment": null}, "profile_id": {"type": "integer", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 14, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__portfolio_history_tmp"}, "model.amazon_ads.stg_amazon_ads__product_ad_history": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_id": {"type": "text", "index": 2, "name": "ad_id", "comment": null}, "ad_group_id": {"type": "text", "index": 3, "name": "ad_group_id", "comment": null}, "asin": {"type": "text", "index": 4, "name": "asin", "comment": null}, "campaign_id": {"type": "text", "index": 5, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 6, "name": "creation_date", "comment": null}, "last_updated_date": {"type": "text", "index": 7, "name": "last_updated_date", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "integer", "index": 9, "name": "sku", "comment": null}, "state": {"type": "text", "index": 10, "name": "state", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 11, "name": "is_most_recent_record", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__product_ad_history"}, "model.amazon_ads.stg_amazon_ads__product_ad_history_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "integer", "index": 4, "name": "ad_group_id", "comment": null}, "asin": {"type": "text", "index": 5, "name": "asin", "comment": null}, "campaign_id": {"type": "integer", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 7, "name": "creation_date", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "integer", "index": 9, "name": "sku", "comment": null}, "state": {"type": "text", "index": 10, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__product_ad_history_tmp"}, "model.amazon_ads.stg_amazon_ads__profile": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__profile", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "profile_id": {"type": "text", "index": 2, "name": "profile_id", "comment": null}, "account_id": {"type": "text", "index": 3, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "text", "index": 4, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "text", "index": 5, "name": "account_name", "comment": null}, "account_sub_type": {"type": "integer", "index": 6, "name": "account_sub_type", "comment": null}, "account_type": {"type": "text", "index": 7, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "boolean", "index": 8, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "text", "index": 9, "name": "country_code", "comment": null}, "currency_code": {"type": "text", "index": 10, "name": "currency_code", "comment": null}, "daily_budget": {"type": "integer", "index": 11, "name": "daily_budget", "comment": null}, "timezone": {"type": "text", "index": 12, "name": "timezone", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 13, "name": "_fivetran_deleted", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__profile"}, "model.amazon_ads.stg_amazon_ads__profile_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__profile_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "text", "index": 5, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "text", "index": 6, "name": "account_name", "comment": null}, "account_sub_type": {"type": "integer", "index": 7, "name": "account_sub_type", "comment": null}, "account_type": {"type": "text", "index": 8, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "boolean", "index": 9, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "text", "index": 10, "name": "country_code", "comment": null}, "currency_code": {"type": "text", "index": 11, "name": "currency_code", "comment": null}, "daily_budget": {"type": "integer", "index": 12, "name": "daily_budget", "comment": null}, "timezone": {"type": "text", "index": 13, "name": "timezone", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__profile_tmp"}, "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "text", "index": 2, "name": "ad_group_id", "comment": null}, "ad_keyword_status": {"type": "text", "index": 3, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 4, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 5, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 6, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "text", "index": 7, "name": "campaign_id", "comment": null}, "clicks": {"type": "double precision", "index": 8, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 9, "name": "cost", "comment": null}, "date_day": {"type": "date", "index": 10, "name": "date_day", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 12, "name": "keyword_bid", "comment": null}, "keyword_id": {"type": "text", "index": 13, "name": "keyword_id", "comment": null}, "search_term": {"type": "text", "index": 14, "name": "search_term", "comment": null}, "targeting": {"type": "text", "index": 15, "name": "targeting", "comment": null}, "purchases_30_d": {"type": "integer", "index": 16, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 17, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report"}, "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "integer", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "integer", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 12, "name": "keyword_bid", "comment": null}, "search_term": {"type": "text", "index": 13, "name": "search_term", "comment": null}, "targeting": {"type": "text", "index": 14, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp"}, "model.amazon_ads.stg_amazon_ads__targeting_keyword_report": {"metadata": {"type": "BASE TABLE", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_group_id": {"type": "text", "index": 2, "name": "ad_group_id", "comment": null}, "ad_keyword_status": {"type": "text", "index": 3, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 4, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 5, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 6, "name": "campaign_budget_type", "comment": null}, "campaign_id": {"type": "text", "index": 7, "name": "campaign_id", "comment": null}, "clicks": {"type": "double precision", "index": 8, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 9, "name": "cost", "comment": null}, "date_day": {"type": "date", "index": 10, "name": "date_day", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 12, "name": "keyword_bid", "comment": null}, "keyword_id": {"type": "text", "index": 13, "name": "keyword_id", "comment": null}, "keyword_type": {"type": "text", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "text", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "text", "index": 16, "name": "targeting", "comment": null}, "purchases_30_d": {"type": "integer", "index": 17, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "double precision", "index": 18, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__targeting_keyword_report"}, "model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp": {"metadata": {"type": "VIEW", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report_tmp", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "integer", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "integer", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "ad_keyword_status": {"type": "text", "index": 6, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 12, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 13, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "text", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "text", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "text", "index": 16, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp"}}, "sources": {"source.amazon_ads.amazon_ads.ad_group_history": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "ad_group_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_id": {"type": "integer", "index": 4, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 5, "name": "creation_date", "comment": null}, "default_bid": {"type": "double precision", "index": 6, "name": "default_bid", "comment": null}, "name": {"type": "text", "index": 7, "name": "name", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 9, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.ad_group_history"}, "source.amazon_ads.amazon_ads.ad_group_level_report": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "ad_group_level_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "date": {"type": "date", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 4, "name": "campaign_bidding_strategy", "comment": null}, "clicks": {"type": "double precision", "index": 5, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 6, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 7, "name": "impressions", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.ad_group_level_report"}, "source.amazon_ads.amazon_ads.advertised_product_report": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "advertised_product_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "ad_id": {"type": "integer", "index": 2, "name": "ad_id", "comment": null}, "campaign_id": {"type": "integer", "index": 3, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 4, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "advertised_asin": {"type": "integer", "index": 12, "name": "advertised_asin", "comment": null}, "advertised_sku": {"type": "integer", "index": 13, "name": "advertised_sku", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.advertised_product_report"}, "source.amazon_ads.amazon_ads.campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "campaign_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "bidding_strategy": {"type": "text", "index": 4, "name": "bidding_strategy", "comment": null}, "creation_date": {"type": "text", "index": 5, "name": "creation_date", "comment": null}, "budget": {"type": "integer", "index": 6, "name": "budget", "comment": null}, "end_date": {"type": "integer", "index": 7, "name": "end_date", "comment": null}, "name": {"type": "text", "index": 8, "name": "name", "comment": null}, "portfolio_id": {"type": "integer", "index": 9, "name": "portfolio_id", "comment": null}, "profile_id": {"type": "integer", "index": 10, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 11, "name": "serving_status", "comment": null}, "start_date": {"type": "date", "index": 12, "name": "start_date", "comment": null}, "state": {"type": "text", "index": 13, "name": "state", "comment": null}, "targeting_type": {"type": "text", "index": 14, "name": "targeting_type", "comment": null}, "budget_type": {"type": "text", "index": 15, "name": "budget_type", "comment": null}, "effective_budget": {"type": "integer", "index": 16, "name": "effective_budget", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.campaign_history"}, "source.amazon_ads.amazon_ads.campaign_level_report": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "campaign_level_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"campaign_id": {"type": "integer", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "campaign_applicable_budget_rule_id": {"type": "integer", "index": 4, "name": "campaign_applicable_budget_rule_id", "comment": null}, "campaign_applicable_budget_rule_name": {"type": "integer", "index": 5, "name": "campaign_applicable_budget_rule_name", "comment": null}, "campaign_bidding_strategy": {"type": "text", "index": 6, "name": "campaign_bidding_strategy", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 12, "name": "impressions", "comment": null}, "campaign_rule_based_budget_amount": {"type": "integer", "index": 13, "name": "campaign_rule_based_budget_amount", "comment": null}, "sales_7_d": {"type": "integer", "index": 14, "name": "sales_7_d", "comment": null}, "purchases_30_d": {"type": "integer", "index": 15, "name": "purchases_30_d", "comment": null}, "sales_30_d": {"type": "integer", "index": 16, "name": "sales_30_d", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.campaign_level_report"}, "source.amazon_ads.amazon_ads.keyword_history": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "keyword_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "integer", "index": 4, "name": "ad_group_id", "comment": null}, "bid": {"type": "double precision", "index": 5, "name": "bid", "comment": null}, "campaign_id": {"type": "integer", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 7, "name": "creation_date", "comment": null}, "keyword_text": {"type": "text", "index": 8, "name": "keyword_text", "comment": null}, "match_type": {"type": "text", "index": 9, "name": "match_type", "comment": null}, "native_language_keyword": {"type": "integer", "index": 10, "name": "native_language_keyword", "comment": null}, "serving_status": {"type": "text", "index": 11, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 12, "name": "state", "comment": null}, "native_language_locale": {"type": "integer", "index": 13, "name": "native_language_locale", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.keyword_history"}, "source.amazon_ads.amazon_ads.portfolio_history": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "portfolio_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "budget_amount": {"type": "integer", "index": 4, "name": "budget_amount", "comment": null}, "budget_currency_code": {"type": "integer", "index": 5, "name": "budget_currency_code", "comment": null}, "budget_end_date": {"type": "integer", "index": 6, "name": "budget_end_date", "comment": null}, "budget_policy": {"type": "integer", "index": 7, "name": "budget_policy", "comment": null}, "budget_start_date": {"type": "integer", "index": 8, "name": "budget_start_date", "comment": null}, "creation_date": {"type": "text", "index": 9, "name": "creation_date", "comment": null}, "in_budget": {"type": "boolean", "index": 10, "name": "in_budget", "comment": null}, "name": {"type": "text", "index": 11, "name": "name", "comment": null}, "profile_id": {"type": "integer", "index": 12, "name": "profile_id", "comment": null}, "serving_status": {"type": "text", "index": 13, "name": "serving_status", "comment": null}, "state": {"type": "text", "index": 14, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.portfolio_history"}, "source.amazon_ads.amazon_ads.product_ad_history": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "product_ad_history_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "last_updated_date": {"type": "text", "index": 2, "name": "last_updated_date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "ad_group_id": {"type": "integer", "index": 4, "name": "ad_group_id", "comment": null}, "asin": {"type": "text", "index": 5, "name": "asin", "comment": null}, "campaign_id": {"type": "integer", "index": 6, "name": "campaign_id", "comment": null}, "creation_date": {"type": "text", "index": 7, "name": "creation_date", "comment": null}, "serving_status": {"type": "text", "index": 8, "name": "serving_status", "comment": null}, "sku": {"type": "integer", "index": 9, "name": "sku", "comment": null}, "state": {"type": "text", "index": 10, "name": "state", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.product_ad_history"}, "source.amazon_ads.amazon_ads.profile": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "profile_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"id": {"type": "integer", "index": 1, "name": "id", "comment": null}, "_fivetran_deleted": {"type": "boolean", "index": 2, "name": "_fivetran_deleted", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "account_id": {"type": "text", "index": 4, "name": "account_id", "comment": null}, "account_marketplace_string_id": {"type": "text", "index": 5, "name": "account_marketplace_string_id", "comment": null}, "account_name": {"type": "text", "index": 6, "name": "account_name", "comment": null}, "account_sub_type": {"type": "integer", "index": 7, "name": "account_sub_type", "comment": null}, "account_type": {"type": "text", "index": 8, "name": "account_type", "comment": null}, "account_valid_payment_method": {"type": "boolean", "index": 9, "name": "account_valid_payment_method", "comment": null}, "country_code": {"type": "text", "index": 10, "name": "country_code", "comment": null}, "currency_code": {"type": "text", "index": 11, "name": "currency_code", "comment": null}, "daily_budget": {"type": "integer", "index": 12, "name": "daily_budget", "comment": null}, "timezone": {"type": "text", "index": 13, "name": "timezone", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.profile"}, "source.amazon_ads.amazon_ads.search_term_ad_keyword_report": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "search_term_ad_keyword_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "integer", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "integer", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 6, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 7, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 8, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 9, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 10, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 11, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 12, "name": "keyword_bid", "comment": null}, "search_term": {"type": "text", "index": 13, "name": "search_term", "comment": null}, "targeting": {"type": "text", "index": 14, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.search_term_ad_keyword_report"}, "source.amazon_ads.amazon_ads.targeting_keyword_report": {"metadata": {"type": "BASE TABLE", "schema": "public", "name": "targeting_keyword_report_data", "database": "postgres", "comment": null, "owner": "postgres"}, "columns": {"ad_group_id": {"type": "integer", "index": 1, "name": "ad_group_id", "comment": null}, "campaign_id": {"type": "integer", "index": 2, "name": "campaign_id", "comment": null}, "date": {"type": "date", "index": 3, "name": "date", "comment": null}, "keyword_id": {"type": "integer", "index": 4, "name": "keyword_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 5, "name": "_fivetran_synced", "comment": null}, "ad_keyword_status": {"type": "text", "index": 6, "name": "ad_keyword_status", "comment": null}, "campaign_budget_amount": {"type": "double precision", "index": 7, "name": "campaign_budget_amount", "comment": null}, "campaign_budget_currency_code": {"type": "text", "index": 8, "name": "campaign_budget_currency_code", "comment": null}, "campaign_budget_type": {"type": "text", "index": 9, "name": "campaign_budget_type", "comment": null}, "clicks": {"type": "double precision", "index": 10, "name": "clicks", "comment": null}, "cost": {"type": "double precision", "index": 11, "name": "cost", "comment": null}, "impressions": {"type": "double precision", "index": 12, "name": "impressions", "comment": null}, "keyword_bid": {"type": "double precision", "index": 13, "name": "keyword_bid", "comment": null}, "keyword_type": {"type": "text", "index": 14, "name": "keyword_type", "comment": null}, "match_type": {"type": "text", "index": 15, "name": "match_type", "comment": null}, "targeting": {"type": "text", "index": 16, "name": "targeting", "comment": null}}, "stats": {"has_stats": {"id": "has_stats", "label": "Has Stats?", "value": false, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.amazon_ads.amazon_ads.targeting_keyword_report"}}, "errors": null} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index ca1e6f8..9be6f0f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,30 +1,149 @@ - - - - - + + - dbt Docs - - + + + + dbt Docs + + + + + + + + + + + + + - - - - - - - - - - - - - - -
icons
-
- +*/var r = function (e, t) { this.recycle(e, t) }; function i() { return !1 } function o() { return !0 } r.prototype = { instanceString: function () { return "event" }, recycle: function (e, t) { if (this.isImmediatePropagationStopped = this.isPropagationStopped = this.isDefaultPrevented = i, null != e && e.preventDefault ? (this.type = e.type, this.isDefaultPrevented = e.defaultPrevented ? o : i) : null != e && e.type ? t = e : this.type = e, null != t && (this.originalEvent = t.originalEvent, this.type = null != t.type ? t.type : this.type, this.cy = t.cy, this.target = t.target, this.position = t.position, this.renderedPosition = t.renderedPosition, this.namespace = t.namespace, this.layout = t.layout), null != this.cy && null != this.position && null == this.renderedPosition) { var n = this.position, r = this.cy.zoom(), a = this.cy.pan(); this.renderedPosition = { x: n.x * r + a.x, y: n.y * r + a.y } } this.timeStamp = e && e.timeStamp || Date.now() }, preventDefault: function () { this.isDefaultPrevented = o; var e = this.originalEvent; e && e.preventDefault && e.preventDefault() }, stopPropagation: function () { this.isPropagationStopped = o; var e = this.originalEvent; e && e.stopPropagation && e.stopPropagation() }, stopImmediatePropagation: function () { this.isImmediatePropagationStopped = o, this.stopPropagation() }, isDefaultPrevented: i, isPropagationStopped: i, isImmediatePropagationStopped: i }, e.exports = r + }, function (e, t, n) { "use strict"; var r = n(1); e.exports = function (e, t) { var n = e.cy().hasCompoundNodes(); function i(e) { var t = e.pstyle("z-compound-depth"); return "auto" === t.value ? n ? e.zDepth() : 0 : "bottom" === t.value ? -1 : "top" === t.value ? r.MAX_INT : 0 } var o = i(e) - i(t); if (0 !== o) return o; function a(e) { return "auto" === e.pstyle("z-index-compare").value && e.isNode() ? 1 : 0 } var s = a(e) - a(t); if (0 !== s) return s; var l = e.pstyle("z-index").value - t.pstyle("z-index").value; return 0 !== l ? l : e.poolIndex() - t.poolIndex() } }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(6), a = function e(t) { if (!(this instanceof e)) return new e(t); r.core(t) ? (this._private = { cy: t, coreStyle: {} }, this.length = 0, this.resetToDefault()) : i.error("A style must have a core reference") }, s = a.prototype; s.instanceString = function () { return "style" }, s.clear = function () { for (var e = 0; e < this.length; e++)this[e] = void 0; return this.length = 0, this._private.newStyle = !0, this }, s.resetToDefault = function () { return this.clear(), this.addDefaultStylesheet(), this }, s.core = function () { return this._private.coreStyle }, s.selector = function (e) { var t = "core" === e ? null : new o(e), n = this.length++; return this[n] = { selector: t, properties: [], mappedProperties: [], index: n }, this }, s.css = function () { var e = this, t = arguments; switch (t.length) { case 1: for (var n = t[0], r = 0; r < e.properties.length; r++) { var o = e.properties[r], a = n[o.name]; void 0 === a && (a = n[i.dash2camel(o.name)]), void 0 !== a && this.cssRule(o.name, a) } break; case 2: this.cssRule(t[0], t[1]) }return this }, s.style = s.css, s.cssRule = function (e, t) { var n = this.parse(e, t); if (n) { var r = this.length - 1; this[r].properties.push(n), this[r].properties[n.name] = n, n.name.match(/pie-(\d+)-background-size/) && n.value && (this._private.hasPie = !0), n.mapped && this[r].mappedProperties.push(n), !this[r].selector && (this._private.coreStyle[n.name] = n) } return this }, s.append = function (e) { return r.stylesheet(e) ? e.appendToStyle(this) : r.array(e) ? this.appendFromJson(e) : r.string(e) && this.appendFromString(e), this }, a.fromJson = function (e, t) { var n = new a(e); return n.fromJson(t), n }, a.fromString = function (e, t) { return new a(e).fromString(t) }, [n(85), n(86), n(87), n(88), n(89), n(90), n(91), n(92)].forEach((function (e) { i.extend(s, e) })), a.types = s.types, a.properties = s.properties, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1); e.exports = { setupDequeueing: function (e) { return function () { var t = this, n = this.renderer; if (!t.dequeueingSetup) { t.dequeueingSetup = !0; var i = r.debounce((function () { n.redrawHint("eles", !0), n.redrawHint("drag", !0), n.redraw() }), e.deqRedrawThreshold), o = e.priority || r.noop; n.beforeRender((function (o, a) { for (var s = r.performanceNow(), l = n.averageRedrawTime, c = n.lastRedrawTime, u = [], d = n.cy.extent(), p = n.getPixelRatio(); ;) { var f = r.performanceNow(), h = f - s, g = f - a; if (c < 1e3 / 60) { var m = 1e3 / 60 - (o ? l : 0); if (g >= e.deqFastCost * m) break } else if (o) { if (h >= e.deqCost * c || h >= e.deqAvgCost * l) break } else if (g >= e.deqNoDrawCost * (1e3 / 60)) break; var v = e.deq(t, p, d); if (!(v.length > 0)) break; for (var b = 0; b < v.length; b++)u.push(v[b]) } u.length > 0 && (e.onDeqd(t, u), !o && e.shouldRedraw(t, u, p, d) && i()) }), o(t)) } } } } }, function (e, t, n) { "use strict"; var r = n(0), i = n(12), o = n(94), a = n(136), s = function (e) { return void 0 === e && (e = {}), r.plainObject(e) ? new i(e) : r.string(e) ? o.apply(o, arguments) : void 0 }; s.use = function (e) { var t = Array.prototype.slice.call(arguments, 1); return t.unshift(s), e.apply(null, t), this }, s.version = n(137), s.stylesheet = s.Stylesheet = a, e.exports = s }, function (e, t, n) { "use strict"; var r = n(0); e.exports = { hex2tuple: function (e) { if ((4 === e.length || 7 === e.length) && "#" === e[0]) { var t = void 0, n = void 0, r = void 0; return 4 === e.length ? (t = parseInt(e[1] + e[1], 16), n = parseInt(e[2] + e[2], 16), r = parseInt(e[3] + e[3], 16)) : (t = parseInt(e[1] + e[2], 16), n = parseInt(e[3] + e[4], 16), r = parseInt(e[5] + e[6], 16)), [t, n, r] } }, hsl2tuple: function (e) { var t = void 0, n = void 0, r = void 0, i = void 0, o = void 0, a = void 0, s = void 0, l = void 0; function c(e, t, n) { return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? e + 6 * (t - e) * n : n < .5 ? t : n < 2 / 3 ? e + (t - e) * (2 / 3 - n) * 6 : e } var u = new RegExp("^" + this.regex.hsla + "$").exec(e); if (u) { if ((n = parseInt(u[1])) < 0 ? n = (360 - -1 * n % 360) % 360 : n > 360 && (n %= 360), n /= 360, (r = parseFloat(u[2])) < 0 || r > 100) return; if (r /= 100, (i = parseFloat(u[3])) < 0 || i > 100) return; if (i /= 100, void 0 !== (o = u[4]) && ((o = parseFloat(o)) < 0 || o > 1)) return; if (0 === r) a = s = l = Math.round(255 * i); else { var d = i < .5 ? i * (1 + r) : i + r - i * r, p = 2 * i - d; a = Math.round(255 * c(p, d, n + 1 / 3)), s = Math.round(255 * c(p, d, n)), l = Math.round(255 * c(p, d, n - 1 / 3)) } t = [a, s, l, o] } return t }, rgb2tuple: function (e) { var t = void 0, n = new RegExp("^" + this.regex.rgba + "$").exec(e); if (n) { t = []; for (var r = [], i = 1; i <= 3; i++) { var o = n[i]; if ("%" === o[o.length - 1] && (r[i] = !0), o = parseFloat(o), r[i] && (o = o / 100 * 255), o < 0 || o > 255) return; t.push(Math.floor(o)) } var a = r[1] || r[2] || r[3], s = r[1] && r[2] && r[3]; if (a && !s) return; var l = n[4]; if (void 0 !== l) { if ((l = parseFloat(l)) < 0 || l > 1) return; t.push(l) } } return t }, colorname2tuple: function (e) { return this.colors[e.toLowerCase()] }, color2tuple: function (e) { return (r.array(e) ? e : null) || this.colorname2tuple(e) || this.hex2tuple(e) || this.rgb2tuple(e) || this.hsl2tuple(e) }, colors: { transparent: [0, 0, 0, 0], aliceblue: [240, 248, 255], antiquewhite: [250, 235, 215], aqua: [0, 255, 255], aquamarine: [127, 255, 212], azure: [240, 255, 255], beige: [245, 245, 220], bisque: [255, 228, 196], black: [0, 0, 0], blanchedalmond: [255, 235, 205], blue: [0, 0, 255], blueviolet: [138, 43, 226], brown: [165, 42, 42], burlywood: [222, 184, 135], cadetblue: [95, 158, 160], chartreuse: [127, 255, 0], chocolate: [210, 105, 30], coral: [255, 127, 80], cornflowerblue: [100, 149, 237], cornsilk: [255, 248, 220], crimson: [220, 20, 60], cyan: [0, 255, 255], darkblue: [0, 0, 139], darkcyan: [0, 139, 139], darkgoldenrod: [184, 134, 11], darkgray: [169, 169, 169], darkgreen: [0, 100, 0], darkgrey: [169, 169, 169], darkkhaki: [189, 183, 107], darkmagenta: [139, 0, 139], darkolivegreen: [85, 107, 47], darkorange: [255, 140, 0], darkorchid: [153, 50, 204], darkred: [139, 0, 0], darksalmon: [233, 150, 122], darkseagreen: [143, 188, 143], darkslateblue: [72, 61, 139], darkslategray: [47, 79, 79], darkslategrey: [47, 79, 79], darkturquoise: [0, 206, 209], darkviolet: [148, 0, 211], deeppink: [255, 20, 147], deepskyblue: [0, 191, 255], dimgray: [105, 105, 105], dimgrey: [105, 105, 105], dodgerblue: [30, 144, 255], firebrick: [178, 34, 34], floralwhite: [255, 250, 240], forestgreen: [34, 139, 34], fuchsia: [255, 0, 255], gainsboro: [220, 220, 220], ghostwhite: [248, 248, 255], gold: [255, 215, 0], goldenrod: [218, 165, 32], gray: [128, 128, 128], grey: [128, 128, 128], green: [0, 128, 0], greenyellow: [173, 255, 47], honeydew: [240, 255, 240], hotpink: [255, 105, 180], indianred: [205, 92, 92], indigo: [75, 0, 130], ivory: [255, 255, 240], khaki: [240, 230, 140], lavender: [230, 230, 250], lavenderblush: [255, 240, 245], lawngreen: [124, 252, 0], lemonchiffon: [255, 250, 205], lightblue: [173, 216, 230], lightcoral: [240, 128, 128], lightcyan: [224, 255, 255], lightgoldenrodyellow: [250, 250, 210], lightgray: [211, 211, 211], lightgreen: [144, 238, 144], lightgrey: [211, 211, 211], lightpink: [255, 182, 193], lightsalmon: [255, 160, 122], lightseagreen: [32, 178, 170], lightskyblue: [135, 206, 250], lightslategray: [119, 136, 153], lightslategrey: [119, 136, 153], lightsteelblue: [176, 196, 222], lightyellow: [255, 255, 224], lime: [0, 255, 0], limegreen: [50, 205, 50], linen: [250, 240, 230], magenta: [255, 0, 255], maroon: [128, 0, 0], mediumaquamarine: [102, 205, 170], mediumblue: [0, 0, 205], mediumorchid: [186, 85, 211], mediumpurple: [147, 112, 219], mediumseagreen: [60, 179, 113], mediumslateblue: [123, 104, 238], mediumspringgreen: [0, 250, 154], mediumturquoise: [72, 209, 204], mediumvioletred: [199, 21, 133], midnightblue: [25, 25, 112], mintcream: [245, 255, 250], mistyrose: [255, 228, 225], moccasin: [255, 228, 181], navajowhite: [255, 222, 173], navy: [0, 0, 128], oldlace: [253, 245, 230], olive: [128, 128, 0], olivedrab: [107, 142, 35], orange: [255, 165, 0], orangered: [255, 69, 0], orchid: [218, 112, 214], palegoldenrod: [238, 232, 170], palegreen: [152, 251, 152], paleturquoise: [175, 238, 238], palevioletred: [219, 112, 147], papayawhip: [255, 239, 213], peachpuff: [255, 218, 185], peru: [205, 133, 63], pink: [255, 192, 203], plum: [221, 160, 221], powderblue: [176, 224, 230], purple: [128, 0, 128], red: [255, 0, 0], rosybrown: [188, 143, 143], royalblue: [65, 105, 225], saddlebrown: [139, 69, 19], salmon: [250, 128, 114], sandybrown: [244, 164, 96], seagreen: [46, 139, 87], seashell: [255, 245, 238], sienna: [160, 82, 45], silver: [192, 192, 192], skyblue: [135, 206, 235], slateblue: [106, 90, 205], slategray: [112, 128, 144], slategrey: [112, 128, 144], snow: [255, 250, 250], springgreen: [0, 255, 127], steelblue: [70, 130, 180], tan: [210, 180, 140], teal: [0, 128, 128], thistle: [216, 191, 216], tomato: [255, 99, 71], turquoise: [64, 224, 208], violet: [238, 130, 238], wheat: [245, 222, 179], white: [255, 255, 255], whitesmoke: [245, 245, 245], yellow: [255, 255, 0], yellowgreen: [154, 205, 50] } } }, function (e, t, n) { "use strict"; var r = n(0); e.exports = { mapEmpty: function (e) { return null == e || 0 === Object.keys(e).length }, pushMap: function (e) { var t = this.getMap(e); null == t ? this.setMap(this.extend({}, e, { value: [e.value] })) : t.push(e.value) }, setMap: function (e) { for (var t = e.map, n = e.keys, i = n.length, o = 0; o < i; o++) { var a = n[o]; r.plainObject(a) && this.error("Tried to set map with object key"), o < n.length - 1 ? (null == t[a] && (t[a] = {}), t = t[a]) : t[a] = e.value } }, getMap: function (e) { for (var t = e.map, n = e.keys, i = n.length, o = 0; o < i; o++) { var a = n[o]; if (r.plainObject(a) && this.error("Tried to get map with object key"), null == (t = t[a])) return t } return t }, deleteMap: function (e) { for (var t = e.map, n = e.keys, i = n.length, o = e.keepChildren, a = 0; a < i; a++) { var s = n[a]; if (r.plainObject(s) && this.error("Tried to delete map with object key"), a === e.keys.length - 1) if (o) for (var l = Object.keys(t), c = 0; c < l.length; c++) { var u = l[c]; o[u] || (t[u] = void 0) } else t[s] = void 0; else t = t[s] } } } }, function (e, t, n) { "use strict"; var r = "(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))"; e.exports = { regex: { number: r, rgba: "rgb[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", rgbaNoBackRefs: "rgb[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%]?)(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", hsla: "hsl[a]?\\(((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*((?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", hslaNoBackRefs: "hsl[a]?\\((?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?)))\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))[%])(?:\\s*,\\s*(?:(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))))?\\)", hex3: "\\#[0-9a-fA-F]{3}", hex6: "\\#[0-9a-fA-F]{6}" } } }, function (e, t, n) { "use strict"; var r = n(13), i = n(0); e.exports = { camel2dash: r((function (e) { return e.replace(/([A-Z])/g, (function (e) { return "-" + e.toLowerCase() })) })), dash2camel: r((function (e) { return e.replace(/(-\w)/g, (function (e) { return e[1].toUpperCase() })) })), prependCamel: r((function (e, t) { return e + t[0].toUpperCase() + t.substring(1) }), (function (e, t) { return e + "$" + t })), capitalize: function (e) { return i.emptyString(e) ? e : e.charAt(0).toUpperCase() + e.substring(1) } } }, function (e, t, n) { "use strict"; var r = n(3), i = r ? r.performance : null, o = {}, a = i && i.now ? function () { return i.now() } : function () { return Date.now() }, s = function () { if (r) { if (r.requestAnimationFrame) return function (e) { r.requestAnimationFrame(e) }; if (r.mozRequestAnimationFrame) return function (e) { r.mozRequestAnimationFrame(e) }; if (r.webkitRequestAnimationFrame) return function (e) { r.webkitRequestAnimationFrame(e) }; if (r.msRequestAnimationFrame) return function (e) { r.msRequestAnimationFrame(e) } } return function (e) { e && setTimeout((function () { e(a()) }), 1e3 / 60) } }(); o.requestAnimationFrame = function (e) { s(e) }, o.performanceNow = a, o.debounce = n(26), o.now = function () { return Date.now() }, e.exports = o }, function (t, n) { t.exports = e }, function (e, t, n) { "use strict"; function r(e, t) { return e < t ? -1 : e > t ? 1 : 0 } e.exports = { sort: { ascending: r, descending: function (e, t) { return -1 * r(e, t) } } } }, function (e, t, n) { "use strict"; function r() { this._obj = {} } var i = r.prototype; i.set = function (e, t) { this._obj[e] = t }, i.delete = function (e) { this._obj[e] = null }, i.has = function (e) { return null != this._obj[e] }, i.get = function (e) { return this._obj[e] }, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = {};[n(30), n(31), n(33), n(34), n(35), n(36), n(37), n(38), n(39), n(40), n(41)].forEach((function (e) { r.extend(i, e) })), e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = function (e) { return e = { bfs: e.bfs || !e.dfs, dfs: e.dfs || !e.bfs }, function (t, n, i) { var o; r.plainObject(t) && !r.elementOrCollection(t) && (t = (o = t).roots || o.root, n = o.visit, i = o.directed), i = 2 !== arguments.length || r.fn(n) ? i : n, n = r.fn(n) ? n : function () { }; for (var a, s = this._private.cy, l = t = r.string(t) ? this.filter(t) : t, c = [], u = [], d = {}, p = {}, f = {}, h = 0, g = this.nodes(), m = this.edges(), v = 0; v < l.length; v++)l[v].isNode() && (c.unshift(l[v]), e.bfs && (f[l[v].id()] = !0, u.push(l[v])), p[l[v].id()] = 0); for (; 0 !== c.length;) { if (l = e.bfs ? c.shift() : c.pop(), e.dfs) { if (f[l.id()]) continue; f[l.id()] = !0, u.push(l) } var b, y = p[l.id()], x = d[l.id()], w = null == x ? void 0 : x.connectedNodes().not(l)[0]; if (!0 === (b = n(l, x, w, h++, y))) { a = l; break } if (!1 === b) break; var k = l.connectedEdges(i ? function (e) { return e.data("source") === l.id() } : void 0).intersect(m); for (v = 0; v < k.length; v++) { var A = k[v], E = A.connectedNodes((function (e) { return e.id() !== l.id() })).intersect(g); 0 === E.length || f[E.id()] || (E = E[0], c.push(E), e.bfs && (f[E.id()] = !0, u.push(E)), d[E.id()] = A, p[E.id()] = p[l.id()] + 1) } } var S = []; for (v = 0; v < u.length; v++) { var $ = u[v], C = d[$.id()]; C && S.push(C), S.push($) } return { path: s.collection(S, { unique: !0 }), found: s.collection(a) } } }, o = { breadthFirstSearch: i({ bfs: !0 }), depthFirstSearch: i({ dfs: !0 }) }; o.bfs = o.breadthFirstSearch, o.dfs = o.depthFirstSearch, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = n(9), o = { dijkstra: function (e, t, n) { var o; r.plainObject(e) && !r.elementOrCollection(e) && (e = (o = e).root, t = o.weight, n = o.directed); var a = this._private.cy; t = r.fn(t) ? t : function () { return 1 }; for (var s = r.string(e) ? this.filter(e)[0] : e[0], l = {}, c = {}, u = {}, d = this.edges().filter((function (e) { return !e.isLoop() })), p = this.nodes(), f = function (e) { return l[e.id()] }, h = function (e, t) { l[e.id()] = t, g.updateItem(e) }, g = new i((function (e, t) { return f(e) - f(t) })), m = 0; m < p.length; m++) { var v = p[m]; l[v.id()] = v.same(s) ? 0 : 1 / 0, g.push(v) } for (var b = function (e, r) { for (var i, o = (n ? e.edgesTo(r) : e.edgesWith(r)).intersect(d), a = 1 / 0, s = 0; s < o.length; s++) { var l = o[s], c = t(l); (c < a || !i) && (a = c, i = l) } return { edge: i, dist: a } }; g.size() > 0;) { var y = g.pop(), x = f(y), w = y.id(); if (u[w] = x, x !== 1 / 0) { var k = y.neighborhood().intersect(p); for (m = 0; m < k.length; m++) { var A = k[m], E = A.id(), S = b(y, A), $ = x + S.dist; $ < f(A) && (h(A, $), c[E] = { node: y, edge: S.edge }) } } } return { distanceTo: function (e) { var t = r.string(e) ? p.filter(e)[0] : e[0]; return u[t.id()] }, pathTo: function (e) { var t = r.string(e) ? p.filter(e)[0] : e[0], n = [], i = t; if (t.length > 0) for (n.unshift(t); c[i.id()];) { var o = c[i.id()]; n.unshift(o.edge), n.unshift(o.node), i = o.node } return a.collection(n) } } } }; e.exports = o }, function (e, t) { e.exports = n }, function (e, t, n) { "use strict"; var r = n(0), i = { kruskal: function (e) { var t = this.cy(); function n(e) { for (var t = 0; t < o.length; t++) { var n = o[t]; if (n.anySame(e)) return { eles: n, index: t } } } e = r.fn(e) ? e : function () { return 1 }; for (var i = t.collection(t, []), o = [], a = this.nodes(), s = 0; s < a.length; s++)o.push(a[s].collection()); var l = this.edges().toArray().sort((function (t, n) { return e(t) - e(n) })); for (s = 0; s < l.length; s++) { var c = l[s], u = c.source()[0], d = c.target()[0], p = n(u), f = n(d); p.index !== f.index && (i = i.add(c), o[p.index] = p.eles.add(f.eles), o.splice(f.index, 1)) } return a.add(i) } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = { aStar: function (e) { e = e || {}; var t = function e(t, n, r, o) { if (t == n) return o.unshift(i.getElementById(n)), o; if (n in r) { var a = r[n], s = g[n]; return o.unshift(i.getElementById(s)), o.unshift(i.getElementById(n)), e(t, a, r, o) } }, n = function (e, t) { if (0 !== e.length) { for (var n = 0, r = t[e[0]], i = 1; i < e.length; i++) { var o = t[e[i]]; o < r && (r = o, n = i) } return n } }, i = this._private.cy; if (null != e && null != e.root) { var o = r.string(e.root) ? this.filter(e.root)[0] : e.root[0]; if (null != e.goal) { var a = r.string(e.goal) ? this.filter(e.goal)[0] : e.goal[0]; if (null != e.heuristic && r.fn(e.heuristic)) var s = e.heuristic; else s = function () { return 0 }; if (null != e.weight && r.fn(e.weight)) var l = e.weight; else l = function (e) { return 1 }; if (null != e.directed) var c = e.directed; else c = !1; var u = o.id(), d = a.id(), p = [], f = [u], h = {}, g = {}, m = {}, v = {}; m[u] = 0, v[u] = s(o); for (var b = 0; f.length > 0;) { var y = n(f, v), x = i.getElementById(f[y]), w = x.id(); if (b++, w == d) { var k = t(u, d, h, []); return { found: !0, distance: m[w], path: this.spawn(k), steps: b } } p.push(w), f.splice(y, 1); for (var A = x._private.edges, E = 0; E < A.length; E++) { var S = A[E]; if (this.hasElementWithId(S.id()) && (!c || S.data("source") === w)) { var $ = S.source(), C = S.target(), _ = $.id() !== w ? $ : C, O = _.id(); if (this.hasElementWithId(O) && -1 == p.indexOf(O)) { var T = m[w] + l(S); -1 != f.indexOf(O) ? T < m[O] && (m[O] = T, v[O] = T + s(_), h[O] = w) : (m[O] = T, v[O] = T + s(_), f.push(O), h[O] = w, g[O] = S.id()) } } } } return { found: !1, distance: void 0, path: void 0, steps: b } } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = { floydWarshall: function (e) { e = e || {}; var t = this.cy(); if (null != e.weight && r.fn(e.weight)) var n = e.weight; else n = function (e) { return 1 }; if (null != e.directed) var i = e.directed; else i = !1; for (var o = this.edges().stdFilter((function (e) { return !e.isLoop() })), a = this.nodes(), s = a.length, l = {}, c = 0; c < s; c++)l[a[c].id()] = c; var u = []; for (c = 0; c < s; c++) { for (var d = new Array(s), p = 0; p < s; p++)d[p] = c == p ? 0 : 1 / 0; u.push(d) } var f = [], h = [], g = function (e) { for (var t = 0; t < s; t++) { for (var n = new Array(s), r = 0; r < s; r++)n[r] = void 0; e.push(n) } }; for (g(f), g(h), c = 0; c < o.length; c++) { var m = l[o[c].source().id()], v = l[o[c].target().id()], b = n(o[c]); u[m][v] > b && (u[m][v] = b, f[m][v] = v, h[m][v] = o[c]) } if (!i) for (c = 0; c < o.length; c++)m = l[o[c].target().id()], v = l[o[c].source().id()], b = n(o[c]), u[m][v] > b && (u[m][v] = b, f[m][v] = v, h[m][v] = o[c]); for (var y = 0; y < s; y++)for (c = 0; c < s; c++)for (p = 0; p < s; p++)u[c][y] + u[y][p] < u[c][p] && (u[c][p] = u[c][y] + u[y][p], f[c][p] = f[c][y]); var x = []; for (c = 0; c < s; c++)x.push(a[c].id()); return { distance: function (e, n) { if (r.string(e)) var i = t.filter(e)[0].id(); else i = e.id(); if (r.string(n)) var o = t.filter(n)[0].id(); else o = n.id(); return u[l[i]][l[o]] }, path: function (e, n) { if (r.string(e)) var i = t.filter(e)[0].id(); else i = e.id(); if (r.string(n)) var o = t.filter(n)[0].id(); else o = n.id(); var a = function (e, n, r, i, o) { if (e === n) return t.getElementById(i[e]); if (void 0 !== r[e][n]) { for (var a = [t.getElementById(i[e])], s = e; e !== n;) { s = e, e = r[e][n]; var l = o[s][e]; a.push(l), a.push(t.getElementById(i[e])) } return a } }(l[i], l[o], f, x, h); return t.collection(a) } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = { bellmanFord: function (e) { var t = this; if (null != (e = e || {}).weight && r.fn(e.weight)) var n = e.weight; else n = function (e) { return 1 }; if (null != e.directed) var o = e.directed; else o = !1; if (null != e.root) { if (r.string(e.root)) var a = this.filter(e.root)[0]; else a = e.root[0]; for (var s = this._private.cy, l = this.edges().stdFilter((function (e) { return !e.isLoop() })), c = this.nodes(), u = c.length, d = {}, p = 0; p < u; p++)d[c[p].id()] = p; var f = [], h = [], g = []; for (p = 0; p < u; p++)c[p].id() === a.id() ? f[p] = 0 : f[p] = 1 / 0, h[p] = void 0; var m = !1; for (p = 1; p < u; p++) { m = !1; for (var v = 0; v < l.length; v++) { var b, y = d[l[v].source().id()], x = d[l[v].target().id()], w = n(l[v]); (b = f[y] + w) < f[x] && (f[x] = b, h[x] = y, g[x] = l[v], m = !0), o || (b = f[x] + w) < f[y] && (f[y] = b, h[y] = x, g[y] = l[v], m = !0) } if (!m) break } if (m) for (v = 0; v < l.length; v++)if (y = d[l[v].source().id()], x = d[l[v].target().id()], w = n(l[v]), f[y] + w < f[x]) return i.error("Graph contains a negative weight cycle for Bellman-Ford"), { pathTo: void 0, distanceTo: void 0, hasNegativeWeightCycle: !0 }; var k = []; for (p = 0; p < u; p++)k.push(c[p].id()); return { distanceTo: function (e) { if (r.string(e)) var t = s.filter(e)[0].id(); else t = e.id(); return f[d[t]] }, pathTo: function (e) { if (r.string(e)) var n = s.filter(e)[0].id(); else n = e.id(); var i = function (e, t, n, r, i, o) { for (; ;) { if (i.push(s.getElementById(r[n])), i.push(o[n]), t === n) return i; var a = e[n]; if (void 0 === a) return; n = a } }(h, d[a.id()], d[n], k, [], g); return null != i && i.reverse(), t.spawn(i) }, hasNegativeWeightCycle: !1 } } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = { kargerStein: function (e) { e = e || {}; var t = function e(t, n, r, i) { return r <= i ? n : e(t, function (e, t, n) { for (var r = n[e], i = r[1], o = r[2], a = t[i], s = t[o], l = n.filter((function (e) { return !(t[e[1]] === a && t[e[2]] === s || t[e[1]] === s && t[e[2]] === a) })), c = 0; c < l.length; c++) { var u = l[c]; u[1] === s ? (l[c] = u.slice(0), l[c][1] = a) : u[2] === s && (l[c] = u.slice(0), l[c][2] = a) } for (c = 0; c < t.length; c++)t[c] === s && (t[c] = a); return l }(Math.floor(Math.random() * n.length), t, n), r - 1, i) }, n = this._private.cy, i = this.edges().stdFilter((function (e) { return !e.isLoop() })), o = this.nodes(), a = o.length, s = i.length, l = Math.ceil(Math.pow(Math.log(a) / Math.LN2, 2)), c = Math.floor(a / Math.sqrt(2)); if (!(a < 2)) { for (var u = {}, d = 0; d < a; d++)u[o[d].id()] = d; var p = []; for (d = 0; d < s; d++) { var f = i[d]; p.push([d, u[f.source().id()], u[f.target().id()]]) } var h, g = 1 / 0, m = []; for (d = 0; d < a; d++)m.push(d); for (var v = 0; v <= l; v++) { var b = m.slice(0), y = t(b, p, a, c), x = b.slice(0), w = t(b, y, c, 2), k = t(x, y, c, 2); w.length <= k.length && w.length < g ? (g = w.length, h = [w, b]) : k.length <= w.length && k.length < g && (g = k.length, h = [k, x]) } var A = h[0].map((function (e) { return i[e[0]] })), E = [], S = [], $ = h[1][0]; for (d = 0; d < h[1].length; d++)h[1][d] === $ ? E.push(o[d]) : S.push(o[d]); return { cut: this.spawn(n, A), partition1: this.spawn(E), partition2: this.spawn(S) } } r.error("At least 2 nodes are required for Karger-Stein algorithm") } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = { pageRank: function (e) { var t = function (e) { for (var t = e.length, n = 0, r = 0; r < t; r++)n += e[r]; for (r = 0; r < t; r++)e[r] = e[r] / n }; if (null != (e = e || {}) && null != e.dampingFactor) var n = e.dampingFactor; else n = .8; if (null != e && null != e.precision) var i = e.precision; else i = 1e-6; if (null != e && null != e.iterations) var o = e.iterations; else o = 200; if (null != e && null != e.weight && r.fn(e.weight)) var a = e.weight; else a = function (e) { return 1 }; for (var s = this._private.cy, l = this.edges().stdFilter((function (e) { return !e.isLoop() })), c = this.nodes(), u = c.length, d = l.length, p = {}, f = 0; f < u; f++)p[c[f].id()] = f; var h = [], g = [], m = (1 - n) / u; for (f = 0; f < u; f++) { for (var v = [], b = 0; b < u; b++)v.push(0); h.push(v), g.push(0) } for (f = 0; f < d; f++) { var y = l[f], x = p[y.source().id()], w = p[y.target().id()], k = a(y); h[w][x] += k, g[x] += k } var A = 1 / u + m; for (b = 0; b < u; b++)if (0 === g[b]) for (f = 0; f < u; f++)h[f][b] = A; else for (f = 0; f < u; f++)h[f][b] = h[f][b] / g[b] + m; var E, S = [], $ = []; for (f = 0; f < u; f++)S.push(1), $.push(0); for (var C = 0; C < o; C++) { var _ = $.slice(0); for (f = 0; f < u; f++)for (b = 0; b < u; b++)_[f] += h[f][b] * S[b]; t(_), E = S, S = _; var O = 0; for (f = 0; f < u; f++)O += Math.pow(E[f] - S[f], 2); if (O < i) break } return { rank: function (e) { if (r.string(e)) var t = s.filter(e)[0].id(); else t = e.id(); return S[p[t]] } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = { degreeCentralityNormalized: function (e) { e = e || {}; var t = this.cy(); if (null != e.directed) var n = e.directed; else n = !1; var o = this.nodes(), a = o.length; if (n) { var s = {}, l = {}, c = 0, u = 0; for (f = 0; f < a; f++)h = o[f], g = this.degreeCentrality(i.extend({}, e, { root: h })), c < g.indegree && (c = g.indegree), u < g.outdegree && (u = g.outdegree), s[h.id()] = g.indegree, l[h.id()] = g.outdegree; return { indegree: function (e) { return 0 == c ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), s[e] / c) }, outdegree: function (e) { return 0 == u ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), l[e] / u) } } } for (var d = {}, p = 0, f = 0; f < a; f++) { var h = o[f], g = this.degreeCentrality(i.extend({}, e, { root: h })); p < g.degree && (p = g.degree), d[h.id()] = g.degree } return { degree: function (e) { return 0 == p ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), d[e] / p) } } }, degreeCentrality: function (e) { if (null != (e = e || {}) && null != e.root) { var t = r.string(e.root) ? this.filter(e.root)[0] : e.root[0]; if (null != e.weight && r.fn(e.weight)) var n = e.weight; else n = function (e) { return 1 }; if (null != e.directed) var i = e.directed; else i = !1; if (null != e.alpha && r.number(e.alpha)) var o = e.alpha; else o = 0; if (i) { var a = t.connectedEdges('edge[target = "' + t.id() + '"]').intersection(this), s = t.connectedEdges('edge[source = "' + t.id() + '"]').intersection(this), l = a.length, c = s.length, u = 0, d = 0; for (g = 0; g < a.length; g++)u += n(a[g]); for (g = 0; g < s.length; g++)d += n(s[g]); return { indegree: Math.pow(l, 1 - o) * Math.pow(u, o), outdegree: Math.pow(c, 1 - o) * Math.pow(d, o) } } for (var p = t.connectedEdges().intersection(this), f = p.length, h = 0, g = 0; g < p.length; g++)h += n(p[g]); return { degree: Math.pow(f, 1 - o) * Math.pow(h, o) } } } }; o.dc = o.degreeCentrality, o.dcn = o.degreeCentralityNormalised = o.degreeCentralityNormalized, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = { closenessCentralityNormalized: function (e) { e = e || {}; var t = this.cy(), n = e.harmonic; void 0 === n && (n = !0); for (var i = {}, o = 0, a = this.nodes(), s = this.floydWarshall({ weight: e.weight, directed: e.directed }), l = 0; l < a.length; l++) { for (var c = 0, u = 0; u < a.length; u++)if (l != u) { var d = s.distance(a[l], a[u]); c += n ? 1 / d : d } n || (c = 1 / c), o < c && (o = c), i[a[l].id()] = c } return { closeness: function (e) { return 0 == o ? 0 : (e = r.string(e) ? t.filter(e)[0].id() : e.id(), i[e] / o) } } }, closenessCentrality: function (e) { if (null != (e = e || {}).root) { if (r.string(e.root)) var t = this.filter(e.root)[0]; else t = e.root[0]; if (null != e.weight && r.fn(e.weight)) var n = e.weight; else n = function () { return 1 }; if (null != e.directed && r.bool(e.directed)) var i = e.directed; else i = !1; var o = e.harmonic; void 0 === o && (o = !0); for (var a = this.dijkstra({ root: t, weight: n, directed: i }), s = 0, l = this.nodes(), c = 0; c < l.length; c++)if (l[c].id() != t.id()) { var u = a.distanceTo(l[c]); s += o ? 1 / u : u } return o ? s : 1 / s } } }; i.cc = i.closenessCentrality, i.ccn = i.closenessCentralityNormalised = i.closenessCentralityNormalized, e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(9), o = { betweennessCentrality: function (e) { var t, n; e = e || {}, r.fn(e.weight) ? (n = e.weight, t = !0) : t = !1; for (var o = null != e.directed && e.directed, a = this._private.cy, s = this.nodes(), l = {}, c = {}, u = 0, d = function (e, t) { c[e] = t, t > u && (u = t) }, p = function (e) { return c[e] }, f = 0; f < s.length; f++)l[w = (k = s[f]).id()] = o ? k.outgoers().nodes() : k.openNeighborhood().nodes(), d(w, 0); for (var h = 0; h < s.length; h++) { var g = s[h].id(), m = [], v = {}, b = {}, y = {}, x = new i((function (e, t) { return y[e] - y[t] })); for (f = 0; f < s.length; f++) { var w; v[w = s[f].id()] = [], b[w] = 0, y[w] = 1 / 0 } for (b[g] = 1, y[g] = 0, x.push(g); !x.empty();) { var k = x.pop(); if (m.push(k), t) for (var A = 0; A < l[k].length; A++) { var E = l[k][A], S = a.getElementById(k), $ = n(S.edgesTo(E).length > 0 ? S.edgesTo(E)[0] : E.edgesTo(S)[0]); E = E.id(), y[E] > y[k] + $ && (y[E] = y[k] + $, x.nodes.indexOf(E) < 0 ? x.push(E) : x.updateItem(E), b[E] = 0, v[E] = []), y[E] == y[k] + $ && (b[E] = b[E] + b[k], v[E].push(k)) } else for (A = 0; A < l[k].length; A++)E = l[k][A].id(), y[E] == 1 / 0 && (x.push(E), y[E] = y[k] + 1), y[E] == y[k] + 1 && (b[E] = b[E] + b[k], v[E].push(k)) } var C = {}; for (f = 0; f < s.length; f++)C[s[f].id()] = 0; for (; m.length > 0;)for (E = m.pop(), A = 0; A < v[E].length; A++)C[k = v[E][A]] = C[k] + b[k] / b[E] * (1 + C[E]), E != s[h].id() && d(E, p(E) + C[E]) } var _ = { betweenness: function (e) { return e = r.string(e) ? a.filter(e).id() : e.id(), p(e) }, betweennessNormalized: function (e) { return 0 == u ? 0 : (e = r.string(e) ? a.filter(e).id() : e.id(), p(e) / u) } }; return _.betweennessNormalised = _.betweennessNormalized, _ } }; o.bc = o.betweennessCentrality, e.exports = o }, function (e, t, n) { "use strict"; var r = n(4), i = { animate: r.animate(), animation: r.animation(), animated: r.animated(), clearQueue: r.clearQueue(), delay: r.delay(), delayAnimation: r.delayAnimation(), stop: r.stop() }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(44), o = n(2), a = n(0), s = { animated: function () { return function () { var e = void 0 !== this.length ? this : [this]; if (!(this._private.cy || this).styleEnabled()) return !1; var t = e[0]; return t ? t._private.animation.current.length > 0 : void 0 } }, clearQueue: function () { return function () { var e = void 0 !== this.length ? this : [this]; if (!(this._private.cy || this).styleEnabled()) return this; for (var t = 0; t < e.length; t++)e[t]._private.animation.queue = []; return this } }, delay: function () { return function (e, t) { return (this._private.cy || this).styleEnabled() ? this.animate({ delay: e, duration: e, complete: t }) : this } }, delayAnimation: function () { return function (e, t) { return (this._private.cy || this).styleEnabled() ? this.animation({ delay: e, duration: e, complete: t }) : this } }, animation: function () { return function (e, t) { var n = void 0 !== this.length, s = n ? this : [this], l = this._private.cy || this, c = !n, u = !c; if (!l.styleEnabled()) return this; var d = l.style(); if (e = r.assign({}, e, t), 0 === Object.keys(e).length) return new i(s[0], e); switch (void 0 === e.duration && (e.duration = 400), e.duration) { case "slow": e.duration = 600; break; case "fast": e.duration = 200 }if (u && (e.style = d.getPropsList(e.style || e.css), e.css = void 0), u && null != e.renderedPosition) { var p = e.renderedPosition, f = l.pan(), h = l.zoom(); e.position = o.renderedToModelPosition(p, h, f) } if (c && null != e.panBy) { var g = e.panBy, m = l.pan(); e.pan = { x: m.x + g.x, y: m.y + g.y } } var v = e.center || e.centre; if (c && null != v) { var b = l.getCenterPan(v.eles, e.zoom); null != b && (e.pan = b) } if (c && null != e.fit) { var y = e.fit, x = l.getFitViewport(y.eles || y.boundingBox, y.padding); null != x && (e.pan = x.pan, e.zoom = x.zoom) } if (c && a.plainObject(e.zoom)) { var w = l.getZoomedViewport(e.zoom); null != w && (w.zoomed && (e.zoom = w.zoom), w.panned && (e.pan = w.pan)) } return new i(s[0], e) } }, animate: function () { return function (e, t) { var n = void 0 !== this.length ? this : [this]; if (!(this._private.cy || this).styleEnabled()) return this; t && (e = r.extend({}, e, t)); for (var i = 0; i < n.length; i++) { var o = n[i], a = o.animated() && (void 0 === e.queue || e.queue); o.animation(e, a ? { queue: !0 } : void 0).play() } return this } }, stop: function () { return function (e, t) { var n = void 0 !== this.length ? this : [this], r = this._private.cy || this; if (!r.styleEnabled()) return this; for (var i = 0; i < n.length; i++) { for (var o = n[i]._private, a = o.animation.current, s = 0; s < a.length; s++) { var l = a[s]._private; t && (l.duration = 0) } e && (o.animation.queue = []), t || (o.animation.current = []) } return r.notify({ eles: this, type: "draw" }), this } } }; e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(5), a = function (e, t, n) { var o = this._private = r.extend({ duration: 1e3 }, t, n); o.target = e, o.style = o.style || o.css, o.started = !1, o.playing = !1, o.hooked = !1, o.applying = !1, o.progress = 0, o.completes = [], o.frames = [], o.complete && i.fn(o.complete) && o.completes.push(o.complete), this.length = 1, this[0] = this }, s = a.prototype; r.extend(s, { instanceString: function () { return "animation" }, hook: function () { var e = this._private; if (!e.hooked) { var t = e.target._private.animation; (e.queue ? t.queue : t.current).push(this), i.elementOrCollection(e.target) && e.target.cy().addToAnimationPool(e.target), e.hooked = !0 } return this }, play: function () { var e = this._private; return 1 === e.progress && (e.progress = 0), e.playing = !0, e.started = !1, e.stopped = !1, this.hook(), this }, playing: function () { return this._private.playing }, apply: function () { var e = this._private; return e.applying = !0, e.started = !1, e.stopped = !1, this.hook(), this }, applying: function () { return this._private.applying }, pause: function () { var e = this._private; return e.playing = !1, e.started = !1, this }, stop: function () { var e = this._private; return e.playing = !1, e.started = !1, e.stopped = !0, this }, rewind: function () { return this.progress(0) }, fastforward: function () { return this.progress(1) }, time: function (e) { var t = this._private; return void 0 === e ? t.progress * t.duration : this.progress(e / t.duration) }, progress: function (e) { var t = this._private, n = t.playing; return void 0 === e ? t.progress : (n && this.pause(), t.progress = e, t.started = !1, n && this.play(), this) }, completed: function () { return 1 === this._private.progress }, reverse: function () { var e = this._private, t = e.playing; t && this.pause(), e.progress = 1 - e.progress, e.started = !1; var n = function (t, n) { var r = e[t]; null != r && (e[t] = e[n], e[n] = r) }; if (n("zoom", "startZoom"), n("pan", "startPan"), n("position", "startPosition"), e.style) for (var r = 0; r < e.style.length; r++) { var i = e.style[r], o = i.name, a = e.startStyle[o]; e.startStyle[o] = i, e.style[r] = a } return t && this.play(), this }, promise: function (e) { var t = this._private, n = void 0; switch (e) { case "frame": n = t.frames; break; default: case "complete": case "completed": n = t.completes }return new o((function (e, t) { n.push((function () { e() })) })) } }), s.complete = s.completed, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { data: function (e) { return e = r.extend({}, { field: "data", bindingEvent: "data", allowBinding: !1, allowSetting: !1, allowGetting: !1, settingEvent: "data", settingTriggersEvent: !1, triggerFnName: "trigger", immutableKeys: {}, updateStyle: !1, beforeGet: function (e) { }, beforeSet: function (e, t) { }, onSet: function (e) { }, canSet: function (e) { return !0 } }, e), function (t, n) { var r = e, o = void 0 !== this.length, a = o ? this : [this], s = o ? this[0] : this; if (i.string(t)) { if (r.allowGetting && void 0 === n) { var l = void 0; return s && (r.beforeGet(s), l = s._private[r.field][t]), l } if (r.allowSetting && void 0 !== n && !r.immutableKeys[t]) { var c = function (e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e }({}, t, n); r.beforeSet(this, c); for (var u = 0, d = a.length; u < d; u++) { var p = a[u]; r.canSet(p) && (p._private[r.field][t] = n) } r.updateStyle && this.updateStyle(), r.onSet(this), r.settingTriggersEvent && this[r.triggerFnName](r.settingEvent) } } else if (r.allowSetting && i.plainObject(t)) { var f = t, h = void 0, g = void 0, m = Object.keys(f); r.beforeSet(this, f); for (var v = 0; v < m.length; v++)if (g = f[h = m[v]], !r.immutableKeys[h]) for (var b = 0; b < a.length; b++) { var y = a[b]; r.canSet(y) && (y._private[r.field][h] = g) } r.updateStyle && this.updateStyle(), r.onSet(this), r.settingTriggersEvent && this[r.triggerFnName](r.settingEvent) } else if (r.allowBinding && i.fn(t)) { var x = t; this.on(r.bindingEvent, x) } else if (r.allowGetting && void 0 === t) { var w = void 0; return s && (r.beforeGet(s), w = s._private[r.field]), w } return this } }, removeData: function (e) { return e = r.extend({}, { field: "data", event: "data", triggerFnName: "trigger", triggerEvent: !1, immutableKeys: {} }, e), function (t) { var n = e, r = void 0 !== this.length ? this : [this]; if (i.string(t)) { for (var o = t.split(/\s+/), a = o.length, s = 0; s < a; s++) { var l = o[s]; if (!i.emptyString(l) && !n.immutableKeys[l]) for (var c = 0, u = r.length; c < u; c++)r[c]._private[n.field][l] = void 0 } n.triggerEvent && this[n.triggerFnName](n.event) } else if (void 0 === t) { for (var d = 0, p = r.length; d < p; d++)for (var f = r[d]._private[n.field], h = Object.keys(f), g = 0; g < h.length; g++) { var m = h[g]; !n.immutableKeys[m] && (f[m] = void 0) } n.triggerEvent && this[n.triggerFnName](n.event) } return this } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(5), i = { eventAliasesOn: function (e) { var t = e; t.addListener = t.listen = t.bind = t.on, t.unlisten = t.unbind = t.off = t.removeListener, t.trigger = t.emit, t.pon = t.promiseOn = function (e, t) { var n = this, i = Array.prototype.slice.call(arguments, 0); return new r((function (e, t) { var r = i.concat([function (t) { n.off.apply(n, o), e(t) }]), o = r.concat([]); n.on.apply(n, r) })) } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(8), i = { classes: function (e) { e = (e || "").match(/\S+/g) || []; for (var t = this, n = [], i = new r(e), o = function (e) { var o = t[e], a = o._private, s = a.classes, l = !1; i.forEach((function (e) { s.has(e) || (l = !0) })), l || s.forEach((function (e) { i.has(e) || (l = !0) })), l && (a.classes = new r(i), n.push(o)) }, a = 0; a < t.length; a++)o(a); return n.length > 0 && this.spawn(n).updateStyle().emit("class"), t }, addClass: function (e) { return this.toggleClass(e, !0) }, hasClass: function (e) { var t = this[0]; return null != t && t._private.classes.has(e) }, toggleClass: function (e, t) { for (var n = e.match(/\S+/g) || [], r = [], i = 0, o = this.length; i < o; i++)for (var a = this[i], s = !1, l = 0; l < n.length; l++) { var c = n[l], u = a._private.classes, d = u.has(c); t || void 0 === t && !d ? (u.add(c), d || s || (r.push(a), s = !0)) : (u.delete(c), d && !s && (r.push(a), s = !0)) } return r.length > 0 && this.spawn(r).updateStyle().emit("class"), this }, removeClass: function (e) { return this.toggleClass(e, !1) }, flashClass: function (e, t) { var n = this; if (null == t) t = 250; else if (0 === t) return n; return n.addClass(e), setTimeout((function () { n.removeClass(e) }), t), n } }; e.exports = i }, function (e, t, n) { "use strict"; n(0); var r = n(6), i = { allAre: function (e) { var t = new r(e); return this.every((function (e) { return t.matches(e) })) }, is: function (e) { var t = new r(e); return this.some((function (e) { return t.matches(e) })) }, some: function (e, t) { for (var n = 0; n < this.length; n++)if (t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this)) return !0; return !1 }, every: function (e, t) { for (var n = 0; n < this.length; n++)if (!(t ? e.apply(t, [this[n], n, this]) : e(this[n], n, this))) return !1; return !0 }, same: function (e) { return e = this.cy().collection(e), this.length === e.length && this.every((function (t) { return e.hasElementWithId(t.id()) })) }, anySame: function (e) { return e = this.cy().collection(e), this.some((function (t) { return e.hasElementWithId(t.id()) })) }, allAreNeighbors: function (e) { e = this.cy().collection(e); var t = this.neighborhood(); return e.every((function (e) { return t.hasElementWithId(e.id()) })) }, contains: function (e) { e = this.cy().collection(e); var t = this; return e.every((function (e) { return t.hasElementWithId(e.id()) })) } }; i.allAreNeighbours = i.allAreNeighbors, i.has = i.contains, e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(50), o = n(10), a = function (e) { for (var t = void 0, n = void 0, r = void 0, o = 0; o < i.length; o++) { var a = i[o], s = a.name, l = e.match(a.regexObj); if (null != l) { n = l, t = a, r = s; var c = l[0]; e = e.substring(c.length); break } } return { expr: t, match: n, name: r, remaining: e } }; e.exports = { parse: function (e) { var t = this._private.selectorText = e, n = this[0] = o(); for (this.length = 1, t = function (e) { var t = e.match(/^\s+/); if (t) { var n = t[0]; e = e.substring(n.length) } return e }(t); ;) { var i = a(t); if (null == i.expr) return r.error("The selector `" + e + "`is invalid"), !1; var s = i.match.slice(1), l = i.expr.populate(this, n, s); if (!1 === l) return !1; if (null != l && (n = l), (t = i.remaining).match(/^\s*$/)) break } for (var c = 0; c < this.length; c++) { var u = this[c]; if (null != u.subject) { for (; u.subject !== u;)if (null != u.parent) { var d = u.parent, p = u; p.parent = null, d.child = p, u = d } else { if (null == u.ancestor) return u.source || u.target || u.connectedNodes ? (r.error("The selector `" + this.text() + "` can not contain a subject selector that applies to the source or target of an edge selector"), !1) : (r.error("When adjusting references for the selector `" + this.text() + "`, neither parent nor ancestor was found"), !1); var f = u.ancestor, h = u; h.ancestor = null, f.descendant = h, u = f } this[c] = u.subject } } return !0 } } }, function (e, t, n) { "use strict"; var r = function (e, t) { if (Array.isArray(e)) return e; if (Symbol.iterator in Object(e)) return function (e, t) { var n = [], r = !0, i = !1, o = void 0; try { for (var a, s = e[Symbol.iterator](); !(r = (a = s.next()).done) && (n.push(a.value), !t || n.length !== t); r = !0); } catch (e) { i = !0, o = e } finally { try { !r && s.return && s.return() } finally { if (i) throw o } } return n }(e, t); throw new TypeError("Invalid attempt to destructure non-iterable instance") }, i = n(15).stateSelectorRegex, o = n(51), a = n(1), s = n(10), l = function (e) { return e.replace(new RegExp("\\\\(" + o.metaChar + ")", "g"), (function (e, t) { return t })) }, c = function (e, t, n) { t === e[e.length - 1] && (e[e.length - 1] = n) }, u = [{ name: "group", query: !0, regex: "(" + o.group + ")", populate: function (e, t, n) { var i = r(n, 1)[0]; t.group = "*" === i ? i : i + "s" } }, { name: "state", query: !0, regex: i, populate: function (e, t, n) { var i = r(n, 1)[0]; t.colonSelectors.push(i) } }, { name: "id", query: !0, regex: "\\#(" + o.id + ")", populate: function (e, t, n) { var i = r(n, 1)[0]; t.ids.push(l(i)) } }, { name: "className", query: !0, regex: "\\.(" + o.className + ")", populate: function (e, t, n) { var i = r(n, 1)[0]; t.classes.push(l(i)) } }, { name: "dataExists", query: !0, regex: "\\[\\s*(" + o.variable + ")\\s*\\]", populate: function (e, t, n) { var i = r(n, 1)[0]; t.data.push({ field: l(i) }) } }, { name: "dataCompare", query: !0, regex: "\\[\\s*(" + o.variable + ")\\s*(" + o.comparatorOp + ")\\s*(" + o.value + ")\\s*\\]", populate: function (e, t, n) { var i = r(n, 3), a = i[0], s = i[1], c = i[2]; c = null != new RegExp("^" + o.string + "$").exec(c) ? c.substring(1, c.length - 1) : parseFloat(c), t.data.push({ field: l(a), operator: s, value: c }) } }, { name: "dataBool", query: !0, regex: "\\[\\s*(" + o.boolOp + ")\\s*(" + o.variable + ")\\s*\\]", populate: function (e, t, n) { var i = r(n, 2), o = i[0], a = i[1]; t.data.push({ field: l(a), operator: o }) } }, { name: "metaCompare", query: !0, regex: "\\[\\[\\s*(" + o.meta + ")\\s*(" + o.comparatorOp + ")\\s*(" + o.number + ")\\s*\\]\\]", populate: function (e, t, n) { var i = r(n, 3), o = i[0], a = i[1], s = i[2]; t.meta.push({ field: l(o), operator: a, value: parseFloat(s) }) } }, { name: "nextQuery", separator: !0, regex: o.separator, populate: function (e) { var t = e[e.length++] = s(); return e.currentSubject = null, t } }, { name: "directedEdge", separator: !0, regex: o.directedEdge, populate: function (e, t) { var n = s(), r = t, i = s(); return n.group = "edges", n.target = i, n.source = r, n.subject = e.currentSubject, c(e, t, n), i } }, { name: "undirectedEdge", separator: !0, regex: o.undirectedEdge, populate: function (e, t) { var n = s(), r = t, i = s(); return n.group = "edges", n.connectedNodes = [r, i], n.subject = e.currentSubject, c(e, t, n), i } }, { name: "child", separator: !0, regex: o.child, populate: function (e, t) { var n = s(); return n.parent = t, n.subject = e.currentSubject, c(e, t, n), n } }, { name: "descendant", separator: !0, regex: o.descendant, populate: function (e, t) { var n = s(); return n.ancestor = t, n.subject = e.currentSubject, c(e, t, n), n } }, { name: "subject", modifier: !0, regex: o.subject, populate: function (e, t) { if (null != e.currentSubject && t.subject != t) return a.error("Redefinition of subject in selector `" + e.toString() + "`"), !1; e.currentSubject = t, t.subject = t, e[e.length - 1].subject = t } }]; u.forEach((function (e) { return e.regexObj = new RegExp("^" + e.regex) })), e.exports = u }, function (e, t, n) { "use strict"; var r = { metaChar: "[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]", comparatorOp: "=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=", boolOp: "\\?|\\!|\\^", string: "\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'", number: n(1).regex.number, meta: "degree|indegree|outdegree", separator: "\\s*,\\s*", descendant: "\\s+", child: "\\s+>\\s+", subject: "\\$", group: "node|edge|\\*", directedEdge: "\\s+->\\s+", undirectedEdge: "\\s+<->\\s+" }; r.variable = "(?:[\\w-]|(?:\\\\" + r.metaChar + "))+", r.value = r.string + "|" + r.number, r.className = r.variable, r.id = r.variable, function () { var e = void 0, t = void 0, n = void 0; for (e = r.comparatorOp.split("|"), n = 0; n < e.length; n++)t = e[n], r.comparatorOp += "|@" + t; for (e = r.comparatorOp.split("|"), n = 0; n < e.length; n++)(t = e[n]).indexOf("!") >= 0 || "=" !== t && (r.comparatorOp += "|\\!" + t) }(), e.exports = r }, function (e, t, n) { "use strict"; var r = n(15).stateSelectorMatches, i = n(0), o = function (e, t) { for (var n = !0, r = 0; r < e[t.name].length; r++) { var o = e[t.name][r], a = o.operator, s = o.value, l = o.field, c = void 0, u = t.fieldValue(l); if (null != a && null != s) { var d = i.string(u) || i.number(u) ? "" + u : "", p = "" + s, f = !1; a.indexOf("@") >= 0 && (d = d.toLowerCase(), p = p.toLowerCase(), a = a.replace("@", ""), f = !0); var h = !1; a.indexOf("!") >= 0 && (a = a.replace("!", ""), h = !0), f && (s = p.toLowerCase(), u = d.toLowerCase()); var g = !1; switch (a) { case "*=": c = d.indexOf(p) >= 0; break; case "$=": c = d.indexOf(p, d.length - p.length) >= 0; break; case "^=": c = 0 === d.indexOf(p); break; case "=": c = u === s; break; case ">": g = !0, c = u > s; break; case ">=": g = !0, c = u >= s; break; case "<": g = !0, c = u < s; break; case "<=": g = !0, c = u <= s; break; default: c = !1 }!h || null == u && g || (c = !c) } else if (null != a) switch (a) { case "?": c = !!u; break; case "!": c = !u; break; case "^": c = void 0 === u } else c = void 0 !== u; if (!c) { n = !1; break } } return n }, a = function (e, t, n) { if (null != e) { var r = !1; if (!t) return !1; n = n(); for (var i = 0; i < n.length; i++)if (s(e, n[i])) { r = !0; break } return r } return !0 }, s = function (e, t) { if (e.groupOnly) return "*" === e.group || e.group === t.group(); if (null != e.group && "*" != e.group && e.group != t.group()) return !1; var n = t.cy(), i = void 0, s = !0; for (i = 0; i < e.colonSelectors.length; i++) { var l = e.colonSelectors[i]; if (!(s = r(l, t))) break } if (!s) return !1; var c = !0; for (i = 0; i < e.ids.length; i++) { var u = e.ids[i], d = t.id(); if (!(c = c && u == d)) break } if (!c) return !1; var p = !0; for (i = 0; i < e.classes.length; i++) { var f = e.classes[i]; if (!(p = p && t.hasClass(f))) break } if (!p) return !1; if (!o(e, { name: "data", fieldValue: function (e) { return t.data(e) } })) return !1; if (!o(e, { name: "meta", fieldValue: function (e) { return t[e]() } })) return !1; if (null != e.collection && !e.collection.hasElementWithId(t.id())) return !1; if (null != e.filter && t.collection().some(e.filter)) return !1; var h = n.hasCompoundNodes(), g = function () { return t.source() }, m = function () { return t.target() }; if (!a(e.parent, h, (function () { return t.parent() }))) return !1; if (!a(e.ancestor, h, (function () { return t.parents() }))) return !1; if (!a(e.child, h, (function () { return t.children() }))) return !1; if (!a(e.descendant, h, (function () { return t.descendants() }))) return !1; if (!a(e.source, !0, g)) return !1; if (!a(e.target, !0, m)) return !1; if (e.connectedNodes) { var v = e.connectedNodes[0], b = e.connectedNodes[1]; if (a(v, !0, g) && a(b, !0, m)); else if (!a(v, !0, m) || !a(b, !0, g)) return !1 } return !0 }; e.exports = { matches: function (e) { if (this.invalid()) return !1; for (var t = 0; t < this.length; t++) { var n = this[t]; if (s(n, e)) return !0 } return !1 }, filter: function (e) { var t = this, n = e.cy(); if (t.invalid()) return n.collection(); if (1 === t.length && 1 === t[0].length && 1 === t[0].ids.length) return e.getElementById(t[0].ids[0]).collection(); var r = function (e) { for (var n = 0; n < t.length; n++) { var r = t[n]; if (s(r, e)) return !0 } return !1 }; return null == t.text() && (r = function () { return !0 }), e.filter(r) } } }, function (e, t, n) { "use strict"; var r = n(8), i = { parent: function (e) { var t = []; if (1 === this.length) { var n = this[0]._private.parent; if (n) return n } for (var r = 0; r < this.length; r++) { var i = this[r]._private.parent; i && t.push(i) } return this.spawn(t, { unique: !0 }).filter(e) }, parents: function (e) { for (var t = [], n = this.parent(); n.nonempty();) { for (var r = 0; r < n.length; r++) { var i = n[r]; t.push(i) } n = n.parent() } return this.spawn(t, { unique: !0 }).filter(e) }, commonAncestors: function (e) { for (var t = void 0, n = 0; n < this.length; n++) { var r = this[n].parents(); t = (t = t || r).intersect(r) } return t.filter(e) }, orphans: function (e) { return this.stdFilter((function (e) { return e.isOrphan() })).filter(e) }, nonorphans: function (e) { return this.stdFilter((function (e) { return e.isChild() })).filter(e) }, children: function (e) { for (var t = [], n = 0; n < this.length; n++) { var r = this[n]; t = t.concat(r._private.children) } return this.spawn(t, { unique: !0 }).filter(e) }, siblings: function (e) { return this.parent().children().not(this).filter(e) }, isParent: function () { var e = this[0]; if (e) return e.isNode() && 0 !== e._private.children.length }, isChildless: function () { var e = this[0]; if (e) return e.isNode() && 0 === e._private.children.length }, isChild: function () { var e = this[0]; if (e) return e.isNode() && null != e._private.parent }, isOrphan: function () { var e = this[0]; if (e) return e.isNode() && null == e._private.parent }, descendants: function (e) { var t = []; return function e(n) { for (var r = 0; r < n.length; r++) { var i = n[r]; t.push(i), i.children().nonempty() && e(i.children()) } }(this.children()), this.spawn(t, { unique: !0 }).filter(e) } }; function o(e, t, n, i) { for (var o = [], a = new r, s = e.cy().hasCompoundNodes(), l = 0; l < e.length; l++) { var c = e[l]; n ? o.push(c) : s && i(o, a, c) } for (; o.length > 0;) { var u = o.shift(); t(u), a.add(u.id()), s && i(o, a, u) } return e } function a(e, t, n) { if (n.isParent()) for (var r = n._private.children, i = 0; i < r.length; i++) { var o = r[i]; t.has(o.id()) || e.push(o) } } function s(e, t, n) { if (n.isChild()) { var r = n._private.parent; t.has(r.id()) || e.push(r) } } function l(e, t, n) { s(e, t, n), a(e, t, n) } i.forEachDown = function (e) { var t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; return o(this, e, t, a) }, i.forEachUp = function (e) { var t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; return o(this, e, t, s) }, i.forEachUpAndDown = function (e) { var t = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; return o(this, e, t, l) }, i.ancestors = i.parents, e.exports = i }, function (e, t, n) { "use strict"; var r, i = n(4), o = void 0; (o = r = { data: i.data({ field: "data", bindingEvent: "data", allowBinding: !0, allowSetting: !0, settingEvent: "data", settingTriggersEvent: !0, triggerFnName: "trigger", allowGetting: !0, immutableKeys: { id: !0, source: !0, target: !0, parent: !0 }, updateStyle: !0 }), removeData: i.removeData({ field: "data", event: "data", triggerFnName: "trigger", triggerEvent: !0, immutableKeys: { id: !0, source: !0, target: !0, parent: !0 }, updateStyle: !0 }), scratch: i.data({ field: "scratch", bindingEvent: "scratch", allowBinding: !0, allowSetting: !0, settingEvent: "scratch", settingTriggersEvent: !0, triggerFnName: "trigger", allowGetting: !0, updateStyle: !0 }), removeScratch: i.removeData({ field: "scratch", event: "scratch", triggerFnName: "trigger", triggerEvent: !0, updateStyle: !0 }), rscratch: i.data({ field: "rscratch", allowBinding: !1, allowSetting: !0, settingTriggersEvent: !1, allowGetting: !0 }), removeRscratch: i.removeData({ field: "rscratch", triggerEvent: !1 }), id: function () { var e = this[0]; if (e) return e._private.data.id } }).attr = o.data, o.removeAttr = o.removeData, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = {}; function o(e) { return function (t) { if (void 0 === t && (t = !0), 0 !== this.length && this.isNode() && !this.removed()) { for (var n = 0, r = this[0], i = r._private.edges, o = 0; o < i.length; o++) { var a = i[o]; !t && a.isLoop() || (n += e(r, a)) } return n } } } function a(e, t) { return function (n) { for (var r = void 0, i = this.nodes(), o = 0; o < i.length; o++) { var a = i[o][e](n); void 0 === a || void 0 !== r && !t(a, r) || (r = a) } return r } } r.extend(i, { degree: o((function (e, t) { return t.source().same(t.target()) ? 2 : 1 })), indegree: o((function (e, t) { return t.target().same(e) ? 1 : 0 })), outdegree: o((function (e, t) { return t.source().same(e) ? 1 : 0 })) }), r.extend(i, { minDegree: a("degree", (function (e, t) { return e < t })), maxDegree: a("degree", (function (e, t) { return e > t })), minIndegree: a("indegree", (function (e, t) { return e < t })), maxIndegree: a("indegree", (function (e, t) { return e > t })), minOutdegree: a("outdegree", (function (e, t) { return e < t })), maxOutdegree: a("outdegree", (function (e, t) { return e > t })) }), r.extend(i, { totalDegree: function (e) { for (var t = 0, n = this.nodes(), r = 0; r < n.length; r++)t += n[r].degree(e); return t } }), e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(57), o = n(58), a = n(59), s = n(60); e.exports = r.assign({}, i, o, a, s) }, function (e, t, n) { "use strict"; var r, i = n(4), o = n(0), a = n(2), s = void 0, l = function (e, t) { for (var n = 0; n < e.length; n++) { var r = e[n]; if (r.isParent() && !r.locked()) { var i = r._private.position, o = { x: t.x - i.x, y: t.y - i.y }; e.children().shift(o) } } }; (s = r = { position: i.data({ field: "position", bindingEvent: "position", allowBinding: !0, allowSetting: !0, settingEvent: "position", settingTriggersEvent: !0, triggerFnName: "emitAndNotify", allowGetting: !0, validKeys: ["x", "y"], beforeGet: function (e) { e.updateCompoundBounds() }, beforeSet: l, onSet: function (e) { e.dirtyCompoundBoundsCache() }, canSet: function (e) { return !e.locked() } }), silentPosition: i.data({ field: "position", bindingEvent: "position", allowBinding: !1, allowSetting: !0, settingEvent: "position", settingTriggersEvent: !1, triggerFnName: "trigger", allowGetting: !1, validKeys: ["x", "y"], beforeSet: l, onSet: function (e) { e.dirtyCompoundBoundsCache() }, canSet: function (e) { return !e.locked() } }), positions: function (e, t) { if (o.plainObject(e)) t ? this.silentPosition(e) : this.position(e); else if (o.fn(e)) { var n = e, r = this.cy(); r.startBatch(); for (var i = 0; i < this.length; i++) { var a, s = this[i]; (a = n(s, i)) && (t ? s.silentPosition(a) : s.position(a)) } r.endBatch() } return this }, silentPositions: function (e) { return this.positions(e, !0) }, shift: function (e, t) { var n = void 0; if (o.plainObject(e) ? n = e : o.string(e) && o.number(t) && ((n = { x: 0, y: 0 })[e] = t), null != n) for (var r = 0; r < this.length; r++) { var i = this[r], a = i.position(); i.position({ x: a.x + n.x, y: a.y + n.y }) } return this }, renderedPosition: function (e, t) { var n = this[0], r = this.cy(), i = r.zoom(), s = r.pan(), l = o.plainObject(e) ? e : void 0, c = void 0 !== l || void 0 !== t && o.string(e); if (n && n.isNode()) { if (!c) { var u = n.position(); return l = a.modelToRenderedPosition(u, i, s), void 0 === e ? l : l[e] } for (var d = 0; d < this.length; d++) { var p = this[d]; void 0 !== t ? p.position(e, (t - s[e]) / i) : void 0 !== l && p.position(a.renderedToModelPosition(l, i, s)) } } else if (!c) return; return this }, relativePosition: function (e, t) { var n = this[0], r = this.cy(), i = o.plainObject(e) ? e : void 0, a = void 0 !== i || void 0 !== t && o.string(e), s = r.hasCompoundNodes(); if (n && n.isNode()) { if (!a) { var l = n.position(), c = s ? n.parent() : null, u = c && c.length > 0, d = u; u && (c = c[0]); var p = d ? c.position() : { x: 0, y: 0 }; return i = { x: l.x - p.x, y: l.y - p.y }, void 0 === e ? i : i[e] } for (var f = 0; f < this.length; f++) { var h = this[f], g = s ? h.parent() : null, m = g && g.length > 0, v = m; m && (g = g[0]); var b = v ? g.position() : { x: 0, y: 0 }; void 0 !== t ? h.position(e, t + b[e]) : void 0 !== i && h.position({ x: i.x + b.x, y: i.y + b.y }) } } else if (!a) return; return this } }).modelPosition = s.point = s.position, s.modelPositions = s.points = s.positions, s.renderedPoint = s.renderedPosition, s.relativePoint = s.relativePosition, e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(2), a = void 0, s = void 0; a = s = {}, s.renderedBoundingBox = function (e) { var t = this.boundingBox(e), n = this.cy(), r = n.zoom(), i = n.pan(), o = t.x1 * r + i.x, a = t.x2 * r + i.x, s = t.y1 * r + i.y, l = t.y2 * r + i.y; return { x1: o, x2: a, y1: s, y2: l, w: a - o, h: l - s } }, s.dirtyCompoundBoundsCache = function () { var e = this.cy(); return e.styleEnabled() && e.hasCompoundNodes() ? (this.forEachUp((function (e) { e._private.compoundBoundsClean = !1, e.isParent() && e.emit("bounds") })), this) : this }, s.updateCompoundBounds = function () { var e = this.cy(); if (!e.styleEnabled() || !e.hasCompoundNodes()) return this; if (e.batching()) return this; var t = []; function n(e) { if (e.isParent()) { var n = e._private, r = e.children(), i = "include" === e.pstyle("compound-sizing-wrt-labels").value, o = { width: { val: e.pstyle("min-width").pfValue, left: e.pstyle("min-width-bias-left"), right: e.pstyle("min-width-bias-right") }, height: { val: e.pstyle("min-height").pfValue, top: e.pstyle("min-height-bias-top"), bottom: e.pstyle("min-height-bias-bottom") } }, a = r.boundingBox({ includeLabels: i, includeOverlays: !1, useCache: !1 }), s = n.position; 0 !== a.w && 0 !== a.h || ((a = { w: e.pstyle("width").pfValue, h: e.pstyle("height").pfValue }).x1 = s.x - a.w / 2, a.x2 = s.x + a.w / 2, a.y1 = s.y - a.h / 2, a.y2 = s.y + a.h / 2); var l = o.width.left.value; "px" === o.width.left.units && o.width.val > 0 && (l = 100 * l / o.width.val); var c = o.width.right.value; "px" === o.width.right.units && o.width.val > 0 && (c = 100 * c / o.width.val); var u = o.height.top.value; "px" === o.height.top.units && o.height.val > 0 && (u = 100 * u / o.height.val); var d = o.height.bottom.value; "px" === o.height.bottom.units && o.height.val > 0 && (d = 100 * d / o.height.val); var p = b(o.width.val - a.w, l, c), f = p.biasDiff, h = p.biasComplementDiff, g = b(o.height.val - a.h, u, d), m = g.biasDiff, v = g.biasComplementDiff; n.autoPadding = function (e, t, n, r) { if ("%" !== n.units) return "px" === n.units ? n.pfValue : 0; switch (r) { case "width": return e > 0 ? n.pfValue * e : 0; case "height": return t > 0 ? n.pfValue * t : 0; case "average": return e > 0 && t > 0 ? n.pfValue * (e + t) / 2 : 0; case "min": return e > 0 && t > 0 ? e > t ? n.pfValue * t : n.pfValue * e : 0; case "max": return e > 0 && t > 0 ? e > t ? n.pfValue * e : n.pfValue * t : 0; default: return 0 } }(a.w, a.h, e.pstyle("padding"), e.pstyle("padding-relative-to").value), n.autoWidth = Math.max(a.w, o.width.val), s.x = (-f + a.x1 + a.x2 + h) / 2, n.autoHeight = Math.max(a.h, o.height.val), s.y = (-m + a.y1 + a.y2 + v) / 2, t.push(e) } function b(e, t, n) { var r = 0, i = 0, o = t + n; return e > 0 && o > 0 && (r = t / o * e, i = n / o * e), { biasDiff: r, biasComplementDiff: i } } } for (var r = 0; r < this.length; r++) { var i = this[r], o = i._private; o.compoundBoundsClean || (n(i), e._private.batchingStyle || (o.compoundBoundsClean = !0)) } return this }; var l = function (e) { return e === 1 / 0 || e === -1 / 0 ? 0 : e }, c = function (e, t, n, r, i) { r - t != 0 && i - n != 0 && null != t && null != n && null != r && null != i && (e.x1 = t < e.x1 ? t : e.x1, e.x2 = r > e.x2 ? r : e.x2, e.y1 = n < e.y1 ? n : e.y1, e.y2 = i > e.y2 ? i : e.y2) }, u = function (e, t, n) { return i.getPrefixedProperty(e, t, n) }, d = function (e, t, n) { if (!t.cy().headless()) { var r = t._private.rstyle, i = r.arrowWidth / 2, o = void 0, a = void 0; "none" !== t.pstyle(n + "-arrow-shape").value && ("source" === n ? (o = r.srcX, a = r.srcY) : "target" === n ? (o = r.tgtX, a = r.tgtY) : (o = r.midX, a = r.midY), c(e, o - i, a - i, o + i, a + i)) } }, p = function (e, t, n) { if (!t.cy().headless()) { var r = void 0; r = n ? n + "-" : ""; var i = t._private, o = i.rstyle; if (t.pstyle(r + "label").strValue) { var a = t.pstyle("text-halign"), s = t.pstyle("text-valign"), l = u(o, "labelWidth", n), d = u(o, "labelHeight", n), p = u(o, "labelX", n), f = u(o, "labelY", n), h = t.pstyle(r + "text-margin-x").pfValue, g = t.pstyle(r + "text-margin-y").pfValue, m = t.isEdge(), v = t.pstyle(r + "text-rotation"), b = t.pstyle("text-outline-width").pfValue, y = t.pstyle("text-border-width").pfValue / 2, x = t.pstyle("text-background-padding").pfValue, w = d + 2 * x, k = l + 2 * x, A = k / 2, E = w / 2, S = void 0, $ = void 0, C = void 0, _ = void 0; if (m) S = p - A, $ = p + A, C = f - E, _ = f + E; else { switch (a.value) { case "left": S = p - k, $ = p; break; case "center": S = p - A, $ = p + A; break; case "right": S = p, $ = p + k }switch (s.value) { case "top": C = f - w, _ = f; break; case "center": C = f - E, _ = f + E; break; case "bottom": C = f, _ = f + w } } var O = m && "autorotate" === v.strValue, T = null != v.pfValue && 0 !== v.pfValue; if (O || T) { var j = O ? u(i.rstyle, "labelAngle", n) : v.pfValue, P = Math.cos(j), D = Math.sin(j), R = function (e, t) { return { x: (e -= p) * P - (t -= f) * D + p, y: e * D + t * P + f } }, I = R(S, C), N = R(S, _), M = R($, C), z = R($, _); S = Math.min(I.x, N.x, M.x, z.x), $ = Math.max(I.x, N.x, M.x, z.x), C = Math.min(I.y, N.y, M.y, z.y), _ = Math.max(I.y, N.y, M.y, z.y) } S += h - Math.max(b, y), $ += h + Math.max(b, y), C += g - Math.max(b, y), _ += g + Math.max(b, y), c(e, S, C, $, _) } return e } }, f = function (e) { return e ? "t" : "f" }, h = function (e) { var t = ""; return t += f(e.incudeNodes), t += f(e.includeEdges), t += f(e.includeLabels), t += f(e.includeOverlays) }, g = function (e, t) { var n = e._private, r = void 0, i = e.cy().headless(), a = t === m ? v : h(t); return t.useCache && !i && n.bbCache && n.bbCache[a] ? r = n.bbCache[a] : (r = function (e, t) { var n = e._private.cy, r = n.styleEnabled(), i = n.headless(), a = { x1: 1 / 0, y1: 1 / 0, x2: -1 / 0, y2: -1 / 0 }, s = e._private, u = r ? e.pstyle("display").value : "element", f = e.isNode(), h = e.isEdge(), g = void 0, m = void 0, v = void 0, b = void 0, y = void 0, x = void 0, w = "none" !== u; if (w) { var k = 0; r && t.includeOverlays && 0 !== e.pstyle("overlay-opacity").value && (k = e.pstyle("overlay-padding").value); var A = 0; if (r && (A = e.pstyle("width").pfValue / 2), f && t.includeNodes) { var E = e.position(); y = E.x, x = E.y; var S = e.outerWidth() / 2, $ = e.outerHeight() / 2; c(a, g = y - S - k, v = x - $ - k, m = y + S + k, b = x + $ + k) } else if (h && t.includeEdges) { var C = s.rstyle || {}; if (r && !i && (g = Math.min(C.srcX, C.midX, C.tgtX), m = Math.max(C.srcX, C.midX, C.tgtX), v = Math.min(C.srcY, C.midY, C.tgtY), b = Math.max(C.srcY, C.midY, C.tgtY), c(a, g -= A, v -= A, m += A, b += A)), r && !i && "haystack" === e.pstyle("curve-style").strValue) { var _ = C.haystackPts || []; if (g = _[0].x, v = _[0].y, g > (m = _[1].x)) { var O = g; g = m, m = O } if (v > (b = _[1].y)) { var T = v; v = b, b = T } c(a, g - A, v - A, m + A, b + A) } else { for (var j = C.bezierPts || C.linePts || [], P = 0; P < j.length; P++) { var D = j[P]; g = D.x - A, m = D.x + A, v = D.y - A, b = D.y + A, c(a, g, v, m, b) } if (0 === j.length) { var R = e.source().position(), I = e.target().position(); if ((g = R.x) > (m = I.x)) { var N = g; g = m, m = N } if ((v = R.y) > (b = I.y)) { var M = v; v = b, b = M } c(a, g -= A, v -= A, m += A, b += A) } } } if (r && t.includeEdges && h && (d(a, e, "mid-source"), d(a, e, "mid-target"), d(a, e, "source"), d(a, e, "target")), r && "yes" === e.pstyle("ghost").value) { var z = e.pstyle("ghost-offset-x").pfValue, L = e.pstyle("ghost-offset-y").pfValue; c(a, a.x1 + z, a.y1 + L, a.x2 + z, a.y2 + L) } r && (g = a.x1, m = a.x2, v = a.y1, b = a.y2, c(a, g - k, v - k, m + k, b + k)), r && t.includeLabels && (p(a, e, null), h && (p(a, e, "source"), p(a, e, "target"))) } return a.x1 = l(a.x1), a.y1 = l(a.y1), a.x2 = l(a.x2), a.y2 = l(a.y2), a.w = l(a.x2 - a.x1), a.h = l(a.y2 - a.y1), a.w > 0 && a.h > 0 && w && o.expandBoundingBox(a, 1), a }(e, t), i || (n.bbCache = n.bbCache || {}, n.bbCache[a] = r)), r }, m = { includeNodes: !0, includeEdges: !0, includeLabels: !0, includeOverlays: !0, useCache: !0 }, v = h(m); function b(e) { return { includeNodes: i.default(e.includeNodes, m.includeNodes), includeEdges: i.default(e.includeEdges, m.includeEdges), includeLabels: i.default(e.includeLabels, m.includeLabels), includeOverlays: i.default(e.includeOverlays, m.includeOverlays), useCache: i.default(e.useCache, m.useCache) } } s.boundingBox = function (e) { if (1 === this.length && this[0]._private.bbCache && (void 0 === e || void 0 === e.useCache || !0 === e.useCache)) return e = void 0 === e ? m : b(e), g(this[0], e); var t = { x1: 1 / 0, y1: 1 / 0, x2: -1 / 0, y2: -1 / 0 }, n = b(e = e || i.staticEmptyObject()), r = this.cy().styleEnabled(); r && this.recalculateRenderedStyle(n.useCache), this.updateCompoundBounds(); for (var o, a, s = {}, u = 0; u < this.length; u++) { var d = this[u]; if (r && d.isEdge() && "bezier" === d.pstyle("curve-style").strValue && !s[d.id()]) { for (var p = d.parallelEdges(), f = 0; f < p.length; f++)s[p[f].id()] = !0; p.recalculateRenderedStyle(n.useCache) } o = t, a = g(d, n), c(o, a.x1, a.y1, a.x2, a.y2) } return t.x1 = l(t.x1), t.y1 = l(t.y1), t.x2 = l(t.x2), t.y2 = l(t.y2), t.w = l(t.x2 - t.x1), t.h = l(t.y2 - t.y1), t }, s.boundingBoxAt = function (e) { var t = this.nodes(); if (r.plainObject(e)) { var n = e; e = function () { return n } } for (var i = 0; i < t.length; i++) { var o = t[i], a = o._private, s = a.position, l = e.call(o, o, i); a.bbAtOldPos = { x: s.x, y: s.y }, l && (s.x = l.x, s.y = l.y) } this.emit("dirty"), t.dirtyCompoundBoundsCache().updateCompoundBounds(); for (var c = this.boundingBox({ useCache: !1 }), u = 0; u < t.length; u++) { var d = t[u], p = d._private, f = d._private.position, h = p.bbAtOldPos; f.x = h.x, f.y = h.y } return t.dirtyCompoundBoundsCache(), this.emit("dirty"), c }, a.boundingbox = a.boundingBox, a.renderedBoundingbox = a.renderedBoundingBox, e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = void 0, o = void 0; i = o = {}; var a = function (e) { e.uppercaseName = r.capitalize(e.name), e.autoName = "auto" + e.uppercaseName, e.labelName = "label" + e.uppercaseName, e.outerName = "outer" + e.uppercaseName, e.uppercaseOuterName = r.capitalize(e.outerName), i[e.name] = function () { var t = this[0], n = t._private, r = n.cy._private.styleEnabled; if (t) { if (!r) return 1; if (t.isParent()) return t.updateCompoundBounds(), n[e.autoName] || 0; var i = t.pstyle(e.name); switch (i.strValue) { case "label": return t.recalculateRenderedStyle(), n.rstyle[e.labelName] || 0; default: return i.pfValue } } }, i["outer" + e.uppercaseName] = function () { var t = this[0], n = t._private.cy._private.styleEnabled; if (t) return n ? t[e.name]() + t.pstyle("border-width").pfValue + 2 * t.padding() : 1 }, i["rendered" + e.uppercaseName] = function () { var t = this[0]; if (t) return t[e.name]() * this.cy().zoom() }, i["rendered" + e.uppercaseOuterName] = function () { var t = this[0]; if (t) return t[e.outerName]() * this.cy().zoom() } }; a({ name: "width" }), a({ name: "height" }), o.padding = function () { var e = this[0], t = e._private; return e.isParent() ? (e.updateCompoundBounds(), void 0 !== t.autoPadding ? t.autoPadding : e.pstyle("padding").pfValue) : e.pstyle("padding").pfValue }, e.exports = o }, function (e, t, n) { "use strict"; var r = function (e, t) { if (e.isEdge()) return t(e.renderer()) }; e.exports = { controlPoints: function () { var e = this; return r(this, (function (t) { return t.getControlPoints(e) })) }, segmentPoints: function () { var e = this; return r(this, (function (t) { return t.getSegmentPoints(e) })) }, sourceEndpoint: function () { var e = this; return r(this, (function (t) { return t.getSourceEndpoint(e) })) }, targetEndpoint: function () { var e = this; return r(this, (function (t) { return t.getTargetEndpoint(e) })) }, midpoint: function () { var e = this; return r(this, (function (t) { return t.getEdgeMidpoint(e) })) } } }, function (e, t, n) { "use strict"; var r = n(11), i = n(4), o = n(0), a = n(1), s = n(6), l = { qualifierCompare: function (e, t) { return null == e || null == t ? null == e && null == t : e.sameText(t) }, eventMatches: function (e, t, n) { var r = t.qualifier; return null == r || e !== n.target && o.element(n.target) && r.matches(n.target) }, eventFields: function (e) { return { cy: e.cy(), target: e } }, callbackContext: function (e, t, n) { return null != t.qualifier ? n.target : e }, beforeEmit: function (e, t) { t.conf && t.conf.once && t.conf.onceCollection.removeListener(t.event, t.qualifier, t.callback) }, bubble: function () { return !0 }, parent: function (e) { return e.isChild() ? e.parent() : e.cy() } }, c = function (e) { return o.string(e) ? new s(e) : e }, u = { createEmitter: function () { for (var e = 0; e < this.length; e++) { var t = this[e], n = t._private; n.emitter || (n.emitter = new r(a.assign({ context: t }, l))) } return this }, emitter: function () { return this._private.emitter }, on: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().on(e, c(t), n); return this }, removeListener: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().removeListener(e, c(t), n); return this }, one: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().one(e, c(t), n); return this }, once: function (e, t, n) { for (var r = 0; r < this.length; r++)this[r].emitter().on(e, c(t), n, { once: !0, onceCollection: this }) }, emit: function (e, t) { for (var n = 0; n < this.length; n++)this[n].emitter().emit(e, t); return this }, emitAndNotify: function (e, t) { if (0 !== this.length) return this.cy().notify({ type: e, eles: this }), this.emit(e, t), this } }; i.eventAliasesOn(u), e.exports = u }, function (e, t, n) { "use strict"; var r = n(0), i = n(6), o = { nodes: function (e) { return this.filter((function (e) { return e.isNode() })).filter(e) }, edges: function (e) { return this.filter((function (e) { return e.isEdge() })).filter(e) }, filter: function (e, t) { if (void 0 === e) return this; if (r.string(e) || r.elementOrCollection(e)) return new i(e).filter(this); if (r.fn(e)) { for (var n = this.spawn(), o = 0; o < this.length; o++) { var a = this[o]; (t ? e.apply(t, [a, o, this]) : e(a, o, this)) && n.merge(a) } return n } return this.spawn() }, not: function (e) { if (e) { r.string(e) && (e = this.filter(e)); for (var t = [], n = e._private.map, i = 0; i < this.length; i++) { var o = this[i]; n.has(o.id()) || t.push(o) } return this.spawn(t) } return this }, absoluteComplement: function () { return this.cy().mutableElements().not(this) }, intersect: function (e) { if (r.string(e)) { var t = e; return this.filter(t) } for (var n = [], i = e, o = this.length < e.length, a = o ? i._private.map : this._private.map, s = o ? this : i, l = 0; l < s.length; l++) { var c = s[l]._private.data.id, u = a.get(c); u && n.push(u.ele) } return this.spawn(n) }, xor: function (e) { var t = this._private.cy; r.string(e) && (e = t.$(e)); var n = [], i = e, o = function (e, t) { for (var r = 0; r < e.length; r++) { var i = e[r], o = i._private.data.id; t.hasElementWithId(o) || n.push(i) } }; return o(this, i), o(i, this), this.spawn(n) }, diff: function (e) { var t = this._private.cy; r.string(e) && (e = t.$(e)); var n = [], i = [], o = [], a = e, s = function (e, t, n) { for (var r = 0; r < e.length; r++) { var i = e[r], a = i._private.data.id; t.hasElementWithId(a) ? o.push(i) : n.push(i) } }; return s(this, a, n), s(a, this, i), { left: this.spawn(n, { unique: !0 }), right: this.spawn(i, { unique: !0 }), both: this.spawn(o, { unique: !0 }) } }, add: function (e) { var t = this._private.cy; if (!e) return this; if (r.string(e)) { var n = e; e = t.mutableElements().filter(n) } for (var i = [], o = 0; o < this.length; o++)i.push(this[o]); for (var a = this._private.map, s = 0; s < e.length; s++) { var l = !a.has(e[s].id()); l && i.push(e[s]) } return this.spawn(i) }, merge: function (e) { var t = this._private, n = t.cy; if (!e) return this; if (e && r.string(e)) { var i = e; e = n.mutableElements().filter(i) } for (var o = t.map, a = 0; a < e.length; a++) { var s = e[a], l = s._private.data.id; if (o.has(l)) { var c = o.get(l).index; this[c] = s, o.set(l, { ele: s, index: c }) } else { var u = this.length++; this[u] = s, o.set(l, { ele: s, index: u }) } } return this }, unmergeOne: function (e) { e = e[0]; var t = this._private, n = e._private.data.id, r = t.map, i = r.get(n); if (!i) return this; var o = i.index; this[o] = void 0, r.delete(n); var a = o === this.length - 1; if (this.length > 1 && !a) { var s = this.length - 1, l = this[s], c = l._private.data.id; this[s] = void 0, this[o] = l, r.set(c, { ele: l, index: o }) } return this.length--, this }, unmerge: function (e) { var t = this._private.cy; if (!e) return this; if (e && r.string(e)) { var n = e; e = t.mutableElements().filter(n) } for (var i = 0; i < e.length; i++)this.unmergeOne(e[i]); return this }, map: function (e, t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r], o = t ? e.apply(t, [i, r, this]) : e(i, r, this); n.push(o) } return n }, reduce: function (e, t) { for (var n = t, r = 0; r < this.length; r++)n = e(n, this[r], r, this); return n }, max: function (e, t) { for (var n = -1 / 0, r = void 0, i = 0; i < this.length; i++) { var o = this[i], a = t ? e.apply(t, [o, i, this]) : e(o, i, this); a > n && (n = a, r = o) } return { value: n, ele: r } }, min: function (e, t) { for (var n = 1 / 0, r = void 0, i = 0; i < this.length; i++) { var o = this[i], a = t ? e.apply(t, [o, i, this]) : e(o, i, this); a < n && (n = a, r = o) } return { value: n, ele: r } } }, a = o; a.u = a["|"] = a["+"] = a.union = a.or = a.add, a["\\"] = a["!"] = a["-"] = a.difference = a.relativeComplement = a.subtract = a.not, a.n = a["&"] = a["."] = a.and = a.intersection = a.intersect, a["^"] = a["(+)"] = a["(-)"] = a.symmetricDifference = a.symdiff = a.xor, a.fnFilter = a.filterFn = a.stdFilter = a.filter, a.complement = a.abscomp = a.absoluteComplement, e.exports = o }, function (e, t, n) { "use strict"; e.exports = { isNode: function () { return "nodes" === this.group() }, isEdge: function () { return "edges" === this.group() }, isLoop: function () { return this.isEdge() && this.source().id() === this.target().id() }, isSimple: function () { return this.isEdge() && this.source().id() !== this.target().id() }, group: function () { var e = this[0]; if (e) return e._private.group } } }, function (e, t, n) { "use strict"; var r = n(0), i = n(17), o = n(1), a = { forEach: function (e, t) { if (r.fn(e)) for (var n = 0; n < this.length; n++) { var i = this[n]; if (!1 === (t ? e.apply(t, [i, n, this]) : e(i, n, this))) break } return this }, toArray: function () { for (var e = [], t = 0; t < this.length; t++)e.push(this[t]); return e }, slice: function (e, t) { var n = [], r = this.length; null == t && (t = r), null == e && (e = 0), e < 0 && (e = r + e), t < 0 && (t = r + t); for (var i = e; i >= 0 && i < t && i < r; i++)n.push(this[i]); return this.spawn(n) }, size: function () { return this.length }, eq: function (e) { return this[e] || this.spawn() }, first: function () { return this[0] || this.spawn() }, last: function () { return this[this.length - 1] || this.spawn() }, empty: function () { return 0 === this.length }, nonempty: function () { return !this.empty() }, sort: function (e) { if (!r.fn(e)) return this; var t = this.toArray().sort(e); return this.spawn(t) }, sortByZIndex: function () { return this.sort(i) }, zDepth: function () { var e = this[0]; if (e) { var t = e._private; if ("nodes" === t.group) { var n = t.data.parent ? e.parents().size() : 0; return e.isParent() ? n : o.MAX_INT - 1 } var r = t.source, i = t.target, a = r.zDepth(), s = i.zDepth(); return Math.max(a, s, 0) } } }; a.each = a.forEach, e.exports = a }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(5), a = n(2), s = { layoutDimensions: function (e) { if ((e = i.assign({ nodeDimensionsIncludeLabels: !0 }, e)).nodeDimensionsIncludeLabels) { var t = this.boundingBox(); return { w: t.w, h: t.h } } return { w: this.outerWidth(), h: this.outerHeight() } }, layoutPositions: function (e, t, n) { var s = this.nodes(), l = this.cy(), c = t.eles, u = function (e, t) { return e.id() + "$" + t }, d = i.memoize(n, u); e.emit({ type: "layoutstart", layout: e }), e.animations = []; var p = t.spacingFactor && 1 !== t.spacingFactor, f = function () { if (!p) return null; for (var e = a.makeBoundingBox(), t = 0; t < s.length; t++) { var n = s[t], r = d(n, t); a.expandBoundingBoxByPoint(e, r.x, r.y) } return e }(), h = i.memoize((function (e, n) { var i = d(e, n), o = e.position(); return r.number(o.x) && r.number(o.y) || e.silentPosition({ x: 0, y: 0 }), p && (i = function (e, t, n) { var r = t.x1 + t.w / 2, i = t.y1 + t.h / 2; return { x: r + (n.x - r) * e, y: i + (n.y - i) * e } }(Math.abs(t.spacingFactor), f, i)), null != t.transform && (i = t.transform(e, i)), i }), u); if (t.animate) { for (var g = 0; g < s.length; g++) { var m = s[g], v = h(m, g); if (null == t.animateFilter || t.animateFilter(m, g)) { var b = m.animation({ position: v, duration: t.animationDuration, easing: t.animationEasing }); e.animations.push(b), b.play() } else m.position(v) } if (t.fit) { var y = l.animation({ fit: { boundingBox: c.boundingBoxAt(h), padding: t.padding }, duration: t.animationDuration, easing: t.animationEasing }); e.animations.push(y), y.play() } else if (void 0 !== t.zoom && void 0 !== t.pan) { var x = l.animation({ zoom: t.zoom, pan: t.pan, duration: t.animationDuration, easing: t.animationEasing }); e.animations.push(x), x.play() } e.one("layoutready", t.ready), e.emit({ type: "layoutready", layout: e }), o.all(e.animations.map((function (e) { return e.promise() }))).then((function () { e.one("layoutstop", t.stop), e.emit({ type: "layoutstop", layout: e }) })) } else s.positions(h), t.fit && l.fit(t.eles, t.padding), null != t.zoom && l.zoom(t.zoom), t.pan && l.pan(t.pan), e.one("layoutready", t.ready), e.emit({ type: "layoutready", layout: e }), e.one("layoutstop", t.stop), e.emit({ type: "layoutstop", layout: e }); return this }, layout: function (e) { return this.cy().makeLayout(i.extend({}, e, { eles: this })) } }; s.createLayout = s.makeLayout = s.layout, e.exports = s }, function (e, t, n) { "use strict"; var r = n(0); function i(e, t, n) { var r, i = n._private, o = i.styleCache = i.styleCache || {}; return null != (r = o[e]) ? r : r = o[e] = t(n) } function o(e, t) { return function (n) { return i(e, t, n) } } function a(e, t) { var n = function (e) { return t.call(e) }; return function () { var t = this[0]; if (t) return i(e, n, t) } } var s = { recalculateRenderedStyle: function (e) { var t = this.cy(), n = t.renderer(), r = t.styleEnabled(); return n && r && n.recalculateRenderedStyle(this, e), this }, dirtyStyleCache: function () { var e = this.cy(), t = function (e) { return e._private.styleCache = {} }; if (e.hasCompoundNodes()) { var n = void 0; (n = this.spawnSelf().merge(this.descendants()).merge(this.parents())).merge(n.connectedEdges()), n.forEach(t) } else this.forEach((function (e) { t(e), e.connectedEdges().forEach(t) })); return this }, updateStyle: function (e) { var t = this._private.cy; if (!t.styleEnabled()) return this; if (t._private.batchingStyle) return t._private.batchStyleEles.merge(this), this; var n = t.hasCompoundNodes(), r = t.style(), i = this; e = !(!e && void 0 !== e), n && (i = this.spawnSelf().merge(this.descendants()).merge(this.parents())); var o = r.apply(i); return o.dirtyStyleCache(), o.dirtyCompoundBoundsCache(), e ? o.emitAndNotify("style") : o.emit("style"), this }, updateMappers: function (e) { var t = this._private.cy, n = t.style(); if (e = !(!e && void 0 !== e), !t.styleEnabled()) return this; var r = n.updateMappers(this); return r.dirtyStyleCache(), r.dirtyCompoundBoundsCache(), e ? r.emitAndNotify("style") : r.emit("style"), this }, parsedStyle: function (e) { var t = this[0], n = t.cy(); if (n.styleEnabled()) return t ? t._private.style[e] || n.style().getDefaultProperty(e) : void 0 }, numericStyle: function (e) { var t = this[0]; if (t.cy().styleEnabled() && t) { var n = t.pstyle(e); return void 0 !== n.pfValue ? n.pfValue : n.value } }, numericStyleUnits: function (e) { var t = this[0]; if (t.cy().styleEnabled()) return t ? t.pstyle(e).units : void 0 }, renderedStyle: function (e) { var t = this.cy(); if (!t.styleEnabled()) return this; var n = this[0]; return n ? t.style().getRenderedStyle(n, e) : void 0 }, style: function (e, t) { var n = this.cy(); if (!n.styleEnabled()) return this; var i = n.style(); if (r.plainObject(e)) { var o = e; i.applyBypass(this, o, !1), this.dirtyStyleCache(), this.dirtyCompoundBoundsCache(), this.emitAndNotify("style") } else if (r.string(e)) { if (void 0 === t) { var a = this[0]; return a ? i.getStylePropertyValue(a, e) : void 0 } i.applyBypass(this, e, t, !1), this.dirtyStyleCache(), this.dirtyCompoundBoundsCache(), this.emitAndNotify("style") } else if (void 0 === e) { var s = this[0]; return s ? i.getRawStyle(s) : void 0 } return this }, removeStyle: function (e) { var t = this.cy(); if (!t.styleEnabled()) return this; var n = t.style(); if (void 0 === e) for (var r = 0; r < this.length; r++) { var i = this[r]; n.removeAllBypasses(i, !1) } else { e = e.split(/\s+/); for (var o = 0; o < this.length; o++) { var a = this[o]; n.removeBypasses(a, e, !1) } } return this.dirtyStyleCache(), this.dirtyCompoundBoundsCache(), this.emitAndNotify("style"), this }, show: function () { return this.css("display", "element"), this }, hide: function () { return this.css("display", "none"), this }, effectiveOpacity: function () { var e = this.cy(); if (!e.styleEnabled()) return 1; var t = e.hasCompoundNodes(), n = this[0]; if (n) { var r = n._private, i = n.pstyle("opacity").value; if (!t) return i; var o = r.data.parent ? n.parents() : null; if (o) for (var a = 0; a < o.length; a++)i *= o[a].pstyle("opacity").value; return i } }, transparent: function () { if (!this.cy().styleEnabled()) return !1; var e = this[0], t = e.cy().hasCompoundNodes(); return e ? t ? 0 === e.effectiveOpacity() : 0 === e.pstyle("opacity").value : void 0 }, backgrounding: function () { return !!this.cy().styleEnabled() && !!this[0]._private.backgrounding } }; function l(e, t) { var n = e._private.data.parent ? e.parents() : null; if (n) for (var r = 0; r < n.length; r++)if (!t(n[r])) return !1; return !0 } function c(e) { var t = e.ok, n = e.edgeOkViaNode || e.ok, r = e.parentOk || e.ok; return function () { var e = this.cy(); if (!e.styleEnabled()) return !0; var i = this[0], o = e.hasCompoundNodes(); if (i) { var a = i._private; if (!t(i)) return !1; if (i.isNode()) return !o || l(i, r); var s = a.source, c = a.target; return n(s) && (!o || l(s, n)) && (s === c || n(c) && (!o || l(c, n))) } } } var u = o("eleTakesUpSpace", (function (e) { return "element" === e.pstyle("display").value && 0 !== e.width() && (!e.isNode() || 0 !== e.height()) })); s.takesUpSpace = a("takesUpSpace", c({ ok: u })); var d = o("eleInteractive", (function (e) { return "yes" === e.pstyle("events").value && "visible" === e.pstyle("visibility").value && u(e) })), p = o("parentInteractive", (function (e) { return "visible" === e.pstyle("visibility").value && u(e) })); s.interactive = a("interactive", c({ ok: d, parentOk: p, edgeOkViaNode: u })), s.noninteractive = function () { var e = this[0]; if (e) return !e.interactive() }; var f = o("eleVisible", (function (e) { return "visible" === e.pstyle("visibility").value && 0 !== e.pstyle("opacity").pfValue && u(e) })), h = u; s.visible = a("visible", c({ ok: f, edgeOkViaNode: h })), s.hidden = function () { var e = this[0]; if (e) return !e.visible() }, s.bypass = s.css = s.style, s.renderedCss = s.renderedStyle, s.removeBypass = s.removeCss = s.removeStyle, s.pstyle = s.parsedStyle, e.exports = s }, function (e, t, n) { "use strict"; var r = {}; function i(e) { return function () { var t = arguments, n = []; if (2 === t.length) { var r = t[0], i = t[1]; this.on(e.event, r, i) } else if (1 === t.length) { var o = t[0]; this.on(e.event, o) } else if (0 === t.length) { for (var a = 0; a < this.length; a++) { var s = this[a], l = !e.ableField || s._private[e.ableField], c = s._private[e.field] != e.value; if (e.overrideAble) { var u = e.overrideAble(s); if (void 0 !== u && (l = u, !u)) return this } l && (s._private[e.field] = e.value, c && n.push(s)) } var d = this.spawn(n); d.updateStyle(), d.emit(e.event) } return this } } function o(e) { r[e.field] = function () { var t = this[0]; if (t) { if (e.overrideField) { var n = e.overrideField(t); if (void 0 !== n) return n } return t._private[e.field] } }, r[e.on] = i({ event: e.on, field: e.field, ableField: e.ableField, overrideAble: e.overrideAble, value: !0 }), r[e.off] = i({ event: e.off, field: e.field, ableField: e.ableField, overrideAble: e.overrideAble, value: !1 }) } o({ field: "locked", overrideField: function (e) { return !!e.cy().autolock() || void 0 }, on: "lock", off: "unlock" }), o({ field: "grabbable", overrideField: function (e) { return !e.cy().autoungrabify() && void 0 }, on: "grabify", off: "ungrabify" }), o({ field: "selected", ableField: "selectable", overrideAble: function (e) { return !e.cy().autounselectify() && void 0 }, on: "select", off: "unselect" }), o({ field: "selectable", overrideField: function (e) { return !e.cy().autounselectify() && void 0 }, on: "selectify", off: "unselectify" }), r.deselect = r.unselect, r.grabbed = function () { var e = this[0]; if (e) return e._private.grabbed }, o({ field: "active", on: "activate", off: "unactivate" }), r.inactive = function () { var e = this[0]; if (e) return !e._private.active }, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = {}, a = function (e, t) { return function (n, r, o, a) { var s = n, l = void 0; if (null == s ? l = "null" : i.elementOrCollection(s) && 1 === s.length && (l = "#" + s.id()), 1 === this.length && l) { var c = this[0]._private, u = c.traversalCache = c.traversalCache || {}, d = u[t] = u[t] || {}, p = d[l]; return p || (d[l] = e.call(this, n, r, o, a)) } return e.call(this, n, r, o, a) } }, s = function (e) { return function (t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r]; if (i.isNode()) { for (var o = !1, a = i.connectedEdges(), s = 0; s < a.length; s++) { var l = a[s], c = l.source(), u = l.target(); if (e.noIncomingEdges && u === i && c !== i || e.noOutgoingEdges && c === i && u !== i) { o = !0; break } } o || n.push(i) } } return this.spawn(n, { unique: !0 }).filter(t) } }, l = function (e) { return function (t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r]; if (i.isNode()) for (var o = i.connectedEdges(), a = 0; a < o.length; a++) { var s = o[a], l = s.source(), c = s.target(); e.outgoing && l === i ? (n.push(s), n.push(c)) : e.incoming && c === i && (n.push(s), n.push(l)) } } return this.spawn(n, { unique: !0 }).filter(t) } }, c = function (e) { return function (t) { for (var n = this, r = [], i = {}; ;) { var o = e.outgoing ? n.outgoers() : n.incomers(); if (0 === o.length) break; for (var a = !1, s = 0; s < o.length; s++) { var l = o[s], c = l.id(); i[c] || (i[c] = !0, r.push(l), a = !0) } if (!a) break; n = o } return this.spawn(r, { unique: !0 }).filter(t) } }; function u(e) { return function (t) { for (var n = [], r = 0; r < this.length; r++) { var i = this[r]._private[e.attr]; i && n.push(i) } return this.spawn(n, { unique: !0 }).filter(t) } } function d(e) { return function (t) { var n = [], r = this._private.cy, o = e || {}; i.string(t) && (t = r.$(t)); for (var a = 0; a < t.length; a++)for (var s = t[a]._private.edges, l = 0; l < s.length; l++) { var c = s[l], u = c._private.data, d = this.hasElementWithId(u.source) && t.hasElementWithId(u.target), p = t.hasElementWithId(u.source) && this.hasElementWithId(u.target); if (d || p) { if (o.thisIsSrc || o.thisIsTgt) { if (o.thisIsSrc && !d) continue; if (o.thisIsTgt && !p) continue } n.push(c) } } return this.spawn(n, { unique: !0 }) } } function p(e) { return e = r.extend({}, { codirected: !1 }, e), function (t) { for (var n = [], r = this.edges(), i = e, o = 0; o < r.length; o++)for (var a = r[o]._private, s = a.source, l = s._private.data.id, c = a.data.target, u = s._private.edges, d = 0; d < u.length; d++) { var p = u[d], f = p._private.data, h = f.target, g = f.source, m = h === c && g === l, v = l === h && c === g; (i.codirected && m || !i.codirected && (m || v)) && n.push(p) } return this.spawn(n, { unique: !0 }).filter(t) } } o.clearTraversalCache = function () { for (var e = 0; e < this.length; e++)this[e]._private.traversalCache = null }, r.extend(o, { roots: s({ noIncomingEdges: !0 }), leaves: s({ noOutgoingEdges: !0 }), outgoers: a(l({ outgoing: !0 }), "outgoers"), successors: c({ outgoing: !0 }), incomers: a(l({ incoming: !0 }), "incomers"), predecessors: c({ incoming: !0 }) }), r.extend(o, { neighborhood: a((function (e) { for (var t = [], n = this.nodes(), r = 0; r < n.length; r++)for (var i = n[r], o = i.connectedEdges(), a = 0; a < o.length; a++) { var s = o[a], l = s.source(), c = s.target(), u = i === l ? c : l; u.length > 0 && t.push(u[0]), t.push(s[0]) } return this.spawn(t, { unique: !0 }).filter(e) }), "neighborhood"), closedNeighborhood: function (e) { return this.neighborhood().add(this).filter(e) }, openNeighborhood: function (e) { return this.neighborhood(e) } }), o.neighbourhood = o.neighborhood, o.closedNeighbourhood = o.closedNeighborhood, o.openNeighbourhood = o.openNeighborhood, r.extend(o, { source: a((function (e) { var t = this[0], n = void 0; return t && (n = t._private.source || t.cy().collection()), n && e ? n.filter(e) : n }), "source"), target: a((function (e) { var t = this[0], n = void 0; return t && (n = t._private.target || t.cy().collection()), n && e ? n.filter(e) : n }), "target"), sources: u({ attr: "source" }), targets: u({ attr: "target" }) }), r.extend(o, { edgesWith: a(d(), "edgesWith"), edgesTo: a(d({ thisIsSrc: !0 }), "edgesTo") }), r.extend(o, { connectedEdges: a((function (e) { for (var t = [], n = 0; n < this.length; n++) { var r = this[n]; if (r.isNode()) for (var i = r._private.edges, o = 0; o < i.length; o++) { var a = i[o]; t.push(a) } } return this.spawn(t, { unique: !0 }).filter(e) }), "connectedEdges"), connectedNodes: a((function (e) { for (var t = [], n = 0; n < this.length; n++) { var r = this[n]; r.isEdge() && (t.push(r.source()[0]), t.push(r.target()[0])) } return this.spawn(t, { unique: !0 }).filter(e) }), "connectedNodes"), parallelEdges: a(p(), "parallelEdges"), codirectedEdges: a(p({ codirected: !0 }), "codirectedEdges") }), r.extend(o, { components: function () { var e = this, t = e.cy(), n = e.spawn(), r = e.nodes().spawnSelf(), i = [], o = function (e, t) { n.merge(e), r.unmerge(e), t.merge(e) }; if (r.empty()) return e.spawn(); var a = function () { var n = t.collection(); i.push(n); var a = r[0]; o(a, n), e.bfs({ directed: !1, roots: a, visit: function (e, t, r, i, a) { o(e, n) } }) }; do { a() } while (r.length > 0); return i.map((function (e) { var t = e.connectedEdges().stdFilter((function (t) { return e.anySame(t.source()) && e.anySame(t.target()) })); return e.union(t) })) } }), e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(7), a = n(14), s = { add: function (e) { var t = void 0, n = this; if (r.elementOrCollection(e)) { var s = e; if (s._private.cy === n) t = s.restore(); else { for (var l = [], c = 0; c < s.length; c++) { var u = s[c]; l.push(u.json()) } t = new o(n, l) } } else if (r.array(e)) t = new o(n, e); else if (r.plainObject(e) && (r.array(e.nodes) || r.array(e.edges))) { for (var d = e, p = [], f = ["nodes", "edges"], h = 0, g = f.length; h < g; h++) { var m = f[h], v = d[m]; if (r.array(v)) for (var b = 0, y = v.length; b < y; b++) { var x = i.extend({ group: m }, v[b]); p.push(x) } } t = new o(n, p) } else t = new a(n, e).collection(); return t }, remove: function (e) { if (r.elementOrCollection(e)); else if (r.string(e)) { var t = e; e = this.$(t) } return e.remove() } }; e.exports = s }, function (e, t, n) { "use strict"; var r = n(4), i = n(1), o = n(71), a = { animate: r.animate(), animation: r.animation(), animated: r.animated(), clearQueue: r.clearQueue(), delay: r.delay(), delayAnimation: r.delayAnimation(), stop: r.stop(), addToAnimationPool: function (e) { this.styleEnabled() && this._private.aniEles.merge(e) }, stopAnimationLoop: function () { this._private.animationsRunning = !1 }, startAnimationLoop: function () { var e = this; if (e._private.animationsRunning = !0, e.styleEnabled()) { var t = e.renderer(); t && t.beforeRender ? t.beforeRender((function (t, n) { o(n, e) }), t.beforeRenderPriorities.animations) : function t() { e._private.animationsRunning && i.requestAnimationFrame((function (n) { o(n, e), t() })) }() } } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(72), i = n(77); e.exports = function (e, t) { var n = t._private.aniEles, o = []; function a(t, n) { var a = t._private, s = a.animation.current, l = a.animation.queue, c = !1; if (!n && "none" === t.pstyle("display").value) { s = s.splice(0, s.length).concat(l.splice(0, l.length)); for (var u = 0; u < s.length; u++)s[u].stop() } if (0 === s.length) { var d = l.shift(); d && s.push(d) } for (var p = function (e) { for (var t = e.length - 1; t >= 0; t--)(0, e[t])(); e.splice(0, e.length) }, f = s.length - 1; f >= 0; f--) { var h = s[f], g = h._private; g.stopped ? (s.splice(f, 1), g.hooked = !1, g.playing = !1, g.started = !1, p(g.frames)) : (g.playing || g.applying) && (g.playing && g.applying && (g.applying = !1), g.started || i(t, h, e, n), r(t, h, e, n), g.applying && (g.applying = !1), p(g.frames), h.completed() && (s.splice(f, 1), g.hooked = !1, g.playing = !1, g.started = !1, p(g.completes)), c = !0) } return n || 0 !== s.length || 0 !== l.length || o.push(t), c } for (var s = !1, l = 0; l < n.length; l++) { var c = a(n[l]); s = s || c } var u = a(t, !0); (s || u) && (n.length > 0 ? (n.dirtyCompoundBoundsCache(), t.notify({ type: "draw", eles: n })) : t.notify({ type: "draw" })), n.unmerge(o), t.emit("step") } }, function (e, t, n) { "use strict"; var r = n(73), i = n(76), o = n(0); function a(e, t) { return !!(null != e && null != t && (o.number(e) && o.number(t) || e && t)) } e.exports = function (e, t, n, s) { var l = !s, c = e._private, u = t._private, d = u.easing, p = u.startTime, f = (s ? e : e.cy()).style(); if (!u.easingImpl) if (null == d) u.easingImpl = r.linear; else { var h = void 0; h = o.string(d) ? f.parse("transition-timing-function", d).value : d; var g = void 0, m = void 0; o.string(h) ? (g = h, m = []) : (g = h[1], m = h.slice(2).map((function (e) { return +e }))), m.length > 0 ? ("spring" === g && m.push(u.duration), u.easingImpl = r[g].apply(null, m)) : u.easingImpl = r[g] } var v = u.easingImpl, b = void 0; if (b = 0 === u.duration ? 1 : (n - p) / u.duration, u.applying && (b = u.progress), b < 0 ? b = 0 : b > 1 && (b = 1), null == u.delay) { var y = u.startPosition, x = u.position; if (x && l && !e.locked()) { var w = e.position(); a(y.x, x.x) && (w.x = i(y.x, x.x, b, v)), a(y.y, x.y) && (w.y = i(y.y, x.y, b, v)), e.emit("position") } var k = u.startPan, A = u.pan, E = c.pan, S = null != A && s; S && (a(k.x, A.x) && (E.x = i(k.x, A.x, b, v)), a(k.y, A.y) && (E.y = i(k.y, A.y, b, v)), e.emit("pan")); var $ = u.startZoom, C = u.zoom, _ = null != C && s; _ && (a($, C) && (c.zoom = i($, C, b, v)), e.emit("zoom")), (S || _) && e.emit("viewport"); var O = u.style; if (O && O.length > 0 && l) { for (var T = 0; T < O.length; T++) { var j = O[T], P = j.name, D = j, R = u.startStyle[P], I = f.properties[R.name], N = i(R, D, b, v, I); f.overrideBypass(e, P, N) } e.emit("style") } } return u.progress = b, b } }, function (e, t, n) { "use strict"; var r = n(74), i = n(75), o = function (e, t, n, i) { var o = r(e, t, n, i); return function (e, t, n) { return e + (t - e) * o(n) } }, a = { linear: function (e, t, n) { return e + (t - e) * n }, ease: o(.25, .1, .25, 1), "ease-in": o(.42, 0, 1, 1), "ease-out": o(0, 0, .58, 1), "ease-in-out": o(.42, 0, .58, 1), "ease-in-sine": o(.47, 0, .745, .715), "ease-out-sine": o(.39, .575, .565, 1), "ease-in-out-sine": o(.445, .05, .55, .95), "ease-in-quad": o(.55, .085, .68, .53), "ease-out-quad": o(.25, .46, .45, .94), "ease-in-out-quad": o(.455, .03, .515, .955), "ease-in-cubic": o(.55, .055, .675, .19), "ease-out-cubic": o(.215, .61, .355, 1), "ease-in-out-cubic": o(.645, .045, .355, 1), "ease-in-quart": o(.895, .03, .685, .22), "ease-out-quart": o(.165, .84, .44, 1), "ease-in-out-quart": o(.77, 0, .175, 1), "ease-in-quint": o(.755, .05, .855, .06), "ease-out-quint": o(.23, 1, .32, 1), "ease-in-out-quint": o(.86, 0, .07, 1), "ease-in-expo": o(.95, .05, .795, .035), "ease-out-expo": o(.19, 1, .22, 1), "ease-in-out-expo": o(1, 0, 0, 1), "ease-in-circ": o(.6, .04, .98, .335), "ease-out-circ": o(.075, .82, .165, 1), "ease-in-out-circ": o(.785, .135, .15, .86), spring: function (e, t, n) { if (0 === n) return a.linear; var r = i(e, t, n); return function (e, t, n) { return e + (t - e) * r(n) } }, "cubic-bezier": o }; e.exports = a }, function (e, t, n) { + "use strict"; +/*! Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */e.exports = function (e, t, n, r) { var i = 4, o = .001, a = 1e-7, s = 10, l = 11, c = 1 / (l - 1), u = "undefined" != typeof Float32Array; if (4 !== arguments.length) return !1; for (var d = 0; d < 4; ++d)if ("number" != typeof arguments[d] || isNaN(arguments[d]) || !isFinite(arguments[d])) return !1; e = Math.min(e, 1), n = Math.min(n, 1), e = Math.max(e, 0), n = Math.max(n, 0); var p = u ? new Float32Array(l) : new Array(l); function f(e, t) { return 1 - 3 * t + 3 * e } function h(e, t) { return 3 * t - 6 * e } function g(e) { return 3 * e } function m(e, t, n) { return ((f(t, n) * e + h(t, n)) * e + g(t)) * e } function v(e, t, n) { return 3 * f(t, n) * e * e + 2 * h(t, n) * e + g(t) } function b(t, r) { for (var o = 0; o < i; ++o) { var a = v(r, e, n); if (0 === a) return r; r -= (m(r, e, n) - t) / a } return r } function y() { for (var t = 0; t < l; ++t)p[t] = m(t * c, e, n) } function x(t, r, i) { var o = void 0, l = void 0, c = 0; do { (o = m(l = r + (i - r) / 2, e, n) - t) > 0 ? i = l : r = l } while (Math.abs(o) > a && ++c < s); return l } function w(t) { for (var r = 0, i = 1, a = l - 1; i !== a && p[i] <= t; ++i)r += c; --i; var s = r + (t - p[i]) / (p[i + 1] - p[i]) * c, u = v(s, e, n); return u >= o ? b(t, s) : 0 === u ? s : x(t, r, r + c) } var k = !1; function A() { k = !0, e === t && n === r || y() } var E = function (i) { return k || A(), e === t && n === r ? i : 0 === i ? 0 : 1 === i ? 1 : m(w(i), t, r) }; E.getControlPoints = function () { return [{ x: e, y: t }, { x: n, y: r }] }; var S = "generateBezier(" + [e, t, n, r] + ")"; return E.toString = function () { return S }, E } + }, function (e, t, n) { + "use strict"; +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var r = function () { function e(e) { return -e.tension * e.x - e.friction * e.v } function t(t, n, r) { var i = { x: t.x + r.dx * n, v: t.v + r.dv * n, tension: t.tension, friction: t.friction }; return { dx: i.v, dv: e(i) } } function n(n, r) { var i = { dx: n.v, dv: e(n) }, o = t(n, .5 * r, i), a = t(n, .5 * r, o), s = t(n, r, a), l = 1 / 6 * (i.dx + 2 * (o.dx + a.dx) + s.dx), c = 1 / 6 * (i.dv + 2 * (o.dv + a.dv) + s.dv); return n.x = n.x + l * r, n.v = n.v + c * r, n } return function e(t, r, i) { var o, a = { x: -1, v: 0, tension: null, friction: null }, s = [0], l = 0, c = void 0, u = void 0; for (t = parseFloat(t) || 500, r = parseFloat(r) || 20, i = i || null, a.tension = t, a.friction = r, c = (o = null !== i) ? (l = e(t, r)) / i * .016 : .016; u = n(u || a, c), s.push(1 + u.x), l += 16, Math.abs(u.x) > 1e-4 && Math.abs(u.v) > 1e-4;); return o ? function (e) { return s[e * (s.length - 1) | 0] } : l } }(); e.exports = r + }, function (e, t, n) { "use strict"; var r = n(0); function i(e, t, n, r, i) { if (1 === r) return n; var o = i(t, n, r); return null == e || ((e.roundValue || e.color) && (o = Math.round(o)), void 0 !== e.min && (o = Math.max(o, e.min)), void 0 !== e.max && (o = Math.min(o, e.max))), o } function o(e, t) { return null != e.pfValue || null != e.value ? null == e.pfValue || null != t && "%" === t.type.units ? e.value : e.pfValue : e } e.exports = function (e, t, n, a, s) { var l = null != s ? s.type : null; n < 0 ? n = 0 : n > 1 && (n = 1); var c = o(e, s), u = o(t, s); if (r.number(c) && r.number(u)) return i(l, c, u, n, a); if (r.array(c) && r.array(u)) { for (var d = [], p = 0; p < u.length; p++) { var f = c[p], h = u[p]; if (null != f && null != h) { var g = i(l, f, h, n, a); d.push(g) } else d.push(h) } return d } } }, function (e, t, n) { "use strict"; e.exports = function (e, t, n, r) { var i = !r, o = e, a = t._private, s = r ? e : e.cy(), l = s.style(); if (i) { var c = o.position(); a.startPosition = a.startPosition || { x: c.x, y: c.y }, a.startStyle = a.startStyle || l.getAnimationStartStyle(o, a.style) } if (r) { var u = s._private.pan; a.startPan = a.startPan || { x: u.x, y: u.y }, a.startZoom = null != a.startZoom ? a.startZoom : s._private.zoom } a.started = !0, a.startTime = n - a.progress * a.duration } }, function (e, t, n) { "use strict"; var r = n(11), i = n(4), o = n(0), a = n(1), s = n(6), l = { qualifierCompare: function (e, t) { return null == e || null == t ? null == e && null == t : e.sameText(t) }, eventMatches: function (e, t, n) { var r = t.qualifier; return null == r || e !== n.target && o.element(n.target) && r.matches(n.target) }, eventFields: function (e) { return { cy: e, target: e } }, callbackContext: function (e, t, n) { return null != t.qualifier ? n.target : e } }, c = function (e) { return o.string(e) ? new s(e) : e }, u = { createEmitter: function () { var e = this._private; return e.emitter || (e.emitter = new r(a.assign({ context: this }, l))), this }, emitter: function () { return this._private.emitter }, on: function (e, t, n) { return this.emitter().on(e, c(t), n), this }, removeListener: function (e, t, n) { return this.emitter().removeListener(e, c(t), n), this }, one: function (e, t, n) { return this.emitter().one(e, c(t), n), this }, once: function (e, t, n) { return this.emitter().one(e, c(t), n), this }, emit: function (e, t) { return this.emitter().emit(e, t), this } }; i.eventAliasesOn(u), e.exports = u }, function (e, t, n) { "use strict"; var r = { png: function (e) { return e = e || {}, this._private.renderer.png(e) }, jpg: function (e) { var t = this._private.renderer; return (e = e || {}).bg = e.bg || "#fff", t.jpg(e) } }; r.jpeg = r.jpg, e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { layout: function (e) { if (null != e) if (null != e.name) { var t = e.name, n = this.extension("layout", t); if (null != n) { var o = void 0; o = i.string(e.eles) ? this.$(e.eles) : null != e.eles ? e.eles : this.$(); var a = new n(r.extend({}, e, { cy: this, eles: o })); return a } r.error("Can not apply layout: No such layout `" + t + "` found; did you include its JS file?") } else r.error("A `name` must be specified to make a layout"); else r.error("Layout options must be specified to make a layout") } }; o.createLayout = o.makeLayout = o.layout, e.exports = o }, function (e, t, n) { "use strict"; var r = { notify: function (e) { var t = this._private; if (t.batchingNotify) { var n = t.batchNotifyEles, r = t.batchNotifyTypes; return e.eles && n.merge(e.eles), void (r.ids[e.type] || (r.push(e.type), r.ids[e.type] = !0)) } if (t.notificationsEnabled) { var i = this.renderer(); !this.isDestroyed() && i && i.notify(e) } }, notifications: function (e) { var t = this._private; if (void 0 === e) return t.notificationsEnabled; t.notificationsEnabled = !!e }, noNotifications: function (e) { this.notifications(!1), e(), this.notifications(!0) }, batching: function () { return this._private.batchCount > 0 }, startBatch: function () { var e = this._private; return null == e.batchCount && (e.batchCount = 0), 0 === e.batchCount && (e.batchingStyle = e.batchingNotify = !0, e.batchStyleEles = this.collection(), e.batchNotifyEles = this.collection(), e.batchNotifyTypes = [], e.batchNotifyTypes.ids = {}), e.batchCount++, this }, endBatch: function () { var e = this._private; return e.batchCount--, 0 === e.batchCount && (e.batchingStyle = !1, e.batchStyleEles.updateStyle(), e.batchingNotify = !1, this.notify({ type: e.batchNotifyTypes, eles: e.batchNotifyEles })), this }, batch: function (e) { return this.startBatch(), e(), this.endBatch(), this }, batchData: function (e) { var t = this; return this.batch((function () { for (var n = Object.keys(e), r = 0; r < n.length; r++) { var i = n[r], o = e[i]; t.getElementById(i).data(o) } })) } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = { renderTo: function (e, t, n, r) { return this._private.renderer.renderTo(e, t, n, r), this }, renderer: function () { return this._private.renderer }, forceRender: function () { return this.notify({ type: "draw" }), this }, resize: function () { return this.invalidateSize(), this.notify({ type: "resize" }), this.emit("resize"), this }, initRenderer: function (e) { var t = this.extension("renderer", e.name); null != t ? (this._private.renderer = new t(r.extend({}, e, { cy: this })), this.notify({ type: "init" })) : r.error("Can not initialise: No such renderer `%s` found; did you include its JS file?", e.name) }, destroyRenderer: function () { this.notify({ type: "destroy" }); var e = this.container(); if (e) for (e._cyreg = null; e.childNodes.length > 0;)e.removeChild(e.childNodes[0]); this._private.renderer = null }, onRender: function (e) { return this.on("render", e) }, offRender: function (e) { return this.off("render", e) } }; i.invalidateDimensions = i.resize, e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = n(7), o = { collection: function (e, t) { return r.string(e) ? this.$(e) : r.elementOrCollection(e) ? e.collection() : r.array(e) ? new i(this, e, t) : new i(this) }, nodes: function (e) { var t = this.$((function (e) { return e.isNode() })); return e ? t.filter(e) : t }, edges: function (e) { var t = this.$((function (e) { return e.isEdge() })); return e ? t.filter(e) : t }, $: function (e) { var t = this._private.elements; return e ? t.filter(e) : t.spawnSelf() }, mutableElements: function () { return this._private.elements } }; o.elements = o.filter = o.$, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = n(18), o = { style: function (e) { return e && this.setStyle(e).update(), this._private.style }, setStyle: function (e) { var t = this._private; return r.stylesheet(e) ? t.style = e.generateStyle(this) : r.array(e) ? t.style = i.fromJson(this, e) : r.string(e) ? t.style = i.fromString(this, e) : t.style = i(this), t.style } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(5), a = { apply: function (e) { var t = this._private, n = t.cy.collection(); t.newStyle && (t.contextStyles = {}, t.propDiffs = {}, this.cleanElements(e, !0)); for (var r = 0; r < e.length; r++) { var i = e[r], o = this.getContextMeta(i); if (!o.empty) { n.merge(i); var a = this.getContextStyle(o), s = this.applyContextStyle(o, a, i); t.newStyle || this.updateTransitions(i, s.diffProps), this.updateStyleHints(i) } } return t.newStyle = !1, n }, getPropertiesDiff: function (e, t) { var n = this._private.propDiffs = this._private.propDiffs || {}, r = e + "-" + t, i = n[r]; if (i) return i; for (var o = [], a = {}, s = 0; s < this.length; s++) { var l = this[s], c = "t" === e[s] != ("t" === t[s]), u = l.mappedProperties.length > 0; if (c || u) { var d = void 0; c && u || c ? d = l.properties : u && (d = l.mappedProperties); for (var p = 0; p < d.length; p++) { for (var f = d[p], h = f.name, g = !1, m = s + 1; m < this.length; m++) { var v = this[m]; if ("t" === t[m] && (g = null != v.properties[f.name])) break } a[h] || g || (a[h] = !0, o.push(h)) } } } return n[r] = o, o }, getContextMeta: function (e) { var t, n = "", r = e._private.styleCxtKey || ""; this._private.newStyle && (r = ""); for (var i = 0; i < this.length; i++) { var o = this[i]; n += o.selector && o.selector.matches(e) ? "t" : "f" } return t = this.getPropertiesDiff(r, n), e._private.styleCxtKey = n, { key: n, diffPropNames: t, empty: 0 === t.length } }, getContextStyle: function (e) { var t = e.key, n = this._private.contextStyles = this._private.contextStyles || {}; if (n[t]) return n[t]; for (var r = { _private: { key: t } }, i = 0; i < this.length; i++) { var o = this[i]; if ("t" === t[i]) for (var a = 0; a < o.properties.length; a++) { var s = o.properties[a]; r[s.name] = s } } return n[t] = r, r }, applyContextStyle: function (e, t, n) { for (var r = e.diffPropNames, i = {}, o = 0; o < r.length; o++) { var a = r[o], s = t[a], l = n.pstyle(a); if (!s) { if (!l) continue; s = l.bypass ? { name: a, deleteBypassed: !0 } : { name: a, delete: !0 } } if (l !== s) { var c = i[a] = { prev: l }; this.applyParsedProperty(n, s), c.next = n.pstyle(a), c.next && c.next.bypass && (c.next = c.next.bypassed) } } return { diffProps: i } }, updateStyleHints: function (e) { var t = e._private; if (!e.removed()) { var n = !1; if ("nodes" === t.group) for (var r = 1; r <= this.pieBackgroundN; r++)if (e.pstyle("pie-" + r + "-background-size").value > 0) { n = !0; break } t.hasPie = n; var i = e.pstyle("text-transform").strValue, o = e.pstyle("label").strValue, a = e.pstyle("source-label").strValue, s = e.pstyle("target-label").strValue, l = e.pstyle("font-style").strValue, c = e.pstyle("font-size").pfValue + "px", u = e.pstyle("font-family").strValue, d = e.pstyle("font-weight").strValue, p = l + "$" + c + "$" + u + "$" + d + "$" + i + "$" + e.pstyle("text-valign").strValue + "$" + e.pstyle("text-valign").strValue + "$" + e.pstyle("text-outline-width").pfValue + "$" + e.pstyle("text-wrap").strValue + "$" + e.pstyle("text-max-width").pfValue; t.labelStyleKey = p, t.sourceLabelKey = p + "$" + a, t.targetLabelKey = p + "$" + s, t.labelKey = p + "$" + o, t.fontKey = l + "$" + d + "$" + c + "$" + u, t.styleKey = Date.now() } }, applyParsedProperty: function (e, t) { var n = this, o = t, a = e._private.style, s = void 0, l = n.types, c = n.properties[o.name].type, u = o.bypass, d = a[o.name], p = d && d.bypass, f = e._private, h = function () { n.checkZOrderTrigger(e, o.name, d ? d.value : null, o.value) }; if ("curve-style" === t.name && "haystack" === t.value && e.isEdge() && (e.isLoop() || e.source().isParent() || e.target().isParent()) && (o = t = this.parse(t.name, "bezier", u)), o.delete) return a[o.name] = void 0, h(), !0; if (o.deleteBypassed) return d ? !!d.bypass && (d.bypassed = void 0, h(), !0) : (h(), !0); if (o.deleteBypass) return d ? !!d.bypass && (a[o.name] = d.bypassed, h(), !0) : (h(), !0); var g = function () { r.error("Do not assign mappings to elements without corresponding data (e.g. ele `" + e.id() + "` for property `" + o.name + "` with data field `" + o.field + "`); try a `[" + o.field + "]` selector to limit scope to elements with `" + o.field + "` defined") }; switch (o.mapped) { case l.mapData: for (var m = o.field.split("."), v = f.data, b = 0; b < m.length && v; b++)v = v[m[b]]; var y = void 0; if ((y = i.number(v) ? (v - o.fieldMin) / (o.fieldMax - o.fieldMin) : 0) < 0 ? y = 0 : y > 1 && (y = 1), c.color) { var x = o.valueMin[0], w = o.valueMax[0], k = o.valueMin[1], A = o.valueMax[1], E = o.valueMin[2], S = o.valueMax[2], $ = null == o.valueMin[3] ? 1 : o.valueMin[3], C = null == o.valueMax[3] ? 1 : o.valueMax[3], _ = [Math.round(x + (w - x) * y), Math.round(k + (A - k) * y), Math.round(E + (S - E) * y), Math.round($ + (C - $) * y)]; s = { bypass: o.bypass, name: o.name, value: _, strValue: "rgb(" + _[0] + ", " + _[1] + ", " + _[2] + ")" } } else { if (!c.number) return !1; var O = o.valueMin + (o.valueMax - o.valueMin) * y; s = this.parse(o.name, O, o.bypass, "mapping") } s || (s = this.parse(o.name, d.strValue, o.bypass, "mapping")), s || g(), s.mapping = o, o = s; break; case l.data: var T = o.field.split("."), j = f.data; if (j) for (var P = 0; P < T.length; P++)j = j[T[P]]; if (!(s = this.parse(o.name, j, o.bypass, "mapping"))) { var D = d ? d.strValue : ""; s = this.parse(o.name, D, o.bypass, "mapping") } s || g(), s.mapping = o, o = s; break; case l.fn: var R = (0, o.value)(e); (s = this.parse(o.name, R, o.bypass, "mapping")).mapping = o, o = s; break; case void 0: break; default: return !1 }return u ? (o.bypassed = p ? d.bypassed : d, a[o.name] = o) : p ? d.bypassed = o : a[o.name] = o, h(), !0 }, cleanElements: function (e, t) { for (var n = this.properties, r = 0; r < e.length; r++) { var i = e[r]; if (t) for (var o = i._private.style, a = 0; a < n.length; a++) { var s = n[a], l = o[s.name]; l && (l.bypass ? l.bypassed = null : o[s.name] = null) } else i._private.style = {} } }, update: function () { this._private.cy.mutableElements().updateStyle() }, updateMappers: function (e) { for (var t = this._private.cy.collection(), n = 0; n < e.length; n++) { for (var r = e[n], i = r._private.style, o = !1, a = 0; a < this.properties.length; a++) { var s = i[this.properties[a].name]; if (s && s.mapping) { var l = s.mapping; this.applyParsedProperty(r, l), o = !0 } } o && (this.updateStyleHints(r), t.merge(r)) } return t }, updateTransitions: function (e, t, n) { var r = this, a = e._private, s = e.pstyle("transition-property").value, l = e.pstyle("transition-duration").pfValue, c = e.pstyle("transition-delay").pfValue; if (s.length > 0 && l > 0) { for (var u = {}, d = !1, p = 0; p < s.length; p++) { var f = s[p], h = e.pstyle(f), g = t[f]; if (g) { var m = g.prev, v = null != g.next ? g.next : h, b = !1, y = void 0; m && (i.number(m.pfValue) && i.number(v.pfValue) ? (b = v.pfValue - m.pfValue, y = m.pfValue + 1e-6 * b) : i.number(m.value) && i.number(v.value) ? (b = v.value - m.value, y = m.value + 1e-6 * b) : i.array(m.value) && i.array(v.value) && (b = m.value[0] !== v.value[0] || m.value[1] !== v.value[1] || m.value[2] !== v.value[2], y = m.strValue), b && (u[f] = v.strValue, this.applyBypass(e, f, y), d = !0)) } } if (!d) return; a.transitioning = !0, new o((function (t) { c > 0 ? e.delayAnimation(c).play().promise().then(t) : t() })).then((function () { return e.animation({ style: u, duration: l, easing: e.pstyle("transition-timing-function").value, queue: !1 }).play().promise() })).then((function () { r.removeBypasses(e, s), e.emitAndNotify("style"), a.transitioning = !1 })) } else a.transitioning && (this.removeBypasses(e, s), e.emitAndNotify("style"), a.transitioning = !1) }, checkZOrderTrigger: function (e, t, n, r) { var i = this.properties[t]; null == i.triggersZOrder || null != n && !i.triggersZOrder(n, r) || this._private.cy.notify({ type: "zorder", eles: e }) } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = { applyBypass: function (e, t, n, o) { var a = []; if ("*" === t || "**" === t) { if (void 0 !== n) for (var s = 0; s < this.properties.length; s++) { var l = this.properties[s].name, c = this.parse(l, n, !0); c && a.push(c) } } else if (r.string(t)) { var u = this.parse(t, n, !0); u && a.push(u) } else { if (!r.plainObject(t)) return !1; var d = t; o = n; for (var p = Object.keys(d), f = 0; f < p.length; f++) { var h = p[f], g = (this.properties[h], d[h]); if (void 0 === g && (g = d[i.dash2camel(h)]), void 0 !== g) { var m = this.parse(h, g, !0); m && a.push(m) } } } if (0 === a.length) return !1; for (var v = !1, b = 0; b < e.length; b++) { for (var y = e[b], x = {}, w = void 0, k = 0; k < a.length; k++) { var A = a[k]; if (o) { var E = y.pstyle(A.name); w = x[A.name] = { prev: E } } v = this.applyParsedProperty(y, A) || v, o && (w.next = y.pstyle(A.name)) } v && this.updateStyleHints(y), o && this.updateTransitions(y, x, !0) } return v }, overrideBypass: function (e, t, n) { t = i.camel2dash(t); for (var r = 0; r < e.length; r++) { var o = e[r], a = o._private.style[t], s = this.properties[t].type, l = s.color, c = s.mutiple; if (a && a.bypass) { var u = null != a.pfValue ? a.pfValue : a.value; a.value = n, null != a.pfValue && (a.pfValue = n), a.strValue = l ? "rgb(" + n.join(",") + ")" : c ? n.join(" ") : "" + n, this.checkZOrderTrigger(o, t, u, n) } else this.applyBypass(o, t, n) } }, removeAllBypasses: function (e, t) { return this.removeBypasses(e, this.propertyNames, t) }, removeBypasses: function (e, t, n) { for (var r = 0; r < e.length; r++) { for (var i = e[r], o = {}, a = 0; a < t.length; a++) { var s = t[a], l = this.properties[s], c = i.pstyle(l.name); if (c && c.bypass) { var u = this.parse(s, "", !0), d = o[l.name] = { prev: c }; this.applyParsedProperty(i, u), d.next = i.pstyle(l.name) } } this.updateStyleHints(i), n && this.updateTransitions(i, o, !0) } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(3), i = { getEmSizeInPixels: function () { var e = this.containerCss("font-size"); return null != e ? parseFloat(e) : 1 }, containerCss: function (e) { var t = this._private.cy.container(); if (r && t && r.getComputedStyle) return r.getComputedStyle(t).getPropertyValue(e) } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { getRenderedStyle: function (e, t) { return t ? this.getStylePropertyValue(e, t, !0) : this.getRawStyle(e, !0) }, getRawStyle: function (e, t) { if (e = e[0]) { for (var n = {}, i = 0; i < this.properties.length; i++) { var o = this.properties[i], a = this.getStylePropertyValue(e, o.name, t); null != a && (n[o.name] = a, n[r.dash2camel(o.name)] = a) } return n } }, getIndexedStyle: function (e, t, n, r) { var i = e.pstyle(t)[n][r]; return null != i ? i : e.cy().style().getDefaultProperty(t)[n][0] }, getStylePropertyValue: function (e, t, n) { if (e = e[0]) { var r = this.properties[t]; r.alias && (r = r.pointsTo); var i = r.type, o = e.pstyle(r.name), a = e.cy().zoom(); if (o) { var s = o.units ? i.implicitUnits || "px" : null; return s ? [].concat(o.pfValue).map((function (e) { return e * (n ? a : 1) + s })).join(" ") : o.strValue } } }, getAnimationStartStyle: function (e, t) { for (var n = {}, r = 0; r < t.length; r++) { var o = t[r].name, a = e.pstyle(o); void 0 !== a && (a = i.plainObject(a) ? this.parse(o, a.strValue) : this.parse(o, a)), a && (n[o] = a) } return n }, getPropsList: function (e) { var t = [], n = e, i = this.properties; if (n) for (var o = Object.keys(n), a = 0; a < o.length; a++) { var s = o[a], l = n[s], c = i[s] || i[r.camel2dash(s)], u = this.parse(c.name, l); u && t.push(u) } return t } }; e.exports = o }, function (e, t, n) { "use strict"; var r = { appendFromJson: function (e) { for (var t = 0; t < e.length; t++) { var n = e[t], r = n.selector, i = n.style || n.css, o = Object.keys(i); this.selector(r); for (var a = 0; a < o.length; a++) { var s = o[a], l = i[s]; this.css(s, l) } } return this }, fromJson: function (e) { return this.resetToDefault(), this.appendFromJson(e), this }, json: function () { for (var e = [], t = this.defaultLength; t < this.length; t++) { for (var n = this[t], r = n.selector, i = n.properties, o = {}, a = 0; a < i.length; a++) { var s = i[a]; o[s.name] = s.strValue } e.push({ selector: r ? r.toString() : "core", style: o }) } return e } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(6), o = { appendFromString: function (e) { var t = "" + e, n = void 0, o = void 0, a = void 0; function s() { t = t.length > n.length ? t.substr(n.length) : "" } function l() { o = o.length > a.length ? o.substr(a.length) : "" } for (t = t.replace(/[/][*](\s|.)+?[*][/]/g, ""); !t.match(/^\s*$/);) { var c = t.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/); if (!c) { r.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: " + t); break } n = c[0]; var u = c[1]; if ("core" !== u && new i(u)._private.invalid) r.error("Skipping parsing of block: Invalid selector found in string stylesheet: " + u), s(); else { var d = c[2], p = !1; o = d; for (var f = []; !o.match(/^\s*$/);) { var h = o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/); if (!h) { r.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:" + d), p = !0; break } a = h[0]; var g = h[1], m = h[2]; this.properties[g] ? this.parse(g, m) ? (f.push({ name: g, val: m }), l()) : (r.error("Skipping property: Invalid property definition in: " + a), l()) : (r.error("Skipping property: Invalid property name in: " + a), l()) } if (p) { s(); break } this.selector(u); for (var v = 0; v < f.length; v++) { var b = f[v]; this.css(b.name, b.val) } s() } } return this }, fromString: function (e) { return this.resetToDefault(), this.appendFromString(e), this } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = {}; !function () { var e = r.regex.number, t = r.regex.rgbaNoBackRefs, n = r.regex.hslaNoBackRefs, a = r.regex.hex3, s = r.regex.hex6, l = function (e) { return "^" + e + "\\s*\\(\\s*([\\w\\.]+)\\s*\\)$" }, c = function (r) { var i = e + "|\\w+|" + t + "|" + n + "|" + a + "|" + s; return "^" + r + "\\s*\\(([\\w\\.]+)\\s*\\,\\s*(" + e + ")\\s*\\,\\s*(" + e + ")\\s*,\\s*(" + i + ")\\s*\\,\\s*(" + i + ")\\)$" }, u = ["^url\\s*\\(\\s*['\"]?(.+?)['\"]?\\s*\\)$", "^(none)$", "^(.+)$"]; o.types = { time: { number: !0, min: 0, units: "s|ms", implicitUnits: "ms" }, percent: { number: !0, min: 0, max: 100, units: "%", implicitUnits: "%" }, zeroOneNumber: { number: !0, min: 0, max: 1, unitless: !0 }, zeroOneNumbers: { number: !0, min: 0, max: 1, unitless: !0, multiple: !0 }, nOneOneNumber: { number: !0, min: -1, max: 1, unitless: !0 }, nonNegativeInt: { number: !0, min: 0, integer: !0, unitless: !0 }, position: { enums: ["parent", "origin"] }, nodeSize: { number: !0, min: 0, enums: ["label"] }, number: { number: !0, unitless: !0 }, numbers: { number: !0, unitless: !0, multiple: !0 }, positiveNumber: { number: !0, unitless: !0, min: 0, strictMin: !0 }, size: { number: !0, min: 0 }, bidirectionalSize: { number: !0 }, bidirectionalSizes: { number: !0, multiple: !0 }, sizeMaybePercent: { number: !0, min: 0, allowPercent: !0 }, paddingRelativeTo: { enums: ["width", "height", "average", "min", "max"] }, bgWH: { number: !0, min: 0, allowPercent: !0, enums: ["auto"], multiple: !0 }, bgPos: { number: !0, allowPercent: !0, multiple: !0 }, bgRelativeTo: { enums: ["inner", "include-padding"], multiple: !0 }, bgRepeat: { enums: ["repeat", "repeat-x", "repeat-y", "no-repeat"], multiple: !0 }, bgFit: { enums: ["none", "contain", "cover"], multiple: !0 }, bgCrossOrigin: { enums: ["anonymous", "use-credentials"], multiple: !0 }, bgClip: { enums: ["none", "node"] }, color: { color: !0 }, bool: { enums: ["yes", "no"] }, lineStyle: { enums: ["solid", "dotted", "dashed"] }, borderStyle: { enums: ["solid", "dotted", "dashed", "double"] }, curveStyle: { enums: ["bezier", "unbundled-bezier", "haystack", "segments"] }, fontFamily: { regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' }, fontletiant: { enums: ["small-caps", "normal"] }, fontStyle: { enums: ["italic", "normal", "oblique"] }, fontWeight: { enums: ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "800", "900", 100, 200, 300, 400, 500, 600, 700, 800, 900] }, textDecoration: { enums: ["none", "underline", "overline", "line-through"] }, textTransform: { enums: ["none", "uppercase", "lowercase"] }, textWrap: { enums: ["none", "wrap", "ellipsis"] }, textBackgroundShape: { enums: ["rectangle", "roundrectangle"] }, nodeShape: { enums: ["rectangle", "roundrectangle", "cutrectangle", "bottomroundrectangle", "barrel", "ellipse", "triangle", "square", "pentagon", "hexagon", "concavehexagon", "heptagon", "octagon", "tag", "star", "diamond", "vee", "rhomboid", "polygon"] }, compoundIncludeLabels: { enums: ["include", "exclude"] }, arrowShape: { enums: ["tee", "triangle", "triangle-tee", "triangle-cross", "triangle-backcurve", "half-triangle-overshot", "vee", "square", "circle", "diamond", "none"] }, arrowFill: { enums: ["filled", "hollow"] }, display: { enums: ["element", "none"] }, visibility: { enums: ["hidden", "visible"] }, zCompoundDepth: { enums: ["bottom", "orphan", "auto", "top"] }, zIndexCompare: { enums: ["auto", "manual"] }, valign: { enums: ["top", "center", "bottom"] }, halign: { enums: ["left", "center", "right"] }, text: { string: !0 }, data: { mapping: !0, regex: l("data") }, layoutData: { mapping: !0, regex: l("layoutData") }, scratch: { mapping: !0, regex: l("scratch") }, mapData: { mapping: !0, regex: c("mapData") }, mapLayoutData: { mapping: !0, regex: c("mapLayoutData") }, mapScratch: { mapping: !0, regex: c("mapScratch") }, fn: { mapping: !0, fn: !0 }, url: { regexes: u, singleRegexMatchValue: !0 }, urls: { regexes: u, singleRegexMatchValue: !0, multiple: !0 }, propList: { propList: !0 }, angle: { number: !0, units: "deg|rad", implicitUnits: "rad" }, textRotation: { number: !0, units: "deg|rad", implicitUnits: "rad", enums: ["none", "autorotate"] }, polygonPointList: { number: !0, multiple: !0, evenMultiple: !0, min: -1, max: 1, unitless: !0 }, edgeDistances: { enums: ["intersection", "node-position"] }, edgeEndpoint: { number: !0, multiple: !0, units: "%|px|em|deg|rad", implicitUnits: "px", enums: ["inside-to-node", "outside-to-node", "outside-to-line"], singleEnum: !0, validate: function (e, t) { switch (e.length) { case 2: return "deg" !== t[0] && "rad" !== t[0] && "deg" !== t[1] && "rad" !== t[1]; case 1: return i.string(e[0]) || "deg" === t[0] || "rad" === t[0]; default: return !1 } } }, easing: { regexes: ["^(spring)\\s*\\(\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*\\)$", "^(cubic-bezier)\\s*\\(\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*,\\s*(" + e + ")\\s*\\)$"], enums: ["linear", "ease", "ease-in", "ease-out", "ease-in-out", "ease-in-sine", "ease-out-sine", "ease-in-out-sine", "ease-in-quad", "ease-out-quad", "ease-in-out-quad", "ease-in-cubic", "ease-out-cubic", "ease-in-out-cubic", "ease-in-quart", "ease-out-quart", "ease-in-out-quart", "ease-in-quint", "ease-out-quint", "ease-in-out-quint", "ease-in-expo", "ease-out-expo", "ease-in-out-expo", "ease-in-circ", "ease-out-circ", "ease-in-out-circ"] } }; var d = { zeroNonZero: function (e, t) { return 0 === e && 0 !== t || 0 !== e && 0 === t }, anyDiff: function (e, t) { return e !== t } }, p = o.types, f = o.properties = [{ name: "label", type: p.text }, { name: "text-rotation", type: p.textRotation }, { name: "text-margin-x", type: p.bidirectionalSize }, { name: "text-margin-y", type: p.bidirectionalSize }, { name: "source-label", type: p.text }, { name: "source-text-rotation", type: p.textRotation }, { name: "source-text-margin-x", type: p.bidirectionalSize }, { name: "source-text-margin-y", type: p.bidirectionalSize }, { name: "source-text-offset", type: p.size }, { name: "target-label", type: p.text }, { name: "target-text-rotation", type: p.textRotation }, { name: "target-text-margin-x", type: p.bidirectionalSize }, { name: "target-text-margin-y", type: p.bidirectionalSize }, { name: "target-text-offset", type: p.size }, { name: "text-valign", type: p.valign }, { name: "text-halign", type: p.halign }, { name: "color", type: p.color }, { name: "text-outline-color", type: p.color }, { name: "text-outline-width", type: p.size }, { name: "text-outline-opacity", type: p.zeroOneNumber }, { name: "text-opacity", type: p.zeroOneNumber }, { name: "text-background-color", type: p.color }, { name: "text-background-opacity", type: p.zeroOneNumber }, { name: "text-background-padding", type: p.size }, { name: "text-border-opacity", type: p.zeroOneNumber }, { name: "text-border-color", type: p.color }, { name: "text-border-width", type: p.size }, { name: "text-border-style", type: p.borderStyle }, { name: "text-background-shape", type: p.textBackgroundShape }, { name: "text-transform", type: p.textTransform }, { name: "text-wrap", type: p.textWrap }, { name: "text-max-width", type: p.size }, { name: "text-events", type: p.bool }, { name: "font-family", type: p.fontFamily }, { name: "font-style", type: p.fontStyle }, { name: "font-weight", type: p.fontWeight }, { name: "font-size", type: p.size }, { name: "min-zoomed-font-size", type: p.size }, { name: "events", type: p.bool }, { name: "display", type: p.display, triggersZOrder: d.anyDiff }, { name: "visibility", type: p.visibility, triggersZOrder: d.anyDiff }, { name: "opacity", type: p.zeroOneNumber, triggersZOrder: d.zeroNonZero }, { name: "z-compound-depth", type: p.zCompoundDepth, triggersZOrder: d.anyDiff }, { name: "z-index-compare", type: p.zIndexCompare, triggersZOrder: d.anyDiff }, { name: "z-index", type: p.nonNegativeInt, triggersZOrder: d.anyDiff }, { name: "overlay-padding", type: p.size }, { name: "overlay-color", type: p.color }, { name: "overlay-opacity", type: p.zeroOneNumber }, { name: "transition-property", type: p.propList }, { name: "transition-duration", type: p.time }, { name: "transition-delay", type: p.time }, { name: "transition-timing-function", type: p.easing }, { name: "height", type: p.nodeSize }, { name: "width", type: p.nodeSize }, { name: "shape", type: p.nodeShape }, { name: "shape-polygon-points", type: p.polygonPointList }, { name: "background-color", type: p.color }, { name: "background-opacity", type: p.zeroOneNumber }, { name: "background-blacken", type: p.nOneOneNumber }, { name: "padding", type: p.sizeMaybePercent }, { name: "padding-relative-to", type: p.paddingRelativeTo }, { name: "border-color", type: p.color }, { name: "border-opacity", type: p.zeroOneNumber }, { name: "border-width", type: p.size }, { name: "border-style", type: p.borderStyle }, { name: "background-image", type: p.urls }, { name: "background-image-crossorigin", type: p.bgCrossOrigin }, { name: "background-image-opacity", type: p.zeroOneNumbers }, { name: "background-position-x", type: p.bgPos }, { name: "background-position-y", type: p.bgPos }, { name: "background-width-relative-to", type: p.bgRelativeTo }, { name: "background-height-relative-to", type: p.bgRelativeTo }, { name: "background-repeat", type: p.bgRepeat }, { name: "background-fit", type: p.bgFit }, { name: "background-clip", type: p.bgClip }, { name: "background-width", type: p.bgWH }, { name: "background-height", type: p.bgWH }, { name: "position", type: p.position }, { name: "compound-sizing-wrt-labels", type: p.compoundIncludeLabels }, { name: "min-width", type: p.size }, { name: "min-width-bias-left", type: p.sizeMaybePercent }, { name: "min-width-bias-right", type: p.sizeMaybePercent }, { name: "min-height", type: p.size }, { name: "min-height-bias-top", type: p.sizeMaybePercent }, { name: "min-height-bias-bottom", type: p.sizeMaybePercent }, { name: "line-style", type: p.lineStyle }, { name: "line-color", type: p.color }, { name: "curve-style", type: p.curveStyle }, { name: "haystack-radius", type: p.zeroOneNumber }, { name: "source-endpoint", type: p.edgeEndpoint }, { name: "target-endpoint", type: p.edgeEndpoint }, { name: "control-point-step-size", type: p.size }, { name: "control-point-distances", type: p.bidirectionalSizes }, { name: "control-point-weights", type: p.numbers }, { name: "segment-distances", type: p.bidirectionalSizes }, { name: "segment-weights", type: p.numbers }, { name: "edge-distances", type: p.edgeDistances }, { name: "arrow-scale", type: p.positiveNumber }, { name: "loop-direction", type: p.angle }, { name: "loop-sweep", type: p.angle }, { name: "source-distance-from-node", type: p.size }, { name: "target-distance-from-node", type: p.size }, { name: "ghost", type: p.bool }, { name: "ghost-offset-x", type: p.bidirectionalSize }, { name: "ghost-offset-y", type: p.bidirectionalSize }, { name: "ghost-opacity", type: p.zeroOneNumber }, { name: "selection-box-color", type: p.color }, { name: "selection-box-opacity", type: p.zeroOneNumber }, { name: "selection-box-border-color", type: p.color }, { name: "selection-box-border-width", type: p.size }, { name: "active-bg-color", type: p.color }, { name: "active-bg-opacity", type: p.zeroOneNumber }, { name: "active-bg-size", type: p.size }, { name: "outside-texture-bg-color", type: p.color }, { name: "outside-texture-bg-opacity", type: p.zeroOneNumber }], h = o.aliases = [{ name: "content", pointsTo: "label" }, { name: "control-point-distance", pointsTo: "control-point-distances" }, { name: "control-point-weight", pointsTo: "control-point-weights" }, { name: "edge-text-rotation", pointsTo: "text-rotation" }, { name: "padding-left", pointsTo: "padding" }, { name: "padding-right", pointsTo: "padding" }, { name: "padding-top", pointsTo: "padding" }, { name: "padding-bottom", pointsTo: "padding" }]; o.pieBackgroundN = 16, f.push({ name: "pie-size", type: p.sizeMaybePercent }); for (var g = 1; g <= o.pieBackgroundN; g++)f.push({ name: "pie-" + g + "-background-color", type: p.color }), f.push({ name: "pie-" + g + "-background-size", type: p.percent }), f.push({ name: "pie-" + g + "-background-opacity", type: p.zeroOneNumber }); var m = o.arrowPrefixes = ["source", "mid-source", "target", "mid-target"];[{ name: "arrow-shape", type: p.arrowShape }, { name: "arrow-color", type: p.color }, { name: "arrow-fill", type: p.arrowFill }].forEach((function (e) { m.forEach((function (t) { var n = t + "-" + e.name, r = e.type; f.push({ name: n, type: r }) })) }), {}), o.propertyNames = f.map((function (e) { return e.name })); for (var v = 0; v < f.length; v++) { var b = f[v]; f[b.name] = b } for (var y = 0; y < h.length; y++) { var x = h[y], w = f[x.pointsTo], k = { name: x.name, alias: !0, pointsTo: w }; f.push(k), f[x.name] = k } }(), o.getDefaultProperty = function (e) { return this.getDefaultProperties()[e] }, o.getDefaultProperties = r.memoize((function () { for (var e = r.extend({ events: "yes", "text-events": "no", "text-valign": "top", "text-halign": "center", color: "#000", "text-outline-color": "#000", "text-outline-width": 0, "text-outline-opacity": 1, "text-opacity": 1, "text-decoration": "none", "text-transform": "none", "text-wrap": "none", "text-max-width": 9999, "text-background-color": "#000", "text-background-opacity": 0, "text-background-shape": "rectangle", "text-background-padding": 0, "text-border-opacity": 0, "text-border-width": 0, "text-border-style": "solid", "text-border-color": "#000", "font-family": "Helvetica Neue, Helvetica, sans-serif", "font-style": "normal", "font-weight": "normal", "font-size": 16, "min-zoomed-font-size": 0, "text-rotation": "none", "source-text-rotation": "none", "target-text-rotation": "none", visibility: "visible", display: "element", opacity: 1, "z-compound-depth": "auto", "z-index-compare": "auto", "z-index": 0, label: "", "text-margin-x": 0, "text-margin-y": 0, "source-label": "", "source-text-offset": 0, "source-text-margin-x": 0, "source-text-margin-y": 0, "target-label": "", "target-text-offset": 0, "target-text-margin-x": 0, "target-text-margin-y": 0, "overlay-opacity": 0, "overlay-color": "#000", "overlay-padding": 10, "transition-property": "none", "transition-duration": 0, "transition-delay": 0, "transition-timing-function": "linear", "background-blacken": 0, "background-color": "#999", "background-opacity": 1, "background-image": "none", "background-image-crossorigin": "anonymous", "background-image-opacity": 1, "background-position-x": "50%", "background-position-y": "50%", "background-width-relative-to": "include-padding", "background-height-relative-to": "include-padding", "background-repeat": "no-repeat", "background-fit": "none", "background-clip": "node", "background-width": "auto", "background-height": "auto", "border-color": "#000", "border-opacity": 1, "border-width": 0, "border-style": "solid", height: 30, width: 30, shape: "ellipse", "shape-polygon-points": "-1, -1, 1, -1, 1, 1, -1, 1", ghost: "no", "ghost-offset-y": 0, "ghost-offset-x": 0, "ghost-opacity": 0, padding: 0, "padding-relative-to": "width", position: "origin", "compound-sizing-wrt-labels": "include", "min-width": 0, "min-width-bias-left": 0, "min-width-bias-right": 0, "min-height": 0, "min-height-bias-top": 0, "min-height-bias-bottom": 0 }, { "pie-size": "100%" }, [{ name: "pie-{{i}}-background-color", value: "black" }, { name: "pie-{{i}}-background-size", value: "0%" }, { name: "pie-{{i}}-background-opacity", value: 1 }].reduce((function (e, t) { for (var n = 1; n <= o.pieBackgroundN; n++) { var r = t.name.replace("{{i}}", n), i = t.value; e[r] = i } return e }), {}), { "line-style": "solid", "line-color": "#999", "control-point-step-size": 40, "control-point-weights": .5, "segment-weights": .5, "segment-distances": 20, "edge-distances": "intersection", "curve-style": "bezier", "haystack-radius": 0, "arrow-scale": 1, "loop-direction": "-45deg", "loop-sweep": "-90deg", "source-distance-from-node": 0, "target-distance-from-node": 0, "source-endpoint": "outside-to-node", "target-endpoint": "outside-to-node" }, [{ name: "arrow-shape", value: "none" }, { name: "arrow-color", value: "#999" }, { name: "arrow-fill", value: "filled" }].reduce((function (e, t) { return o.arrowPrefixes.forEach((function (n) { var r = n + "-" + t.name, i = t.value; e[r] = i })), e }), {})), t = {}, n = 0; n < this.properties.length; n++) { var i = this.properties[n]; if (!i.pointsTo) { var a = i.name, s = e[a], l = this.parse(a, s); t[a] = l } } return t })), o.addDefaultStylesheet = function () { this.selector("$node > node").css({ shape: "rectangle", padding: 10, "background-color": "#eee", "border-color": "#ccc", "border-width": 1 }).selector("edge").css({ width: 3, "curve-style": "haystack" }).selector(":parent <-> node").css({ "curve-style": "bezier", "source-endpoint": "outside-to-line", "target-endpoint": "outside-to-line" }).selector(":selected").css({ "background-color": "#0169D9", "line-color": "#0169D9", "source-arrow-color": "#0169D9", "target-arrow-color": "#0169D9", "mid-source-arrow-color": "#0169D9", "mid-target-arrow-color": "#0169D9" }).selector("node:parent:selected").css({ "background-color": "#CCE1F9", "border-color": "#aec8e5" }).selector(":active").css({ "overlay-color": "black", "overlay-padding": 10, "overlay-opacity": .25 }).selector("core").css({ "selection-box-color": "#ddd", "selection-box-opacity": .65, "selection-box-border-color": "#aaa", "selection-box-border-width": 1, "active-bg-color": "black", "active-bg-opacity": .15, "active-bg-size": 30, "outside-texture-bg-color": "#000", "outside-texture-bg-opacity": .125 }), this.defaultLength = this.length }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(2), a = { parse: function (e, t, n, o) { if (i.fn(t)) return this.parseImplWarn(e, t, n, o); var a = [e, t, n, "mapping" === o || !0 === o || !1 === o || null == o ? "dontcare" : o].join("$"), s = this.propCache = this.propCache || {}, l = void 0; return (l = s[a]) || (l = s[a] = this.parseImplWarn(e, t, n, o)), (n || "mapping" === o) && (l = r.copy(l)) && (l.value = r.copy(l.value)), l }, parseImplWarn: function (e, t, n, i) { var o = this.parseImpl(e, t, n, i); return o || null == t || r.error("The style property `%s: %s` is invalid", e, t), o }, parseImpl: function (e, t, n, a) { e = r.camel2dash(e); var s = this.properties[e], l = t, c = this.types; if (!s) return null; if (void 0 === t) return null; s.alias && (s = s.pointsTo, e = s.name); var u = i.string(t); u && (t = t.trim()); var d = s.type; if (!d) return null; if (n && ("" === t || null === t)) return { name: e, value: t, bypass: !0, deleteBypass: !0 }; if (i.fn(t)) return { name: e, value: t, strValue: "fn", mapped: c.fn, bypass: n }; var p = void 0, f = void 0; if (!u || a); else { if (p = new RegExp(c.data.regex).exec(t)) { if (n) return !1; var h = c.data; return { name: e, value: p, strValue: "" + t, mapped: h, field: p[1], bypass: n } } if (f = new RegExp(c.mapData.regex).exec(t)) { if (n) return !1; if (d.multiple) return !1; var g = c.mapData; if (!d.color && !d.number) return !1; var m = this.parse(e, f[4]); if (!m || m.mapped) return !1; var v = this.parse(e, f[5]); if (!v || v.mapped) return !1; if (m.value === v.value) return !1; if (d.color) { var b = m.value, y = v.value; if (!(b[0] !== y[0] || b[1] !== y[1] || b[2] !== y[2] || b[3] !== y[3] && (null != b[3] && 1 !== b[3] || null != y[3] && 1 !== y[3]))) return !1 } return { name: e, value: f, strValue: "" + t, mapped: g, field: f[1], fieldMin: parseFloat(f[2]), fieldMax: parseFloat(f[3]), valueMin: m.value, valueMax: v.value, bypass: n } } } if (d.multiple && "multiple" !== a) { var x = void 0; if (x = u ? t.split(/\s+/) : i.array(t) ? t : [t], d.evenMultiple && x.length % 2 != 0) return null; for (var w = [], k = [], A = [], E = !1, S = 0; S < x.length; S++) { var $ = this.parse(e, x[S], n, "multiple"); E = E || i.string($.value), w.push($.value), A.push(null != $.pfValue ? $.pfValue : $.value), k.push($.units) } return d.validate && !d.validate(w, k) ? null : d.singleEnum && E ? 1 === w.length && i.string(w[0]) ? { name: e, value: w[0], strValue: w[0], bypass: n } : null : { name: e, value: w, pfValue: A, strValue: w.map((function (e, t) { return e + (k[t] || "") })).join(" "), bypass: n, units: k } } var C = function () { for (var r = 0; r < d.enums.length; r++)if (d.enums[r] === t) return { name: e, value: t, strValue: "" + t, bypass: n }; return null }; if (d.number) { var _ = void 0, O = "px"; if (d.units && (_ = d.units), d.implicitUnits && (O = d.implicitUnits), !d.unitless) if (u) { var T = "px|em" + (d.allowPercent ? "|\\%" : ""); _ && (T = _); var j = t.match("^(" + r.regex.number + ")(" + T + ")?$"); j && (t = j[1], _ = j[2] || O) } else _ && !d.implicitUnits || (_ = O); if (t = parseFloat(t), isNaN(t) && void 0 === d.enums) return null; if (isNaN(t) && void 0 !== d.enums) return t = l, C(); if (d.integer && !i.integer(t)) return null; if (void 0 !== d.min && (t < d.min || d.strictMin && t === d.min) || void 0 !== d.max && (t > d.max || d.strictMax && t === d.max)) return null; var P = { name: e, value: t, strValue: "" + t + (_ || ""), units: _, bypass: n }; return d.unitless || "px" !== _ && "em" !== _ ? P.pfValue = t : P.pfValue = "px" !== _ && _ ? this.getEmSizeInPixels() * t : t, "ms" !== _ && "s" !== _ || (P.pfValue = "ms" === _ ? t : 1e3 * t), "deg" !== _ && "rad" !== _ || (P.pfValue = "rad" === _ ? t : o.deg2rad(t)), "%" === _ && (P.pfValue = t / 100), P } if (d.propList) { var D = [], R = "" + t; if ("none" === R); else { for (var I = R.split(","), N = 0; N < I.length; N++) { var M = I[N].trim(); this.properties[M] && D.push(M) } if (0 === D.length) return null } return { name: e, value: D, strValue: 0 === D.length ? "none" : D.join(", "), bypass: n } } if (d.color) { var z = r.color2tuple(t); return z ? { name: e, value: z, pfValue: z, strValue: "" + t, bypass: n } : null } if (d.regex || d.regexes) { if (d.enums) { var L = C(); if (L) return L } for (var B = d.regexes ? d.regexes : [d.regex], F = 0; F < B.length; F++) { var q = new RegExp(B[F]).exec(t); if (q) return { name: e, value: d.singleRegexMatchValue ? q[1] : q, strValue: "" + t, bypass: n } } return null } return d.string ? { name: e, value: "" + t, strValue: "" + t, bypass: n } : d.enums ? C() : null } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(0), i = n(3), o = n(2), a = { autolock: function (e) { return void 0 === e ? this._private.autolock : (this._private.autolock = !!e, this) }, autoungrabify: function (e) { return void 0 === e ? this._private.autoungrabify : (this._private.autoungrabify = !!e, this) }, autounselectify: function (e) { return void 0 === e ? this._private.autounselectify : (this._private.autounselectify = !!e, this) }, panningEnabled: function (e) { return void 0 === e ? this._private.panningEnabled : (this._private.panningEnabled = !!e, this) }, userPanningEnabled: function (e) { return void 0 === e ? this._private.userPanningEnabled : (this._private.userPanningEnabled = !!e, this) }, zoomingEnabled: function (e) { return void 0 === e ? this._private.zoomingEnabled : (this._private.zoomingEnabled = !!e, this) }, userZoomingEnabled: function (e) { return void 0 === e ? this._private.userZoomingEnabled : (this._private.userZoomingEnabled = !!e, this) }, boxSelectionEnabled: function (e) { return void 0 === e ? this._private.boxSelectionEnabled : (this._private.boxSelectionEnabled = !!e, this) }, pan: function () { var e = arguments, t = this._private.pan, n = void 0, i = void 0, o = void 0, a = void 0, s = void 0; switch (e.length) { case 0: return t; case 1: if (r.string(e[0])) return t[n = e[0]]; if (r.plainObject(e[0])) { if (!this._private.panningEnabled) return this; a = (o = e[0]).x, s = o.y, r.number(a) && (t.x = a), r.number(s) && (t.y = s), this.emit("pan viewport") } break; case 2: if (!this._private.panningEnabled) return this; n = e[0], i = e[1], "x" !== n && "y" !== n || !r.number(i) || (t[n] = i), this.emit("pan viewport") }return this.notify({ type: "viewport" }), this }, panBy: function (e, t) { var n = arguments, i = this._private.pan, o = void 0, a = void 0, s = void 0, l = void 0, c = void 0; if (!this._private.panningEnabled) return this; switch (n.length) { case 1: r.plainObject(e) && (l = (s = n[0]).x, c = s.y, r.number(l) && (i.x += l), r.number(c) && (i.y += c), this.emit("pan viewport")); break; case 2: a = t, "x" !== (o = e) && "y" !== o || !r.number(a) || (i[o] += a), this.emit("pan viewport") }return this.notify({ type: "viewport" }), this }, fit: function (e, t) { var n = this.getFitViewport(e, t); if (n) { var r = this._private; r.zoom = n.zoom, r.pan = n.pan, this.emit("pan zoom viewport"), this.notify({ type: "viewport" }) } return this }, getFitViewport: function (e, t) { if (r.number(e) && void 0 === t && (t = e, e = void 0), this._private.panningEnabled && this._private.zoomingEnabled) { var n = void 0; if (r.string(e)) { var i = e; e = this.$(i) } else if (r.boundingBox(e)) { var o = e; (n = { x1: o.x1, y1: o.y1, x2: o.x2, y2: o.y2 }).w = n.x2 - n.x1, n.h = n.y2 - n.y1 } else r.elementOrCollection(e) || (e = this.mutableElements()); if (!r.elementOrCollection(e) || !e.empty()) { n = n || e.boundingBox(); var a = this.width(), s = this.height(), l = void 0; if (t = r.number(t) ? t : 0, !isNaN(a) && !isNaN(s) && a > 0 && s > 0 && !isNaN(n.w) && !isNaN(n.h) && n.w > 0 && n.h > 0) return { zoom: l = (l = (l = Math.min((a - 2 * t) / n.w, (s - 2 * t) / n.h)) > this._private.maxZoom ? this._private.maxZoom : l) < this._private.minZoom ? this._private.minZoom : l, pan: { x: (a - l * (n.x1 + n.x2)) / 2, y: (s - l * (n.y1 + n.y2)) / 2 } } } } }, minZoom: function (e) { return void 0 === e ? this._private.minZoom : (r.number(e) && (this._private.minZoom = e), this) }, maxZoom: function (e) { return void 0 === e ? this._private.maxZoom : (r.number(e) && (this._private.maxZoom = e), this) }, getZoomedViewport: function (e) { var t = this._private, n = t.pan, i = t.zoom, a = void 0, s = void 0, l = !1; if (t.zoomingEnabled || (l = !0), r.number(e) ? s = e : r.plainObject(e) && (s = e.level, null != e.position ? a = o.modelToRenderedPosition(e.position, i, n) : null != e.renderedPosition && (a = e.renderedPosition), null == a || t.panningEnabled || (l = !0)), s = (s = s > t.maxZoom ? t.maxZoom : s) < t.minZoom ? t.minZoom : s, l || !r.number(s) || s === i || null != a && (!r.number(a.x) || !r.number(a.y))) return null; if (null != a) { var c = n, u = i, d = s; return { zoomed: !0, panned: !0, zoom: d, pan: { x: -d / u * (a.x - c.x) + a.x, y: -d / u * (a.y - c.y) + a.y } } } return { zoomed: !0, panned: !1, zoom: s, pan: n } }, zoom: function (e) { if (void 0 === e) return this._private.zoom; var t = this.getZoomedViewport(e), n = this._private; return null != t && t.zoomed ? (n.zoom = t.zoom, t.panned && (n.pan.x = t.pan.x, n.pan.y = t.pan.y), this.emit("zoom" + (t.panned ? " pan" : "") + " viewport"), this.notify({ type: "viewport" }), this) : this }, viewport: function (e) { var t = this._private, n = !0, i = !0, o = [], a = !1, s = !1; if (!e) return this; if (r.number(e.zoom) || (n = !1), r.plainObject(e.pan) || (i = !1), !n && !i) return this; if (n) { var l = e.zoom; l < t.minZoom || l > t.maxZoom || !t.zoomingEnabled ? a = !0 : (t.zoom = l, o.push("zoom")) } if (i && (!a || !e.cancelOnFailedZoom) && t.panningEnabled) { var c = e.pan; r.number(c.x) && (t.pan.x = c.x, s = !1), r.number(c.y) && (t.pan.y = c.y, s = !1), s || o.push("pan") } return o.length > 0 && (o.push("viewport"), this.emit(o.join(" ")), this.notify({ type: "viewport" })), this }, center: function (e) { var t = this.getCenterPan(e); return t && (this._private.pan = t, this.emit("pan viewport"), this.notify({ type: "viewport" })), this }, getCenterPan: function (e, t) { if (this._private.panningEnabled) { if (r.string(e)) { var n = e; e = this.mutableElements().filter(n) } else r.elementOrCollection(e) || (e = this.mutableElements()); if (0 !== e.length) { var i = e.boundingBox(), o = this.width(), a = this.height(); return { x: (o - (t = void 0 === t ? this._private.zoom : t) * (i.x1 + i.x2)) / 2, y: (a - t * (i.y1 + i.y2)) / 2 } } } }, reset: function () { return this._private.panningEnabled && this._private.zoomingEnabled ? (this.viewport({ pan: { x: 0, y: 0 }, zoom: 1 }), this) : this }, invalidateSize: function () { this._private.sizeCache = null }, size: function () { var e, t, n = this._private, r = n.container; return n.sizeCache = n.sizeCache || (r ? (e = i.getComputedStyle(r), t = function (t) { return parseFloat(e.getPropertyValue(t)) }, { width: r.clientWidth - t("padding-left") - t("padding-right"), height: r.clientHeight - t("padding-top") - t("padding-bottom") }) : { width: 1, height: 1 }) }, width: function () { return this.size().width }, height: function () { return this.size().height }, extent: function () { var e = this._private.pan, t = this._private.zoom, n = this.renderedExtent(), r = { x1: (n.x1 - e.x) / t, x2: (n.x2 - e.x) / t, y1: (n.y1 - e.y) / t, y2: (n.y2 - e.y) / t }; return r.w = r.x2 - r.x1, r.h = r.y2 - r.y1, r }, renderedExtent: function () { var e = this.width(), t = this.height(); return { x1: 0, y1: 0, x2: e, y2: t, w: e, h: t } } }; a.centre = a.center, a.autolockNodes = a.autolock, a.autoungrabifyNodes = a.autoungrabify, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = n(4), o = n(7), a = n(12), s = n(95), l = n(0), c = n(11), u = {}, d = {}; function p(e, t, n) { var s = n, d = function (n) { r.error("Can not register `" + t + "` for `" + e + "` since `" + n + "` already exists in the prototype and can not be overridden") }; if ("core" === e) { if (a.prototype[t]) return d(t); a.prototype[t] = n } else if ("collection" === e) { if (o.prototype[t]) return d(t); o.prototype[t] = n } else if ("layout" === e) { for (var p = function (e) { this.options = e, n.call(this, e), l.plainObject(this._private) || (this._private = {}), this._private.cy = e.cy, this._private.listeners = [], this.createEmitter() }, h = p.prototype = Object.create(n.prototype), g = [], m = 0; m < g.length; m++) { var v = g[m]; h[v] = h[v] || function () { return this } } h.start && !h.run ? h.run = function () { return this.start(), this } : !h.start && h.run && (h.start = function () { return this.run(), this }); var b = n.prototype.stop; h.stop = function () { var e = this.options; if (e && e.animate) { var t = this.animations; if (t) for (var n = 0; n < t.length; n++)t[n].stop() } return b ? b.call(this) : this.emit("layoutstop"), this }, h.destroy || (h.destroy = function () { return this }), h.cy = function () { return this._private.cy }; var y = function (e) { return e._private.cy }; r.assign(h, { createEmitter: function () { return this._private.emitter = new c({ eventFields: function (e) { return { layout: e, cy: y(e), target: e } }, bubble: function () { return !0 }, parent: function (e) { return y(e) }, context: this }), this }, emitter: function () { return this._private.emitter }, on: function (e, t) { return this.emitter().on(e, t), this }, one: function (e, t) { return this.emitter().one(e, t), this }, once: function (e, t) { return this.emitter().one(e, t), this }, removeListener: function (e, t) { return this.emitter().removeListener(e, t), this }, emit: function (e, t) { return this.emitter().emit(e, t), this } }), i.eventAliasesOn(h), s = p } else if ("renderer" === e && "null" !== t && "base" !== t) { var x = f("renderer", "base"), w = x.prototype, k = n, A = n.prototype, E = function () { x.apply(this, arguments), k.apply(this, arguments) }, S = E.prototype; for (var $ in w) { var C = w[$]; if (null != A[$]) return d($); S[$] = C } for (var _ in A) S[_] = A[_]; w.clientFunctions.forEach((function (e) { S[e] = S[e] || function () { r.error("Renderer does not implement `renderer." + e + "()` on its prototype") } })), s = E } return r.setMap({ map: u, keys: [e, t], value: s }) } function f(e, t) { return r.getMap({ map: u, keys: [e, t] }) } function h(e, t, n, i, o) { return r.setMap({ map: d, keys: [e, t, n, i], value: o }) } function g(e, t, n, i) { return r.getMap({ map: d, keys: [e, t, n, i] }) } var m = function () { return 2 === arguments.length ? f.apply(null, arguments) : 3 === arguments.length ? p.apply(null, arguments) : 4 === arguments.length ? g.apply(null, arguments) : 5 === arguments.length ? h.apply(null, arguments) : void r.error("Invalid extension access syntax") }; a.prototype.extension = m, s.forEach((function (e) { e.extensions.forEach((function (t) { p(e.type, t.name, t.impl) })) })), e.exports = m }, function (e, t, n) { "use strict"; e.exports = [{ type: "layout", extensions: n(96) }, { type: "renderer", extensions: n(105) }] }, function (e, t, n) { "use strict"; e.exports = [{ name: "breadthfirst", impl: n(97) }, { name: "circle", impl: n(98) }, { name: "concentric", impl: n(99) }, { name: "cose", impl: n(100) }, { name: "grid", impl: n(101) }, { name: "null", impl: n(102) }, { name: "preset", impl: n(103) }, { name: "random", impl: n(104) }] }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = n(0), a = { fit: !0, directed: !1, padding: 30, circle: !1, spacingFactor: 1.75, boundingBox: void 0, avoidOverlap: !0, nodeDimensionsIncludeLabels: !1, roots: void 0, maximalAdjustments: 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function s(e) { this.options = r.extend({}, a, e) } s.prototype.run = function () { var e = this.options, t = e, n = e.cy, r = t.eles, a = r.nodes().not(":parent"), s = r, l = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: n.width(), h: n.height() }), c = void 0; if (o.elementOrCollection(t.roots)) c = t.roots; else if (o.array(t.roots)) { for (var u = [], d = 0; d < t.roots.length; d++) { var p = t.roots[d], f = n.getElementById(p); u.push(f) } c = n.collection(u) } else if (o.string(t.roots)) c = n.$(t.roots); else if (t.directed) c = a.roots(); else { for (var h = [], g = a, m = function () { var e = n.collection(); r.bfs({ roots: g[0], visit: function (t, n, r, i, o) { e = e.add(t) }, directed: !1 }), g = g.not(e), h.push(e) }; g.length > 0;)m(); c = n.collection(); for (var v = function (e) { var t = h[e], n = t.maxDegree(!1), r = t.filter((function (e) { return e.degree(!1) === n })); c = c.add(r) }, b = 0; b < h.length; b++)v(b) } var y = [], x = {}, w = {}, k = {}, A = {}, E = {}; s.bfs({ roots: c, directed: t.directed, visit: function (e, t, n, r, i) { var o = e[0], a = o.id(); if (y[i] || (y[i] = []), y[i].push(o), x[a] = !0, w[a] = i, k[a] = n, A[a] = t, n) { var s = n.id(); (E[s] = E[s] || []).push(e) } } }); for (var S = [], $ = 0; $ < a.length; $++) { var C = a[$]; x[C.id()] || S.push(C) } for (var _ = 3 * S.length, O = 0; 0 !== S.length && O < _;) { for (var T = S.shift(), j = T.neighborhood().nodes(), P = !1, D = 0; D < j.length; D++) { var R = w[j[D].id()]; if (void 0 !== R) { y[R].push(T), P = !0; break } } P || S.push(T), O++ } for (; 0 !== S.length;) { var I = S.shift(); 0 === y.length && y.push([]), y[0].push(I) } var N = function () { for (var e = 0; e < y.length; e++)for (var t = y[e], n = 0; n < t.length; n++) { var r = t[n]; null != r ? r._private.scratch.breadthfirst = { depth: e, index: n } : (t.splice(n, 1), n--) } }; N(); for (var M = function (e) { for (var t = e.connectedEdges((function (t) { return t.data("target") === e.id() })), n = e._private.scratch.breadthfirst, r = 0, i = void 0, o = 0; o < t.length; o++) { var a = t[o].source()[0], s = a._private.scratch.breadthfirst; n.depth <= s.depth && r < s.depth && (r = s.depth, i = a) } return i }, z = 0; z < t.maximalAdjustments; z++) { for (var L = y.length, B = [], F = 0; F < L; F++)for (var q = y[F], V = q.length, U = 0; U < V; U++) { var H = q[U], G = H._private.scratch.breadthfirst, W = M(H); W && (G.intEle = W, B.push(H)) } for (var Y = 0; Y < B.length; Y++) { var X = B[Y], Z = X._private.scratch.breadthfirst, Q = Z.intEle._private.scratch.breadthfirst; y[Z.depth][Z.index] = null; for (var J = Q.depth + 1; J > y.length - 1;)y.push([]); y[J].push(X), Z.depth = J, Z.index = y[J].length - 1 } N() } var K = 0; if (t.avoidOverlap) for (var ee = 0; ee < a.length; ee++) { var te = a[ee].layoutDimensions(t), ne = te.w, re = te.h; K = Math.max(K, ne, re) } for (var ie = {}, oe = function (e) { if (ie[e.id()]) return ie[e.id()]; for (var t = e._private.scratch.breadthfirst.depth, n = e.neighborhood().nodes().not(":parent").intersection(a), r = 0, i = 0, o = 0; o < n.length; o++) { var s = n[o]._private.scratch.breadthfirst, l = s.index, c = s.depth, u = y[c].length; (t > c || 0 === t) && (r += l / u, i++) } return r /= i = Math.max(1, i), 0 === i && (r = void 0), ie[e.id()] = r, r }, ae = function (e, t) { return oe(e) - oe(t) }, se = 0; se < 3; se++) { for (var le = 0; le < y.length; le++)y[le] = y[le].sort(ae); N() } for (var ce = 0, ue = 0; ue < y.length; ue++)ce = Math.max(y[ue].length, ce); for (var de = l.x1 + l.w / 2, pe = l.x1 + l.h / 2, fe = function (e, n) { var r = e._private.scratch.breadthfirst, i = r.depth, o = r.index, a = y[i].length, s = Math.max(l.w / (a + 1), K), c = Math.max(l.h / (y.length + 1), K), u = Math.min(l.w / 2 / y.length, l.h / 2 / y.length); if (u = Math.max(u, K), t.circle) { if (t.circle) { var d = u * i + u - (y.length > 0 && y[0].length <= 3 ? u / 2 : 0), p = 2 * Math.PI / y[i].length * o; return 0 === i && 1 === y[0].length && (d = 1), { x: de + d * Math.cos(p), y: pe + d * Math.sin(p) } } return { x: de + (o + 1 - (a + 1) / 2) * s, y: (i + 1) * c } } var f = { x: de + (o + 1 - (a + 1) / 2) * s, y: (i + 1) * c }; return f }, he = {}, ge = y.length - 1; ge >= 0; ge--)for (var me = y[ge], ve = 0; ve < me.length; ve++) { var be = me[ve]; he[be.id()] = fe(be, y.length) } return a.layoutPositions(this, t, (function (e) { return he[e.id()] })), this }, e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = n(0), a = { fit: !0, padding: 30, boundingBox: void 0, avoidOverlap: !0, nodeDimensionsIncludeLabels: !1, spacingFactor: void 0, radius: void 0, startAngle: 1.5 * Math.PI, sweep: void 0, clockwise: !0, sort: void 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function s(e) { this.options = r.extend({}, a, e) } s.prototype.run = function () { var e = this.options, t = e, n = e.cy, r = t.eles, a = void 0 !== t.counterclockwise ? !t.counterclockwise : t.clockwise, s = r.nodes().not(":parent"); t.sort && (s = s.sort(t.sort)); for (var l = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: n.width(), h: n.height() }), c = l.x1 + l.w / 2, u = l.y1 + l.h / 2, d = (void 0 === t.sweep ? 2 * Math.PI - 2 * Math.PI / s.length : t.sweep) / Math.max(1, s.length - 1), p = void 0, f = 0, h = 0; h < s.length; h++) { var g = s[h].layoutDimensions(t), m = g.w, v = g.h; f = Math.max(f, m, v) } if (p = o.number(t.radius) ? t.radius : s.length <= 1 ? 0 : Math.min(l.h, l.w) / 2 - f, s.length > 1 && t.avoidOverlap) { f *= 1.75; var b = Math.cos(d) - Math.cos(0), y = Math.sin(d) - Math.sin(0), x = Math.sqrt(f * f / (b * b + y * y)); p = Math.max(x, p) } return s.layoutPositions(this, t, (function (e, n) { var r = t.startAngle + n * d * (a ? 1 : -1), i = p * Math.cos(r), o = p * Math.sin(r); return { x: c + i, y: u + o } })), this }, e.exports = s }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { fit: !0, padding: 30, startAngle: 1.5 * Math.PI, sweep: void 0, clockwise: !0, equidistant: !1, minNodeSpacing: 10, boundingBox: void 0, avoidOverlap: !0, nodeDimensionsIncludeLabels: !1, height: void 0, width: void 0, spacingFactor: void 0, concentric: function (e) { return e.degree() }, levelWidth: function (e) { return e.maxDegree() / 4 }, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { for (var e = this.options, t = e, n = void 0 !== t.counterclockwise ? !t.counterclockwise : t.clockwise, r = e.cy, o = t.eles.nodes().not(":parent"), a = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: r.width(), h: r.height() }), s = a.x1 + a.w / 2, l = a.y1 + a.h / 2, c = [], u = (t.startAngle, 0), d = 0; d < o.length; d++) { var p, f = o[d]; p = t.concentric(f), c.push({ value: p, node: f }), f._private.scratch.concentric = p } o.updateStyle(); for (var h = 0; h < o.length; h++) { var g = o[h].layoutDimensions(t); u = Math.max(u, g.w, g.h) } c.sort((function (e, t) { return t.value - e.value })); for (var m = t.levelWidth(o), v = [[]], b = v[0], y = 0; y < c.length; y++) { var x = c[y]; b.length > 0 && Math.abs(b[0].value - x.value) >= m && (b = [], v.push(b)), b.push(x) } var w = u + t.minNodeSpacing; if (!t.avoidOverlap) { var k = v.length > 0 && v[0].length > 1, A = (Math.min(a.w, a.h) / 2 - w) / (v.length + k ? 1 : 0); w = Math.min(w, A) } for (var E = 0, S = 0; S < v.length; S++) { var $ = v[S], C = void 0 === t.sweep ? 2 * Math.PI - 2 * Math.PI / $.length : t.sweep, _ = $.dTheta = C / Math.max(1, $.length - 1); if ($.length > 1 && t.avoidOverlap) { var O = Math.cos(_) - Math.cos(0), T = Math.sin(_) - Math.sin(0), j = Math.sqrt(w * w / (O * O + T * T)); E = Math.max(j, E) } $.r = E, E += w } if (t.equidistant) { for (var P = 0, D = 0, R = 0; R < v.length; R++) { var I = v[R].r - D; P = Math.max(P, I) } D = 0; for (var N = 0; N < v.length; N++) { var M = v[N]; 0 === N && (D = M.r), M.r = D, D += P } } for (var z = {}, L = 0; L < v.length; L++)for (var B = v[L], F = B.dTheta, q = B.r, V = 0; V < B.length; V++) { var U = B[V], H = t.startAngle + (n ? 1 : -1) * F * V, G = { x: s + q * Math.cos(H), y: l + q * Math.sin(H) }; z[U.node.id()] = G } return o.layoutPositions(this, t, (function (e) { var t = e.id(); return z[t] })), this }, e.exports = a }, function (e, t, n) { "use strict"; var r, i = n(1), o = n(2), a = n(0), s = n(5), l = { ready: function () { }, stop: function () { }, animate: !0, animationEasing: void 0, animationDuration: void 0, animateFilter: function (e, t) { return !0 }, animationThreshold: 250, refresh: 20, fit: !0, padding: 30, boundingBox: void 0, nodeDimensionsIncludeLabels: !1, randomize: !1, componentSpacing: 40, nodeRepulsion: function (e) { return 2048 }, nodeOverlap: 4, idealEdgeLength: function (e) { return 32 }, edgeElasticity: function (e) { return 32 }, nestingFactor: 1.2, gravity: 1, numIter: 1e3, initialTemp: 1e3, coolingFactor: .99, minTemp: 1, weaver: !1 }; function c(e) { this.options = i.extend({}, l, e), this.options.layout = this } c.prototype.run = function () { var e = this.options, t = e.cy, n = this, o = this.thread, l = e.weaver ? e.weaver.Thread : null, c = { listeners: [], on: function (e, t) { return this.listeners.push({ event: e, callback: t }), this }, trigger: function (e) { a.string(e) && (e = { type: e }); var t = function (t) { t.callback(e) }; return this.listeners.filter((function (t) { return t.event === e.type })).forEach(t), this }, pass: function (e) { return this.pass = e, this }, run: function (e) { var t = this.pass; return new s((function (n) { n(e(t)) })) }, stop: function () { return this }, stopped: function () { return !0 } }; o && !o.stopped() || (o = this.thread = l ? new l : c), n.stopped = !1, !0 !== e.animate && !1 !== e.animate || n.emit({ type: "layoutstart", layout: n }), r = !0 === e.debug; var d = u(t, n, e); r && f(d), e.randomize && h(d, t); var p = Date.now(), m = !1, v = function (n) { n = n || {}, m && !n.next || !n.force && Date.now() - p < e.animationThreshold || (m = !0, i.requestAnimationFrame((function () { g(d, t, e), !0 === e.fit && t.fit(e.padding), m = !1, n.next && n.next() }))) }; o.on("message", (function (e) { var t = e.message; d.layoutNodes = t, v() })), o.pass({ layoutInfo: d, options: { animate: e.animate, refresh: e.refresh, componentSpacing: e.componentSpacing, nodeOverlap: e.nodeOverlap, nestingFactor: e.nestingFactor, gravity: e.gravity, numIter: e.numIter, initialTemp: e.initialTemp, coolingFactor: e.coolingFactor, minTemp: e.minTemp } }).run((function (e) { var t, n, r = e.layoutInfo, i = e.options, o = function (e, t) { for (var n = 0; n < e.graphSet.length; n++)for (var r = e.graphSet[n], i = r.length, o = 0; o < i; o++)for (var a = e.layoutNodes[e.idToIndex[r[o]]], l = o + 1; l < i; l++) { var c = e.layoutNodes[e.idToIndex[r[l]]]; s(a, c, e, t) } }, a = function (e) { return -e + 2 * e * Math.random() }, s = function (e, t, n, r) { if (e.cmptId === t.cmptId || n.isCompound) { var i = t.positionX - e.positionX, o = t.positionY - e.positionY; 0 === i && 0 === o && (i = a(1), o = a(1)); var s = l(e, t, i, o); if (s > 0) var c = (p = r.nodeOverlap * s) * i / (b = Math.sqrt(i * i + o * o)), d = p * o / b; else { var p, f = u(e, i, o), h = u(t, -1 * i, -1 * o), g = h.x - f.x, m = h.y - f.y, v = g * g + m * m, b = Math.sqrt(v); c = (p = (e.nodeRepulsion + t.nodeRepulsion) / v) * g / b, d = p * m / b } e.isLocked || (e.offsetX -= c, e.offsetY -= d), t.isLocked || (t.offsetX += c, t.offsetY += d) } }, l = function (e, t, n, r) { if (n > 0) var i = e.maxX - t.minX; else i = t.maxX - e.minX; if (r > 0) var o = e.maxY - t.minY; else o = t.maxY - e.minY; return i >= 0 && o >= 0 ? Math.sqrt(i * i + o * o) : 0 }, u = function (e, t, n) { var r = e.positionX, i = e.positionY, o = e.height || 1, a = e.width || 1, s = n / t, l = o / a, c = {}; return 0 === t && 0 < n || 0 === t && 0 > n ? (c.x = r, c.y = i + o / 2, c) : 0 < t && -1 * l <= s && s <= l ? (c.x = r + a / 2, c.y = i + a * n / 2 / t, c) : 0 > t && -1 * l <= s && s <= l ? (c.x = r - a / 2, c.y = i - a * n / 2 / t, c) : 0 < n && (s <= -1 * l || s >= l) ? (c.x = r + o * t / 2 / n, c.y = i + o / 2, c) : 0 > n && (s <= -1 * l || s >= l) ? (c.x = r - o * t / 2 / n, c.y = i - o / 2, c) : c }, d = function (e, t) { for (var n = 0; n < e.edgeSize; n++) { var r = e.layoutEdges[n], i = e.idToIndex[r.sourceId], o = e.layoutNodes[i], a = e.idToIndex[r.targetId], s = e.layoutNodes[a], l = s.positionX - o.positionX, c = s.positionY - o.positionY; if (0 !== l || 0 !== c) { var d = u(o, l, c), p = u(s, -1 * l, -1 * c), f = p.x - d.x, h = p.y - d.y, g = Math.sqrt(f * f + h * h), m = Math.pow(r.idealLength - g, 2) / r.elasticity; if (0 !== g) var v = m * f / g, b = m * h / g; else v = 0, b = 0; o.isLocked || (o.offsetX += v, o.offsetY += b), s.isLocked || (s.offsetX -= v, s.offsetY -= b) } } }, p = function (e, t) { for (var n = 0; n < e.graphSet.length; n++) { var r = e.graphSet[n], i = r.length; if (0 === n) var o = e.clientHeight / 2, a = e.clientWidth / 2; else { var s = e.layoutNodes[e.idToIndex[r[0]]], l = e.layoutNodes[e.idToIndex[s.parentId]]; o = l.positionX, a = l.positionY } for (var c = 0; c < i; c++) { var u = e.layoutNodes[e.idToIndex[r[c]]]; if (!u.isLocked) { var d = o - u.positionX, p = a - u.positionY, f = Math.sqrt(d * d + p * p); if (f > 1) { var h = t.gravity * d / f, g = t.gravity * p / f; u.offsetX += h, u.offsetY += g } } } } }, f = function (e, t) { var n = [], r = 0, i = -1; for (n.push.apply(n, e.graphSet[0]), i += e.graphSet[0].length; r <= i;) { var o = n[r++], a = e.idToIndex[o], s = e.layoutNodes[a], l = s.children; if (0 < l.length && !s.isLocked) { for (var c = s.offsetX, u = s.offsetY, d = 0; d < l.length; d++) { var p = e.layoutNodes[e.idToIndex[l[d]]]; p.offsetX += c, p.offsetY += u, n[++i] = l[d] } s.offsetX = 0, s.offsetY = 0 } } }, h = function (e, t) { for (var n = 0; n < e.nodeSize; n++)0 < (i = e.layoutNodes[n]).children.length && (i.maxX = void 0, i.minX = void 0, i.maxY = void 0, i.minY = void 0); for (n = 0; n < e.nodeSize; n++)if (!(0 < (i = e.layoutNodes[n]).children.length || i.isLocked)) { var r = g(i.offsetX, i.offsetY, e.temperature); i.positionX += r.x, i.positionY += r.y, i.offsetX = 0, i.offsetY = 0, i.minX = i.positionX - i.width, i.maxX = i.positionX + i.width, i.minY = i.positionY - i.height, i.maxY = i.positionY + i.height, m(i, e) } for (n = 0; n < e.nodeSize; n++) { var i; 0 < (i = e.layoutNodes[n]).children.length && !i.isLocked && (i.positionX = (i.maxX + i.minX) / 2, i.positionY = (i.maxY + i.minY) / 2, i.width = i.maxX - i.minX, i.height = i.maxY - i.minY) } }, g = function (e, t, n) { var r = Math.sqrt(e * e + t * t); if (r > n) var i = { x: n * e / r, y: n * t / r }; else i = { x: e, y: t }; return i }, m = function e(t, n) { var r = t.parentId; if (null != r) { var i = n.layoutNodes[n.idToIndex[r]], o = !1; return (null == i.maxX || t.maxX + i.padRight > i.maxX) && (i.maxX = t.maxX + i.padRight, o = !0), (null == i.minX || t.minX - i.padLeft < i.minX) && (i.minX = t.minX - i.padLeft, o = !0), (null == i.maxY || t.maxY + i.padBottom > i.maxY) && (i.maxY = t.maxY + i.padBottom, o = !0), (null == i.minY || t.minY - i.padTop < i.minY) && (i.minY = t.minY - i.padTop, o = !0), o ? e(i, n) : void 0 } }, v = function (e) { return function (e, t, n) { o(e, t), d(e, t), p(e, t), f(e, t), h(e, t) }(r, i), r.temperature = r.temperature * i.coolingFactor, !(r.temperature < i.minTemp) }, b = 0; do { for (var y = 0; y < i.refresh && b < i.numIter;) { var x; if (!(x = v())) break; y++, b++ } !0 === i.animate && (t = r.layoutNodes, n = void 0, n = { type: "message", message: t }, c.trigger(n)) } while (x && b + 1 < i.numIter); return function (e, t) { for (var n = r.layoutNodes, i = [], o = 0; o < n.length; o++) { var a = n[o], s = a.cmptId; (i[s] = i[s] || []).push(a) } var l = 0; for (o = 0; o < i.length; o++)if (m = i[o]) { m.x1 = 1 / 0, m.x2 = -1 / 0, m.y1 = 1 / 0, m.y2 = -1 / 0; for (var c = 0; c < m.length; c++) { var u = m[c]; m.x1 = Math.min(m.x1, u.positionX - u.width / 2), m.x2 = Math.max(m.x2, u.positionX + u.width / 2), m.y1 = Math.min(m.y1, u.positionY - u.height / 2), m.y2 = Math.max(m.y2, u.positionY + u.height / 2) } m.w = m.x2 - m.x1, m.h = m.y2 - m.y1, l += m.w * m.h } i.sort((function (e, t) { return t.w * t.h - e.w * e.h })); var d = 0, p = 0, f = 0, h = 0, g = Math.sqrt(l) * r.clientWidth / r.clientHeight; for (o = 0; o < i.length; o++) { var m; if (m = i[o]) { for (c = 0; c < m.length; c++)(u = m[c]).isLocked || (u.positionX += d, u.positionY += p); d += m.w + t.componentSpacing, f += m.w + t.componentSpacing, h = Math.max(h, m.h), f > g && (p += h + t.componentSpacing, d = 0, f = 0, h = 0) } } }(0, i), r })).then((function (e) { d.layoutNodes = e.layoutNodes, o.stop(), b() })); var b = function () { !0 === e.animate || !1 === e.animate ? v({ force: !0, next: function () { n.one("layoutstop", e.stop), n.emit({ type: "layoutstop", layout: n }) } }) : e.eles.nodes().layoutPositions(n, e, (function (e) { var t = d.layoutNodes[d.idToIndex[e.data("id")]]; return { x: t.positionX, y: t.positionY } })) }; return this }, c.prototype.stop = function () { return this.stopped = !0, this.thread && this.thread.stop(), this.emit("layoutstop"), this }, c.prototype.destroy = function () { return this.thread && this.thread.stop(), this }; var u = function (e, t, n) { for (var r = n.eles.edges(), i = n.eles.nodes(), s = { isCompound: e.hasCompoundNodes(), layoutNodes: [], idToIndex: {}, nodeSize: i.size(), graphSet: [], indexToGraph: [], layoutEdges: [], edgeSize: r.size(), temperature: n.initialTemp, clientWidth: e.width(), clientHeight: e.width(), boundingBox: o.makeBoundingBox(n.boundingBox ? n.boundingBox : { x1: 0, y1: 0, w: e.width(), h: e.height() }) }, l = n.eles.components(), c = {}, u = 0; u < l.length; u++)for (var p = l[u], f = 0; f < p.length; f++)c[p[f].id()] = u; for (u = 0; u < s.nodeSize; u++) { var h = (y = i[u]).layoutDimensions(n); (I = {}).isLocked = y.locked(), I.id = y.data("id"), I.parentId = y.data("parent"), I.cmptId = c[y.id()], I.children = [], I.positionX = y.position("x"), I.positionY = y.position("y"), I.offsetX = 0, I.offsetY = 0, I.height = h.w, I.width = h.h, I.maxX = I.positionX + I.width / 2, I.minX = I.positionX - I.width / 2, I.maxY = I.positionY + I.height / 2, I.minY = I.positionY - I.height / 2, I.padLeft = parseFloat(y.style("padding")), I.padRight = parseFloat(y.style("padding")), I.padTop = parseFloat(y.style("padding")), I.padBottom = parseFloat(y.style("padding")), I.nodeRepulsion = a.fn(n.nodeRepulsion) ? n.nodeRepulsion(y) : n.nodeRepulsion, s.layoutNodes.push(I), s.idToIndex[I.id] = u } var g = [], m = 0, v = -1, b = []; for (u = 0; u < s.nodeSize; u++) { var y, x = (y = s.layoutNodes[u]).parentId; null != x ? s.layoutNodes[s.idToIndex[x]].children.push(y.id) : (g[++v] = y.id, b.push(y.id)) } for (s.graphSet.push(b); m <= v;) { var w = g[m++], k = s.idToIndex[w], A = s.layoutNodes[k].children; if (A.length > 0) for (s.graphSet.push(A), u = 0; u < A.length; u++)g[++v] = A[u] } for (u = 0; u < s.graphSet.length; u++) { var E = s.graphSet[u]; for (f = 0; f < E.length; f++) { var S = s.idToIndex[E[f]]; s.indexToGraph[S] = u } } for (u = 0; u < s.edgeSize; u++) { var $ = r[u], C = {}; C.id = $.data("id"), C.sourceId = $.data("source"), C.targetId = $.data("target"); var _ = a.fn(n.idealEdgeLength) ? n.idealEdgeLength($) : n.idealEdgeLength, O = a.fn(n.edgeElasticity) ? n.edgeElasticity($) : n.edgeElasticity, T = s.idToIndex[C.sourceId], j = s.idToIndex[C.targetId]; if (s.indexToGraph[T] != s.indexToGraph[j]) { for (var P = d(C.sourceId, C.targetId, s), D = s.graphSet[P], R = 0, I = s.layoutNodes[T]; -1 === D.indexOf(I.id);)I = s.layoutNodes[s.idToIndex[I.parentId]], R++; for (I = s.layoutNodes[j]; -1 === D.indexOf(I.id);)I = s.layoutNodes[s.idToIndex[I.parentId]], R++; _ *= R * n.nestingFactor } C.idealLength = _, C.elasticity = O, s.layoutEdges.push(C) } return s }, d = function (e, t, n) { var r = p(e, t, 0, n); return 2 > r.count ? 0 : r.graph }, p = function e(t, n, r, i) { var o = i.graphSet[r]; if (-1 < o.indexOf(t) && -1 < o.indexOf(n)) return { count: 2, graph: r }; for (var a = 0, s = 0; s < o.length; s++) { var l = o[s], c = i.idToIndex[l], u = i.layoutNodes[c].children; if (0 !== u.length) { var d = e(t, n, i.indexToGraph[i.idToIndex[u[0]]], i); if (0 !== d.count) { if (1 !== d.count) return d; if (2 == ++a) break } } } return { count: a, graph: r } }, f = function (e) { if (r) { console.debug("layoutNodes:"); for (var t = 0; t < e.nodeSize; t++) { var n = e.layoutNodes[t], i = "\nindex: " + t + "\nId: " + n.id + "\nChildren: " + n.children.toString() + "\nparentId: " + n.parentId + "\npositionX: " + n.positionX + "\npositionY: " + n.positionY + "\nOffsetX: " + n.offsetX + "\nOffsetY: " + n.offsetY + "\npadLeft: " + n.padLeft + "\npadRight: " + n.padRight + "\npadTop: " + n.padTop + "\npadBottom: " + n.padBottom; console.debug(i) } for (var t in console.debug("idToIndex"), e.idToIndex) console.debug("Id: " + t + "\nIndex: " + e.idToIndex[t]); console.debug("Graph Set"); var o = e.graphSet; for (t = 0; t < o.length; t++)console.debug("Set : " + t + ": " + o[t].toString()); for (i = "IndexToGraph", t = 0; t < e.indexToGraph.length; t++)i += "\nIndex : " + t + " Graph: " + e.indexToGraph[t]; for (console.debug(i), i = "Layout Edges", t = 0; t < e.layoutEdges.length; t++) { var a = e.layoutEdges[t]; i += "\nEdge Index: " + t + " ID: " + a.id + " SouceID: " + a.sourceId + " TargetId: " + a.targetId + " Ideal Length: " + a.idealLength } console.debug(i), i = "nodeSize: " + e.nodeSize, i += "\nedgeSize: " + e.edgeSize, i += "\ntemperature: " + e.temperature, console.debug(i) } }, h = function (e, t) { for (var n = e.clientWidth, r = e.clientHeight, i = 0; i < e.nodeSize; i++) { var o = e.layoutNodes[i]; 0 !== o.children.length || o.isLocked || (o.positionX = Math.random() * n, o.positionY = Math.random() * r) } }, g = function (e, t, n) { var r = n.layout, i = n.eles.nodes(), o = e.boundingBox, a = { x1: 1 / 0, x2: -1 / 0, y1: 1 / 0, y2: -1 / 0 }; n.boundingBox && (i.forEach((function (t) { var n = e.layoutNodes[e.idToIndex[t.data("id")]]; a.x1 = Math.min(a.x1, n.positionX), a.x2 = Math.max(a.x2, n.positionX), a.y1 = Math.min(a.y1, n.positionY), a.y2 = Math.max(a.y2, n.positionY) })), a.w = a.x2 - a.x1, a.h = a.y2 - a.y1), i.positions((function (t, r) { var i = e.layoutNodes[e.idToIndex[t.data("id")]]; if (n.boundingBox) { var s = (i.positionX - a.x1) / a.w, l = (i.positionY - a.y1) / a.h; return { x: o.x1 + s * o.w, y: o.y1 + l * o.h } } return { x: i.positionX, y: i.positionY } })), !0 !== e.ready && (e.ready = !0, r.one("layoutready", n.ready), r.emit({ type: "layoutready", layout: this })) }; e.exports = c }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { fit: !0, padding: 30, boundingBox: void 0, avoidOverlap: !0, avoidOverlapPadding: 10, nodeDimensionsIncludeLabels: !1, spacingFactor: void 0, condense: !1, rows: void 0, cols: void 0, position: function (e) { }, sort: void 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { var e = this.options, t = e, n = e.cy, r = t.eles.nodes().not(":parent"); t.sort && (r = r.sort(t.sort)); var o = i.makeBoundingBox(t.boundingBox ? t.boundingBox : { x1: 0, y1: 0, w: n.width(), h: n.height() }); if (0 === o.h || 0 === o.w) r.layoutPositions(this, t, (function (e) { return { x: o.x1, y: o.y1 } })); else { var a = r.size(), s = Math.sqrt(a * o.h / o.w), l = Math.round(s), c = Math.round(o.w / o.h * s), u = function (e) { if (null == e) return Math.min(l, c); Math.min(l, c) == l ? l = e : c = e }, d = function (e) { if (null == e) return Math.max(l, c); Math.max(l, c) == l ? l = e : c = e }, p = t.rows, f = null != t.cols ? t.cols : t.columns; if (null != p && null != f) l = p, c = f; else if (null != p && null == f) l = p, c = Math.ceil(a / l); else if (null == p && null != f) c = f, l = Math.ceil(a / c); else if (c * l > a) { var h = u(), g = d(); (h - 1) * g >= a ? u(h - 1) : (g - 1) * h >= a && d(g - 1) } else for (; c * l < a;) { var m = u(), v = d(); (v + 1) * m >= a ? d(v + 1) : u(m + 1) } var b = o.w / c, y = o.h / l; if (t.condense && (b = 0, y = 0), t.avoidOverlap) for (var x = 0; x < r.length; x++) { var w = r[x], k = w._private.position; null != k.x && null != k.y || (k.x = 0, k.y = 0); var A = w.layoutDimensions(t), E = t.avoidOverlapPadding, S = A.w + E, $ = A.h + E; b = Math.max(b, S), y = Math.max(y, $) } for (var C = {}, _ = function (e, t) { return !!C["c-" + e + "-" + t] }, O = function (e, t) { C["c-" + e + "-" + t] = !0 }, T = 0, j = 0, P = function () { ++j >= c && (j = 0, T++) }, D = {}, R = 0; R < r.length; R++) { var I = r[R], N = t.position(I); if (N && (void 0 !== N.row || void 0 !== N.col)) { var M = { row: N.row, col: N.col }; if (void 0 === M.col) for (M.col = 0; _(M.row, M.col);)M.col++; else if (void 0 === M.row) for (M.row = 0; _(M.row, M.col);)M.row++; D[I.id()] = M, O(M.row, M.col) } } r.layoutPositions(this, t, (function (e, t) { var n = void 0, r = void 0; if (e.locked() || e.isParent()) return !1; var i = D[e.id()]; if (i) n = i.col * b + b / 2 + o.x1, r = i.row * y + y / 2 + o.y1; else { for (; _(T, j);)P(); n = j * b + b / 2 + o.x1, r = T * y + y / 2 + o.y1, O(T, j), P() } return { x: n, y: r } })) } return this }, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = { ready: function () { }, stop: function () { } }; function o(e) { this.options = r.extend({}, i, e) } o.prototype.run = function () { var e = this.options, t = e.eles; return e.cy, this.emit("layoutstart"), t.nodes().positions((function () { return { x: 0, y: 0 } })), this.one("layoutready", e.ready), this.emit("layoutready"), this.one("layoutstop", e.stop), this.emit("layoutstop"), this }, o.prototype.stop = function () { return this }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = { positions: void 0, zoom: void 0, pan: void 0, fit: !0, padding: 30, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { var e = this.options, t = e.eles.nodes(), n = i.fn(e.positions); return t.layoutPositions(this, e, (function (t, r) { var i = function (t) { if (null == e.positions) return null; if (n) return e.positions(t); var r = e.positions[t._private.data.id]; return null == r ? null : r }(t); return !t.locked() && null != i && i })), this }, e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { fit: !0, padding: 30, boundingBox: void 0, animate: !1, animationDuration: 500, animationEasing: void 0, animateFilter: function (e, t) { return !0 }, ready: void 0, stop: void 0, transform: function (e, t) { return t } }; function a(e) { this.options = r.extend({}, o, e) } a.prototype.run = function () { var e = this.options, t = e.cy, n = e.eles.nodes().not(":parent"), r = i.makeBoundingBox(e.boundingBox ? e.boundingBox : { x1: 0, y1: 0, w: t.width(), h: t.height() }); return n.layoutPositions(this, e, (function (e, t) { return { x: r.x1 + Math.round(Math.random() * r.w), y: r.y1 + Math.round(Math.random() * r.h) } })), this }, e.exports = a }, function (e, t, n) { "use strict"; e.exports = [{ name: "null", impl: n(106) }, { name: "base", impl: n(107) }, { name: "canvas", impl: n(123) }] }, function (e, t, n) { "use strict"; function r(e) { this.options = e, this.notifications = 0 } var i = function () { }; r.prototype = { recalculateRenderedStyle: i, notify: function () { this.notifications++ }, init: i }, e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(3), a = function (e) { this.init(e) }, s = a.prototype; s.clientFunctions = ["redrawHint", "render", "renderTo", "matchCanvasSize", "nodeShapeImpl", "arrowShapeImpl"], s.init = function (e) { var t = this; t.options = e, t.cy = e.cy; var n = t.container = e.cy.container(); if (o) { var r = o.document, a = r.head, s = "__________cytoscape_container", l = null != r.getElementById("__________cytoscape_stylesheet"); if (n.className.indexOf(s) < 0 && (n.className = (n.className || "") + " " + s), !l) { var c = r.createElement("style"); c.id = "__________cytoscape_stylesheet", c.innerHTML = "." + s + " { position: relative; }", a.insertBefore(c, a.children[0]) } "static" === o.getComputedStyle(n).getPropertyValue("position") && i.error("A Cytoscape container has style position:static and so can not use UI extensions properly") } t.selection = [void 0, void 0, void 0, void 0, 0], t.bezierProjPcts = [.05, .225, .4, .5, .6, .775, .95], t.hoverData = { down: null, last: null, downTime: null, triggerMode: null, dragging: !1, initialPan: [null, null], capture: !1 }, t.dragData = { possibleDragElements: [] }, t.touchData = { start: null, capture: !1, startPosition: [null, null, null, null, null, null], singleTouchStartTime: null, singleTouchMoved: !0, now: [null, null, null, null, null, null], earlier: [null, null, null, null, null, null] }, t.redraws = 0, t.showFps = e.showFps, t.debug = e.debug, t.hideEdgesOnViewport = e.hideEdgesOnViewport, t.hideLabelsOnViewport = e.hideLabelsOnViewport, t.textureOnViewport = e.textureOnViewport, t.wheelSensitivity = e.wheelSensitivity, t.motionBlurEnabled = e.motionBlur, t.forcedPixelRatio = e.pixelRatio, t.motionBlur = e.motionBlur, t.motionBlurOpacity = e.motionBlurOpacity, t.motionBlurTransparency = 1 - t.motionBlurOpacity, t.motionBlurPxRatio = 1, t.mbPxRBlurry = 1, t.minMbLowQualFrames = 4, t.fullQualityMb = !1, t.clearedForMotionBlur = [], t.desktopTapThreshold = e.desktopTapThreshold, t.desktopTapThreshold2 = e.desktopTapThreshold * e.desktopTapThreshold, t.touchTapThreshold = e.touchTapThreshold, t.touchTapThreshold2 = e.touchTapThreshold * e.touchTapThreshold, t.tapholdDuration = 500, t.bindings = [], t.beforeRenderCallbacks = [], t.beforeRenderPriorities = { animations: 400, eleCalcs: 300, eleTxrDeq: 200, lyrTxrDeq: 100 }, t.registerNodeShapes(), t.registerArrowShapes(), t.registerCalculationListeners() }, s.notify = function (e) { var t, n = this; if (!this.destroyed) { t = r.array(e.type) ? e.type : [e.type]; for (var i = {}, o = 0; o < t.length; o++)i[t[o]] = !0; i.init ? n.load() : i.destroy ? n.destroy() : ((i.add || i.remove || i.load || i.zorder) && n.invalidateCachedZSortedEles(), i.viewport && n.redrawHint("select", !0), (i.load || i.resize) && (n.invalidateContainerClientCoordsCache(), n.matchCanvasSize(n.container)), n.redrawHint("eles", !0), n.redrawHint("drag", !0), this.startRenderLoop(), this.redraw()) } }, s.destroy = function () { var e = this; e.destroyed = !0, e.cy.stopAnimationLoop(); for (var t = 0; t < e.bindings.length; t++) { var n = e.bindings[t], r = n.target; (r.off || r.removeEventListener).apply(r, n.args) } if (e.bindings = [], e.beforeRenderCallbacks = [], e.onUpdateEleCalcsFns = [], e.removeObserver && e.removeObserver.disconnect(), e.styleObserver && e.styleObserver.disconnect(), e.labelCalcDiv) try { document.body.removeChild(e.labelCalcDiv) } catch (e) { } }, [n(108), n(109), n(119), n(120), n(121), n(122)].forEach((function (e) { i.extend(s, e) })), e.exports = a }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = n(1), a = { arrowShapeWidth: .3, registerArrowShapes: function () { var e = this.arrowShapes = {}, t = this, n = function (e, t, n, r, i, o, a) { var s = i.x - n / 2 - a, l = i.x + n / 2 + a, c = i.y - n / 2 - a, u = i.y + n / 2 + a; return s <= e && e <= l && c <= t && t <= u }, a = function (e, t, n, r, i) { var o = e * Math.cos(r) - t * Math.sin(r), a = (e * Math.sin(r) + t * Math.cos(r)) * n; return { x: o * n + i.x, y: a + i.y } }, s = function (e, t, n, r) { for (var i = [], o = 0; o < e.length; o += 2) { var s = e[o], l = e[o + 1]; i.push(a(s, l, t, n, r)) } return i }, l = function (e) { for (var t = [], n = 0; n < e.length; n++) { var r = e[n]; t.push(r.x, r.y) } return t }, c = function (e) { return e.pstyle("width").pfValue * e.pstyle("arrow-scale").pfValue * 2 }, u = function (a, u) { i.string(u) && (u = e[u]), e[a] = o.extend({ name: a, points: [-.15, -.3, .15, -.3, .15, .3, -.15, .3], collide: function (e, t, n, i, o, a) { var c = l(s(this.points, n + 2 * a, i, o)); return r.pointInsidePolygonPoints(e, t, c) }, roughCollide: n, draw: function (e, n, r, i) { var o = s(this.points, n, r, i); t.arrowShapeImpl("polygon")(e, o) }, spacing: function (e) { return 0 }, gap: c }, u) }; u("none", { collide: o.falsify, roughCollide: o.falsify, draw: o.noop, spacing: o.zeroify, gap: o.zeroify }), u("triangle", { points: [-.15, -.3, 0, 0, .15, -.3] }), u("arrow", "triangle"), u("triangle-backcurve", { points: e.triangle.points, controlPoint: [0, -.15], roughCollide: n, draw: function (e, n, r, i, o) { var l = s(this.points, n, r, i), c = this.controlPoint, u = a(c[0], c[1], n, r, i); t.arrowShapeImpl(this.name)(e, l, u) }, gap: function (e) { return .8 * c(e) } }), u("triangle-tee", { points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3], pointsTee: [-.15, -.4, -.15, -.5, .15, -.5, .15, -.4], collide: function (e, t, n, i, o, a, c) { var u = l(s(this.points, n + 2 * c, i, o)), d = l(s(this.pointsTee, n + 2 * c, i, o)); return r.pointInsidePolygonPoints(e, t, u) || r.pointInsidePolygonPoints(e, t, d) }, draw: function (e, n, r, i, o) { var a = s(this.points, n, r, i), l = s(this.pointsTee, n, r, i); t.arrowShapeImpl(this.name)(e, a, l) } }), u("triangle-cross", { points: [-.15, -.3, 0, 0, .15, -.3, -.15, -.3], baseCrossLinePts: [-.15, -.4, -.15, -.4, .15, -.4, .15, -.4], crossLinePts: function (e, t) { var n = this.baseCrossLinePts.slice(), r = t / e; return n[3] = n[3] - r, n[5] = n[5] - r, n }, collide: function (e, t, n, i, o, a, c) { var u = l(s(this.points, n + 2 * c, i, o)), d = l(s(this.crossLinePts(n, a), n + 2 * c, i, o)); return r.pointInsidePolygonPoints(e, t, u) || r.pointInsidePolygonPoints(e, t, d) }, draw: function (e, n, r, i, o) { var a = s(this.points, n, r, i), l = s(this.crossLinePts(n, o), n, r, i); t.arrowShapeImpl(this.name)(e, a, l) } }), u("vee", { points: [-.15, -.3, 0, 0, .15, -.3, 0, -.15], gap: function (e) { return .525 * c(e) } }), u("circle", { radius: .15, collide: function (e, t, n, r, i, o, a) { var s = i; return Math.pow(s.x - e, 2) + Math.pow(s.y - t, 2) <= Math.pow((n + 2 * a) * this.radius, 2) }, draw: function (e, n, r, i, o) { t.arrowShapeImpl(this.name)(e, i.x, i.y, this.radius * n) }, spacing: function (e) { return t.getArrowWidth(e.pstyle("width").pfValue, e.pstyle("arrow-scale").value) * this.radius } }), u("tee", { points: [-.15, 0, -.15, -.1, .15, -.1, .15, 0], spacing: function (e) { return 1 }, gap: function (e) { return 1 } }), u("square", { points: [-.15, 0, .15, 0, .15, -.3, -.15, -.3] }), u("diamond", { points: [-.15, -.15, 0, -.3, .15, -.15, 0, 0], gap: function (e) { return e.pstyle("width").pfValue * e.pstyle("arrow-scale").value } }) } }; e.exports = a }, function (e, t, n) { "use strict"; var r = n(1), i = {};[n(110), n(111), n(112), n(113), n(114), n(115), n(116), n(117), n(118)].forEach((function (e) { r.extend(i, e) })), e.exports = i }, function (e, t, n) { "use strict"; var r = n(3), i = n(2), o = n(1), a = (r = n(3), { projectIntoViewport: function (e, t) { var n = this.cy, r = this.findContainerClientCoords(), i = r[0], o = r[1], a = r[4], s = n.pan(), l = n.zoom(); return [((e - i) / a - s.x) / l, ((t - o) / a - s.y) / l] }, findContainerClientCoords: function () { if (this.containerBB) return this.containerBB; var e = this.container, t = e.getBoundingClientRect(), n = r.getComputedStyle(e), i = function (e) { return parseFloat(n.getPropertyValue(e)) }, o = i("padding-left"), a = i("padding-right"), s = i("padding-top"), l = i("padding-bottom"), c = i("border-left-width"), u = i("border-right-width"), d = i("border-top-width"), p = (i("border-bottom-width"), e.clientWidth), f = e.clientHeight, h = o + a, g = s + l, m = c + u, v = t.width / (p + m), b = p - h, y = f - g, x = (t.width, t.height, t.left + o + c), w = t.top + s + d; return this.containerBB = [x, w, b, y, v] }, invalidateContainerClientCoordsCache: function () { this.containerBB = null }, findNearestElement: function (e, t, n, r) { return this.findNearestElements(e, t, n, r)[0] }, findNearestElements: function (e, t, n, r) { var a, s, l = this, c = this, u = c.getCachedZSortedEles(), d = [], p = c.cy.zoom(), f = c.cy.hasCompoundNodes(), h = (r ? 24 : 8) / p, g = (r ? 8 : 2) / p, m = (r ? 8 : 2) / p, v = 1 / 0; function b(e, t) { if (e.isNode()) { if (s) return; s = e, d.push(e) } if (e.isEdge() && (null == t || t < v)) if (a) { if (a.pstyle("z-index").value === e.pstyle("z-index").value) for (var n = 0; n < d.length; n++)if (d[n].isEdge()) { d[n] = e, a = e, v = null != t ? t : v; break } } else d.push(e), a = e, v = null != t ? t : v } function y(n) { var r = n.outerWidth() + 2 * g, i = n.outerHeight() + 2 * g, o = r / 2, a = i / 2, s = n.position(); if (s.x - o <= e && e <= s.x + o && s.y - a <= t && t <= s.y + a && c.nodeShapes[l.getNodeShape(n)].checkPoint(e, t, 0, r, i, s.x, s.y)) return b(n, 0), !0 } function x(n) { var r, o = n._private, a = o.rscratch, s = n.pstyle("width").pfValue, u = n.pstyle("arrow-scale").value, p = s / 2 + h, g = p * p, m = 2 * p, v = o.source, x = o.target; if ("segments" === a.edgeType || "straight" === a.edgeType || "haystack" === a.edgeType) { for (var w = a.allpts, k = 0; k + 3 < w.length; k += 2)if (i.inLineVicinity(e, t, w[k], w[k + 1], w[k + 2], w[k + 3], m) && g > (r = i.sqdistToFiniteLine(e, t, w[k], w[k + 1], w[k + 2], w[k + 3]))) return b(n, r), !0 } else if ("bezier" === a.edgeType || "multibezier" === a.edgeType || "self" === a.edgeType || "compound" === a.edgeType) for (w = a.allpts, k = 0; k + 5 < a.allpts.length; k += 4)if (i.inBezierVicinity(e, t, w[k], w[k + 1], w[k + 2], w[k + 3], w[k + 4], w[k + 5], m) && g > (r = i.sqdistToQuadraticBezier(e, t, w[k], w[k + 1], w[k + 2], w[k + 3], w[k + 4], w[k + 5]))) return b(n, r), !0; v = v || o.source, x = x || o.target; var A = l.getArrowWidth(s, u), E = [{ name: "source", x: a.arrowStartX, y: a.arrowStartY, angle: a.srcArrowAngle }, { name: "target", x: a.arrowEndX, y: a.arrowEndY, angle: a.tgtArrowAngle }, { name: "mid-source", x: a.midX, y: a.midY, angle: a.midsrcArrowAngle }, { name: "mid-target", x: a.midX, y: a.midY, angle: a.midtgtArrowAngle }]; for (k = 0; k < E.length; k++) { var S = E[k], $ = c.arrowShapes[n.pstyle(S.name + "-arrow-shape").value], C = n.pstyle("width").pfValue; if ($.roughCollide(e, t, A, S.angle, { x: S.x, y: S.y }, C, h) && $.collide(e, t, A, S.angle, { x: S.x, y: S.y }, C, h)) return b(n), !0 } f && d.length > 0 && (y(v), y(x)) } function w(e, t, n) { return o.getPrefixedProperty(e, t, n) } function k(n, r) { var o, a = n._private, s = m; o = r ? r + "-" : ""; var l = n.pstyle(o + "label").value; if ("yes" === n.pstyle("text-events").strValue && l) { var c = a.rstyle, u = n.pstyle("text-border-width").pfValue, d = n.pstyle("text-background-padding").pfValue, p = w(c, "labelWidth", r) + u + 2 * s + 2 * d, f = w(c, "labelHeight", r) + u + 2 * s + 2 * d, h = w(c, "labelX", r), g = w(c, "labelY", r), v = w(a.rscratch, "labelAngle", r), y = h - p / 2, x = h + p / 2, k = g - f / 2, A = g + f / 2; if (v) { var E = Math.cos(v), S = Math.sin(v), $ = function (e, t) { return { x: (e -= h) * E - (t -= g) * S + h, y: e * S + t * E + g } }, C = $(y, k), _ = $(y, A), O = $(x, k), T = $(x, A), j = [C.x, C.y, O.x, O.y, T.x, T.y, _.x, _.y]; if (i.pointInsidePolygonPoints(e, t, j)) return b(n), !0 } else { var P = { w: p, h: f, x1: y, x2: x, y1: k, y2: A }; if (i.inBoundingBox(P, e, t)) return b(n), !0 } } } n && (u = u.interactive); for (var A = u.length - 1; A >= 0; A--) { var E = u[A]; E.isNode() ? y(E) || k(E) : x(E) || k(E) || k(E, "source") || k(E, "target") } return d }, getAllInBox: function (e, t, n, r) { var o = this.getCachedZSortedEles().interactive, a = [], s = Math.min(e, n), l = Math.max(e, n), c = Math.min(t, r), u = Math.max(t, r); e = s, n = l, t = c, r = u; for (var d = i.makeBoundingBox({ x1: e, y1: t, x2: n, y2: r }), p = 0; p < o.length; p++) { var f = o[p]; if (f.isNode()) { var h = f, g = h.boundingBox({ includeNodes: !0, includeEdges: !1, includeLabels: !1 }); i.boundingBoxesIntersect(d, g) && !i.boundingBoxInBoundingBox(g, d) && a.push(h) } else { var m = f, v = m._private, b = v.rscratch; if (null != b.startX && null != b.startY && !i.inBoundingBox(d, b.startX, b.startY)) continue; if (null != b.endX && null != b.endY && !i.inBoundingBox(d, b.endX, b.endY)) continue; if ("bezier" === b.edgeType || "multibezier" === b.edgeType || "self" === b.edgeType || "compound" === b.edgeType || "segments" === b.edgeType || "haystack" === b.edgeType) { for (var y = v.rstyle.bezierPts || v.rstyle.linePts || v.rstyle.haystackPts, x = !0, w = 0; w < y.length; w++)if (!i.pointInBoundingBox(d, y[w])) { x = !1; break } x && a.push(m) } else "haystack" !== b.edgeType && "straight" !== b.edgeType || a.push(m) } } return a } }); e.exports = a }, function (e, t, n) { "use strict"; var r = n(2), i = { calculateArrowAngles: function (e) { var t, n, i, o, a, s, l = e._private.rscratch, c = "haystack" === l.edgeType, u = "bezier" === l.edgeType, d = "multibezier" === l.edgeType, p = "segments" === l.edgeType, f = "compound" === l.edgeType, h = "self" === l.edgeType; if (c ? (i = l.haystackPts[0], o = l.haystackPts[1], a = l.haystackPts[2], s = l.haystackPts[3]) : (i = l.arrowStartX, o = l.arrowStartY, a = l.arrowEndX, s = l.arrowEndY), m = l.midX, v = l.midY, p) t = i - l.segpts[0], n = o - l.segpts[1]; else if (d || f || h || u) { var g = l.allpts; t = i - r.qbezierAt(g[0], g[2], g[4], .1), n = o - r.qbezierAt(g[1], g[3], g[5], .1) } else t = i - m, n = o - v; l.srcArrowAngle = r.getAngleFromDisp(t, n); var m = l.midX, v = l.midY; if (c && (m = (i + a) / 2, v = (o + s) / 2), t = a - i, n = s - o, p) if ((g = l.allpts).length / 2 % 2 == 0) { var b = (y = g.length / 2) - 2; t = g[y] - g[b], n = g[y + 1] - g[b + 1] } else { b = (y = g.length / 2 - 1) - 2; var y, x = y + 2; t = g[y] - g[b], n = g[y + 1] - g[b + 1] } else if (d || f || h) { var w, k, A, E, g = l.allpts; if (l.ctrlpts.length / 2 % 2 == 0) { var S = 2 + ($ = 2 + (C = g.length / 2 - 1)); w = r.qbezierAt(g[C], g[$], g[S], 0), k = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], 0), A = r.qbezierAt(g[C], g[$], g[S], 1e-4), E = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], 1e-4) } else { var $, C = ($ = g.length / 2 - 1) - 2; S = $ + 2, w = r.qbezierAt(g[C], g[$], g[S], .4999), k = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], .4999), A = r.qbezierAt(g[C], g[$], g[S], .5), E = r.qbezierAt(g[C + 1], g[$ + 1], g[S + 1], .5) } t = A - w, n = E - k } if (l.midtgtArrowAngle = r.getAngleFromDisp(t, n), l.midDispX = t, l.midDispY = n, t *= -1, n *= -1, p && ((g = l.allpts).length / 2 % 2 == 0 || (t = -(g[x = 2 + (y = g.length / 2 - 1)] - g[y]), n = -(g[x + 1] - g[y + 1]))), l.midsrcArrowAngle = r.getAngleFromDisp(t, n), p) t = a - l.segpts[l.segpts.length - 2], n = s - l.segpts[l.segpts.length - 1]; else if (d || f || h || u) { var _ = (g = l.allpts).length; t = a - r.qbezierAt(g[_ - 6], g[_ - 4], g[_ - 2], .9), n = s - r.qbezierAt(g[_ - 5], g[_ - 3], g[_ - 1], .9) } else t = a - m, n = s - v; l.tgtArrowAngle = r.getAngleFromDisp(t, n) } }; i.getArrowWidth = i.getArrowHeight = function (e, t) { var n = this.arrowWidthCache = this.arrowWidthCache || {}, r = n[e + ", " + t]; return r || (r = Math.max(Math.pow(13.37 * e, .9), 29) * t, n[e + ", " + t] = r, r) }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = {}; function a(e) { var t = []; if (null != e) { for (var n = 0; n < e.length; n += 2) { var r = e[n], i = e[n + 1]; t.push({ x: r, y: i }) } return t } } o.findEdgeControlPoints = function (e) { if (e && 0 !== e.length) { for (var t, n, o, a, s, l = this, c = l.cy.hasCompoundNodes(), u = {}, d = [], p = [], f = 0; f < e.length; f++) { var h = (Ft = (Bt = e[f])._private).data, g = "unbundled-bezier" === (D = Bt.pstyle("curve-style").value) || "segments" === D, m = "unbundled-bezier" === D || "bezier" === D; if ("none" !== Bt.pstyle("display").value) if ("haystack" !== D) { var v = h.source, b = h.target; t = v > b ? b + "$-$" + v : v + "$-$" + b, g && (t = "unbundled$-$" + h.id); var y = u[t]; null == y && (y = u[t] = [], d.push(t)), y.push(Bt), g && (y.hasUnbundled = !0), m && (y.hasBezier = !0) } else p.push(Bt) } for (var x = 0; x < d.length; x++) { var w = u[t = d[x]]; if (w.sort((function (e, t) { return e.poolIndex() - t.poolIndex() })), Ht = w[0]._private.source, Gt = w[0]._private.target, !w.hasUnbundled && Ht.id() > Gt.id()) { var k = Ht; Ht = Gt, Gt = k } Wt = Ht.position(), Yt = Gt.position(), Xt = Ht.outerWidth(), Qt = Ht.outerHeight(), Zt = Gt.outerWidth(), Jt = Gt.outerHeight(), n = l.nodeShapes[this.getNodeShape(Ht)], o = l.nodeShapes[this.getNodeShape(Gt)], s = !1; var A = { north: 0, west: 0, south: 0, east: 0, northwest: 0, southwest: 0, northeast: 0, southeast: 0 }, E = Wt.x, S = Wt.y, $ = Xt, C = Qt, _ = Yt.x, O = Yt.y, T = Zt, j = Jt, P = w.length; for (f = 0; f < w.length; f++) { var D, R, I = (Vt = (Bt = w[f])._private.rscratch).lastEdgeIndex, N = f, M = Vt.lastNumEdges, z = (g = "unbundled-bezier" === (D = Bt.pstyle("curve-style").value) || "segments" === D, Ht.id() !== Bt.source().id()), L = Bt.pstyle("control-point-distances"), B = Bt.pstyle("loop-direction").pfValue, F = Bt.pstyle("loop-sweep").pfValue, q = Bt.pstyle("control-point-weights"), V = L && q ? Math.min(L.value.length, q.value.length) : 1, U = Bt.pstyle("control-point-step-size").pfValue, H = L ? L.pfValue[0] : void 0, G = q.value[0], W = Bt.pstyle("edge-distances").value, Y = Bt.pstyle("segment-weights"), X = Bt.pstyle("segment-distances"), Z = Math.min(Y.pfValue.length, X.pfValue.length), Q = Bt.pstyle("source-endpoint").value, J = Bt.pstyle("target-endpoint").value, K = Bt.pstyle("source-arrow-shape").value, ee = Bt.pstyle("target-arrow-shape").value, te = Bt.pstyle("arrow-scale").value, ne = Bt.pstyle("width").pfValue, re = Vt.lastSrcCtlPtX, ie = Vt.lastSrcCtlPtY, oe = Vt.lastSrcCtlPtW, ae = Vt.lastSrcCtlPtH, se = Vt.lastTgtCtlPtX, le = Vt.lastTgtCtlPtY, ce = Vt.lastTgtCtlPtW, ue = Vt.lastTgtCtlPtH, de = Vt.lastCurveStyle, pe = D, fe = Vt.lastCtrlptDists, he = L ? L.strValue : null, ge = Vt.lastCtrlptWs, me = q.strValue, ve = Vt.lastSegmentWs, be = Y.strValue, ye = Vt.lastSegmentDs, xe = X.strValue, we = Vt.lastStepSize, ke = U, Ae = Vt.lastLoopDir, Ee = B, Se = Vt.lastLoopSwp, $e = F, Ce = Vt.lastEdgeDistances, _e = W, Oe = Vt.lastSrcEndpt, Te = Q, je = Vt.lastTgtEndpt, Pe = J, De = Vt.lastSrcArr, Re = K, Ie = Vt.lastTgtArr, Ne = ee, Me = Vt.lastLineW, ze = ne, Le = Vt.lastArrScl, Be = te; if (Vt.badBezier = !!s, re === E && ie === S && oe === $ && ae === C && se === _ && le === O && ce === T && ue === j && de === pe && fe === he && ge === me && ve === be && ye === xe && we === ke && Ae === Ee && Se === $e && Ce === _e && Oe === Te && je === Pe && De === Re && Ie === Ne && Me === ze && Le === Be && (I === N && M === P || g) ? R = !0 : (R = !1, Vt.lastSrcCtlPtX = E, Vt.lastSrcCtlPtY = S, Vt.lastSrcCtlPtW = $, Vt.lastSrcCtlPtH = C, Vt.lastTgtCtlPtX = _, Vt.lastTgtCtlPtY = O, Vt.lastTgtCtlPtW = T, Vt.lastTgtCtlPtH = j, Vt.lastEdgeIndex = N, Vt.lastNumEdges = P, Vt.lastCurveStyle = pe, Vt.lastCtrlptDists = he, Vt.lastCtrlptWs = me, Vt.lastSegmentDs = xe, Vt.lastSegmentWs = be, Vt.lastStepSize = ke, Vt.lastLoopDir = Ee, Vt.lastLoopSwp = $e, Vt.lastEdgeDistances = _e, Vt.lastSrcEndpt = Te, Vt.lastTgtEndpt = Pe, Vt.lastSrcArr = Re, Vt.lastTgtArr = Ne, Vt.lastLineW = ze, Vt.lastArrScl = Be), !R) { if (!w.calculatedIntersection && Ht !== Gt && (w.hasBezier || w.hasUnbundled)) { w.calculatedIntersection = !0; var Fe = n.intersectLine(Wt.x, Wt.y, Xt, Qt, Yt.x, Yt.y, 0); w.srcIntn = Fe; var qe = o.intersectLine(Yt.x, Yt.y, Zt, Jt, Wt.x, Wt.y, 0); w.tgtIntn = qe; var Ve = { x1: Fe[0], x2: qe[0], y1: Fe[1], y2: qe[1] }, Ue = { x1: Wt.x, x2: Yt.x, y1: Wt.y, y2: Yt.y }, He = qe[1] - Fe[1], Ge = qe[0] - Fe[0], We = Math.sqrt(Ge * Ge + He * He), Ye = { x: Ge, y: He }, Xe = { x: Ye.x / We, y: Ye.y / We }; a = { x: -Xe.y, y: Xe.x }, o.checkPoint(Fe[0], Fe[1], 0, Zt, Jt, Yt.x, Yt.y) && n.checkPoint(qe[0], qe[1], 0, Xt, Qt, Wt.x, Wt.y) && (a = {}, s = !0) } if (z ? (Vt.srcIntn = w.tgtIntn, Vt.tgtIntn = w.srcIntn) : (Vt.srcIntn = w.srcIntn, Vt.tgtIntn = w.tgtIntn), Ht === Gt) { Vt.edgeType = "self"; var Ze = f, Qe = U; g && (Ze = 0, Qe = H); var Je = B - Math.PI / 2, Ke = Je - F / 2, et = Je + F / 2, tt = String(B + "_" + F); Ze = void 0 === A[tt] ? A[tt] = 0 : ++A[tt], Vt.ctrlpts = [Wt.x + 1.4 * Math.cos(Ke) * Qe * (Ze / 3 + 1), Wt.y + 1.4 * Math.sin(Ke) * Qe * (Ze / 3 + 1), Wt.x + 1.4 * Math.cos(et) * Qe * (Ze / 3 + 1), Wt.y + 1.4 * Math.sin(et) * Qe * (Ze / 3 + 1)] } else if (c && (Ht.isParent() || Ht.isChild() || Gt.isParent() || Gt.isChild()) && (Ht.parents().anySame(Gt) || Gt.parents().anySame(Ht))) { Vt.edgeType = "compound", Vt.badBezier = !1, Ze = f, Qe = U, g && (Ze = 0, Qe = H); var nt = { x: Wt.x - Xt / 2, y: Wt.y - Qt / 2 }, rt = { x: Yt.x - Zt / 2, y: Yt.y - Jt / 2 }, it = { x: Math.min(nt.x, rt.x), y: Math.min(nt.y, rt.y) }, ot = Math.max(.5, Math.log(.01 * Xt)), at = Math.max(.5, Math.log(.01 * Zt)); Vt.ctrlpts = [it.x, it.y - (1 + Math.pow(50, 1.12) / 100) * Qe * (Ze / 3 + 1) * ot, it.x - (1 + Math.pow(50, 1.12) / 100) * Qe * (Ze / 3 + 1) * at, it.y] } else if ("segments" === D) { Vt.edgeType = "segments", Vt.segpts = []; for (var st = 0; st < Z; st++) { var lt = Y.pfValue[st], ct = X.pfValue[st], ut = 1 - lt, dt = lt, pt = { x: (bt = "node-position" === W ? Ue : Ve).x1 * ut + bt.x2 * dt, y: bt.y1 * ut + bt.y2 * dt }; Vt.segpts.push(pt.x + a.x * ct, pt.y + a.y * ct) } } else if (w.length % 2 != 1 || f !== Math.floor(w.length / 2) || g) { var ft = g; Vt.edgeType = ft ? "multibezier" : "bezier", Vt.ctrlpts = []; for (var ht = 0; ht < V; ht++) { var gt, mt = (.5 - w.length / 2 + f) * U, vt = r.signum(mt); ft && (H = L ? L.pfValue[ht] : U, G = q.value[ht]); var bt, yt = void 0 !== (gt = g ? H : void 0 !== H ? vt * H : void 0) ? gt : mt; ut = 1 - G, dt = G, z && (k = ut, ut = dt, dt = k), pt = { x: (bt = "node-position" === W ? Ue : Ve).x1 * ut + bt.x2 * dt, y: bt.y1 * ut + bt.y2 * dt }, Vt.ctrlpts.push(pt.x + a.x * yt, pt.y + a.y * yt) } } else Vt.edgeType = "straight"; this.findEndpoints(Bt); var xt = !i.number(Vt.startX) || !i.number(Vt.startY), wt = !i.number(Vt.arrowStartX) || !i.number(Vt.arrowStartY), kt = !i.number(Vt.endX) || !i.number(Vt.endY), At = !i.number(Vt.arrowEndX) || !i.number(Vt.arrowEndY), Et = this.getArrowWidth(Bt.pstyle("width").pfValue, Bt.pstyle("arrow-scale").value) * this.arrowShapeWidth * 3; if ("bezier" === Vt.edgeType) { var St = r.dist({ x: Vt.ctrlpts[0], y: Vt.ctrlpts[1] }, { x: Vt.startX, y: Vt.startY }), $t = St < Et, Ct = r.dist({ x: Vt.ctrlpts[0], y: Vt.ctrlpts[1] }, { x: Vt.endX, y: Vt.endY }), _t = Ct < Et, Ot = !1; if (xt || wt || $t) { Ot = !0; var Tt = { x: Vt.ctrlpts[0] - Wt.x, y: Vt.ctrlpts[1] - Wt.y }, jt = Math.sqrt(Tt.x * Tt.x + Tt.y * Tt.y), Pt = { x: Tt.x / jt, y: Tt.y / jt }, Dt = Math.max(Xt, Qt), Rt = { x: Vt.ctrlpts[0] + 2 * Pt.x * Dt, y: Vt.ctrlpts[1] + 2 * Pt.y * Dt }, It = n.intersectLine(Wt.x, Wt.y, Xt, Qt, Rt.x, Rt.y, 0); $t ? (Vt.ctrlpts[0] = Vt.ctrlpts[0] + Pt.x * (Et - St), Vt.ctrlpts[1] = Vt.ctrlpts[1] + Pt.y * (Et - St)) : (Vt.ctrlpts[0] = It[0] + Pt.x * Et, Vt.ctrlpts[1] = It[1] + Pt.y * Et) } if (kt || At || _t) { Ot = !0, Tt = { x: Vt.ctrlpts[0] - Yt.x, y: Vt.ctrlpts[1] - Yt.y }, jt = Math.sqrt(Tt.x * Tt.x + Tt.y * Tt.y), Pt = { x: Tt.x / jt, y: Tt.y / jt }, Dt = Math.max(Xt, Qt), Rt = { x: Vt.ctrlpts[0] + 2 * Pt.x * Dt, y: Vt.ctrlpts[1] + 2 * Pt.y * Dt }; var Nt = o.intersectLine(Yt.x, Yt.y, Zt, Jt, Rt.x, Rt.y, 0); _t ? (Vt.ctrlpts[0] = Vt.ctrlpts[0] + Pt.x * (Et - Ct), Vt.ctrlpts[1] = Vt.ctrlpts[1] + Pt.y * (Et - Ct)) : (Vt.ctrlpts[0] = Nt[0] + Pt.x * Et, Vt.ctrlpts[1] = Nt[1] + Pt.y * Et) } Ot && this.findEndpoints(Bt) } if ("multibezier" === Vt.edgeType || "bezier" === Vt.edgeType || "self" === Vt.edgeType || "compound" === Vt.edgeType) { for (Vt.allpts = [], Vt.allpts.push(Vt.startX, Vt.startY), ht = 0; ht + 1 < Vt.ctrlpts.length; ht += 2)Vt.allpts.push(Vt.ctrlpts[ht], Vt.ctrlpts[ht + 1]), ht + 3 < Vt.ctrlpts.length && Vt.allpts.push((Vt.ctrlpts[ht] + Vt.ctrlpts[ht + 2]) / 2, (Vt.ctrlpts[ht + 1] + Vt.ctrlpts[ht + 3]) / 2); var Mt; Vt.allpts.push(Vt.endX, Vt.endY), Vt.ctrlpts.length / 2 % 2 == 0 ? (Mt = Vt.allpts.length / 2 - 1, Vt.midX = Vt.allpts[Mt], Vt.midY = Vt.allpts[Mt + 1]) : (Mt = Vt.allpts.length / 2 - 3, Vt.midX = r.qbezierAt(Vt.allpts[Mt], Vt.allpts[Mt + 2], Vt.allpts[Mt + 4], .5), Vt.midY = r.qbezierAt(Vt.allpts[Mt + 1], Vt.allpts[Mt + 3], Vt.allpts[Mt + 5], .5)) } else if ("straight" === Vt.edgeType) Vt.allpts = [Vt.startX, Vt.startY, Vt.endX, Vt.endY], Vt.midX = (Vt.startX + Vt.endX + Vt.arrowStartX + Vt.arrowEndX) / 4, Vt.midY = (Vt.startY + Vt.endY + Vt.arrowStartY + Vt.arrowEndY) / 4; else if ("segments" === Vt.edgeType) if (Vt.allpts = [], Vt.allpts.push(Vt.startX, Vt.startY), Vt.allpts.push.apply(Vt.allpts, Vt.segpts), Vt.allpts.push(Vt.endX, Vt.endY), Vt.segpts.length % 4 == 0) { var zt = Vt.segpts.length / 2, Lt = zt - 2; Vt.midX = (Vt.segpts[Lt] + Vt.segpts[zt]) / 2, Vt.midY = (Vt.segpts[Lt + 1] + Vt.segpts[zt + 1]) / 2 } else Lt = Vt.segpts.length / 2 - 1, Vt.midX = Vt.segpts[Lt], Vt.midY = Vt.segpts[Lt + 1]; this.storeEdgeProjections(Bt), this.calculateArrowAngles(Bt) } this.recalculateEdgeLabelProjections(Bt), this.calculateLabelAngles(Bt) } } for (f = 0; f < p.length; f++) { var Bt, Ft, qt = (Ft = (Bt = p[f])._private).rscratch, Vt = qt; if (!qt.haystack) { var Ut = 2 * Math.random() * Math.PI; qt.source = { x: Math.cos(Ut), y: Math.sin(Ut) }, Ut = 2 * Math.random() * Math.PI, qt.target = { x: Math.cos(Ut), y: Math.sin(Ut) } } var Ht = Ft.source, Gt = Ft.target, Wt = Ht.position(), Yt = Gt.position(), Xt = Ht.width(), Zt = Gt.width(), Qt = Ht.height(), Jt = Gt.height(), Kt = (Dt = Bt.pstyle("haystack-radius").value) / 2; Vt.haystackPts = Vt.allpts = [Vt.source.x * Xt * Kt + Wt.x, Vt.source.y * Qt * Kt + Wt.y, Vt.target.x * Zt * Kt + Yt.x, Vt.target.y * Jt * Kt + Yt.y], Vt.midX = (Vt.allpts[0] + Vt.allpts[2]) / 2, Vt.midY = (Vt.allpts[1] + Vt.allpts[3]) / 2, qt.edgeType = qt.lastCurveStyle = "haystack", qt.haystack = !0, this.storeEdgeProjections(Bt), this.calculateArrowAngles(Bt), this.recalculateEdgeLabelProjections(Bt), this.calculateLabelAngles(Bt) } } }, o.getSegmentPoints = function (e) { var t = e[0]._private.rscratch; if ("segments" === t.edgeType) return a(t.segpts) }, o.getControlPoints = function (e) { var t = e[0]._private.rscratch, n = t.edgeType; if ("bezier" === n || "multibezier" === n || "self" === n || "compound" === n) return a(t.ctrlpts) }, o.getEdgeMidpoint = function (e) { var t = e[0]._private.rscratch; return { x: t.midX, y: t.midY } }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = { manualEndptToPx: function (e, t) { var n = e.position(), r = e.outerWidth(), i = e.outerHeight(); if (2 === t.value.length) { var o = [t.pfValue[0], t.pfValue[1]]; return "%" === t.units[0] && (o[0] = o[0] * r), "%" === t.units[1] && (o[1] = o[1] * i), o[0] += n.x, o[1] += n.y, o } var a = t.pfValue[0]; a = -Math.PI / 2 + a; var s = 2 * Math.max(r, i), l = [n.x + Math.cos(a) * s, n.y + Math.sin(a) * s]; return this.nodeShapes[this.getNodeShape(e)].intersectLine(n.x, n.y, r, i, l[0], l[1], 0) }, findEndpoints: function (e) { var t = this, n = void 0, o = e.source()[0], a = e.target()[0], s = o.position(), l = a.position(), c = e.pstyle("target-arrow-shape").value, u = e.pstyle("source-arrow-shape").value, d = e.pstyle("target-distance-from-node").pfValue, p = e.pstyle("source-distance-from-node").pfValue, f = e._private.rscratch, h = f.edgeType, g = "self" === h || "compound" === h, m = "bezier" === h || "multibezier" === h || g, v = "bezier" !== h, b = "straight" === h || "segments" === h, y = "segments" === h, x = m || v || b, w = e.pstyle("source-endpoint"), k = g ? "outside-to-node" : w.value, A = e.pstyle("target-endpoint"), E = g ? "outside-to-node" : A.value; f.srcManEndpt = w, f.tgtManEndpt = A; var S = void 0, $ = void 0, C = void 0, _ = void 0; if (m) { var O = [f.ctrlpts[0], f.ctrlpts[1]]; S = v ? [f.ctrlpts[f.ctrlpts.length - 2], f.ctrlpts[f.ctrlpts.length - 1]] : O, $ = O } else if (b) { var T = y ? f.segpts.slice(0, 2) : [l.x, l.y]; S = y ? f.segpts.slice(f.segpts.length - 2) : [s.x, s.y], $ = T } "inside-to-node" === E ? n = [l.x, l.y] : A.units ? n = this.manualEndptToPx(a, A) : "outside-to-line" === E ? n = f.tgtIntn : ("outside-to-node" === E ? C = S : "outside-to-line" === E && (C = [s.x, s.y]), n = t.nodeShapes[this.getNodeShape(a)].intersectLine(l.x, l.y, a.outerWidth(), a.outerHeight(), C[0], C[1], 0)); var j = r.shortenIntersection(n, S, t.arrowShapes[c].spacing(e) + d), P = r.shortenIntersection(n, S, t.arrowShapes[c].gap(e) + d); e.hasClass("horizontal") ? (f.endX = n[0] - d, f.endY = n[1], f.arrowEndX = n[0] - d / 2, f.arrowEndY = n[1]) : e.hasClass("vertical") ? (f.endX = n[0], f.endY = n[1] - d, f.arrowEndX = n[0], f.arrowEndY = n[1] - d / 2) : (f.endX = P[0], f.endY = P[1], f.arrowEndX = j[0], f.arrowEndY = j[1]), "inside-to-node" === k ? n = [s.x, s.y] : w.units ? n = this.manualEndptToPx(o, w) : "outside-to-line" === k ? n = f.srcIntn : ("outside-to-node" === k ? _ = $ : "outside-to-line" === k && (_ = [l.x, l.y]), n = t.nodeShapes[this.getNodeShape(o)].intersectLine(s.x, s.y, o.outerWidth(), o.outerHeight(), _[0], _[1], 0)); var D = r.shortenIntersection(n, $, t.arrowShapes[u].spacing(e) + p), R = r.shortenIntersection(n, $, t.arrowShapes[u].gap(e) + p); f.startX = R[0], f.startY = R[1], f.arrowStartX = D[0], f.arrowStartY = D[1], x && (i.number(f.startX) && i.number(f.startY) && i.number(f.endX) && i.number(f.endY) ? f.badLine = !1 : f.badLine = !0) }, getSourceEndpoint: function (e) { var t = e[0]._private.rscratch; switch (t.edgeType) { case "haystack": return { x: t.haystackPts[0], y: t.haystackPts[1] }; default: return { x: t.arrowStartX, y: t.arrowStartY } } }, getTargetEndpoint: function (e) { var t = e[0]._private.rscratch; switch (t.edgeType) { case "haystack": return { x: t.haystackPts[2], y: t.haystackPts[3] }; default: return { x: t.arrowEndX, y: t.arrowEndY } } } }; e.exports = o }, function (e, t, n) { "use strict"; var r = n(2), i = {}; function o(e, t, n) { for (var i = function (e, t, n, i) { return r.qbezierAt(e, t, n, i) }, o = t._private.rstyle.bezierPts, a = 0; a < e.bezierProjPcts.length; a++) { var s = e.bezierProjPcts[a]; o.push({ x: i(n[0], n[2], n[4], s), y: i(n[1], n[3], n[5], s) }) } } i.storeEdgeProjections = function (e) { var t = e._private, n = t.rscratch, r = n.edgeType; if (t.rstyle.bezierPts = null, t.rstyle.linePts = null, t.rstyle.haystackPts = null, "multibezier" === r || "bezier" === r || "self" === r || "compound" === r) { t.rstyle.bezierPts = []; for (var i = 0; i + 5 < n.allpts.length; i += 4)o(this, e, n.allpts.slice(i, i + 6)) } else if ("segments" === r) { var a = t.rstyle.linePts = []; for (i = 0; i + 1 < n.allpts.length; i += 2)a.push({ x: n.allpts[i], y: n.allpts[i + 1] }) } else if ("haystack" === r) { var s = n.haystackPts; t.rstyle.haystackPts = [{ x: s[0], y: s[1] }, { x: s[2], y: s[3] }] } t.rstyle.arrowWidth = this.getArrowWidth(e.pstyle("width").pfValue, e.pstyle("arrow-scale").value) * this.arrowShapeWidth }, i.recalculateEdgeProjections = function (e) { this.findEdgeControlPoints(e) }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(2), i = n(0), o = n(1), a = { recalculateNodeLabelProjection: function (e) { var t = e.pstyle("label").strValue; if (!i.emptyString(t)) { var n, r, o = e._private, a = e.width(), s = e.height(), l = e.padding(), c = e.position(), u = e.pstyle("text-halign").strValue, d = e.pstyle("text-valign").strValue, p = o.rscratch, f = o.rstyle; switch (u) { case "left": n = c.x - a / 2 - l; break; case "right": n = c.x + a / 2 + l; break; default: n = c.x }switch (d) { case "top": r = c.y - s / 2 - l; break; case "bottom": r = c.y + s / 2 + l; break; default: r = c.y }p.labelX = n, p.labelY = r, f.labelX = n, f.labelY = r, this.applyLabelDimensions(e) } }, recalculateEdgeLabelProjections: function (e) { var t, n = e._private, i = n.rscratch, a = this, s = { mid: e.pstyle("label").strValue, source: e.pstyle("source-label").strValue, target: e.pstyle("target-label").strValue }; if (s.mid || s.source || s.target) { t = { x: i.midX, y: i.midY }; var l = function (e, t, r) { o.setPrefixedProperty(n.rscratch, e, t, r), o.setPrefixedProperty(n.rstyle, e, t, r) }; l("labelX", null, t.x), l("labelY", null, t.y); var c = function (o) { var c, u = "source" === o; if (s[o]) { var d = e.pstyle(o + "-text-offset").pfValue, p = function (e, t) { var n = t.x - e.x, r = t.y - e.y; return Math.atan(r / n) }; switch (i.edgeType) { case "self": case "compound": case "bezier": case "multibezier": for (var f, h = function e() { if (e.cache) return e.cache; for (var t = [], o = 0; o + 5 < i.allpts.length; o += 4) { var s = { x: i.allpts[o], y: i.allpts[o + 1] }, l = { x: i.allpts[o + 2], y: i.allpts[o + 3] }, c = { x: i.allpts[o + 4], y: i.allpts[o + 5] }; t.push({ p0: s, p1: l, p2: c, startDist: 0, length: 0, segments: [] }) } var u = n.rstyle.bezierPts, d = a.bezierProjPcts.length; function p(e, t, n, i, o) { var a = r.dist(t, n), s = e.segments[e.segments.length - 1], l = { p0: t, p1: n, t0: i, t1: o, startDist: s ? s.startDist + s.length : 0, length: a }; e.segments.push(l), e.length += a } for (o = 0; o < t.length; o++) { var f = t[o], h = t[o - 1]; h && (f.startDist = h.startDist + h.length), p(f, f.p0, u[o * d], 0, a.bezierProjPcts[0]); for (var g = 0; g < d - 1; g++)p(f, u[o * d + g], u[o * d + g + 1], a.bezierProjPcts[g], a.bezierProjPcts[g + 1]); p(f, u[o * d + d - 1], f.p2, a.bezierProjPcts[d - 1], 1) } return e.cache = t }(), g = 0, m = 0, v = 0; v < h.length; v++) { for (var b = h[u ? v : h.length - 1 - v], y = 0; y < b.segments.length; y++) { var x = b.segments[u ? y : b.segments.length - 1 - y], w = v === h.length - 1 && y === b.segments.length - 1; if (g = m, (m += x.length) >= d || w) { f = { cp: b, segment: x }; break } } if (f) break } b = f.cp; var k = (d - g) / (x = f.segment).length, A = x.t1 - x.t0, E = u ? x.t0 + A * k : x.t1 - A * k; E = r.bound(0, E, 1), t = r.qbezierPtAt(b.p0, b.p1, b.p2, E), c = function (e, t, n, i) { var o = r.bound(0, i - .001, 1), a = r.bound(0, i + .001, 1), s = r.qbezierPtAt(e, t, n, o), l = r.qbezierPtAt(e, t, n, a); return p(s, l) }(b.p0, b.p1, b.p2, E); break; case "straight": case "segments": case "haystack": var S, $, C, _, O = 0, T = i.allpts.length; for (v = 0; v + 3 < T && (u ? (C = { x: i.allpts[v], y: i.allpts[v + 1] }, _ = { x: i.allpts[v + 2], y: i.allpts[v + 3] }) : (C = { x: i.allpts[T - 2 - v], y: i.allpts[T - 1 - v] }, _ = { x: i.allpts[T - 4 - v], y: i.allpts[T - 3 - v] }), $ = O, !((O += S = r.dist(C, _)) >= d)); v += 2); E = (d - $) / S, E = r.bound(0, E, 1), t = r.lineAt(C, _, E), c = p(C, _) }l("labelX", o, t.x), l("labelY", o, t.y), l("labelAutoAngle", o, c) } }; c("source"), c("target"), this.applyLabelDimensions(e) } }, applyLabelDimensions: function (e) { this.applyPrefixedLabelDimensions(e), e.isEdge() && (this.applyPrefixedLabelDimensions(e, "source"), this.applyPrefixedLabelDimensions(e, "target")) }, applyPrefixedLabelDimensions: function (e, t) { var n = e._private, r = this.getLabelText(e, t), i = this.calculateLabelDimensions(e, r); o.setPrefixedProperty(n.rstyle, "labelWidth", t, i.width), o.setPrefixedProperty(n.rscratch, "labelWidth", t, i.width), o.setPrefixedProperty(n.rstyle, "labelHeight", t, i.height), o.setPrefixedProperty(n.rscratch, "labelHeight", t, i.height) }, getLabelText: function (e, t) { var n = e._private, r = t ? t + "-" : "", i = e.pstyle(r + "label").strValue, a = e.pstyle("text-transform").value, s = function (e, r) { return r ? (o.setPrefixedProperty(n.rscratch, e, t, r), r) : o.getPrefixedProperty(n.rscratch, e, t) }; "none" == a || ("uppercase" == a ? i = i.toUpperCase() : "lowercase" == a && (i = i.toLowerCase())); var l = e.pstyle("text-wrap").value; if ("wrap" === l) { var c = s("labelKey"); if (c && s("labelWrapKey") === c) return s("labelWrapCachedText"); for (var u = i.split("\n"), d = e.pstyle("text-max-width").pfValue, p = [], f = 0; f < u.length; f++) { var h = u[f]; if (this.calculateLabelDimensions(e, h, "line=" + h).width > d) { for (var g = h.split(/\s+/), m = "", v = 0; v < g.length; v++) { var b = g[v], y = 0 === m.length ? b : m + " " + b; this.calculateLabelDimensions(e, y, "testLine=" + y).width <= d ? m += b + " " : (p.push(m), m = b + " ") } m.match(/^\s+$/) || p.push(m) } else p.push(h) } s("labelWrapCachedLines", p), i = s("labelWrapCachedText", p.join("\n")), s("labelWrapKey", c) } else if ("ellipsis" === l) { d = e.pstyle("text-max-width").pfValue; for (var x = "", w = !1, k = 0; k < i.length && !(this.calculateLabelDimensions(e, x + i[k] + "…").width > d); k++)x += i[k], k === i.length - 1 && (w = !0); return w || (x += "…"), x } return i }, calculateLabelDimensions: function (e, t, n) { var r = e._private.labelStyleKey + "$@$" + t; n && (r += "$@$" + n); var i = this.labelDimCache || (this.labelDimCache = {}); if (i[r]) return i[r]; var o = e.pstyle("font-style").strValue, a = 1 * e.pstyle("font-size").pfValue + "px", s = e.pstyle("font-family").strValue, l = e.pstyle("font-weight").strValue, c = this.labelCalcDiv; c || (c = this.labelCalcDiv = document.createElement("div"), document.body.appendChild(c)); var u = c.style; return u.fontFamily = s, u.fontStyle = o, u.fontSize = a, u.fontWeight = l, u.position = "absolute", u.left = "-9999px", u.top = "-9999px", u.zIndex = "-1", u.visibility = "hidden", u.pointerEvents = "none", u.padding = "0", u.lineHeight = "1", "wrap" === e.pstyle("text-wrap").value ? u.whiteSpace = "pre" : u.whiteSpace = "normal", c.textContent = t, i[r] = { width: Math.ceil(c.clientWidth / 1), height: Math.ceil(c.clientHeight / 1) }, i[r] }, calculateLabelAngles: function (e) { var t = e._private.rscratch, n = e.isEdge(), r = e.pstyle("text-rotation"), i = r.strValue; "none" === i ? t.labelAngle = t.sourceLabelAngle = t.targetLabelAngle = 0 : n && "autorotate" === i ? (t.labelAngle = Math.atan(t.midDispY / t.midDispX), t.sourceLabelAngle = t.sourceLabelAutoAngle, t.targetLabelAngle = t.targetLabelAutoAngle) : t.labelAngle = t.sourceLabelAngle = t.targetLabelAngle = "autorotate" === i ? 0 : r.pfValue } }; e.exports = a }, function (e, t, n) { "use strict"; var r = { getNodeShape: function (e) { var t = e.pstyle("shape").value; if (e.isParent()) return "rectangle" === t || "roundrectangle" === t || "cutrectangle" === t || "barrel" === t ? t : "rectangle"; if ("polygon" === t) { var n = e.pstyle("shape-polygon-points").value; return this.nodeShapes.makePolygon(n).name } return t } }; e.exports = r }, function (e, t, n) { "use strict"; var r = { registerCalculationListeners: function () { var e = this.cy, t = e.collection(), n = this, r = function (e, n) { var r = !(arguments.length > 2 && void 0 !== arguments[2]) || arguments[2]; t.merge(e); for (var i = 0; i < e.length; i++) { var o = e[i], a = o._private, s = a.rstyle; r && (s.clean = !1, a.bbCache = null); var l = s.dirtyEvents = s.dirtyEvents || { length: 0 }; l[n.type] || (l[n.type] = !0, l.length++) } }; n.binder(e).on("position.* style.* free.* bounds.*", "node", (function (e) { var t = e.target; r(t, e), r(t.connectedEdges(), e) })).on("add.*", "node", (function (e) { var t = e.target; r(t, e) })).on("background.*", "node", (function (e) { var t = e.target; r(t, e, !1) })).on("add.* style.*", "edge", (function (e) { var t = e.target; r(t, e), r(t.parallelEdges(), e) })).on("remove.*", "edge", (function (e) { for (var t = e.target.parallelEdges(), n = 0; n < t.length; n++) { var i = t[n]; i.removed() || r(i, e) } })).on("dirty.*", "node", (function (e) { var t = e.target; r(t, e) })), n.beforeRender((function (r) { if (r) { var i = n.onUpdateEleCalcsFns; if (i) for (var o = 0; o < i.length; o++)(0, i[o])(r, t); for (n.recalculateRenderedStyle(t, !1), o = 0; o < t.length; o++)t[o]._private.rstyle.dirtyEvents = null; t = e.collection() } }), n.beforeRenderPriorities.eleCalcs) }, onUpdateEleCalcs: function (e) { (this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || []).push(e) }, recalculateRenderedStyle: function (e, t) { var n = [], r = []; if (!this.destroyed) { void 0 === t && (t = !0); for (var i = 0; i < e.length; i++) { var o = (l = (s = e[i])._private).rstyle; t && o.clean || s.removed() || "none" !== s.pstyle("display").value && ("nodes" === l.group ? r.push(s) : n.push(s), o.clean = !0) } for (i = 0; i < r.length; i++) { o = (l = (s = r[i])._private).rstyle; var a = s.position(); this.recalculateNodeLabelProjection(s), o.nodeX = a.x, o.nodeY = a.y, o.nodeW = s.pstyle("width").pfValue, o.nodeH = s.pstyle("height").pfValue } for (this.recalculateEdgeProjections(n), i = 0; i < n.length; i++) { o = (l = (s = n[i])._private).rstyle; var s, l, c = l.rscratch; this.recalculateEdgeLabelProjections(s), o.srcX = c.arrowStartX, o.srcY = c.arrowStartY, o.tgtX = c.arrowEndX, o.tgtY = c.arrowEndY, o.midX = c.midX, o.midY = c.midY, o.labelAngle = c.labelAngle, o.sourceLabelAngle = c.sourceLabelAngle, o.targetLabelAngle = c.targetLabelAngle } } } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(17), i = { updateCachedGrabbedEles: function () { var e = this.cachedZSortedEles; if (e) { e.drag = [], e.nondrag = []; for (var t = [], n = 0; n < e.length; n++) { var r = (i = e[n])._private.rscratch; i.grabbed() && !i.isParent() ? t.push(i) : r.inDragLayer ? e.drag.push(i) : e.nondrag.push(i) } for (n = 0; n < t.length; n++) { var i = t[n]; e.drag.push(i) } } }, invalidateCachedZSortedEles: function () { this.cachedZSortedEles = null }, getCachedZSortedEles: function (e) { if (e || !this.cachedZSortedEles) { var t = this.cy.mutableElements().toArray(); t.sort(r), t.interactive = t.filter((function (e) { return e.interactive() })), this.cachedZSortedEles = t, this.updateCachedGrabbedEles() } else t = this.cachedZSortedEles; return t } }; e.exports = i }, function (e, t, n) { "use strict"; var r = { getCachedImage: function (e, t, n) { var r = this.imageCache = this.imageCache || {}, i = r[e]; if (i) return i.image.complete || i.image.addEventListener("load", n), i.image; var o = (i = r[e] = r[e] || {}).image = new Image; return o.addEventListener("load", n), o.addEventListener("error", (function () { o.error = !0 })), "data:" === e.substring(0, "data:".length).toLowerCase() || (o.crossOrigin = t), o.src = e, o } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(2), a = (n(16), { registerBinding: function (e, t, n, r) { var i = Array.prototype.slice.apply(arguments, [1]), o = this.binder(e); return o.on.apply(o, i) }, binder: function (e) { var t = this, n = e === window || e === document || e === document.body || r.domElement(e); if (null == t.supportsPassiveEvents) { var i = !1; try { var o = Object.defineProperty({}, "passive", { get: function () { i = !0 } }); window.addEventListener("test", null, o) } catch (e) { } t.supportsPassiveEvents = i } var a = function (r, i, o) { var a = Array.prototype.slice.call(arguments); return n && t.supportsPassiveEvents && (a[2] = { capture: null != o && o, passive: !1, once: !1 }), t.bindings.push({ target: e, args: a }), (e.addEventListener || e.on).apply(e, a), this }; return { on: a, addEventListener: a, addListener: a, bind: a } }, nodeIsDraggable: function (e) { return e && e.isNode() && !e.locked() && e.grabbable() }, nodeIsGrabbable: function (e) { return this.nodeIsDraggable(e) && e.interactive() } }); a.load = function () { var e = this, t = function (t, n, r, o) { null == t && (t = e.cy); for (var a = 0; a < n.length; a++) { var s = n[a]; t.emit(i.extend({ originalEvent: r, type: s }, o)) } }, n = function (e) { return e.shiftKey || e.metaKey || e.ctrlKey }, a = function (t, n) { var r = !0; if (e.cy.hasCompoundNodes() && t && t.isEdge()) { for (var i = 0; n && i < n.length; i++)if ((t = n[i]).isNode() && t.isParent()) { r = !1; break } } else r = !0; return r }, s = function (e) { e[0]._private.rscratch.inDragLayer = !0 }, l = function (e) { e[0]._private.rscratch.isGrabTarget = !0 }, c = function (t, n) { var r = function (t) { var n; if (t.addToList && e.cy.hasCompoundNodes()) { if (!t.addToList.hasId) { t.addToList.hasId = {}; for (var r = 0; r < t.addToList.length; r++) { var i = t.addToList[r]; t.addToList.hasId[i.id()] = !0 } } n = t.addToList.hasId } return n || {} }(n); r[t.id()] || (n.addToList.push(t), r[t.id()] = !0, function (e) { e[0]._private.grabbed = !0 }(t)) }, u = function (t, n) { n = n || {}; var r = t.cy().hasCompoundNodes(); n.inDragLayer && (t.forEach(s), t.neighborhood().stdFilter((function (e) { return !r || e.isEdge() })).forEach(s)), n.addToList && t.forEach((function (e) { c(e, n) })), function (e, t) { if (e.cy().hasCompoundNodes() && (null != t.inDragLayer || null != t.addToList)) { var n = e.descendants(); t.inDragLayer && (n.forEach(s), n.connectedEdges().forEach(s)), t.addToList && n.forEach((function (e) { c(e, t) })) } }(t, n), f(t, { inDragLayer: n.inDragLayer }), e.updateCachedGrabbedEles() }, d = u, p = function (t) { t && (t.hasId = {}, e.getCachedZSortedEles().forEach((function (e) { !function (e) { e[0]._private.grabbed = !1 }(e), function (e) { e[0]._private.rscratch.inDragLayer = !1 }(e), function (e) { e[0]._private.rscratch.isGrabTarget = !1 }(e) })), e.updateCachedGrabbedEles()) }, f = function (e, t) { if ((null != t.inDragLayer || null != t.addToList) && e.cy().hasCompoundNodes()) { var n = e.ancestors().orphans(); if (!n.same(e)) { var r = n.descendants().spawnSelf().merge(n).unmerge(e).unmerge(e.descendants()), i = r.connectedEdges(); t.inDragLayer && (i.forEach(s), r.forEach(s)), t.addToList && r.forEach((function (e) { c(e, t) })) } } }, h = "undefined" != typeof MutationObserver; h ? (e.removeObserver = new MutationObserver((function (t) { for (var n = 0; n < t.length; n++) { var r = t[n].removedNodes; if (r) for (var i = 0; i < r.length; i++)if (r[i] === e.container) { e.destroy(); break } } })), e.container.parentNode && e.removeObserver.observe(e.container.parentNode, { childList: !0 })) : e.registerBinding(e.container, "DOMNodeRemoved", (function (t) { e.destroy() })); var g = i.debounce((function () { e.cy.resize() }), 100); h && (e.styleObserver = new MutationObserver(g), e.styleObserver.observe(e.container, { attributes: !0 })), e.registerBinding(window, "resize", g); var m = function () { e.invalidateContainerClientCoordsCache() }; !function (e, t) { for (; null != e;)t(e), e = e.parentNode }(e.container, (function (t) { e.registerBinding(t, "transitionend", m), e.registerBinding(t, "animationend", m), e.registerBinding(t, "scroll", m) })), e.registerBinding(e.container, "contextmenu", (function (e) { e.preventDefault() })); var v, b, y, x, w, k, A, E, S, $, C, _, O, T = function (t) { for (var n = e.findContainerClientCoords(), r = n[0], i = n[1], o = n[2], a = n[3], s = t.touches ? t.touches : [t], l = !1, c = 0; c < s.length; c++) { var u = s[c]; if (r <= u.clientX && u.clientX <= r + o && i <= u.clientY && u.clientY <= i + a) { l = !0; break } } if (!l) return !1; for (var d = e.container, p = t.target.parentNode, f = !1; p;) { if (p === d) { f = !0; break } p = p.parentNode } return !!f }; e.registerBinding(e.container, "mousedown", (function (n) { if (T(n)) { n.preventDefault(), e.hoverData.capture = !0, e.hoverData.which = n.which; var r = e.cy, i = [n.clientX, n.clientY], o = e.projectIntoViewport(i[0], i[1]), a = e.selection, s = e.findNearestElements(o[0], o[1], !0, !1), c = s[0], p = e.dragData.possibleDragElements; if (e.hoverData.mdownPos = o, e.hoverData.mdownGPos = i, 3 == n.which) { e.hoverData.cxtStarted = !0; var f = { originalEvent: n, type: "cxttapstart", position: { x: o[0], y: o[1] } }; c ? (c.activate(), c.emit(f), e.hoverData.down = c) : r.emit(f), e.hoverData.downTime = (new Date).getTime(), e.hoverData.cxtDragged = !1 } else if (1 == n.which) { if (c && c.activate(), null != c && e.nodeIsGrabbable(c)) { var h = function (e) { return { originalEvent: n, type: e, position: { x: o[0], y: o[1] } } }; if (l(c), c.selected()) { p = e.dragData.possibleDragElements = []; var g = r.$((function (t) { return t.isNode() && t.selected() && e.nodeIsGrabbable(t) })); u(g, { addToList: p }), c.emit(h("grabon")), g.forEach((function (e) { e.emit(h("grab")) })) } else p = e.dragData.possibleDragElements = [], d(c, { addToList: p }), c.emit(h("grabon")).emit(h("grab")); e.redrawHint("eles", !0), e.redrawHint("drag", !0) } e.hoverData.down = c, e.hoverData.downs = s, e.hoverData.downTime = (new Date).getTime(), t(c, ["mousedown", "tapstart", "vmousedown"], n, { position: { x: o[0], y: o[1] } }), null == c ? (a[4] = 1, e.data.bgActivePosistion = { x: o[0], y: o[1] }, e.redrawHint("select", !0), e.redraw()) : c.isEdge() && (a[4] = 1), e.hoverData.tapholdCancelled = !1, clearTimeout(e.hoverData.tapholdTimeout), e.hoverData.tapholdTimeout = setTimeout((function () { if (!e.hoverData.tapholdCancelled) { var t = e.hoverData.down; t ? t.emit({ originalEvent: n, type: "taphold", position: { x: o[0], y: o[1] } }) : r.emit({ originalEvent: n, type: "taphold", position: { x: o[0], y: o[1] } }) } }), e.tapholdDuration) } a[0] = a[2] = o[0], a[1] = a[3] = o[1] } }), !1), e.registerBinding(window, "mousemove", (function (i) { if (e.hoverData.capture || T(i)) { var s = !1, l = e.cy, c = l.zoom(), d = [i.clientX, i.clientY], f = e.projectIntoViewport(d[0], d[1]), h = e.hoverData.mdownPos, g = e.hoverData.mdownGPos, m = e.selection, v = null; e.hoverData.draggingEles || e.hoverData.dragging || e.hoverData.selecting || (v = e.findNearestElement(f[0], f[1], !0, !1)); var b, y = e.hoverData.last, x = e.hoverData.down, w = [f[0] - m[2], f[1] - m[3]], k = e.dragData.possibleDragElements; if (g) { var A = d[0] - g[0], E = A * A, S = d[1] - g[1], $ = E + S * S; e.hoverData.isOverThresholdDrag = b = $ >= e.desktopTapThreshold2 } var C = n(i); b && (e.hoverData.tapholdCancelled = !0), s = !0, t(v, ["mousemove", "vmousemove", "tapdrag"], i, { position: { x: f[0], y: f[1] } }); var _ = function () { e.data.bgActivePosistion = void 0, e.hoverData.selecting || l.emit("boxstart"), m[4] = 1, e.hoverData.selecting = !0, e.redrawHint("select", !0), e.redraw() }; if (3 === e.hoverData.which) { if (b) { var O = { originalEvent: i, type: "cxtdrag", position: { x: f[0], y: f[1] } }; x ? x.emit(O) : l.emit(O), e.hoverData.cxtDragged = !0, e.hoverData.cxtOver && v === e.hoverData.cxtOver || (e.hoverData.cxtOver && e.hoverData.cxtOver.emit({ originalEvent: i, type: "cxtdragout", position: { x: f[0], y: f[1] } }), e.hoverData.cxtOver = v, v && v.emit({ originalEvent: i, type: "cxtdragover", position: { x: f[0], y: f[1] } })) } } else if (e.hoverData.dragging) { if (s = !0, l.panningEnabled() && l.userPanningEnabled()) { var j; if (e.hoverData.justStartedPan) { var P = e.hoverData.mdownPos; j = { x: (f[0] - P[0]) * c, y: (f[1] - P[1]) * c }, e.hoverData.justStartedPan = !1 } else j = { x: w[0] * c, y: w[1] * c }; l.panBy(j), e.hoverData.dragged = !0 } f = e.projectIntoViewport(i.clientX, i.clientY) } else if (1 != m[4] || null != x && !x.isEdge()) { if (x && x.isEdge() && x.active() && x.unactivate(), x && x.grabbed() || v == y || (y && t(y, ["mouseout", "tapdragout"], i, { position: { x: f[0], y: f[1] } }), v && t(v, ["mouseover", "tapdragover"], i, { position: { x: f[0], y: f[1] } }), e.hoverData.last = v), x) if (b) { if (l.boxSelectionEnabled() && C) x && x.grabbed() && (p(k), x.emit("free")), _(); else if (x && x.grabbed() && e.nodeIsDraggable(x)) { var D = !e.dragData.didDrag; D && e.redrawHint("eles", !0), e.dragData.didDrag = !0; var R = []; e.hoverData.draggingEles || u(l.collection(k), { inDragLayer: !0 }); for (var I = 0; I < k.length; I++) { var N = k[I]; if (e.nodeIsDraggable(N) && N.grabbed()) { var M = N.position(); if (R.push(N), r.number(w[0]) && r.number(w[1]) && (M.x += w[0], M.y += w[1], D)) { var z = e.hoverData.dragDelta; z && r.number(z[0]) && r.number(z[1]) && (M.x += z[0], M.y += z[1]) } } } e.hoverData.draggingEles = !0; var L = l.collection(R); L.dirtyCompoundBoundsCache(), L.emit("position drag"), e.redrawHint("drag", !0), e.redraw() } } else !function () { var t = e.hoverData.dragDelta = e.hoverData.dragDelta || []; 0 === t.length ? (t.push(w[0]), t.push(w[1])) : (t[0] += w[0], t[1] += w[1]) }(); s = !0 } else b && (e.hoverData.dragging || !l.boxSelectionEnabled() || !C && l.panningEnabled() && l.userPanningEnabled() ? !e.hoverData.selecting && l.panningEnabled() && l.userPanningEnabled() && a(x, e.hoverData.downs) && (e.hoverData.dragging = !0, e.hoverData.justStartedPan = !0, m[4] = 0, e.data.bgActivePosistion = o.array2point(h), e.redrawHint("select", !0), e.redraw()) : _(), x && x.isEdge() && x.active() && x.unactivate()); return m[2] = f[0], m[3] = f[1], s ? (i.stopPropagation && i.stopPropagation(), i.preventDefault && i.preventDefault(), !1) : void 0 } }), !1), e.registerBinding(window, "mouseup", (function (r) { if (e.hoverData.capture) { e.hoverData.capture = !1; var i = e.cy, o = e.projectIntoViewport(r.clientX, r.clientY), a = e.selection, s = e.findNearestElement(o[0], o[1], !0, !1), l = e.dragData.possibleDragElements, c = e.hoverData.down, u = n(r); if (e.data.bgActivePosistion && (e.redrawHint("select", !0), e.redraw()), e.hoverData.tapholdCancelled = !0, e.data.bgActivePosistion = void 0, c && c.unactivate(), 3 === e.hoverData.which) { var d = { originalEvent: r, type: "cxttapend", position: { x: o[0], y: o[1] } }; if (c ? c.emit(d) : i.emit(d), !e.hoverData.cxtDragged) { var f = { originalEvent: r, type: "cxttap", position: { x: o[0], y: o[1] } }; c ? c.emit(f) : i.emit(f) } e.hoverData.cxtDragged = !1, e.hoverData.which = null } else if (1 === e.hoverData.which) { if (null != c || e.dragData.didDrag || e.hoverData.selecting || e.hoverData.dragged || n(r) || (i.$((function (e) { return e.selected() })).unselect(), l.length > 0 && e.redrawHint("eles", !0), e.dragData.possibleDragElements = l = []), t(s, ["mouseup", "tapend", "vmouseup"], r, { position: { x: o[0], y: o[1] } }), e.dragData.didDrag || e.hoverData.dragged || e.hoverData.selecting || e.hoverData.isOverThresholdDrag || t(c, ["click", "tap", "vclick"], r, { position: { x: o[0], y: o[1] } }), s != c || e.dragData.didDrag || e.hoverData.selecting || null != s && s._private.selectable && (e.hoverData.dragging || ("additive" === i.selectionType() || u ? s.selected() ? s.unselect() : s.select() : u || (i.$(":selected").unmerge(s).unselect(), s.select())), e.redrawHint("eles", !0)), e.hoverData.selecting) { var h = i.collection(e.getAllInBox(a[0], a[1], a[2], a[3])); e.redrawHint("select", !0), h.length > 0 && e.redrawHint("eles", !0), i.emit("boxend"); var g = function (e) { return e.selectable() && !e.selected() }; "additive" === i.selectionType() || u || i.$(":selected").unmerge(h).unselect(), h.emit("box").stdFilter(g).select().emit("boxselect"), e.redraw() } if (e.hoverData.dragging && (e.hoverData.dragging = !1, e.redrawHint("select", !0), e.redrawHint("eles", !0), e.redraw()), !a[4]) { e.redrawHint("drag", !0), e.redrawHint("eles", !0); var m = c && c.grabbed(); p(l), m && c.emit("free") } } a[4] = 0, e.hoverData.down = null, e.hoverData.cxtStarted = !1, e.hoverData.draggingEles = !1, e.hoverData.selecting = !1, e.hoverData.isOverThresholdDrag = !1, e.dragData.didDrag = !1, e.hoverData.dragged = !1, e.hoverData.dragDelta = [], e.hoverData.mdownPos = null, e.hoverData.mdownGPos = null } }), !1), e.registerBinding(e.container, "wheel", (function (t) { if (!e.scrollingPage) { var n, r = e.cy, i = e.projectIntoViewport(t.clientX, t.clientY), o = [i[0] * r.zoom() + r.pan().x, i[1] * r.zoom() + r.pan().y]; e.hoverData.draggingEles || e.hoverData.dragging || e.hoverData.cxtStarted || 0 !== e.selection[4] ? t.preventDefault() : r.panningEnabled() && r.userPanningEnabled() && r.zoomingEnabled() && r.userZoomingEnabled() && (t.preventDefault(), e.data.wheelZooming = !0, clearTimeout(e.data.wheelTimeout), e.data.wheelTimeout = setTimeout((function () { e.data.wheelZooming = !1, e.redrawHint("eles", !0), e.redraw() }), 150), n = null != t.deltaY ? t.deltaY / -250 : null != t.wheelDeltaY ? t.wheelDeltaY / 1e3 : t.wheelDelta / 1e3, n *= e.wheelSensitivity, 1 === t.deltaMode && (n *= 33), r.zoom({ level: r.zoom() * Math.pow(10, n), renderedPosition: { x: o[0], y: o[1] } })) } }), !0), e.registerBinding(window, "scroll", (function (t) { e.scrollingPage = !0, clearTimeout(e.scrollingPageTimeout), e.scrollingPageTimeout = setTimeout((function () { e.scrollingPage = !1 }), 250) }), !0), e.registerBinding(e.container, "mouseout", (function (t) { var n = e.projectIntoViewport(t.clientX, t.clientY); e.cy.emit({ originalEvent: t, type: "mouseout", position: { x: n[0], y: n[1] } }) }), !1), e.registerBinding(e.container, "mouseover", (function (t) { var n = e.projectIntoViewport(t.clientX, t.clientY); e.cy.emit({ originalEvent: t, type: "mouseover", position: { x: n[0], y: n[1] } }) }), !1); var j, P, D, R, I = function (e, t, n, r) { return Math.sqrt((n - e) * (n - e) + (r - t) * (r - t)) }, N = function (e, t, n, r) { return (n - e) * (n - e) + (r - t) * (r - t) }; if (e.registerBinding(e.container, "touchstart", j = function (n) { if (T(n)) { e.touchData.capture = !0, e.data.bgActivePosistion = void 0; var r = e.cy, i = e.touchData.now, o = e.touchData.earlier; if (n.touches[0]) { var a = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY); i[0] = a[0], i[1] = a[1] } if (n.touches[1] && (a = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), i[2] = a[0], i[3] = a[1]), n.touches[2] && (a = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), i[4] = a[0], i[5] = a[1]), n.touches[1]) { p(e.dragData.touchDragEles); var s = e.findContainerClientCoords(); S = s[0], $ = s[1], C = s[2], _ = s[3], v = n.touches[0].clientX - S, b = n.touches[0].clientY - $, y = n.touches[1].clientX - S, x = n.touches[1].clientY - $, O = 0 <= v && v <= C && 0 <= y && y <= C && 0 <= b && b <= _ && 0 <= x && x <= _; var c = r.pan(), f = r.zoom(); if (w = I(v, b, y, x), k = N(v, b, y, x), E = [((A = [(v + y) / 2, (b + x) / 2])[0] - c.x) / f, (A[1] - c.y) / f], k < 4e4 && !n.touches[2]) { var h = e.findNearestElement(i[0], i[1], !0, !0), g = e.findNearestElement(i[2], i[3], !0, !0); return h && h.isNode() ? (h.activate().emit({ originalEvent: n, type: "cxttapstart", position: { x: i[0], y: i[1] } }), e.touchData.start = h) : g && g.isNode() ? (g.activate().emit({ originalEvent: n, type: "cxttapstart", position: { x: i[0], y: i[1] } }), e.touchData.start = g) : r.emit({ originalEvent: n, type: "cxttapstart", position: { x: i[0], y: i[1] } }), e.touchData.start && (e.touchData.start._private.grabbed = !1), e.touchData.cxt = !0, e.touchData.cxtDragged = !1, e.data.bgActivePosistion = void 0, void e.redraw() } } if (n.touches[2]); else if (n.touches[1]); else if (n.touches[0]) { var m = e.findNearestElements(i[0], i[1], !0, !0), j = m[0]; if (null != j && (j.activate(), e.touchData.start = j, e.touchData.starts = m, e.nodeIsGrabbable(j))) { var P = e.dragData.touchDragEles = [], D = null; e.redrawHint("eles", !0), e.redrawHint("drag", !0), j.selected() ? (D = r.$((function (t) { return t.selected() && e.nodeIsGrabbable(t) })), u(D, { addToList: P })) : d(j, { addToList: P }), l(j); var R = function (e) { return { originalEvent: n, type: e, position: { x: i[0], y: i[1] } } }; j.emit(R("grabon")), D ? D.forEach((function (e) { e.emit(R("grab")) })) : j.emit(R("grab")) } t(j, ["touchstart", "tapstart", "vmousedown"], n, { position: { x: i[0], y: i[1] } }), null == j && (e.data.bgActivePosistion = { x: a[0], y: a[1] }, e.redrawHint("select", !0), e.redraw()), e.touchData.singleTouchMoved = !1, e.touchData.singleTouchStartTime = +new Date, clearTimeout(e.touchData.tapholdTimeout), e.touchData.tapholdTimeout = setTimeout((function () { !1 !== e.touchData.singleTouchMoved || e.pinching || e.touchData.selecting || (t(e.touchData.start, ["taphold"], n, { position: { x: i[0], y: i[1] } }), e.touchData.start || r.$(":selected").unselect()) }), e.tapholdDuration) } if (n.touches.length >= 1) { for (var M = e.touchData.startPosition = [], z = 0; z < i.length; z++)M[z] = o[z] = i[z]; var L = n.touches[0]; e.touchData.startGPosition = [L.clientX, L.clientY] } } }, !1), e.registerBinding(window, "touchmove", P = function (n) { var i = e.touchData.capture; if (i || T(n)) { var s = e.selection, l = e.cy, c = e.touchData.now, d = e.touchData.earlier, f = l.zoom(); if (n.touches[0]) { var h = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY); c[0] = h[0], c[1] = h[1] } n.touches[1] && (h = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), c[2] = h[0], c[3] = h[1]), n.touches[2] && (h = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), c[4] = h[0], c[5] = h[1]); var g, m = e.touchData.startGPosition; if (i && n.touches[0] && m) { for (var A = [], C = 0; C < c.length; C++)A[C] = c[C] - d[C]; var _ = n.touches[0].clientX - m[0], j = _ * _, P = n.touches[0].clientY - m[1]; g = j + P * P >= e.touchTapThreshold2 } if (i && e.touchData.cxt) { n.preventDefault(); var D = n.touches[0].clientX - S, R = n.touches[0].clientY - $, M = n.touches[1].clientX - S, z = n.touches[1].clientY - $, L = N(D, R, M, z); if (L / k >= 2.25 || L >= 22500) { e.touchData.cxt = !1, e.data.bgActivePosistion = void 0, e.redrawHint("select", !0); var B = { originalEvent: n, type: "cxttapend", position: { x: c[0], y: c[1] } }; e.touchData.start ? (e.touchData.start.unactivate().emit(B), e.touchData.start = null) : l.emit(B) } } if (i && e.touchData.cxt) { B = { originalEvent: n, type: "cxtdrag", position: { x: c[0], y: c[1] } }, e.data.bgActivePosistion = void 0, e.redrawHint("select", !0), e.touchData.start ? e.touchData.start.emit(B) : l.emit(B), e.touchData.start && (e.touchData.start._private.grabbed = !1), e.touchData.cxtDragged = !0; var F = e.findNearestElement(c[0], c[1], !0, !0); e.touchData.cxtOver && F === e.touchData.cxtOver || (e.touchData.cxtOver && e.touchData.cxtOver.emit({ originalEvent: n, type: "cxtdragout", position: { x: c[0], y: c[1] } }), e.touchData.cxtOver = F, F && F.emit({ originalEvent: n, type: "cxtdragover", position: { x: c[0], y: c[1] } })) } else if (i && n.touches[2] && l.boxSelectionEnabled()) n.preventDefault(), e.data.bgActivePosistion = void 0, this.lastThreeTouch = +new Date, e.touchData.selecting || l.emit("boxstart"), e.touchData.selecting = !0, e.redrawHint("select", !0), s && 0 !== s.length && void 0 !== s[0] ? (s[2] = (c[0] + c[2] + c[4]) / 3, s[3] = (c[1] + c[3] + c[5]) / 3) : (s[0] = (c[0] + c[2] + c[4]) / 3, s[1] = (c[1] + c[3] + c[5]) / 3, s[2] = (c[0] + c[2] + c[4]) / 3 + 1, s[3] = (c[1] + c[3] + c[5]) / 3 + 1), s[4] = 1, e.touchData.selecting = !0, e.redraw(); else if (i && n.touches[1] && l.zoomingEnabled() && l.panningEnabled() && l.userZoomingEnabled() && l.userPanningEnabled()) { if (n.preventDefault(), e.data.bgActivePosistion = void 0, e.redrawHint("select", !0), ee = e.dragData.touchDragEles) { e.redrawHint("drag", !0); for (var q = 0; q < ee.length; q++) { var V = ee[q]._private; V.grabbed = !1, V.rscratch.inDragLayer = !1 } } D = n.touches[0].clientX - S, R = n.touches[0].clientY - $, M = n.touches[1].clientX - S, z = n.touches[1].clientY - $; var U = I(D, R, M, z), H = U / w; if (O) { var G = (D - v + (M - y)) / 2, W = (R - b + (z - x)) / 2, Y = l.zoom(), X = Y * H, Z = l.pan(), Q = E[0] * Y + Z.x, J = E[1] * Y + Z.y, K = { x: -X / Y * (Q - Z.x - G) + Q, y: -X / Y * (J - Z.y - W) + J }; if (e.touchData.start && e.touchData.start.active()) { var ee = e.dragData.touchDragEles; p(ee), e.redrawHint("drag", !0), e.redrawHint("eles", !0), e.touchData.start.unactivate().emit("free") } l.viewport({ zoom: X, pan: K, cancelOnFailedZoom: !0 }), w = U, v = D, b = R, y = M, x = z, e.pinching = !0 } n.touches[0] && (h = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY), c[0] = h[0], c[1] = h[1]), n.touches[1] && (h = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), c[2] = h[0], c[3] = h[1]), n.touches[2] && (h = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), c[4] = h[0], c[5] = h[1]) } else if (n.touches[0]) { var te = e.touchData.start, ne = e.touchData.last; if (e.hoverData.draggingEles || e.swipePanning || (F = e.findNearestElement(c[0], c[1], !0, !0)), i && null != te && n.preventDefault(), i && null != te && e.nodeIsDraggable(te)) if (g) { ee = e.dragData.touchDragEles; var re = !e.dragData.didDrag; re && u(l.collection(ee), { inDragLayer: !0 }); for (var ie = 0; ie < ee.length; ie++) { var oe = ee[ie]; if (e.nodeIsDraggable(oe) && oe.grabbed()) { e.dragData.didDrag = !0; var ae = oe.position(); r.number(A[0]) && r.number(A[1]) && (ae.x += A[0], ae.y += A[1]), re && (e.redrawHint("eles", !0), (le = e.touchData.dragDelta) && r.number(le[0]) && r.number(le[1]) && (ae.x += le[0], ae.y += le[1])) } } var se = l.collection(ee); se.dirtyCompoundBoundsCache(), se.emit("position drag"), e.hoverData.draggingEles = !0, e.redrawHint("drag", !0), e.touchData.startPosition[0] == d[0] && e.touchData.startPosition[1] == d[1] && e.redrawHint("eles", !0), e.redraw() } else { var le; 0 === (le = e.touchData.dragDelta = e.touchData.dragDelta || []).length ? (le.push(A[0]), le.push(A[1])) : (le[0] += A[0], le[1] += A[1]) } if (t(te || F, ["touchmove", "tapdrag", "vmousemove"], n, { position: { x: c[0], y: c[1] } }), te && te.grabbed() || F == ne || (ne && ne.emit({ originalEvent: n, type: "tapdragout", position: { x: c[0], y: c[1] } }), F && F.emit({ originalEvent: n, type: "tapdragover", position: { x: c[0], y: c[1] } })), e.touchData.last = F, i) for (q = 0; q < c.length; q++)c[q] && e.touchData.startPosition[q] && g && (e.touchData.singleTouchMoved = !0); i && (null == te || te.isEdge()) && l.panningEnabled() && l.userPanningEnabled() && (a(te, e.touchData.starts) && (n.preventDefault(), e.swipePanning ? l.panBy({ x: A[0] * f, y: A[1] * f }) : g && (e.swipePanning = !0, l.panBy({ x: _ * f, y: P * f }), te && (te.unactivate(), e.data.bgActivePosistion || (e.data.bgActivePosistion = o.array2point(e.touchData.startPosition)), e.redrawHint("select", !0), e.touchData.start = null))), h = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY), c[0] = h[0], c[1] = h[1]) } for (C = 0; C < c.length; C++)d[C] = c[C] } }, !1), e.registerBinding(window, "touchcancel", D = function (t) { var n = e.touchData.start; e.touchData.capture = !1, n && n.unactivate() }), e.registerBinding(window, "touchend", R = function (n) { var r = e.touchData.start; if (e.touchData.capture) { e.touchData.capture = !1, n.preventDefault(); var i = e.selection; e.swipePanning = !1, e.hoverData.draggingEles = !1; var o, a = e.cy, s = a.zoom(), l = e.touchData.now, c = e.touchData.earlier; if (n.touches[0]) { var u = e.projectIntoViewport(n.touches[0].clientX, n.touches[0].clientY); l[0] = u[0], l[1] = u[1] } if (n.touches[1] && (u = e.projectIntoViewport(n.touches[1].clientX, n.touches[1].clientY), l[2] = u[0], l[3] = u[1]), n.touches[2] && (u = e.projectIntoViewport(n.touches[2].clientX, n.touches[2].clientY), l[4] = u[0], l[5] = u[1]), r && r.unactivate(), e.touchData.cxt) { if (o = { originalEvent: n, type: "cxttapend", position: { x: l[0], y: l[1] } }, r ? r.emit(o) : a.emit(o), !e.touchData.cxtDragged) { var d = { originalEvent: n, type: "cxttap", position: { x: l[0], y: l[1] } }; r ? r.emit(d) : a.emit(d) } return e.touchData.start && (e.touchData.start._private.grabbed = !1), e.touchData.cxt = !1, e.touchData.start = null, void e.redraw() } if (!n.touches[2] && a.boxSelectionEnabled() && e.touchData.selecting) { e.touchData.selecting = !1; var f = a.collection(e.getAllInBox(i[0], i[1], i[2], i[3])); i[0] = void 0, i[1] = void 0, i[2] = void 0, i[3] = void 0, i[4] = 0, e.redrawHint("select", !0), a.emit("boxend"), f.emit("box").stdFilter((function (e) { return e.selectable() && !e.selected() })).select().emit("boxselect"), f.nonempty() && e.redrawHint("eles", !0), e.redraw() } if (null != r && r.unactivate(), n.touches[2]) e.data.bgActivePosistion = void 0, e.redrawHint("select", !0); else if (n.touches[1]); else if (n.touches[0]); else if (!n.touches[0]) { e.data.bgActivePosistion = void 0, e.redrawHint("select", !0); var h = e.dragData.touchDragEles; if (null != r) { var g = r._private.grabbed; p(h), e.redrawHint("drag", !0), e.redrawHint("eles", !0), g && r.emit("free"), t(r, ["touchend", "tapend", "vmouseup", "tapdragout"], n, { position: { x: l[0], y: l[1] } }), r.unactivate(), e.touchData.start = null } else { var m = e.findNearestElement(l[0], l[1], !0, !0); t(m, ["touchend", "tapend", "vmouseup", "tapdragout"], n, { position: { x: l[0], y: l[1] } }) } var v = e.touchData.startPosition[0] - l[0], b = v * v, y = e.touchData.startPosition[1] - l[1], x = (b + y * y) * s * s; null != r && !e.dragData.didDrag && r._private.selectable && x < e.touchTapThreshold2 && !e.pinching && ("single" === a.selectionType() ? (a.$(":selected").unmerge(r).unselect(), r.select()) : r.selected() ? r.unselect() : r.select(), e.redrawHint("eles", !0)), e.touchData.singleTouchMoved || t(r, ["tap", "vclick"], n, { position: { x: l[0], y: l[1] } }), e.touchData.singleTouchMoved = !0 } for (var w = 0; w < l.length; w++)c[w] = l[w]; e.dragData.didDrag = !1, 0 === n.touches.length && (e.touchData.dragDelta = [], e.touchData.startPosition = null, e.touchData.startGPosition = null), n.touches.length < 2 && (e.pinching = !1, e.redrawHint("eles", !0), e.redraw()) } }, !1), "undefined" == typeof TouchEvent) { var M = [], z = function (e) { return { clientX: e.clientX, clientY: e.clientY, force: 1, identifier: e.pointerId, pageX: e.pageX, pageY: e.pageY, radiusX: e.width / 2, radiusY: e.height / 2, screenX: e.screenX, screenY: e.screenY, target: e.target } }, L = function (e) { M.push(function (e) { return { event: e, touch: z(e) } }(e)) }, B = function (e) { for (var t = 0; t < M.length; t++)if (M[t].event.pointerId === e.pointerId) return void M.splice(t, 1) }, F = function (e) { e.touches = M.map((function (e) { return e.touch })) }, q = function (e) { return "mouse" === e.pointerType || 4 === e.pointerType }; e.registerBinding(e.container, "pointerdown", (function (e) { q(e) || (e.preventDefault(), L(e), F(e), j(e)) })), e.registerBinding(e.container, "pointerup", (function (e) { q(e) || (B(e), F(e), R(e)) })), e.registerBinding(e.container, "pointercancel", (function (e) { q(e) || (B(e), F(e), D()) })), e.registerBinding(e.container, "pointermove", (function (e) { q(e) || (e.preventDefault(), function (e) { var t = M.filter((function (t) { return t.event.pointerId === e.pointerId }))[0]; t.event = e, t.touch = z(e) }(e), F(e), P(e)) })) } }, e.exports = a }, function (e, t, n) { "use strict"; var r = n(2), i = { generatePolygon: function (e, t) { return this.nodeShapes[e] = { renderer: this, name: e, points: t, draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl("polygon", e, t, n, r, i, this.points) }, intersectLine: function (e, t, n, i, o, a, s) { return r.polygonIntersectLine(o, a, this.points, e, t, n / 2, i / 2, s) }, checkPoint: function (e, t, n, i, o, a, s) { return r.pointInsidePolygon(e, t, this.points, a, s, i, o, [0, -1], n) } } }, generateEllipse: function () { return this.nodeShapes.ellipse = { renderer: this, name: "ellipse", draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { return r.intersectLineEllipse(o, a, e, t, n / 2 + s, i / 2 + s) }, checkPoint: function (e, t, n, i, o, a, s) { return r.checkInEllipse(e, t, i, o, a, s, n) } } }, generateRoundRectangle: function () { return this.nodeShapes.roundrectangle = { renderer: this, name: "roundrectangle", points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { return r.roundRectangleIntersectLine(o, a, e, t, n, i, s) }, checkPoint: function (e, t, n, i, o, a, s) { var l = r.getRoundRectangleRadius(i, o), c = 2 * l; return !!(r.pointInsidePolygon(e, t, this.points, a, s, i, o - c, [0, -1], n) || r.pointInsidePolygon(e, t, this.points, a, s, i - c, o, [0, -1], n) || r.checkInEllipse(e, t, c, c, a - i / 2 + l, s - o / 2 + l, n) || r.checkInEllipse(e, t, c, c, a + i / 2 - l, s - o / 2 + l, n) || r.checkInEllipse(e, t, c, c, a + i / 2 - l, s + o / 2 - l, n) || r.checkInEllipse(e, t, c, c, a - i / 2 + l, s + o / 2 - l, n)) } } }, generateCutRectangle: function () { return this.nodeShapes.cutrectangle = { renderer: this, name: "cutrectangle", cornerLength: r.getCutRectangleCornerLength(), points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, generateCutTrianglePts: function (e, t, n, r) { var i = this.cornerLength, o = t / 2, a = e / 2, s = n - a, l = n + a, c = r - o, u = r + o; return { topLeft: [s, c + i, s + i, c, s + i, c + i], topRight: [l - i, c, l, c + i, l - i, c + i], bottomRight: [l, u - i, l - i, u, l - i, u - i], bottomLeft: [s + i, u, s, u - i, s + i, u - i] } }, intersectLine: function (e, t, n, i, o, a, s) { var l = this.generateCutTrianglePts(n + 2 * s, i + 2 * s, e, t), c = [].concat.apply([], [l.topLeft.splice(0, 4), l.topRight.splice(0, 4), l.bottomRight.splice(0, 4), l.bottomLeft.splice(0, 4)]); return r.polygonIntersectLine(o, a, c, e, t) }, checkPoint: function (e, t, n, i, o, a, s) { if (r.pointInsidePolygon(e, t, this.points, a, s, i, o - 2 * this.cornerLength, [0, -1], n)) return !0; if (r.pointInsidePolygon(e, t, this.points, a, s, i - 2 * this.cornerLength, o, [0, -1], n)) return !0; var l = this.generateCutTrianglePts(i, o, a, s); return r.pointInsidePolygonPoints(e, t, l.topLeft) || r.pointInsidePolygonPoints(e, t, l.topRight) || r.pointInsidePolygonPoints(e, t, l.bottomRight) || r.pointInsidePolygonPoints(e, t, l.bottomLeft) } } }, generateBarrel: function () { return this.nodeShapes.barrel = { renderer: this, name: "barrel", points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { var l = this.generateBarrelBezierPts(n + 2 * s, i + 2 * s, e, t), c = function (e) { var t = r.qbezierPtAt({ x: e[0], y: e[1] }, { x: e[2], y: e[3] }, { x: e[4], y: e[5] }, .15), n = r.qbezierPtAt({ x: e[0], y: e[1] }, { x: e[2], y: e[3] }, { x: e[4], y: e[5] }, .5), i = r.qbezierPtAt({ x: e[0], y: e[1] }, { x: e[2], y: e[3] }, { x: e[4], y: e[5] }, .85); return [e[0], e[1], t.x, t.y, n.x, n.y, i.x, i.y, e[4], e[5]] }, u = [].concat(c(l.topLeft), c(l.topRight), c(l.bottomRight), c(l.bottomLeft)); return r.polygonIntersectLine(o, a, u, e, t) }, generateBarrelBezierPts: function (e, t, n, i) { var o = t / 2, a = e / 2, s = n - a, l = n + a, c = i - o, u = i + o, d = r.getBarrelCurveConstants(e, t), p = d.heightOffset, f = d.widthOffset, h = d.ctrlPtOffsetPct * e, g = { topLeft: [s, c + p, s + h, c, s + f, c], topRight: [l - f, c, l - h, c, l, c + p], bottomRight: [l, u - p, l - h, u, l - f, u], bottomLeft: [s + f, u, s + h, u, s, u - p] }; return g.topLeft.isTop = !0, g.topRight.isTop = !0, g.bottomLeft.isBottom = !0, g.bottomRight.isBottom = !0, g }, checkPoint: function (e, t, n, i, o, a, s) { var l = r.getBarrelCurveConstants(i, o), c = l.heightOffset, u = l.widthOffset; if (r.pointInsidePolygon(e, t, this.points, a, s, i, o - 2 * c, [0, -1], n)) return !0; if (r.pointInsidePolygon(e, t, this.points, a, s, i - 2 * u, o, [0, -1], n)) return !0; for (var d = this.generateBarrelBezierPts(i, o, a, s), p = function (e, t, n) { var i = n[4], o = n[2], a = n[0], s = n[5], l = n[1], c = Math.min(i, a), u = Math.max(i, a), d = Math.min(s, l), p = Math.max(s, l); if (c <= e && e <= u && d <= t && t <= p) { var f = r.bezierPtsToQuadCoeff(i, o, a), h = r.solveQuadratic(f[0], f[1], f[2], e).filter((function (e) { return 0 <= e && e <= 1 })); if (h.length > 0) return h[0] } return null }, f = Object.keys(d), h = 0; h < f.length; h++) { var g = d[f[h]], m = p(e, t, g); if (null != m) { var v = g[5], b = g[3], y = g[1], x = r.qbezierAt(v, b, y, m); if (g.isTop && x <= t) return !0; if (g.isBottom && t <= x) return !0 } } return !1 } } }, generateBottomRoundrectangle: function () { return this.nodeShapes.bottomroundrectangle = { renderer: this, name: "bottomroundrectangle", points: r.generateUnitNgonPointsFitToSquare(4, 0), draw: function (e, t, n, r, i) { this.renderer.nodeShapeImpl(this.name, e, t, n, r, i) }, intersectLine: function (e, t, n, i, o, a, s) { var l = e - (n / 2 + s), c = t - (i / 2 + s), u = c, d = e + (n / 2 + s), p = r.finiteLinesIntersect(o, a, e, t, l, c, d, u, !1); return p.length > 0 ? p : r.roundRectangleIntersectLine(o, a, e, t, n, i, s) }, checkPoint: function (e, t, n, i, o, a, s) { var l = r.getRoundRectangleRadius(i, o), c = 2 * l; if (r.pointInsidePolygon(e, t, this.points, a, s, i, o - c, [0, -1], n)) return !0; if (r.pointInsidePolygon(e, t, this.points, a, s, i - c, o, [0, -1], n)) return !0; var u = i / 2 + 2 * n, d = o / 2 + 2 * n, p = [a - u, s - d, a - u, s, a + u, s, a + u, s - d]; return !!r.pointInsidePolygonPoints(e, t, p) || !!r.checkInEllipse(e, t, c, c, a + i / 2 - l, s + o / 2 - l, n) || !!r.checkInEllipse(e, t, c, c, a - i / 2 + l, s + o / 2 - l, n) } } }, registerNodeShapes: function () { var e = this.nodeShapes = {}, t = this; this.generateEllipse(), this.generatePolygon("triangle", r.generateUnitNgonPointsFitToSquare(3, 0)), this.generatePolygon("rectangle", r.generateUnitNgonPointsFitToSquare(4, 0)), e.square = e.rectangle, this.generateRoundRectangle(), this.generateCutRectangle(), this.generateBarrel(), this.generateBottomRoundrectangle(), this.generatePolygon("diamond", [0, 1, 1, 0, 0, -1, -1, 0]), this.generatePolygon("pentagon", r.generateUnitNgonPointsFitToSquare(5, 0)), this.generatePolygon("hexagon", r.generateUnitNgonPointsFitToSquare(6, 0)), this.generatePolygon("heptagon", r.generateUnitNgonPointsFitToSquare(7, 0)), this.generatePolygon("octagon", r.generateUnitNgonPointsFitToSquare(8, 0)); var n = new Array(20), i = r.generateUnitNgonPoints(5, 0), o = r.generateUnitNgonPoints(5, Math.PI / 5), a = .5 * (3 - Math.sqrt(5)); a *= 1.57; for (var s = 0; s < o.length / 2; s++)o[2 * s] *= a, o[2 * s + 1] *= a; for (s = 0; s < 5; s++)n[4 * s] = i[2 * s], n[4 * s + 1] = i[2 * s + 1], n[4 * s + 2] = o[2 * s], n[4 * s + 3] = o[2 * s + 1]; n = r.fitPolygonToSquare(n), this.generatePolygon("star", n), this.generatePolygon("vee", [-1, -1, 0, -.333, 1, -1, 0, 1]), this.generatePolygon("rhomboid", [-1, -1, .333, -1, 1, 1, -.333, 1]), this.generatePolygon("concavehexagon", [-1, -.95, -.75, 0, -1, .95, 1, .95, .75, 0, 1, -.95]), this.generatePolygon("tag", [-1, -1, .25, -1, 1, 0, .25, 1, -1, 1]), e.makePolygon = function (e) { var n, r = "polygon-" + e.join("$"); return (n = this[r]) ? n : t.generatePolygon(r, e) } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = { timeToRender: function () { return this.redrawTotalTime / this.redrawCount }, redraw: function (e) { e = e || r.staticEmptyObject(); var t = this; void 0 === t.averageRedrawTime && (t.averageRedrawTime = 0), void 0 === t.lastRedrawTime && (t.lastRedrawTime = 0), void 0 === t.lastDrawTime && (t.lastDrawTime = 0), t.requestedFrame = !0, t.renderOptions = e }, beforeRender: function (e, t) { if (!this.destroyed) { t = t || 0; var n = this.beforeRenderCallbacks; n.push({ fn: e, priority: t }), n.sort((function (e, t) { return t.priority - e.priority })) } } }, o = function (e, t, n) { for (var r = e.beforeRenderCallbacks, i = 0; i < r.length; i++)r[i].fn(t, n) }; i.startRenderLoop = function () { var e = this; e.renderLoopStarted || (e.renderLoopStarted = !0, r.requestAnimationFrame((function t(n) { if (!e.destroyed) { if (e.requestedFrame && !e.skipFrame) { o(e, !0, n); var i = r.performanceNow(); e.render(e.renderOptions); var a = e.lastDrawTime = r.performanceNow(); void 0 === e.averageRedrawTime && (e.averageRedrawTime = a - i), void 0 === e.redrawCount && (e.redrawCount = 0), e.redrawCount++, void 0 === e.redrawTotalTime && (e.redrawTotalTime = 0); var s = a - i; e.redrawTotalTime += s, e.lastRedrawTime = s, e.averageRedrawTime = e.averageRedrawTime / 2 + s / 2, e.requestedFrame = !1 } else o(e, !1, n); e.skipFrame = !1, r.requestAnimationFrame(t) } }))) }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(1), i = n(0), o = n(124), a = n(125), s = c, l = c.prototype; function c(e) { var t = this; t.data = { canvases: new Array(l.CANVAS_LAYERS), contexts: new Array(l.CANVAS_LAYERS), canvasNeedsRedraw: new Array(l.CANVAS_LAYERS), bufferCanvases: new Array(l.BUFFER_COUNT), bufferContexts: new Array(l.CANVAS_LAYERS) }; var n = "-webkit-tap-highlight-color: rgba(0,0,0,0);"; t.data.canvasContainer = document.createElement("div"); var r = t.data.canvasContainer.style; t.data.canvasContainer.setAttribute("style", n), r.position = "relative", r.zIndex = "0", r.overflow = "hidden"; var s = e.cy.container(); s.appendChild(t.data.canvasContainer), (s.getAttribute("style") || "").indexOf(n) < 0 && s.setAttribute("style", (s.getAttribute("style") || "") + n); for (var c = 0; c < l.CANVAS_LAYERS; c++) { var u = t.data.canvases[c] = document.createElement("canvas"); t.data.contexts[c] = u.getContext("2d"), u.setAttribute("style", "-webkit-user-select: none; -moz-user-select: -moz-none; user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); outline-style: none;" + (i.ms() ? " -ms-touch-action: none; touch-action: none; " : "")), u.style.position = "absolute", u.setAttribute("data-id", "layer" + c), u.style.zIndex = String(l.CANVAS_LAYERS - c), t.data.canvasContainer.appendChild(u), t.data.canvasNeedsRedraw[c] = !1 } for (t.data.topCanvas = t.data.canvases[0], t.data.canvases[l.NODE].setAttribute("data-id", "layer" + l.NODE + "-node"), t.data.canvases[l.SELECT_BOX].setAttribute("data-id", "layer" + l.SELECT_BOX + "-selectbox"), t.data.canvases[l.DRAG].setAttribute("data-id", "layer" + l.DRAG + "-drag"), c = 0; c < l.BUFFER_COUNT; c++)t.data.bufferCanvases[c] = document.createElement("canvas"), t.data.bufferContexts[c] = t.data.bufferCanvases[c].getContext("2d"), t.data.bufferCanvases[c].style.position = "absolute", t.data.bufferCanvases[c].setAttribute("data-id", "buffer" + c), t.data.bufferCanvases[c].style.zIndex = String(-c - 1), t.data.bufferCanvases[c].style.visibility = "hidden"; t.pathsEnabled = !0, t.data.eleTxrCache = new o(t), t.data.lyrTxrCache = new a(t, t.data.eleTxrCache), t.onUpdateEleCalcs((function (e, n) { for (var r = 0; r < n.length; r++) { var i = n[r], o = i._private.rstyle, a = o.dirtyEvents; if (i.isNode() && a && 1 === a.length && a.position); else if (t.data.eleTxrCache.invalidateElement(i), i.isParent() && a.style) { var s = o.prevParentOpacity, l = i.pstyle("opacity").pfValue; if (o.prevParentOpacity = l, s !== l) for (var c = i.descendants(), u = 0; u < c.length; u++)t.data.eleTxrCache.invalidateElement(c[u]) } } n.length > 0 && t.data.lyrTxrCache.invalidateElements(n) })) } l.CANVAS_LAYERS = 3, l.SELECT_BOX = 0, l.DRAG = 1, l.NODE = 2, l.BUFFER_COUNT = 3, l.TEXTURE_BUFFER = 0, l.MOTIONBLUR_BUFFER_NODE = 1, l.MOTIONBLUR_BUFFER_DRAG = 2, l.redrawHint = function (e, t) { var n = this; switch (e) { case "eles": n.data.canvasNeedsRedraw[l.NODE] = t; break; case "drag": n.data.canvasNeedsRedraw[l.DRAG] = t; break; case "select": n.data.canvasNeedsRedraw[l.SELECT_BOX] = t } }; var u = "undefined" != typeof Path2D; l.path2dEnabled = function (e) { if (void 0 === e) return this.pathsEnabled; this.pathsEnabled = !!e }, l.usePaths = function () { return u && this.pathsEnabled }, [n(126), n(127), n(128), n(129), n(130), n(131), n(132), n(133), n(134), n(135)].forEach((function (e) { r.extend(l, e) })), e.exports = s }, function (e, t, n) { "use strict"; var r = n(2), i = n(1), o = n(9), a = n(19), s = { dequeue: "dequeue", downscale: "downscale", highQuality: "highQuality" }, l = function (e) { this.renderer = e, this.onDequeues = [], this.setupDequeueing() }, c = l.prototype; c.reasons = s, c.getTextureQueue = function (e) { return this.eleImgCaches = this.eleImgCaches || {}, this.eleImgCaches[e] = this.eleImgCaches[e] || [] }, c.getRetiredTextureQueue = function (e) { var t = this.eleImgCaches.retired = this.eleImgCaches.retired || {}; return t[e] = t[e] || [] }, c.getElementQueue = function () { return this.eleCacheQueue = this.eleCacheQueue || new o((function (e, t) { return t.reqs - e.reqs })) }, c.getElementIdToQueue = function () { return this.eleIdToCacheQueue = this.eleIdToCacheQueue || {} }, c.getElement = function (e, t, n, i, o) { var a = this, l = this.renderer, c = e._private.rscratch, u = l.cy.zoom(); if (0 === t.w || 0 === t.h || !e.visible()) return null; if (null == i && (i = Math.ceil(r.log2(u * n))), i < -4) i = -4; else if (u >= 3.99 || i > 2) return null; var d, p = Math.pow(2, i), f = t.h * p, h = t.w * p, g = c.imgCaches = c.imgCaches || {}, m = g[i]; if (m) return m; if (d = f <= 25 ? 25 : f <= 50 ? 50 : 50 * Math.ceil(f / 50), f > 1024 || h > 1024 || e.isEdge() || e.isParent()) return null; var v = a.getTextureQueue(d), b = v[v.length - 2], y = function () { return a.recycleTexture(d, h) || a.addTexture(d, h) }; b || (b = v[v.length - 1]), b || (b = y()), b.width - b.usedWidth < h && (b = y()); for (var x, w = l.eleTextBiggerThanMin(e, p), k = function (e) { return e && e.scaledLabelShown === w }, A = o && o === s.dequeue, E = o && o === s.highQuality, S = o && o === s.downscale, $ = i + 1; $ <= 2; $++)if (T = g[$]) { x = T; break } var C = x && x.level === i + 1 ? x : null, _ = function () { b.context.drawImage(C.texture.canvas, C.x, 0, C.width, C.height, b.usedWidth, 0, h, f) }; if (b.context.setTransform(1, 0, 0, 1, 0, 0), b.context.clearRect(b.usedWidth, 0, h, d), k(C)) _(); else if (k(x)) { if (!E) return a.queueElement(e, x.level - 1), x; for ($ = x.level; $ > i; $--)C = a.getElement(e, t, n, $, s.downscale); _() } else { var O; if (!A && !E && !S) for ($ = i - 1; $ >= -4; $--) { var T; if (T = g[$]) { O = T; break } } if (k(O)) return a.queueElement(e, i), O; b.context.translate(b.usedWidth, 0), b.context.scale(p, p), l.drawElement(b.context, e, t, w), b.context.scale(1 / p, 1 / p), b.context.translate(-b.usedWidth, 0) } return m = g[i] = { ele: e, x: b.usedWidth, texture: b, level: i, scale: p, width: h, height: f, scaledLabelShown: w }, b.usedWidth += Math.ceil(h + 8), b.eleCaches.push(m), a.checkTextureFullness(b), m }, c.invalidateElement = function (e) { var t = e._private.rscratch.imgCaches; if (t) for (var n = -4; n <= 2; n++) { var r = t[n]; if (r) { var o = r.texture; o.invalidatedWidth += r.width, t[n] = null, i.removeFromArray(o.eleCaches, r), this.removeFromQueue(e), this.checkTextureUtility(o) } } }, c.checkTextureUtility = function (e) { e.invalidatedWidth >= .5 * e.width && this.retireTexture(e) }, c.checkTextureFullness = function (e) { var t = this.getTextureQueue(e.height); e.usedWidth / e.width > .8 && e.fullnessChecks >= 10 ? i.removeFromArray(t, e) : e.fullnessChecks++ }, c.retireTexture = function (e) { var t = e.height, n = this.getTextureQueue(t); i.removeFromArray(n, e), e.retired = !0; for (var r = e.eleCaches, o = 0; o < r.length; o++) { var a = r[o], s = a.ele, l = a.level, c = s._private.rscratch.imgCaches; c && (c[l] = null) } i.clearArray(r), this.getRetiredTextureQueue(t).push(e) }, c.addTexture = function (e, t) { var n = {}; return this.getTextureQueue(e).push(n), n.eleCaches = [], n.height = e, n.width = Math.max(1024, t), n.usedWidth = 0, n.invalidatedWidth = 0, n.fullnessChecks = 0, n.canvas = document.createElement("canvas"), n.canvas.width = n.width, n.canvas.height = n.height, n.context = n.canvas.getContext("2d"), n }, c.recycleTexture = function (e, t) { for (var n = this.getTextureQueue(e), r = this.getRetiredTextureQueue(e), o = 0; o < r.length; o++) { var a = r[o]; if (a.width >= t) return a.retired = !1, a.usedWidth = 0, a.invalidatedWidth = 0, a.fullnessChecks = 0, i.clearArray(a.eleCaches), a.context.setTransform(1, 0, 0, 1, 0, 0), a.context.clearRect(0, 0, a.width, a.height), i.removeFromArray(r, a), n.push(a), a } }, c.queueElement = function (e, t) { var n = this.getElementQueue(), r = this.getElementIdToQueue(), i = e.id(), o = r[i]; if (o) o.level = Math.max(o.level, t), o.reqs++, n.updateItem(o); else { var a = { ele: e, level: t, reqs: 1 }; n.push(a), r[i] = a } }, c.dequeue = function (e) { for (var t = this.getElementQueue(), n = this.getElementIdToQueue(), r = [], i = 0; i < 1 && t.size() > 0; i++) { var o = t.pop(), a = o.ele; if (null == a._private.rscratch.imgCaches[o.level]) { n[a.id()] = null, r.push(o); var l = a.boundingBox(); this.getElement(a, l, e, o.level, s.dequeue) } } return r }, c.removeFromQueue = function (e) { var t = this.getElementQueue(), n = this.getElementIdToQueue(), r = n[e.id()]; null != r && (r.reqs = i.MAX_INT, t.updateItem(r), t.pop(), n[e.id()] = null) }, c.onDequeue = function (e) { this.onDequeues.push(e) }, c.offDequeue = function (e) { i.removeFromArray(this.onDequeues, e) }, c.setupDequeueing = a.setupDequeueing({ deqRedrawThreshold: 100, deqCost: .15, deqAvgCost: .1, deqNoDrawCost: .9, deqFastCost: .9, deq: function (e, t, n) { return e.dequeue(t, n) }, onDeqd: function (e, t) { for (var n = 0; n < e.onDequeues.length; n++)(0, e.onDequeues[n])(t) }, shouldRedraw: function (e, t, n, i) { for (var o = 0; o < t.length; o++) { var a = t[o].ele.boundingBox(); if (r.boundingBoxesIntersect(a, i)) return !0 } return !1 }, priority: function (e) { return e.renderer.beforeRenderPriorities.eleTxrDeq } }), e.exports = l }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = n(9), a = n(0), s = n(19), l = function (e, t) { var n = this, i = n.renderer = e; n.layersByLevel = {}, n.firstGet = !0, n.lastInvalidationTime = r.performanceNow() - 500, n.skipping = !1, i.beforeRender((function (e, t) { t - n.lastInvalidationTime <= 250 ? n.skipping = !0 : n.skipping = !1 })), n.layersQueue = new o((function (e, t) { return t.reqs - e.reqs })), n.eleTxrCache = t, n.setupEleCacheInvalidation(), n.setupDequeueing() }, c = l.prototype, u = 0, d = Math.pow(2, 53) - 1; function p(e, t) { null != e.imageSmoothingEnabled ? e.imageSmoothingEnabled = t : (e.webkitImageSmoothingEnabled = t, e.mozImageSmoothingEnabled = t, e.msImageSmoothingEnabled = t) } c.makeLayer = function (e, t) { var n = Math.pow(2, t), r = Math.ceil(e.w * n), i = Math.ceil(e.h * n), o = document.createElement("canvas"); o.width = r, o.height = i; var a = { id: u = ++u % d, bb: e, level: t, width: r, height: i, canvas: o, context: o.getContext("2d"), eles: [], elesQueue: [], reqs: 0 }, s = a.context, l = -a.bb.x1, c = -a.bb.y1; return s.scale(n, n), s.translate(l, c), a }, c.getLayers = function (e, t, n) { var o = this, a = o.renderer.cy.zoom(), s = o.firstGet; if (o.firstGet = !1, null == n) if ((n = Math.ceil(i.log2(a * t))) < -4) n = -4; else if (a >= 3.99 || n > 2) return null; o.validateLayersElesOrdering(n, e); var l, c, u = o.layersByLevel, d = Math.pow(2, n), p = u[n] = u[n] || []; if (o.levelIsComplete(n, e)) return p; !function () { var t = function (t) { if (o.validateLayersElesOrdering(t, e), o.levelIsComplete(t, e)) return c = u[t], !0 }, i = function (e) { if (!c) for (var r = n + e; -4 <= r && r <= 2 && !t(r); r += e); }; i(1), i(-1); for (var a = p.length - 1; a >= 0; a--) { var s = p[a]; s.invalid && r.removeFromArray(p, s) } }(); var f = function (t) { var r = (t = t || {}).after; if (function () { if (!l) { l = i.makeBoundingBox(); for (var t = 0; t < e.length; t++)i.updateBoundingBox(l, e[t].boundingBox()) } }(), l.w * d * (l.h * d) > 16e6) return null; var a = o.makeLayer(l, n); if (null != r) { var s = p.indexOf(r) + 1; p.splice(s, 0, a) } else (void 0 === t.insert || t.insert) && p.unshift(a); return a }; if (o.skipping && !s) return null; for (var h = null, g = e.length / 1, m = !s, v = 0; v < e.length; v++) { var b = e[v], y = b._private.rscratch, x = y.imgLayerCaches = y.imgLayerCaches || {}, w = x[n]; if (w) h = w; else { if ((!h || h.eles.length >= g || !i.boundingBoxInBoundingBox(h.bb, b.boundingBox())) && !(h = f({ insert: !0, after: h }))) return null; c || m ? o.queueLayer(h, b) : o.drawEleInLayer(h, b, n, t), h.eles.push(b), x[n] = h } } return c || (m ? null : p) }, c.getEleLevelForLayerLevel = function (e, t) { return e }, c.drawEleInLayer = function (e, t, n, r) { var i = this.renderer, o = e.context, a = t.boundingBox(); if (0 !== a.w && 0 !== a.h && t.visible()) { var s = this.eleTxrCache, l = s.reasons.highQuality; n = this.getEleLevelForLayerLevel(n, r); var c = s.getElement(t, a, null, n, l); c ? (p(o, !1), o.drawImage(c.texture.canvas, c.x, 0, c.width, c.height, a.x1, a.y1, a.w, a.h), p(o, !0)) : i.drawElement(o, t) } }, c.levelIsComplete = function (e, t) { var n = this.layersByLevel[e]; if (!n || 0 === n.length) return !1; for (var r = 0, i = 0; i < n.length; i++) { var o = n[i]; if (o.reqs > 0) return !1; if (o.invalid) return !1; r += o.eles.length } return r === t.length }, c.validateLayersElesOrdering = function (e, t) { var n = this.layersByLevel[e]; if (n) for (var r = 0; r < n.length; r++) { for (var i = n[r], o = -1, a = 0; a < t.length; a++)if (i.eles[0] === t[a]) { o = a; break } if (o < 0) this.invalidateLayer(i); else { var s = o; for (a = 0; a < i.eles.length; a++)if (i.eles[a] !== t[s + a]) { this.invalidateLayer(i); break } } } }, c.updateElementsInLayers = function (e, t) { for (var n = a.element(e[0]), r = 0; r < e.length; r++)for (var i = n ? null : e[r], o = n ? e[r] : e[r].ele, s = o._private.rscratch, l = s.imgLayerCaches = s.imgLayerCaches || {}, c = -4; c <= 2; c++) { var u = l[c]; u && (i && this.getEleLevelForLayerLevel(u.level) !== i.level || t(u, o, i)) } }, c.haveLayers = function () { for (var e = !1, t = -4; t <= 2; t++) { var n = this.layersByLevel[t]; if (n && n.length > 0) { e = !0; break } } return e }, c.invalidateElements = function (e) { var t = this; t.lastInvalidationTime = r.performanceNow(), 0 !== e.length && t.haveLayers() && t.updateElementsInLayers(e, (function (e, n, r) { t.invalidateLayer(e) })) }, c.invalidateLayer = function (e) { if (this.lastInvalidationTime = r.performanceNow(), !e.invalid) { var t = e.level, n = e.eles, i = this.layersByLevel[t]; r.removeFromArray(i, e), e.elesQueue = [], e.invalid = !0, e.replacement && (e.replacement.invalid = !0); for (var o = 0; o < n.length; o++) { var a = n[o]._private.rscratch.imgLayerCaches; a && (a[t] = null) } } }, c.refineElementTextures = function (e) { var t = this; t.updateElementsInLayers(e, (function (e, n, r) { var i = e.replacement; if (i || ((i = e.replacement = t.makeLayer(e.bb, e.level)).replaces = e, i.eles = e.eles), !i.reqs) for (var o = 0; o < i.eles.length; o++)t.queueLayer(i, i.eles[o]) })) }, c.setupEleCacheInvalidation = function () { var e = this, t = [], n = r.debounce((function () { e.refineElementTextures(t), t = [] }), 50); e.eleTxrCache.onDequeue((function (e) { for (var r = 0; r < e.length; r++)t.push(e[r]); n() })) }, c.queueLayer = function (e, t) { var n = this.layersQueue, r = e.elesQueue, i = r.hasId = r.hasId || {}; if (!e.replacement) { if (t) { if (i[t.id()]) return; r.push(t), i[t.id()] = !0 } e.reqs ? (e.reqs++, n.updateItem(e)) : (e.reqs = 1, n.push(e)) } }, c.dequeue = function (e) { for (var t = this.layersQueue, n = [], r = 0; r < 1 && 0 !== t.size();) { var i = t.peek(); if (i.replacement) t.pop(); else if (i.replaces && i !== i.replaces.replacement) t.pop(); else if (i.invalid) t.pop(); else { var o = i.elesQueue.shift(); o && (this.drawEleInLayer(i, o, i.level, e), r++), 0 === n.length && n.push(!0), 0 === i.elesQueue.length && (t.pop(), i.reqs = 0, i.replaces && this.applyLayerReplacement(i), this.requestRedraw()) } } return n }, c.applyLayerReplacement = function (e) { var t = this.layersByLevel[e.level], n = e.replaces, r = t.indexOf(n); if (!(r < 0 || n.invalid)) { t[r] = e; for (var i = 0; i < e.eles.length; i++) { var o = e.eles[i]._private, a = o.imgLayerCaches = o.imgLayerCaches || {}; a && (a[e.level] = e) } this.requestRedraw() } }, c.requestRedraw = r.debounce((function () { var e = this.renderer; e.redrawHint("eles", !0), e.redrawHint("drag", !0), e.redraw() }), 100), c.setupDequeueing = s.setupDequeueing({ deqRedrawThreshold: 50, deqCost: .15, deqAvgCost: .1, deqNoDrawCost: .9, deqFastCost: .9, deq: function (e, t) { return e.dequeue(t) }, onDeqd: r.noop, shouldRedraw: r.trueify, priority: function (e) { return e.renderer.beforeRenderPriorities.lyrTxrDeq } }), e.exports = l }, function (e, t, n) { "use strict"; var r, i = { arrowShapeImpl: function (e) { return (r || (r = { polygon: function (e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; e.lineTo(r.x, r.y) } }, "triangle-backcurve": function (e, t, n) { for (var r, i = 0; i < t.length; i++) { var o = t[i]; 0 === i && (r = o), e.lineTo(o.x, o.y) } e.quadraticCurveTo(n.x, n.y, r.x, r.y) }, "triangle-tee": function (e, t, n) { e.beginPath && e.beginPath(); for (var r = t, i = 0; i < r.length; i++) { var o = r[i]; e.lineTo(o.x, o.y) } e.closePath && e.closePath(), e.beginPath && e.beginPath(); var a = n, s = n[0]; for (e.moveTo(s.x, s.y), i = 0; i < a.length; i++)o = a[i], e.lineTo(o.x, o.y); e.closePath && e.closePath() }, "triangle-cross": function (e, t, n) { e.beginPath && e.beginPath(); for (var r = t, i = 0; i < r.length; i++) { var o = r[i]; e.lineTo(o.x, o.y) } e.closePath && e.closePath(), e.beginPath && e.beginPath(); var a = n, s = n[0]; for (e.moveTo(s.x, s.y), i = 0; i < a.length; i++)o = a[i], e.lineTo(o.x, o.y); e.closePath && e.closePath() }, circle: function (e, t, n, r) { e.arc(t, n, r, 0, 2 * Math.PI, !1) } }))[e] } }; e.exports = i }, function (e, t, n) { "use strict"; var r = n(2), i = { drawElement: function (e, t, n, r) { t.isNode() ? this.drawNode(e, t, n, r) : this.drawEdge(e, t, n, r) }, drawCachedElement: function (e, t, n, i) { var o = t.boundingBox(); if (0 !== o.w && 0 !== o.h && (!i || r.boundingBoxesIntersect(o, i))) { var a = this.data.eleTxrCache.getElement(t, o, n); null != a ? e.drawImage(a.texture.canvas, a.x, 0, a.width, a.height, o.x1, o.y1, o.w, o.h) : this.drawElement(e, t) } }, drawElements: function (e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; this.drawElement(e, r) } }, drawCachedElements: function (e, t, n, r) { for (var i = 0; i < t.length; i++) { var o = t[i]; this.drawCachedElement(e, o, n, r) } }, drawCachedNodes: function (e, t, n, r) { for (var i = 0; i < t.length; i++) { var o = t[i]; o.isNode() && this.drawCachedElement(e, o, n, r) } }, drawLayeredElements: function (e, t, n, r) { var i = this.data.lyrTxrCache.getLayers(t, n); if (i) for (var o = 0; o < i.length; o++) { var a = i[o], s = a.bb; 0 !== s.w && 0 !== s.h && e.drawImage(a.canvas, s.x1, s.y1, s.w, s.h) } else this.drawCachedElements(e, t, n, r) }, drawDebugPoints: function (e, t) { for (var n = function (t, n, r) { e.fillStyle = r, e.fillRect(t - 1, n - 1, 3, 3) }, r = 0; r < t.length; r++) { var i = t[r], o = i._private.rscratch; if (i.isNode()) { var a = i.position(); n(a.x, a.y, "magenta") } else { for (var s = o.allpts, l = 0; l + 1 < s.length; l += 2)n(s[l], s[l + 1], "cyan"); n(o.midX, o.midY, "yellow") } } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = { drawEdge: function (e, t, n, r) { var i = this, o = t._private.rscratch, a = i.usePaths(); if (t.visible() && !o.badLine && null != o.allpts && !isNaN(o.allpts[0])) { var s = void 0; n && (s = n, e.translate(-s.x1, -s.y1)); var l = 2 * t.pstyle("overlay-padding").pfValue, c = t.pstyle("overlay-opacity").value, u = t.pstyle("overlay-color").value, d = t.pstyle("line-color").value, p = t.pstyle("opacity").value, f = t.pstyle("line-style").value, h = t.pstyle("width").pfValue, g = function () { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : p; e.lineWidth = h, e.lineCap = "butt", i.strokeStyle(e, d[0], d[1], d[2], n), i.drawEdgePath(t, e, o.allpts, f) }, m = function () { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : p; i.drawArrowheads(e, t, n) }; if (e.lineJoin = "round", "yes" === t.pstyle("ghost").value) { var v = t.pstyle("ghost-offset-x").pfValue, b = t.pstyle("ghost-offset-y").pfValue, y = t.pstyle("ghost-opacity").value, x = p * y; e.translate(v, b), g(x), m(x), e.translate(-v, -b) } g(), m(), function () { var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : c; e.lineWidth = l, "self" !== o.edgeType || a ? e.lineCap = "round" : e.lineCap = "butt", i.strokeStyle(e, u[0], u[1], u[2], n), i.drawEdgePath(t, e, o.allpts, "solid") }(), i.drawElementText(e, t, r), n && e.translate(s.x1, s.y1) } }, drawEdgePath: function (e, t, n, r) { var i = e._private.rscratch, o = t, a = void 0, s = !1, l = this.usePaths(); if (l) { var c = n.join("$"); i.pathCacheKey && i.pathCacheKey === c ? (a = t = i.pathCache, s = !0) : (a = t = new Path2D, i.pathCacheKey = c, i.pathCache = a) } if (o.setLineDash) switch (r) { case "dotted": o.setLineDash([1, 1]); break; case "dashed": o.setLineDash([6, 3]); break; case "solid": o.setLineDash([]) }if (!s && !i.badLine) switch (t.beginPath && t.beginPath(), t.moveTo(n[0], n[1]), i.edgeType) { case "bezier": case "self": case "compound": case "multibezier": if (e.hasClass("horizontal")) { var u = n[4], d = n[5], p = (n[0] + n[4]) / 2; t.lineTo(n[0] + 10, n[1]), t.bezierCurveTo(p, n[1], p, n[5], n[4] - 10, n[5]), t.lineTo(u, d) } else if (e.hasClass("vertical")) { var f = n[4], h = n[5], g = (n[1] + n[5]) / 2; t.bezierCurveTo(n[0], g, n[4], g, n[4], n[5] - 10), t.lineTo(f, h) } else for (var m = 2; m + 3 < n.length; m += 4)t.quadraticCurveTo(n[m], n[m + 1], n[m + 2], n[m + 3]); break; case "straight": case "segments": case "haystack": for (var v = 2; v + 1 < n.length; v += 2)t.lineTo(n[v], n[v + 1]) }t = o, l ? t.stroke(a) : t.stroke(), t.setLineDash && t.setLineDash([]) }, drawArrowheads: function (e, t, n) { var r = t._private.rscratch, i = "haystack" === r.edgeType; i || this.drawArrowhead(e, t, "source", r.arrowStartX, r.arrowStartY, r.srcArrowAngle, n), this.drawArrowhead(e, t, "mid-target", r.midX, r.midY, r.midtgtArrowAngle, n), this.drawArrowhead(e, t, "mid-source", r.midX, r.midY, r.midsrcArrowAngle, n), i || (t.hasClass("horizontal") ? this.drawArrowhead(e, t, "target", r.arrowEndX, r.arrowEndY, -Math.PI / 2, n) : t.hasClass("vertical") ? this.drawArrowhead(e, t, "target", r.arrowEndX, r.arrowEndY, 0, n) : this.drawArrowhead(e, t, "target", r.arrowEndX, r.arrowEndY, r.tgtArrowAngle, n)) }, drawArrowhead: function (e, t, n, r, i, o, a) { if (!(isNaN(r) || null == r || isNaN(i) || null == i || isNaN(o) || null == o)) { var s = t.pstyle(n + "-arrow-shape").value; if ("none" !== s) { var l = "hollow" === t.pstyle(n + "-arrow-fill").value ? "both" : "filled", c = t.pstyle(n + "-arrow-fill").value, u = t.pstyle("width").pfValue, d = t.pstyle("opacity").value; void 0 === a && (a = d); var p = e.globalCompositeOperation; 1 === a && "hollow" !== c || (e.globalCompositeOperation = "destination-out", this.fillStyle(e, 255, 255, 255, 1), this.strokeStyle(e, 255, 255, 255, 1), this.drawArrowShape(t, n, e, l, u, s, r, i, o), e.globalCompositeOperation = p); var f = t.pstyle(n + "-arrow-color").value; this.fillStyle(e, f[0], f[1], f[2], a), this.strokeStyle(e, f[0], f[1], f[2], a), this.drawArrowShape(t, n, e, c, u, s, r, i, o) } } }, drawArrowShape: function (e, t, n, r, i, o, a, s, l) { var c = this.usePaths(), u = e._private.rscratch, d = !1, p = void 0, f = n, h = { x: a, y: s }, g = e.pstyle("arrow-scale").value, m = this.getArrowWidth(i, g), v = this.arrowShapes[o]; if (c) { var b = m + "$" + o + "$" + l + "$" + a + "$" + s; u.arrowPathCacheKey = u.arrowPathCacheKey || {}, u.arrowPathCache = u.arrowPathCache || {}, u.arrowPathCacheKey[t] === b ? (p = n = u.arrowPathCache[t], d = !0) : (p = n = new Path2D, u.arrowPathCacheKey[t] = b, u.arrowPathCache[t] = p) } n.beginPath && n.beginPath(), d || v.draw(n, m, l, h, i), !v.leavePathOpen && n.closePath && n.closePath(), n = f, "filled" !== r && "both" !== r || (c ? n.fill(p) : n.fill()), "hollow" !== r && "both" !== r || (n.lineWidth = v.matchEdgeWidth ? i : 1, n.lineJoin = "miter", c ? n.stroke(p) : n.stroke()) } }; e.exports = r }, function (e, t, n) { "use strict"; var r = { safeDrawImage: function (e, t, n, r, i, o, a, s, l, c) { i <= 0 || o <= 0 || l <= 0 || c <= 0 || e.drawImage(t, n, r, i, o, a, s, l, c) }, drawInscribedImage: function (e, t, n, r, i) { var o = this, a = n.position(), s = a.x, l = a.y, c = n.cy().style(), u = c.getIndexedStyle.bind(c), d = u(n, "background-fit", "value", r), p = u(n, "background-repeat", "value", r), f = n.width(), h = n.height(), g = 2 * n.padding(), m = f + ("inner" === u(n, "background-width-relative-to", "value", r) ? 0 : g), v = h + ("inner" === u(n, "background-height-relative-to", "value", r) ? 0 : g), b = n._private.rscratch, y = "node" === n.pstyle("background-clip").value, x = u(n, "background-image-opacity", "value", r) * i, w = t.width || t.cachedW, k = t.height || t.cachedH; null != w && null != k || (document.body.appendChild(t), w = t.cachedW = t.width || t.offsetWidth, k = t.cachedH = t.height || t.offsetHeight, document.body.removeChild(t)); var A = w, E = k; if ("auto" !== u(n, "background-width", "value", r) && (A = "%" === u(n, "background-width", "units", r) ? u(n, "background-width", "pfValue", r) * m : u(n, "background-width", "pfValue", r)), "auto" !== u(n, "background-height", "value", r) && (E = "%" === u(n, "background-height", "units", r) ? u(n, "background-height", "pfValue", r) * v : u(n, "background-height", "pfValue", r)), 0 !== A && 0 !== E) { if ("contain" === d) A *= S = Math.min(m / A, v / E), E *= S; else if ("cover" === d) { var S; A *= S = Math.max(m / A, v / E), E *= S } var $ = s - m / 2; "%" === u(n, "background-position-x", "units", r) ? $ += (m - A) * u(n, "background-position-x", "pfValue", r) : $ += u(n, "background-position-x", "pfValue", r); var C = l - v / 2; "%" === u(n, "background-position-y", "units", r) ? C += (v - E) * u(n, "background-position-y", "pfValue", r) : C += u(n, "background-position-y", "pfValue", r), b.pathCache && ($ -= s, C -= l, s = 0, l = 0); var _ = e.globalAlpha; if (e.globalAlpha = x, "no-repeat" === p) y && (e.save(), b.pathCache ? e.clip(b.pathCache) : (o.nodeShapes[o.getNodeShape(n)].draw(e, s, l, m, v), e.clip())), o.safeDrawImage(e, t, 0, 0, w, k, $, C, A, E), y && e.restore(); else { var O = e.createPattern(t, p); e.fillStyle = O, o.nodeShapes[o.getNodeShape(n)].draw(e, s, l, m, v), e.translate($, C), e.fill(), e.translate(-$, -C) } e.globalAlpha = _ } } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(1), i = n(2), o = { eleTextBiggerThanMin: function (e, t) { if (!t) { var n = e.cy().zoom(), r = this.getPixelRatio(), o = Math.ceil(i.log2(n * r)); t = Math.pow(2, o) } return !(e.pstyle("font-size").pfValue * t < e.pstyle("min-zoomed-font-size").pfValue) }, drawElementText: function (e, t, n) { var r = this; if (void 0 === n) { if (!r.eleTextBiggerThanMin(t)) return } else if (!n) return; if (t.isNode()) { if (!(o = t.pstyle("label")) || !o.value) return; var i = t.pstyle("text-halign").strValue; switch (t.pstyle("text-valign").strValue, i) { case "left": e.textAlign = "right"; break; case "right": e.textAlign = "left"; break; default: e.textAlign = "center" }e.textBaseline = "bottom" } else { var o = t.pstyle("label"), a = t.pstyle("source-label"), s = t.pstyle("target-label"); if (!(o && o.value || a && a.value || s && s.value)) return; e.textAlign = "center", e.textBaseline = "bottom" } r.drawText(e, t), t.isEdge() && (r.drawText(e, t, "source"), r.drawText(e, t, "target")) } }; o.drawNodeText = o.drawEdgeText = o.drawElementText, o.getFontCache = function (e) { var t; this.fontCaches = this.fontCaches || []; for (var n = 0; n < this.fontCaches.length; n++)if ((t = this.fontCaches[n]).context === e) return t; return t = { context: e }, this.fontCaches.push(t), t }, o.setupTextStyle = function (e, t) { var n = t.effectiveOpacity(), r = t.pstyle("font-style").strValue, i = t.pstyle("font-size").pfValue + "px", o = t.pstyle("font-family").strValue, a = t.pstyle("font-weight").strValue, s = t.pstyle("text-opacity").value * t.pstyle("opacity").value * n, l = t.pstyle("text-outline-opacity").value * s, c = t.pstyle("color").value, u = t.pstyle("text-outline-color").value, d = t._private.fontKey, p = this.getFontCache(e); p.key !== d && (e.font = r + " " + a + " " + i + " " + o, p.key = d), e.lineJoin = "round", this.fillStyle(e, c[0], c[1], c[2], s), this.strokeStyle(e, u[0], u[1], u[2], l) }, o.drawText = function (e, t, n) { var i = t._private.rscratch, o = t.effectiveOpacity(); if (0 !== o && 0 !== t.pstyle("text-opacity").value) { var a, s, l, c, u, d, p = r.getPrefixedProperty(i, "labelX", n), f = r.getPrefixedProperty(i, "labelY", n), h = this.getLabelText(t, n); if (null != h && "" !== h && !isNaN(p) && !isNaN(f)) { this.setupTextStyle(e, t); var g = n ? n + "-" : "", m = r.getPrefixedProperty(i, "labelWidth", n), v = r.getPrefixedProperty(i, "labelHeight", n), b = r.getPrefixedProperty(i, "labelAngle", n), y = t.pstyle(g + "text-margin-x").pfValue, x = t.pstyle(g + "text-margin-y").pfValue, w = t.isEdge(), k = (t.isNode(), t.pstyle("text-halign").value), A = t.pstyle("text-valign").value; w && (k = "center", A = "center"), p += y, f += x; var E, S = t.pstyle("text-rotation"); if (0 !== (E = "autorotate" === S.strValue ? w ? b : 0 : "none" === S.strValue ? 0 : S.pfValue)) { var $ = p, C = f; e.translate($, C), e.rotate(E), p = 0, f = 0 } switch (A) { case "top": break; case "center": f += v / 2; break; case "bottom": f += v }var _ = t.pstyle("text-background-opacity").value, O = t.pstyle("text-border-opacity").value, T = t.pstyle("text-border-width").pfValue, j = t.pstyle("text-background-padding").pfValue; if (_ > 0 || T > 0 && O > 0) { var P = p - j; switch (k) { case "left": P -= m; break; case "center": P -= m / 2 }var D = f - v - j, R = m + 2 * j, I = v + 2 * j; if (_ > 0) { var N = e.fillStyle, M = t.pstyle("text-background-color").value; e.fillStyle = "rgba(" + M[0] + "," + M[1] + "," + M[2] + "," + _ * o + ")", "roundrectangle" == t.pstyle("text-background-shape").strValue ? (s = P, l = D, c = R, u = I, d = (d = 2) || 5, (a = e).beginPath(), a.moveTo(s + d, l), a.lineTo(s + c - d, l), a.quadraticCurveTo(s + c, l, s + c, l + d), a.lineTo(s + c, l + u - d), a.quadraticCurveTo(s + c, l + u, s + c - d, l + u), a.lineTo(s + d, l + u), a.quadraticCurveTo(s, l + u, s, l + u - d), a.lineTo(s, l + d), a.quadraticCurveTo(s, l, s + d, l), a.closePath(), a.fill()) : e.fillRect(P, D, R, I), e.fillStyle = N } if (T > 0 && O > 0) { var z = e.strokeStyle, L = e.lineWidth, B = t.pstyle("text-border-color").value, F = t.pstyle("text-border-style").value; if (e.strokeStyle = "rgba(" + B[0] + "," + B[1] + "," + B[2] + "," + O * o + ")", e.lineWidth = T, e.setLineDash) switch (F) { case "dotted": e.setLineDash([1, 1]); break; case "dashed": e.setLineDash([4, 2]); break; case "double": e.lineWidth = T / 4, e.setLineDash([]); break; case "solid": e.setLineDash([]) }if (e.strokeRect(P, D, R, I), "double" === F) { var q = T / 2; e.strokeRect(P + q, D + q, R - 2 * q, I - 2 * q) } e.setLineDash && e.setLineDash([]), e.lineWidth = L, e.strokeStyle = z } } var V = 2 * t.pstyle("text-outline-width").pfValue; if (V > 0 && (e.lineWidth = V), "wrap" === t.pstyle("text-wrap").value) { var U = r.getPrefixedProperty(i, "labelWrapCachedLines", n), H = v / U.length; switch (A) { case "top": f -= (U.length - 1) * H; break; case "center": case "bottom": f -= (U.length - 1) * H }for (var G = 0; G < U.length; G++)V > 0 && e.strokeText(U[G], p, f), e.fillText(U[G], p, f), f += H } else V > 0 && e.strokeText(h, p, f), e.fillText(h, p, f); 0 !== E && (e.rotate(-E), e.translate(-$, -C)) } } }, e.exports = o }, function (e, t, n) { "use strict"; var r = n(0), i = { drawNode: function (e, t, n, i) { var o, a, s = this, l = t._private, c = l.rscratch, u = t.position(); if (r.number(u.x) && r.number(u.y) && t.visible()) { var d = t.effectiveOpacity(), p = s.usePaths(), f = void 0, h = !1, g = t.padding(); o = t.width() + 2 * g, a = t.height() + 2 * g; var m = void 0; n && (m = n, e.translate(-m.x1, -m.y1)); for (var v = t.pstyle("background-image").value, b = new Array(v.length), y = new Array(v.length), x = 0, w = 0; w < v.length; w++) { var k = v[w]; if (b[w] = null != k && "none" !== k) { var A = t.cy().style().getIndexedStyle(t, "background-image-crossorigin", "value", w); x++, y[w] = s.getCachedImage(k, A, (function () { t.emitAndNotify("background") })) } } var E = t.pstyle("background-blacken").value, S = t.pstyle("border-width").pfValue, $ = t.pstyle("background-color").value, C = t.pstyle("background-opacity").value * d, _ = t.pstyle("border-color").value, O = t.pstyle("border-style").value, T = t.pstyle("border-opacity").value * d; e.lineJoin = "miter"; var j = function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : C; s.fillStyle(e, $[0], $[1], $[2], t) }, P = function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : T; s.strokeStyle(e, _[0], _[1], _[2], t) }, D = t.pstyle("shape").strValue, R = t.pstyle("shape-polygon-points").pfValue; if (p) { var I = D + "$" + o + "$" + a + ("polygon" === D ? "$" + R.join("$") : ""); e.translate(u.x, u.y), c.pathCacheKey === I ? (f = c.pathCache, h = !0) : (f = new Path2D, c.pathCacheKey = I, c.pathCache = f) } var N, M, z, L = function () { if (!h) { var n = u; p && (n = { x: 0, y: 0 }), s.nodeShapes[s.getNodeShape(t)].draw(f || e, n.x, n.y, o, a) } p ? e.fill(f) : e.fill() }, B = function () { for (var n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : d, r = l.backgrounding, i = 0, o = 0; o < y.length; o++)b[o] && y[o].complete && !y[o].error && (i++, s.drawInscribedImage(e, y[o], t, o, n)); l.backgrounding = !(i === x), r !== l.backgrounding && t.updateStyle(!1) }, F = function () { var n = arguments.length > 0 && void 0 !== arguments[0] && arguments[0], r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : d; s.hasPie(t) && (s.drawPie(e, t, r), n && (p || s.nodeShapes[s.getNodeShape(t)].draw(e, u.x, u.y, o, a))) }, q = function () { var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : d, n = (E > 0 ? E : -E) * t, r = E > 0 ? 0 : 255; 0 !== E && (s.fillStyle(e, r, r, r, n), p ? e.fill(f) : e.fill()) }, V = function () { if (S > 0) { if (e.lineWidth = S, e.lineCap = "butt", e.setLineDash) switch (O) { case "dotted": e.setLineDash([1, 1]); break; case "dashed": e.setLineDash([4, 2]); break; case "solid": case "double": e.setLineDash([]) }if (p ? e.stroke(f) : e.stroke(), "double" === O) { e.lineWidth = S / 3; var t = e.globalCompositeOperation; e.globalCompositeOperation = "destination-out", p ? e.stroke(f) : e.stroke(), e.globalCompositeOperation = t } e.setLineDash && e.setLineDash([]) } }; if ("yes" === t.pstyle("ghost").value) { var U = t.pstyle("ghost-offset-x").pfValue, H = t.pstyle("ghost-offset-y").pfValue, G = t.pstyle("ghost-opacity").value, W = G * d; e.translate(U, H), j(G * C), L(), B(W), F(0 !== E || 0 !== S), q(W), P(G * T), V(), e.translate(-U, -H) } j(), L(), B(), F(0 !== E || 0 !== S), q(), P(), V(), p && e.translate(-u.x, -u.y), s.drawElementText(e, t, i), N = t.pstyle("overlay-padding").pfValue, M = t.pstyle("overlay-opacity").value, z = t.pstyle("overlay-color").value, M > 0 && (s.fillStyle(e, z[0], z[1], z[2], M), s.nodeShapes.roundrectangle.draw(e, u.x, u.y, o + 2 * N, a + 2 * N), e.fill()), n && e.translate(m.x1, m.y1) } }, hasPie: function (e) { return (e = e[0])._private.hasPie }, drawPie: function (e, t, n, r) { t = t[0], r = r || t.position(); var i = t.cy().style(), o = t.pstyle("pie-size"), a = r.x, s = r.y, l = t.width(), c = t.height(), u = Math.min(l, c) / 2, d = 0; this.usePaths() && (a = 0, s = 0), "%" === o.units ? u *= o.pfValue : void 0 !== o.pfValue && (u = o.pfValue / 2); for (var p = 1; p <= i.pieBackgroundN; p++) { var f = t.pstyle("pie-" + p + "-background-size").value, h = t.pstyle("pie-" + p + "-background-color").value, g = t.pstyle("pie-" + p + "-background-opacity").value * n, m = f / 100; m + d > 1 && (m = 1 - d); var v = 1.5 * Math.PI + 2 * Math.PI * d, b = v + 2 * Math.PI * m; 0 === f || d >= 1 || d + m > 1 || (e.beginPath(), e.moveTo(a, s), e.arc(a, s, u, v, b), e.closePath(), this.fillStyle(e, h[0], h[1], h[2], g), e.fill(), d += m) } } }; e.exports = i }, function (e, t, n) { "use strict"; var r = {}, i = n(1); r.getPixelRatio = function () { var e = this.data.contexts[0]; if (null != this.forcedPixelRatio) return this.forcedPixelRatio; var t = e.backingStorePixelRatio || e.webkitBackingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / t }, r.paintCache = function (e) { for (var t, n = this.paintCaches = this.paintCaches || [], r = !0, i = 0; i < n.length; i++)if ((t = n[i]).context === e) { r = !1; break } return r && (t = { context: e }, n.push(t)), t }, r.fillStyle = function (e, t, n, r, i) { e.fillStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")" }, r.strokeStyle = function (e, t, n, r, i) { e.strokeStyle = "rgba(" + t + "," + n + "," + r + "," + i + ")" }, r.matchCanvasSize = function (e) { var t = this, n = t.data, r = t.findContainerClientCoords(), i = r[2], o = r[3], a = t.getPixelRatio(), s = t.motionBlurPxRatio; e !== t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE] && e !== t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG] || (a = s); var l, c = i * a, u = o * a; if (c !== t.canvasWidth || u !== t.canvasHeight) { t.fontCaches = null; var d = n.canvasContainer; d.style.width = i + "px", d.style.height = o + "px"; for (var p = 0; p < t.CANVAS_LAYERS; p++)(l = n.canvases[p]).width = c, l.height = u, l.style.width = i + "px", l.style.height = o + "px"; for (p = 0; p < t.BUFFER_COUNT; p++)(l = n.bufferCanvases[p]).width = c, l.height = u, l.style.width = i + "px", l.style.height = o + "px"; t.textureMult = 1, a <= 1 && (l = n.bufferCanvases[t.TEXTURE_BUFFER], t.textureMult = 2, l.width = c * t.textureMult, l.height = u * t.textureMult), t.canvasWidth = c, t.canvasHeight = u } }, r.renderTo = function (e, t, n, r) { this.render({ forcedContext: e, forcedZoom: t, forcedPan: n, drawAllLayers: !0, forcedPxRatio: r }) }, r.render = function (e) { var t = (e = e || i.staticEmptyObject()).forcedContext, n = e.drawAllLayers, r = e.drawOnlyNodeLayer, o = e.forcedZoom, a = e.forcedPan, s = this, l = void 0 === e.forcedPxRatio ? this.getPixelRatio() : e.forcedPxRatio, c = s.cy, u = s.data, d = u.canvasNeedsRedraw, p = s.textureOnViewport && !t && (s.pinching || s.hoverData.dragging || s.swipePanning || s.data.wheelZooming), f = void 0 !== e.motionBlur ? e.motionBlur : s.motionBlur, h = s.motionBlurPxRatio, g = c.hasCompoundNodes(), m = s.hoverData.draggingEles, v = !(!s.hoverData.selecting && !s.touchData.selecting), b = f = f && !t && s.motionBlurEnabled && !v; t || (s.prevPxRatio !== l && (s.invalidateContainerClientCoordsCache(), s.matchCanvasSize(s.container), s.redrawHint("eles", !0), s.redrawHint("drag", !0)), s.prevPxRatio = l), !t && s.motionBlurTimeout && clearTimeout(s.motionBlurTimeout), f && (null == s.mbFrames && (s.mbFrames = 0), s.mbFrames++, s.mbFrames < 3 && (b = !1), s.mbFrames > s.minMbLowQualFrames && (s.motionBlurPxRatio = s.mbPxRBlurry)), s.clearingMotionBlur && (s.motionBlurPxRatio = 1), s.textureDrawLastFrame && !p && (d[s.NODE] = !0, d[s.SELECT_BOX] = !0); var y = c.style()._private.coreStyle, x = c.zoom(), w = void 0 !== o ? o : x, k = c.pan(), A = { x: k.x, y: k.y }, E = { zoom: x, pan: { x: k.x, y: k.y } }, S = s.prevViewport; void 0 === S || E.zoom !== S.zoom || E.pan.x !== S.pan.x || E.pan.y !== S.pan.y || m && !g || (s.motionBlurPxRatio = 1), a && (A = a), w *= l, A.x *= l, A.y *= l; var $ = s.getCachedZSortedEles(); function C(e, t, n, r, i) { var o = e.globalCompositeOperation; e.globalCompositeOperation = "destination-out", s.fillStyle(e, 255, 255, 255, s.motionBlurTransparency), e.fillRect(t, n, r, i), e.globalCompositeOperation = o } function _(e, r) { var i, l, c, d; s.clearingMotionBlur || e !== u.bufferContexts[s.MOTIONBLUR_BUFFER_NODE] && e !== u.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG] ? (i = A, l = w, c = s.canvasWidth, d = s.canvasHeight) : (i = { x: k.x * h, y: k.y * h }, l = x * h, c = s.canvasWidth * h, d = s.canvasHeight * h), e.setTransform(1, 0, 0, 1, 0, 0), "motionBlur" === r ? C(e, 0, 0, c, d) : t || void 0 !== r && !r || e.clearRect(0, 0, c, d), n || (e.translate(i.x, i.y), e.scale(l, l)), a && e.translate(a.x, a.y), o && e.scale(o, o) } if (p || (s.textureDrawLastFrame = !1), p) { if (s.textureDrawLastFrame = !0, !s.textureCache) { s.textureCache = {}, s.textureCache.bb = c.mutableElements().boundingBox(), s.textureCache.texture = s.data.bufferCanvases[s.TEXTURE_BUFFER]; var O = s.data.bufferContexts[s.TEXTURE_BUFFER]; O.setTransform(1, 0, 0, 1, 0, 0), O.clearRect(0, 0, s.canvasWidth * s.textureMult, s.canvasHeight * s.textureMult), s.render({ forcedContext: O, drawOnlyNodeLayer: !0, forcedPxRatio: l * s.textureMult }), (E = s.textureCache.viewport = { zoom: c.zoom(), pan: c.pan(), width: s.canvasWidth, height: s.canvasHeight }).mpan = { x: (0 - E.pan.x) / E.zoom, y: (0 - E.pan.y) / E.zoom } } d[s.DRAG] = !1, d[s.NODE] = !1; var T = u.contexts[s.NODE], j = s.textureCache.texture; E = s.textureCache.viewport, s.textureCache.bb, T.setTransform(1, 0, 0, 1, 0, 0), f ? C(T, 0, 0, E.width, E.height) : T.clearRect(0, 0, E.width, E.height); var P = y["outside-texture-bg-color"].value, D = y["outside-texture-bg-opacity"].value; s.fillStyle(T, P[0], P[1], P[2], D), T.fillRect(0, 0, E.width, E.height), x = c.zoom(), _(T, !1), T.clearRect(E.mpan.x, E.mpan.y, E.width / E.zoom / l, E.height / E.zoom / l), T.drawImage(j, E.mpan.x, E.mpan.y, E.width / E.zoom / l, E.height / E.zoom / l) } else s.textureOnViewport && !t && (s.textureCache = null); var R = c.extent(), I = s.pinching || s.hoverData.dragging || s.swipePanning || s.data.wheelZooming || s.hoverData.draggingEles, N = s.hideEdgesOnViewport && I, M = []; if (M[s.NODE] = !d[s.NODE] && f && !s.clearedForMotionBlur[s.NODE] || s.clearingMotionBlur, M[s.NODE] && (s.clearedForMotionBlur[s.NODE] = !0), M[s.DRAG] = !d[s.DRAG] && f && !s.clearedForMotionBlur[s.DRAG] || s.clearingMotionBlur, M[s.DRAG] && (s.clearedForMotionBlur[s.DRAG] = !0), d[s.NODE] || n || r || M[s.NODE]) { var z = f && !M[s.NODE] && 1 !== h; _(T = t || (z ? s.data.bufferContexts[s.MOTIONBLUR_BUFFER_NODE] : u.contexts[s.NODE]), f && !z ? "motionBlur" : void 0), N ? s.drawCachedNodes(T, $.nondrag, l, R) : s.drawLayeredElements(T, $.nondrag, l, R), s.debug && s.drawDebugPoints(T, $.nondrag), n || f || (d[s.NODE] = !1) } if (!r && (d[s.DRAG] || n || M[s.DRAG]) && (z = f && !M[s.DRAG] && 1 !== h, _(T = t || (z ? s.data.bufferContexts[s.MOTIONBLUR_BUFFER_DRAG] : u.contexts[s.DRAG]), f && !z ? "motionBlur" : void 0), N ? s.drawCachedNodes(T, $.drag, l, R) : s.drawCachedElements(T, $.drag, l, R), s.debug && s.drawDebugPoints(T, $.drag), n || f || (d[s.DRAG] = !1)), s.showFps || !r && d[s.SELECT_BOX] && !n) { if (_(T = t || u.contexts[s.SELECT_BOX]), 1 == s.selection[4] && (s.hoverData.selecting || s.touchData.selecting)) { x = s.cy.zoom(); var L = y["selection-box-border-width"].value / x; T.lineWidth = L, T.fillStyle = "rgba(" + y["selection-box-color"].value[0] + "," + y["selection-box-color"].value[1] + "," + y["selection-box-color"].value[2] + "," + y["selection-box-opacity"].value + ")", T.fillRect(s.selection[0], s.selection[1], s.selection[2] - s.selection[0], s.selection[3] - s.selection[1]), L > 0 && (T.strokeStyle = "rgba(" + y["selection-box-border-color"].value[0] + "," + y["selection-box-border-color"].value[1] + "," + y["selection-box-border-color"].value[2] + "," + y["selection-box-opacity"].value + ")", T.strokeRect(s.selection[0], s.selection[1], s.selection[2] - s.selection[0], s.selection[3] - s.selection[1])) } if (u.bgActivePosistion && !s.hoverData.selecting) { x = s.cy.zoom(); var B = u.bgActivePosistion; T.fillStyle = "rgba(" + y["active-bg-color"].value[0] + "," + y["active-bg-color"].value[1] + "," + y["active-bg-color"].value[2] + "," + y["active-bg-opacity"].value + ")", T.beginPath(), T.arc(B.x, B.y, y["active-bg-size"].pfValue / x, 0, 2 * Math.PI), T.fill() } var F = s.lastRedrawTime; if (s.showFps && F) { F = Math.round(F); var q = Math.round(1e3 / F); T.setTransform(1, 0, 0, 1, 0, 0), T.fillStyle = "rgba(255, 0, 0, 0.75)", T.strokeStyle = "rgba(255, 0, 0, 0.75)", T.lineWidth = 1, T.fillText("1 frame = " + F + " ms = " + q + " fps", 0, 20), T.strokeRect(0, 30, 250, 20), T.fillRect(0, 30, 250 * Math.min(q / 60, 1), 20) } n || (d[s.SELECT_BOX] = !1) } if (f && 1 !== h) { var V = u.contexts[s.NODE], U = s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_NODE], H = u.contexts[s.DRAG], G = s.data.bufferCanvases[s.MOTIONBLUR_BUFFER_DRAG], W = function (e, t, n) { e.setTransform(1, 0, 0, 1, 0, 0), n || !b ? e.clearRect(0, 0, s.canvasWidth, s.canvasHeight) : C(e, 0, 0, s.canvasWidth, s.canvasHeight); var r = h; e.drawImage(t, 0, 0, s.canvasWidth * r, s.canvasHeight * r, 0, 0, s.canvasWidth, s.canvasHeight) }; (d[s.NODE] || M[s.NODE]) && (W(V, U, M[s.NODE]), d[s.NODE] = !1), (d[s.DRAG] || M[s.DRAG]) && (W(H, G, M[s.DRAG]), d[s.DRAG] = !1) } s.prevViewport = E, s.clearingMotionBlur && (s.clearingMotionBlur = !1, s.motionBlurCleared = !0, s.motionBlur = !0), f && (s.motionBlurTimeout = setTimeout((function () { s.motionBlurTimeout = null, s.clearedForMotionBlur[s.NODE] = !1, s.clearedForMotionBlur[s.DRAG] = !1, s.motionBlur = !1, s.clearingMotionBlur = !p, s.mbFrames = 0, d[s.NODE] = !0, d[s.DRAG] = !0, s.redraw() }), 100)), t || c.emit("render") }, e.exports = r }, function (e, t, n) { "use strict"; for (var r = n(2), i = { drawPolygonPath: function (e, t, n, r, i, o) { var a = r / 2, s = i / 2; e.beginPath && e.beginPath(), e.moveTo(t + a * o[0], n + s * o[1]); for (var l = 1; l < o.length / 2; l++)e.lineTo(t + a * o[2 * l], n + s * o[2 * l + 1]); e.closePath() }, drawRoundRectanglePath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = r.getRoundRectangleRadius(i, o); e.beginPath && e.beginPath(), e.moveTo(t, n - s), e.arcTo(t + a, n - s, t + a, n, l), e.arcTo(t + a, n + s, t, n + s, l), e.arcTo(t - a, n + s, t - a, n, l), e.arcTo(t - a, n - s, t, n - s, l), e.lineTo(t, n - s), e.closePath() }, drawBottomRoundRectanglePath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = r.getRoundRectangleRadius(i, o); e.beginPath && e.beginPath(), e.moveTo(t, n - s), e.lineTo(t + a, n - s), e.lineTo(t + a, n), e.arcTo(t + a, n + s, t, n + s, l), e.arcTo(t - a, n + s, t - a, n, l), e.lineTo(t - a, n - s), e.lineTo(t, n - s), e.closePath() }, drawCutRectanglePath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = r.getCutRectangleCornerLength(); e.beginPath && e.beginPath(), e.moveTo(t - a + l, n - s), e.lineTo(t + a - l, n - s), e.lineTo(t + a, n - s + l), e.lineTo(t + a, n + s - l), e.lineTo(t + a - l, n + s), e.lineTo(t - a + l, n + s), e.lineTo(t - a, n + s - l), e.lineTo(t - a, n - s + l), e.closePath() }, drawBarrelPath: function (e, t, n, i, o) { var a = i / 2, s = o / 2, l = t - a, c = t + a, u = n - s, d = n + s, p = r.getBarrelCurveConstants(i, o), f = p.widthOffset, h = p.heightOffset, g = p.ctrlPtOffsetPct * f; e.beginPath && e.beginPath(), e.moveTo(l, u + h), e.lineTo(l, d - h), e.quadraticCurveTo(l + g, d, l + f, d), e.lineTo(c - f, d), e.quadraticCurveTo(c - g, d, c, d - h), e.lineTo(c, u + h), e.quadraticCurveTo(c - g, u, c - f, u), e.lineTo(l + f, u), e.quadraticCurveTo(l + g, u, l, u + h), e.closePath() } }, o = Math.sin(0), a = Math.cos(0), s = {}, l = {}, c = Math.PI / 40, u = 0 * Math.PI; u < 2 * Math.PI; u += c)s[u] = Math.sin(u), l[u] = Math.cos(u); i.drawEllipsePath = function (e, t, n, r, i) { if (e.beginPath && e.beginPath(), e.ellipse) e.ellipse(t, n, r / 2, i / 2, 0, 0, 2 * Math.PI); else for (var u, d, p = r / 2, f = i / 2, h = 0 * Math.PI; h < 2 * Math.PI; h += c)u = t - p * s[h] * o + p * l[h] * a, d = n + f * l[h] * o + f * s[h] * a, 0 === h ? e.moveTo(u, d) : e.lineTo(u, d); e.closePath() }, e.exports = i }, function (e, t, n) { "use strict"; var r = n(0), i = {}; function o(e) { var t = e.indexOf(","); return e.substr(t + 1) } function a(e, t, n) { var r = t.toDataURL(n, e.quality); switch (e.output) { case "blob": return function (e, t) { for (var n = atob(e), r = new ArrayBuffer(n.length), i = new Uint8Array(r), o = 0; o < n.length; o++)i[o] = n.charCodeAt(o); return new Blob([r], { type: t }) }(o(r), n); case "base64": return o(r); case "base64uri": default: return r } } i.createBuffer = function (e, t) { var n = document.createElement("canvas"); return n.width = e, n.height = t, [n, n.getContext("2d")] }, i.bufferCanvasImage = function (e) { var t = this.cy, n = t.mutableElements().boundingBox(), i = this.findContainerClientCoords(), o = e.full ? Math.ceil(n.w) : i[2], a = e.full ? Math.ceil(n.h) : i[3], s = r.number(e.maxWidth) || r.number(e.maxHeight), l = this.getPixelRatio(), c = 1; if (void 0 !== e.scale) o *= e.scale, a *= e.scale, c = e.scale; else if (s) { var u = 1 / 0, d = 1 / 0; r.number(e.maxWidth) && (u = c * e.maxWidth / o), r.number(e.maxHeight) && (d = c * e.maxHeight / a), o *= c = Math.min(u, d), a *= c } s || (o *= l, a *= l, c *= l); var p = document.createElement("canvas"); p.width = o, p.height = a, p.style.width = o + "px", p.style.height = a + "px"; var f = p.getContext("2d"); if (o > 0 && a > 0) { f.clearRect(0, 0, o, a), f.globalCompositeOperation = "source-over"; var h = this.getCachedZSortedEles(); if (e.full) f.translate(-n.x1 * c, -n.y1 * c), f.scale(c, c), this.drawElements(f, h), f.scale(1 / c, 1 / c), f.translate(n.x1 * c, n.y1 * c); else { var g = t.pan(), m = { x: g.x * c, y: g.y * c }; c *= t.zoom(), f.translate(m.x, m.y), f.scale(c, c), this.drawElements(f, h), f.scale(1 / c, 1 / c), f.translate(-m.x, -m.y) } e.bg && (f.globalCompositeOperation = "destination-over", f.fillStyle = e.bg, f.rect(0, 0, o, a), f.fill()) } return p }, i.png = function (e) { return a(e, this.bufferCanvasImage(e), "image/png") }, i.jpg = function (e) { return a(e, this.bufferCanvasImage(e), "image/jpeg") }, e.exports = i }, function (e, t, n) { "use strict"; var r = { nodeShapeImpl: function (e, t, n, r, i, o, a) { switch (e) { case "ellipse": return this.drawEllipsePath(t, n, r, i, o); case "polygon": return this.drawPolygonPath(t, n, r, i, o, a); case "roundrectangle": return this.drawRoundRectanglePath(t, n, r, i, o); case "cutrectangle": return this.drawCutRectanglePath(t, n, r, i, o); case "bottomroundrectangle": return this.drawBottomRoundRectanglePath(t, n, r, i, o); case "barrel": return this.drawBarrelPath(t, n, r, i, o) } } }; e.exports = r }, function (e, t, n) { "use strict"; var r = n(0), i = n(1), o = n(18), a = function e() { if (!(this instanceof e)) return new e; this.length = 0 }, s = a.prototype; s.instanceString = function () { return "stylesheet" }, s.selector = function (e) { return this[this.length++] = { selector: e, properties: [] }, this }, s.css = function (e, t) { var n = this.length - 1; if (r.string(e)) this[n].properties.push({ name: e, value: t }); else if (r.plainObject(e)) for (var a = e, s = 0; s < o.properties.length; s++) { var l = o.properties[s], c = a[l.name]; if (void 0 === c && (c = a[i.dash2camel(l.name)]), void 0 !== c) { var u = l.name, d = c; this[n].properties.push({ name: u, value: d }) } } return this }, s.style = s.css, s.generateStyle = function (e) { var t = new o(e); return this.appendToStyle(t) }, s.appendToStyle = function (e) { for (var t = 0; t < this.length; t++) { var n = this[t], r = n.selector, i = n.properties; e.selector(r); for (var o = 0; o < i.length; o++) { var a = i[o]; e.css(a.name, a.value) } } return e }, e.exports = a }, function (e, t, n) { "use strict"; e.exports = "snapshot-2fd4aa6cc2-1531011493999" }]) + }, e.exports = r(n(241), n(242)) + }).call(this, n(238).setImmediate) + }, function (e, t, n) { (function (e) { var r = void 0 !== e && e || "undefined" != typeof self && self || window, i = Function.prototype.apply; function o(e, t) { this._id = e, this._clearFn = t } t.setTimeout = function () { return new o(i.call(setTimeout, r, arguments), clearTimeout) }, t.setInterval = function () { return new o(i.call(setInterval, r, arguments), clearInterval) }, t.clearTimeout = t.clearInterval = function (e) { e && e.close() }, o.prototype.unref = o.prototype.ref = function () { }, o.prototype.close = function () { this._clearFn.call(r, this._id) }, t.enroll = function (e, t) { clearTimeout(e._idleTimeoutId), e._idleTimeout = t }, t.unenroll = function (e) { clearTimeout(e._idleTimeoutId), e._idleTimeout = -1 }, t._unrefActive = t.active = function (e) { clearTimeout(e._idleTimeoutId); var t = e._idleTimeout; t >= 0 && (e._idleTimeoutId = setTimeout((function () { e._onTimeout && e._onTimeout() }), t)) }, n(239), t.setImmediate = "undefined" != typeof self && self.setImmediate || void 0 !== e && e.setImmediate || this && this.setImmediate, t.clearImmediate = "undefined" != typeof self && self.clearImmediate || void 0 !== e && e.clearImmediate || this && this.clearImmediate }).call(this, n(35)) }, function (e, t, n) { (function (e, t) { !function (e, n) { "use strict"; if (!e.setImmediate) { var r, i, o, a, s, l = 1, c = {}, u = !1, d = e.document, p = Object.getPrototypeOf && Object.getPrototypeOf(e); p = p && p.setTimeout ? p : e, "[object process]" === {}.toString.call(e.process) ? r = function (e) { t.nextTick((function () { h(e) })) } : !function () { if (e.postMessage && !e.importScripts) { var t = !0, n = e.onmessage; return e.onmessage = function () { t = !1 }, e.postMessage("", "*"), e.onmessage = n, t } }() ? e.MessageChannel ? ((o = new MessageChannel).port1.onmessage = function (e) { h(e.data) }, r = function (e) { o.port2.postMessage(e) }) : d && "onreadystatechange" in d.createElement("script") ? (i = d.documentElement, r = function (e) { var t = d.createElement("script"); t.onreadystatechange = function () { h(e), t.onreadystatechange = null, i.removeChild(t), t = null }, i.appendChild(t) }) : r = function (e) { setTimeout(h, 0, e) } : (a = "setImmediate$" + Math.random() + "$", s = function (t) { t.source === e && "string" == typeof t.data && 0 === t.data.indexOf(a) && h(+t.data.slice(a.length)) }, e.addEventListener ? e.addEventListener("message", s, !1) : e.attachEvent("onmessage", s), r = function (t) { e.postMessage(a + t, "*") }), p.setImmediate = function (e) { "function" != typeof e && (e = new Function("" + e)); for (var t = new Array(arguments.length - 1), n = 0; n < t.length; n++)t[n] = arguments[n + 1]; var i = { callback: e, args: t }; return c[l] = i, r(l), l++ }, p.clearImmediate = f } function f(e) { delete c[e] } function h(e) { if (u) setTimeout(h, 0, e); else { var t = c[e]; if (t) { u = !0; try { !function (e) { var t = e.callback, n = e.args; switch (n.length) { case 0: t(); break; case 1: t(n[0]); break; case 2: t(n[0], n[1]); break; case 3: t(n[0], n[1], n[2]); break; default: t.apply(void 0, n) } }(t) } finally { f(e), u = !1 } } } } }("undefined" == typeof self ? void 0 === e ? this : e : self) }).call(this, n(35), n(240)) }, function (e, t) { var n, r, i = e.exports = {}; function o() { throw new Error("setTimeout has not been defined") } function a() { throw new Error("clearTimeout has not been defined") } function s(e) { if (n === setTimeout) return setTimeout(e, 0); if ((n === o || !n) && setTimeout) return n = setTimeout, setTimeout(e, 0); try { return n(e, 0) } catch (t) { try { return n.call(null, e, 0) } catch (t) { return n.call(this, e, 0) } } } !function () { try { n = "function" == typeof setTimeout ? setTimeout : o } catch (e) { n = o } try { r = "function" == typeof clearTimeout ? clearTimeout : a } catch (e) { r = a } }(); var l, c = [], u = !1, d = -1; function p() { u && l && (u = !1, l.length ? c = l.concat(c) : d = -1, c.length && f()) } function f() { if (!u) { var e = s(p); u = !0; for (var t = c.length; t;) { for (l = c, c = []; ++d < t;)l && l[d].run(); d = -1, t = c.length } l = null, u = !1, function (e) { if (r === clearTimeout) return clearTimeout(e); if ((r === a || !r) && clearTimeout) return r = clearTimeout, clearTimeout(e); try { r(e) } catch (t) { try { return r.call(null, e) } catch (t) { return r.call(this, e) } } }(e) } } function h(e, t) { this.fun = e, this.array = t } function g() { } i.nextTick = function (e) { var t = new Array(arguments.length - 1); if (arguments.length > 1) for (var n = 1; n < arguments.length; n++)t[n - 1] = arguments[n]; c.push(new h(e, t)), 1 !== c.length || u || s(f) }, h.prototype.run = function () { this.fun.apply(null, this.array) }, i.title = "browser", i.browser = !0, i.env = {}, i.argv = [], i.version = "", i.versions = {}, i.on = g, i.addListener = g, i.once = g, i.off = g, i.removeListener = g, i.removeAllListeners = g, i.emit = g, i.prependListener = g, i.prependOnceListener = g, i.listeners = function (e) { return [] }, i.binding = function (e) { throw new Error("process.binding is not supported") }, i.cwd = function () { return "/" }, i.chdir = function (e) { throw new Error("process.chdir is not supported") }, i.umask = function () { return 0 } }, function (e, t, n) { (function (t) { var n = /^\s+|\s+$/g, r = /^[-+]0x[0-9a-f]+$/i, i = /^0b[01]+$/i, o = /^0o[0-7]+$/i, a = parseInt, s = "object" == typeof t && t && t.Object === Object && t, l = "object" == typeof self && self && self.Object === Object && self, c = s || l || Function("return this")(), u = Object.prototype.toString, d = Math.max, p = Math.min, f = function () { return c.Date.now() }; function h(e) { var t = typeof e; return !!e && ("object" == t || "function" == t) } function g(e) { if ("number" == typeof e) return e; if (function (e) { return "symbol" == typeof e || function (e) { return !!e && "object" == typeof e }(e) && "[object Symbol]" == u.call(e) }(e)) return NaN; if (h(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = h(t) ? t + "" : t } if ("string" != typeof e) return 0 === e ? e : +e; e = e.replace(n, ""); var s = i.test(e); return s || o.test(e) ? a(e.slice(2), s ? 2 : 8) : r.test(e) ? NaN : +e } e.exports = function (e, t, n) { var r, i, o, a, s, l, c = 0, u = !1, m = !1, v = !0; if ("function" != typeof e) throw new TypeError("Expected a function"); function b(t) { var n = r, o = i; return r = i = void 0, c = t, a = e.apply(o, n) } function y(e) { return c = e, s = setTimeout(w, t), u ? b(e) : a } function x(e) { var n = e - l; return void 0 === l || n >= t || n < 0 || m && e - c >= o } function w() { var e = f(); if (x(e)) return k(e); s = setTimeout(w, function (e) { var n = t - (e - l); return m ? p(n, o - (e - c)) : n }(e)) } function k(e) { return s = void 0, v && r ? b(e) : (r = i = void 0, a) } function A() { var e = f(), n = x(e); if (r = arguments, i = this, l = e, n) { if (void 0 === s) return y(l); if (m) return s = setTimeout(w, t), b(l) } return void 0 === s && (s = setTimeout(w, t)), a } return t = g(t) || 0, h(n) && (u = !!n.leading, o = (m = "maxWait" in n) ? d(g(n.maxWait) || 0, t) : o, v = "trailing" in n ? !!n.trailing : v), A.cancel = function () { void 0 !== s && clearTimeout(s), c = 0, r = l = i = s = void 0 }, A.flush = function () { return void 0 === s ? a : k(f()) }, A } }).call(this, n(35)) }, function (e, t, n) { e.exports = n(243) }, function (e, t, n) { var r, i, o; (function () { var n, a, s, l, c, u, d, p, f, h, g, m, v, b, y; s = Math.floor, h = Math.min, a = function (e, t) { return e < t ? -1 : e > t ? 1 : 0 }, f = function (e, t, n, r, i) { var o; if (null == n && (n = 0), null == i && (i = a), n < 0) throw new Error("lo must be non-negative"); for (null == r && (r = e.length); n < r;)i(t, e[o = s((n + r) / 2)]) < 0 ? r = o : n = o + 1; return [].splice.apply(e, [n, n - n].concat(t)), t }, u = function (e, t, n) { return null == n && (n = a), e.push(t), b(e, 0, e.length - 1, n) }, c = function (e, t) { var n, r; return null == t && (t = a), n = e.pop(), e.length ? (r = e[0], e[0] = n, y(e, 0, t)) : r = n, r }, p = function (e, t, n) { var r; return null == n && (n = a), r = e[0], e[0] = t, y(e, 0, n), r }, d = function (e, t, n) { var r; return null == n && (n = a), e.length && n(e[0], t) < 0 && (t = (r = [e[0], t])[0], e[0] = r[1], y(e, 0, n)), t }, l = function (e, t) { var n, r, i, o, l, c; for (null == t && (t = a), l = [], r = 0, i = (o = function () { c = []; for (var t = 0, n = s(e.length / 2); 0 <= n ? t < n : t > n; 0 <= n ? t++ : t--)c.push(t); return c }.apply(this).reverse()).length; r < i; r++)n = o[r], l.push(y(e, n, t)); return l }, v = function (e, t, n) { var r; if (null == n && (n = a), -1 !== (r = e.indexOf(t))) return b(e, 0, r, n), y(e, r, n) }, g = function (e, t, n) { var r, i, o, s, c; if (null == n && (n = a), !(i = e.slice(0, t)).length) return i; for (l(i, n), o = 0, s = (c = e.slice(t)).length; o < s; o++)r = c[o], d(i, r, n); return i.sort(n).reverse() }, m = function (e, t, n) { var r, i, o, s, u, d, p, g, m; if (null == n && (n = a), 10 * t <= e.length) { if (!(o = e.slice(0, t).sort(n)).length) return o; for (i = o[o.length - 1], s = 0, d = (p = e.slice(t)).length; s < d; s++)n(r = p[s], i) < 0 && (f(o, r, 0, null, n), o.pop(), i = o[o.length - 1]); return o } for (l(e, n), m = [], u = 0, g = h(t, e.length); 0 <= g ? u < g : u > g; 0 <= g ? ++u : --u)m.push(c(e, n)); return m }, b = function (e, t, n, r) { var i, o, s; for (null == r && (r = a), i = e[n]; n > t && r(i, o = e[s = n - 1 >> 1]) < 0;)e[n] = o, n = s; return e[n] = i }, y = function (e, t, n) { var r, i, o, s, l; for (null == n && (n = a), i = e.length, l = t, o = e[t], r = 2 * t + 1; r < i;)(s = r + 1) < i && !(n(e[r], e[s]) < 0) && (r = s), e[t] = e[r], r = 2 * (t = r) + 1; return e[t] = o, b(e, l, t, n) }, n = function () { function e(e) { this.cmp = null != e ? e : a, this.nodes = [] } return e.push = u, e.pop = c, e.replace = p, e.pushpop = d, e.heapify = l, e.updateItem = v, e.nlargest = g, e.nsmallest = m, e.prototype.push = function (e) { return u(this.nodes, e, this.cmp) }, e.prototype.pop = function () { return c(this.nodes, this.cmp) }, e.prototype.peek = function () { return this.nodes[0] }, e.prototype.contains = function (e) { return -1 !== this.nodes.indexOf(e) }, e.prototype.replace = function (e) { return p(this.nodes, e, this.cmp) }, e.prototype.pushpop = function (e) { return d(this.nodes, e, this.cmp) }, e.prototype.heapify = function () { return l(this.nodes, this.cmp) }, e.prototype.updateItem = function (e) { return v(this.nodes, e, this.cmp) }, e.prototype.clear = function () { return this.nodes = [] }, e.prototype.empty = function () { return 0 === this.nodes.length }, e.prototype.size = function () { return this.nodes.length }, e.prototype.clone = function () { var t; return (t = new e).nodes = this.nodes.slice(0), t }, e.prototype.toArray = function () { return this.nodes.slice(0) }, e.prototype.insert = e.prototype.push, e.prototype.top = e.prototype.peek, e.prototype.front = e.prototype.peek, e.prototype.has = e.prototype.contains, e.prototype.copy = e.prototype.clone, e }(), i = [], void 0 === (o = "function" == typeof (r = function () { return n }) ? r.apply(t, i) : r) || (e.exports = o) }).call(this) }, function (e, t, n) { var r; !function () { "use strict"; var i = "undefined" == typeof jQuery ? null : jQuery, o = function (e, t) { if (e) { var n, r = { menuItems: [], menuItemClasses: [], contextMenuClasses: [] }; e("core", "contextMenus", (function (e) { var i = this; i.scratch("cycontextmenus") || i.scratch("cycontextmenus", {}); var o, a = l("options"), s = l("cxtMenu"); function l(e) { return i.scratch("cycontextmenus")[e] } function c(e, t) { i.scratch("cycontextmenus")[e] = t } function u(e) { for (var t = "", n = 0; n < e.length; n++) { t += e[n], n !== e.length - 1 && (t += " ") } return t } function d(e) { e.css("display", "block") } function p(e) { e.css("display", "none") } function f(e, n, r) { function o(n) { c("currentCyEvent", n), function (e) { var n = l("cxtMenuPosition"), r = e.position || e.cyPosition; if (n != r) { s.children().css("display", "none"), c("anyVisibleChild", !1), c("cxtMenuPosition", r); var o = t(i.container()).offset(), a = e.renderedPosition || e.cyRenderedPosition, u = o.left + a.x, d = o.top + a.y; s.css("left", u), s.css("top", d) } }(n), e.data("show") && (s.is(":visible") || d(s), c("anyVisibleChild", !0), d(e)), !l("anyVisibleChild") && s.is(":visible") && p(s) } var a, u; r && i.on("cxttap", u = function (e) { (e.target || e.cyTarget) == i && o(e) }), n && i.on("cxttap", n, a = function (e) { o(e) }), e.data("cy-context-menus-cxtfcn", a), e.data("cy-context-menus-cxtcorefcn", u) } function h(e, t, n, r) { !function (e, t) { var n; e.on("click", n = function () { t(l("currentCyEvent")) }), e.data("call-on-click-function", n) }(e, t), f(e, n, r) } function g(e) { for (var t = 0; t < e.length; t++)m(e[t]) } function m(e) { var t, n = b(e); t = n, s.append(t), function (e) { e.click((function () { p(s), c("cxtMenuPosition", void 0) })) }(t), h(n, e.onClickFunction, e.selector, e.coreAsWell) } function v(e, n) { var r, i, o = b(e); r = o, i = t("#" + n), r.insertBefore(i), h(o, e.onClickFunction, e.selector, e.coreAsWell) } function b(e) { var n, r, i, o = (n = a.menuItemClasses, r = e.hasTrailingDivider, i = u(n), i += " cy-context-menus-cxt-menuitem", r && (i += " cy-context-menus-divider"), i), s = '" : s += ">" + e.content + ""; var l = t(s); return l.data("selector", e.selector), l.data("on-click-function", e.onClickFunction), l.data("show", void 0 === e.show || e.show), l } function y() { var e; l("active") && (e = s.children(), t(e).each((function () { x(t(this)) })), i.off("tapstart", n), s.remove(), c(s = void 0, void 0), c("active", !1), c("anyVisibleChild", !1)) } function x(e) { var n = "string" == typeof e ? t("#" + e) : e, r = n.data("cy-context-menus-cxtfcn"), o = n.data("selector"), a = n.data("call-on-click-function"), s = n.data("cy-context-menus-cxtcorefcn"); r && i.off("cxttap", o, r), s && i.off("cxttap", s), a && n.off("click", a), n.remove() } "get" !== e && (c("options", a = function (e, t) { var n = {}; for (var r in e) n[r] = e[r]; for (var r in t) n[r] = t[r]; return n }(r, e)), l("active") && y(), c("active", !0), o = u(a.contextMenuClasses), (s = t("
")).addClass("cy-context-menus-cxt-menu"), c("cxtMenu", s), t("body").append(s), s = s, g(a.menuItems), i.on("tapstart", n = function () { p(s), c("cxtMenuPosition", void 0), c("currentCyEvent", void 0) }), t(".cy-context-menus-cxt-menu").contextmenu((function () { return !1 }))); return function (e) { return { isActive: function () { return l("active") }, appendMenuItem: function (t) { return m(t), e }, appendMenuItems: function (t) { return g(t), e }, removeMenuItem: function (t) { return x(t), e }, setTrailingDivider: function (n, r) { return function (e, n) { var r = t("#" + e); n ? r.addClass("cy-context-menus-divider") : r.removeClass("cy-context-menus-divider") }(n, r), e }, insertBeforeMenuItem: function (t, n) { return v(t, n), e }, moveBeforeOtherMenuItem: function (n, r) { return function (e, n) { if (e !== n) { var r = t("#" + e).detach(), i = t("#" + n); r.insertBefore(i) } }(n, r), e }, disableMenuItem: function (n) { return t("#" + n).attr("disabled", !0), e }, enableMenuItem: function (n) { return t("#" + n).attr("disabled", !1), e }, hideMenuItem: function (n) { return t("#" + n).data("show", !1), p(t("#" + n)), e }, showMenuItem: function (n) { return t("#" + n).data("show", !0), d(t("#" + n)), e }, destroy: function () { return y(), e } } }(this) })) } }; e.exports && (e.exports = o), void 0 === (r = function () { return o }.call(t, n, t, e)) || (e.exports = r), "undefined" != typeof cytoscape && i && o(cytoscape, i) }() }, function (e, t, n) { var r; r = function (e) { return function (e) { var t = {}; function n(r) { if (t[r]) return t[r].exports; var i = t[r] = { i: r, l: !1, exports: {} }; return e[r].call(i.exports, i, i.exports, n), i.l = !0, i.exports } return n.m = e, n.c = t, n.d = function (e, t, r) { n.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: r }) }, n.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }) }, n.t = function (e, t) { if (1 & t && (e = n(e)), 8 & t) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var r = Object.create(null); if (n.r(r), Object.defineProperty(r, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e) for (var i in e) n.d(r, i, function (t) { return e[t] }.bind(null, i)); return r }, n.n = function (e) { var t = e && e.__esModule ? function () { return e.default } : function () { return e }; return n.d(t, "a", t), t }, n.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, n.p = "", n(n.s = 0) }([function (e, t, n) { var r = n(1), i = function (e) { e && e("layout", "dagre", r) }; "undefined" != typeof cytoscape && i(cytoscape), e.exports = i }, function (e, t, n) { function r(e) { return (r = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) { return typeof e } : function (e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e })(e) } var i = n(2), o = n(3), a = n(4); function s(e) { this.options = o({}, i, e) } s.prototype.run = function () { var e = this.options, t = e.cy, n = e.eles, i = function (e, t) { return "function" == typeof t ? t.apply(e, [e]) : t }, o = e.boundingBox || { x1: 0, y1: 0, w: t.width(), h: t.height() }; void 0 === o.x2 && (o.x2 = o.x1 + o.w), void 0 === o.w && (o.w = o.x2 - o.x1), void 0 === o.y2 && (o.y2 = o.y1 + o.h), void 0 === o.h && (o.h = o.y2 - o.y1); var s = new a.graphlib.Graph({ multigraph: !0, compound: !0 }), l = {}, c = function (e, t) { null != t && (l[e] = t) }; c("nodesep", e.nodeSep), c("edgesep", e.edgeSep), c("ranksep", e.rankSep), c("rankdir", e.rankDir), c("ranker", e.ranker), s.setGraph(l), s.setDefaultEdgeLabel((function () { return {} })), s.setDefaultNodeLabel((function () { return {} })); for (var u = n.nodes(), d = 0; d < u.length; d++) { var p = u[d], f = p.layoutDimensions(e); s.setNode(p.id(), { width: f.w, height: f.h, name: p.id() }) } for (var h = 0; h < u.length; h++) { var g = u[h]; g.isChild() && s.setParent(g.id(), g.parent().id()) } for (var m = n.edges().stdFilter((function (e) { return !e.source().isParent() && !e.target().isParent() })), v = 0; v < m.length; v++) { var b = m[v]; s.setEdge(b.source().id(), b.target().id(), { minlen: i(b, e.minLen), weight: i(b, e.edgeWeight), name: b.id() }, b.id()) } a.layout(s); for (var y, x = s.nodes(), w = 0; w < x.length; w++) { var k = x[w], A = s.node(k); t.getElementById(k).scratch().dagre = A } return e.boundingBox ? (y = { x1: 1 / 0, x2: -1 / 0, y1: 1 / 0, y2: -1 / 0 }, u.forEach((function (e) { var t = e.scratch().dagre; y.x1 = Math.min(y.x1, t.x), y.x2 = Math.max(y.x2, t.x), y.y1 = Math.min(y.y1, t.y), y.y2 = Math.max(y.y2, t.y) })), y.w = y.x2 - y.x1, y.h = y.y2 - y.y1) : y = o, u.layoutPositions(this, e, (function (t) { var n = (t = "object" === r(t) ? t : this).scratch().dagre; return function (t) { if (e.boundingBox) { var n = 0 === y.w ? 0 : (t.x - y.x1) / y.w, r = 0 === y.h ? 0 : (t.y - y.y1) / y.h; return { x: o.x1 + n * o.w, y: o.y1 + r * o.h } } return t }({ x: n.x, y: n.y }) })), this }, e.exports = s }, function (e, t) { var n = { nodeSep: void 0, edgeSep: void 0, rankSep: void 0, rankDir: void 0, ranker: void 0, minLen: function (e) { return 1 }, edgeWeight: function (e) { return 1 }, fit: !0, padding: 30, spacingFactor: void 0, nodeDimensionsIncludeLabels: !1, animate: !1, animateFilter: function (e, t) { return !0 }, animationDuration: 500, animationEasing: void 0, boundingBox: void 0, transform: function (e, t) { return t }, ready: function () { }, stop: function () { } }; e.exports = n }, function (e, t) { e.exports = null != Object.assign ? Object.assign.bind(Object) : function (e) { for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)n[r - 1] = arguments[r]; return n.forEach((function (t) { Object.keys(t).forEach((function (n) { return e[n] = t[n] })) })), e } }, function (t, n) { t.exports = e }]) }, e.exports = r(n(246)) }, function (e, t, n) { e.exports = { graphlib: n(30), layout: n(359), debug: n(420), util: { time: n(20).time, notime: n(20).notime }, version: n(421) } }, function (e, t, n) { e.exports = { Graph: n(116), version: n(348) } }, function (e, t, n) { var r = n(149); e.exports = function (e) { return r(e, 4) } }, function (e, t) { e.exports = function () { this.__data__ = [], this.size = 0 } }, function (e, t, n) { var r = n(75), i = Array.prototype.splice; e.exports = function (e) { var t = this.__data__, n = r(t, e); return !(n < 0) && (n == t.length - 1 ? t.pop() : i.call(t, n, 1), --this.size, !0) } }, function (e, t, n) { var r = n(75); e.exports = function (e) { var t = this.__data__, n = r(t, e); return n < 0 ? void 0 : t[n][1] } }, function (e, t, n) { var r = n(75); e.exports = function (e) { return r(this.__data__, e) > -1 } }, function (e, t, n) { var r = n(75); e.exports = function (e, t) { var n = this.__data__, i = r(n, e); return i < 0 ? (++this.size, n.push([e, t])) : n[i][1] = t, this } }, function (e, t, n) { var r = n(74); e.exports = function () { this.__data__ = new r, this.size = 0 } }, function (e, t) { e.exports = function (e) { var t = this.__data__, n = t.delete(e); return this.size = t.size, n } }, function (e, t) { e.exports = function (e) { return this.__data__.get(e) } }, function (e, t) { e.exports = function (e) { return this.__data__.has(e) } }, function (e, t, n) { var r = n(74), i = n(117), o = n(118); e.exports = function (e, t) { var n = this.__data__; if (n instanceof r) { var a = n.__data__; if (!i || a.length < 199) return a.push([e, t]), this.size = ++n.size, this; n = this.__data__ = new o(a) } return n.set(e, t), this.size = n.size, this } }, function (e, t, n) { var r = n(64), i = n(262), o = n(23), a = n(151), s = /^\[object .+?Constructor\]$/, l = Function.prototype, c = Object.prototype, u = l.toString, d = c.hasOwnProperty, p = RegExp("^" + u.call(d).replace(/[\\^$.*+?()[\]{}|]/g, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); e.exports = function (e) { return !(!o(e) || i(e)) && (r(e) ? p : s).test(a(e)) } }, function (e, t, n) { var r = n(58), i = Object.prototype, o = i.hasOwnProperty, a = i.toString, s = r ? r.toStringTag : void 0; e.exports = function (e) { var t = o.call(e, s), n = e[s]; try { e[s] = void 0; var r = !0 } catch (e) { } var i = a.call(e); return r && (t ? e[s] = n : delete e[s]), i } }, function (e, t) { var n = Object.prototype.toString; e.exports = function (e) { return n.call(e) } }, function (e, t, n) { var r, i = n(263), o = (r = /[^.]+$/.exec(i && i.keys && i.keys.IE_PROTO || "")) ? "Symbol(src)_1." + r : ""; e.exports = function (e) { return !!o && o in e } }, function (e, t, n) { var r = n(31)["__core-js_shared__"]; e.exports = r }, function (e, t) { e.exports = function (e, t) { return null == e ? void 0 : e[t] } }, function (e, t, n) { var r = n(266), i = n(74), o = n(117); e.exports = function () { this.size = 0, this.__data__ = { hash: new r, map: new (o || i), string: new r } } }, function (e, t, n) { var r = n(267), i = n(268), o = n(269), a = n(270), s = n(271); function l(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n;) { var r = e[t]; this.set(r[0], r[1]) } } l.prototype.clear = r, l.prototype.delete = i, l.prototype.get = o, l.prototype.has = a, l.prototype.set = s, e.exports = l }, function (e, t, n) { var r = n(76); e.exports = function () { this.__data__ = r ? r(null) : {}, this.size = 0 } }, function (e, t) { e.exports = function (e) { var t = this.has(e) && delete this.__data__[e]; return this.size -= t ? 1 : 0, t } }, function (e, t, n) { var r = n(76), i = Object.prototype.hasOwnProperty; e.exports = function (e) { var t = this.__data__; if (r) { var n = t[e]; return "__lodash_hash_undefined__" === n ? void 0 : n } return i.call(t, e) ? t[e] : void 0 } }, function (e, t, n) { var r = n(76), i = Object.prototype.hasOwnProperty; e.exports = function (e) { var t = this.__data__; return r ? void 0 !== t[e] : i.call(t, e) } }, function (e, t, n) { var r = n(76); e.exports = function (e, t) { var n = this.__data__; return this.size += this.has(e) ? 0 : 1, n[e] = r && void 0 === t ? "__lodash_hash_undefined__" : t, this } }, function (e, t, n) { var r = n(77); e.exports = function (e) { var t = r(this, e).delete(e); return this.size -= t ? 1 : 0, t } }, function (e, t) { e.exports = function (e) { var t = typeof e; return "string" == t || "number" == t || "symbol" == t || "boolean" == t ? "__proto__" !== e : null === e } }, function (e, t, n) { var r = n(77); e.exports = function (e) { return r(this, e).get(e) } }, function (e, t, n) { var r = n(77); e.exports = function (e) { return r(this, e).has(e) } }, function (e, t, n) { var r = n(77); e.exports = function (e, t) { var n = r(this, e), i = n.size; return n.set(e, t), this.size += n.size == i ? 0 : 1, this } }, function (e, t, n) { var r = n(65), i = n(41); e.exports = function (e, t) { return e && r(t, i(t), e) } }, function (e, t) { e.exports = function (e, t) { for (var n = -1, r = Array(e); ++n < e;)r[n] = t(n); return r } }, function (e, t, n) { var r = n(47), i = n(34); e.exports = function (e) { return i(e) && "[object Arguments]" == r(e) } }, function (e, t) { e.exports = function () { return !1 } }, function (e, t, n) { var r = n(47), i = n(120), o = n(34), a = {}; a["[object Float32Array]"] = a["[object Float64Array]"] = a["[object Int8Array]"] = a["[object Int16Array]"] = a["[object Int32Array]"] = a["[object Uint8Array]"] = a["[object Uint8ClampedArray]"] = a["[object Uint16Array]"] = a["[object Uint32Array]"] = !0, a["[object Arguments]"] = a["[object Array]"] = a["[object ArrayBuffer]"] = a["[object Boolean]"] = a["[object DataView]"] = a["[object Date]"] = a["[object Error]"] = a["[object Function]"] = a["[object Map]"] = a["[object Number]"] = a["[object Object]"] = a["[object RegExp]"] = a["[object Set]"] = a["[object String]"] = a["[object WeakMap]"] = !1, e.exports = function (e) { return o(e) && i(e.length) && !!a[r(e)] } }, function (e, t, n) { var r = n(154)(Object.keys, Object); e.exports = r }, function (e, t, n) { var r = n(65), i = n(48); e.exports = function (e, t) { return e && r(t, i(t), e) } }, function (e, t, n) { var r = n(23), i = n(83), o = n(285), a = Object.prototype.hasOwnProperty; e.exports = function (e) { if (!r(e)) return o(e); var t = i(e), n = []; for (var s in e) ("constructor" != s || !t && a.call(e, s)) && n.push(s); return n } }, function (e, t) { e.exports = function (e) { var t = []; if (null != e) for (var n in Object(e)) t.push(n); return t } }, function (e, t, n) { var r = n(65), i = n(123); e.exports = function (e, t) { return r(e, i(e), t) } }, function (e, t, n) { var r = n(65), i = n(159); e.exports = function (e, t) { return r(e, i(e), t) } }, function (e, t, n) { var r = n(161), i = n(159), o = n(48); e.exports = function (e) { return r(e, o, i) } }, function (e, t, n) { var r = n(46)(n(31), "DataView"); e.exports = r }, function (e, t, n) { var r = n(46)(n(31), "Promise"); e.exports = r }, function (e, t, n) { var r = n(46)(n(31), "WeakMap"); e.exports = r }, function (e, t) { var n = Object.prototype.hasOwnProperty; e.exports = function (e) { var t = e.length, r = new e.constructor(t); return t && "string" == typeof e[0] && n.call(e, "index") && (r.index = e.index, r.input = e.input), r } }, function (e, t, n) { var r = n(125), i = n(294), o = n(295), a = n(296), s = n(164); e.exports = function (e, t, n) { var l = e.constructor; switch (t) { case "[object ArrayBuffer]": return r(e); case "[object Boolean]": case "[object Date]": return new l(+e); case "[object DataView]": return i(e, n); case "[object Float32Array]": case "[object Float64Array]": case "[object Int8Array]": case "[object Int16Array]": case "[object Int32Array]": case "[object Uint8Array]": case "[object Uint8ClampedArray]": case "[object Uint16Array]": case "[object Uint32Array]": return s(e, n); case "[object Map]": return new l; case "[object Number]": case "[object String]": return new l(e); case "[object RegExp]": return o(e); case "[object Set]": return new l; case "[object Symbol]": return a(e) } } }, function (e, t, n) { var r = n(125); e.exports = function (e, t) { var n = t ? r(e.buffer) : e.buffer; return new e.constructor(n, e.byteOffset, e.byteLength) } }, function (e, t) { var n = /\w*$/; e.exports = function (e) { var t = new e.constructor(e.source, n.exec(e)); return t.lastIndex = e.lastIndex, t } }, function (e, t, n) { var r = n(58), i = r ? r.prototype : void 0, o = i ? i.valueOf : void 0; e.exports = function (e) { return o ? Object(o.call(e)) : {} } }, function (e, t, n) { var r = n(298), i = n(82), o = n(121), a = o && o.isMap, s = a ? i(a) : r; e.exports = s }, function (e, t, n) { var r = n(60), i = n(34); e.exports = function (e) { return i(e) && "[object Map]" == r(e) } }, function (e, t, n) { var r = n(300), i = n(82), o = n(121), a = o && o.isSet, s = a ? i(a) : r; e.exports = s }, function (e, t, n) { var r = n(60), i = n(34); e.exports = function (e) { return i(e) && "[object Set]" == r(e) } }, function (e, t) { e.exports = function (e) { return function (t, n, r) { for (var i = -1, o = Object(t), a = r(t), s = a.length; s--;) { var l = a[e ? s : ++i]; if (!1 === n(o[l], l, o)) break } return t } } }, function (e, t, n) { var r = n(36); e.exports = function (e, t) { return function (n, i) { if (null == n) return n; if (!r(n)) return e(n, i); for (var o = n.length, a = t ? o : -1, s = Object(n); (t ? a-- : ++a < o) && !1 !== i(s[a], a, s);); return n } } }, function (e, t, n) { var r = n(85); e.exports = function (e, t) { var n = []; return r(e, (function (e, r, i) { t(e, r, i) && n.push(e) })), n } }, function (e, t, n) { var r = n(305), i = n(313), o = n(176); e.exports = function (e) { var t = i(e); return 1 == t.length && t[0][2] ? o(t[0][0], t[0][1]) : function (n) { return n === e || r(n, e, t) } } }, function (e, t, n) { var r = n(73), i = n(171); e.exports = function (e, t, n, o) { var a = n.length, s = a, l = !o; if (null == e) return !s; for (e = Object(e); a--;) { var c = n[a]; if (l && c[2] ? c[1] !== e[c[0]] : !(c[0] in e)) return !1 } for (; ++a < s;) { var u = (c = n[a])[0], d = e[u], p = c[1]; if (l && c[2]) { if (void 0 === d && !(u in e)) return !1 } else { var f = new r; if (o) var h = o(d, p, u, e, t, f); if (!(void 0 === h ? i(p, d, 3, o, f) : h)) return !1 } } return !0 } }, function (e, t, n) { var r = n(73), i = n(172), o = n(310), a = n(312), s = n(60), l = n(13), c = n(59), u = n(67), d = "[object Object]", p = Object.prototype.hasOwnProperty; e.exports = function (e, t, n, f, h, g) { var m = l(e), v = l(t), b = m ? "[object Array]" : s(e), y = v ? "[object Array]" : s(t), x = (b = "[object Arguments]" == b ? d : b) == d, w = (y = "[object Arguments]" == y ? d : y) == d, k = b == y; if (k && c(e)) { if (!c(t)) return !1; m = !0, x = !1 } if (k && !x) return g || (g = new r), m || u(e) ? i(e, t, n, f, h, g) : o(e, t, b, n, f, h, g); if (!(1 & n)) { var A = x && p.call(e, "__wrapped__"), E = w && p.call(t, "__wrapped__"); if (A || E) { var S = A ? e.value() : e, $ = E ? t.value() : t; return g || (g = new r), h(S, $, n, f, g) } } return !!k && (g || (g = new r), a(e, t, n, f, h, g)) } }, function (e, t) { e.exports = function (e) { return this.__data__.set(e, "__lodash_hash_undefined__"), this } }, function (e, t) { e.exports = function (e) { return this.__data__.has(e) } }, function (e, t) { e.exports = function (e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r;)if (t(e[n], n, e)) return !0; return !1 } }, function (e, t, n) { var r = n(58), i = n(163), o = n(57), a = n(172), s = n(311), l = n(129), c = r ? r.prototype : void 0, u = c ? c.valueOf : void 0; e.exports = function (e, t, n, r, c, d, p) { switch (n) { case "[object DataView]": if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) return !1; e = e.buffer, t = t.buffer; case "[object ArrayBuffer]": return !(e.byteLength != t.byteLength || !d(new i(e), new i(t))); case "[object Boolean]": case "[object Date]": case "[object Number]": return o(+e, +t); case "[object Error]": return e.name == t.name && e.message == t.message; case "[object RegExp]": case "[object String]": return e == t + ""; case "[object Map]": var f = s; case "[object Set]": var h = 1 & r; if (f || (f = l), e.size != t.size && !h) return !1; var g = p.get(e); if (g) return g == t; r |= 2, p.set(e, t); var m = a(f(e), f(t), r, c, d, p); return p.delete(e), m; case "[object Symbol]": if (u) return u.call(e) == u.call(t) }return !1 } }, function (e, t) { e.exports = function (e) { var t = -1, n = Array(e.size); return e.forEach((function (e, r) { n[++t] = [r, e] })), n } }, function (e, t, n) { var r = n(160), i = Object.prototype.hasOwnProperty; e.exports = function (e, t, n, o, a, s) { var l = 1 & n, c = r(e), u = c.length; if (u != r(t).length && !l) return !1; for (var d = u; d--;) { var p = c[d]; if (!(l ? p in t : i.call(t, p))) return !1 } var f = s.get(e), h = s.get(t); if (f && h) return f == t && h == e; var g = !0; s.set(e, t), s.set(t, e); for (var m = l; ++d < u;) { var v = e[p = c[d]], b = t[p]; if (o) var y = l ? o(b, v, p, t, e, s) : o(v, b, p, e, t, s); if (!(void 0 === y ? v === b || a(v, b, n, o, s) : y)) { g = !1; break } m || (m = "constructor" == p) } if (g && !m) { var x = e.constructor, w = t.constructor; x == w || !("constructor" in e) || !("constructor" in t) || "function" == typeof x && x instanceof x && "function" == typeof w && w instanceof w || (g = !1) } return s.delete(e), s.delete(t), g } }, function (e, t, n) { var r = n(175), i = n(41); e.exports = function (e) { for (var t = i(e), n = t.length; n--;) { var o = t[n], a = e[o]; t[n] = [o, a, r(a)] } return t } }, function (e, t, n) { var r = n(171), i = n(315), o = n(178), a = n(130), s = n(175), l = n(176), c = n(68); e.exports = function (e, t) { return a(e) && s(t) ? l(c(e), t) : function (n) { var a = i(n, e); return void 0 === a && a === t ? o(n, e) : r(t, a, 3) } } }, function (e, t, n) { var r = n(86); e.exports = function (e, t, n) { var i = null == e ? void 0 : r(e, t); return void 0 === i ? n : i } }, function (e, t, n) { var r = n(317), i = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, o = /\\(\\)?/g, a = r((function (e) { var t = []; return 46 === e.charCodeAt(0) && t.push(""), e.replace(i, (function (e, n, r, i) { t.push(r ? i.replace(o, "$1") : n || e) })), t })); e.exports = a }, function (e, t, n) { var r = n(318); e.exports = function (e) { var t = r(e, (function (e) { return 500 === n.size && n.clear(), e })), n = t.cache; return t } }, function (e, t, n) { var r = n(118); function i(e, t) { if ("function" != typeof e || null != t && "function" != typeof t) throw new TypeError("Expected a function"); var n = function () { var r = arguments, i = t ? t.apply(this, r) : r[0], o = n.cache; if (o.has(i)) return o.get(i); var a = e.apply(this, r); return n.cache = o.set(i, a) || o, a }; return n.cache = new (i.Cache || r), n } i.Cache = r, e.exports = i }, function (e, t, n) { var r = n(58), i = n(88), o = n(13), a = n(61), s = r ? r.prototype : void 0, l = s ? s.toString : void 0; e.exports = function e(t) { if ("string" == typeof t) return t; if (o(t)) return i(t, e) + ""; if (a(t)) return l ? l.call(t) : ""; var n = t + ""; return "0" == n && 1 / t == -1 / 0 ? "-0" : n } }, function (e, t) { e.exports = function (e, t) { return null != e && t in Object(e) } }, function (e, t, n) { var r = n(180), i = n(322), o = n(130), a = n(68); e.exports = function (e) { return o(e) ? r(a(e)) : i(e) } }, function (e, t, n) { var r = n(86); e.exports = function (e) { return function (t) { return r(t, e) } } }, function (e, t) { var n = Object.prototype.hasOwnProperty; e.exports = function (e, t) { return null != e && n.call(e, t) } }, function (e, t, n) { var r = n(122), i = n(60), o = n(66), a = n(13), s = n(36), l = n(59), c = n(83), u = n(67), d = Object.prototype.hasOwnProperty; e.exports = function (e) { if (null == e) return !0; if (s(e) && (a(e) || "string" == typeof e || "function" == typeof e.splice || l(e) || u(e) || o(e))) return !e.length; var t = i(e); if ("[object Map]" == t || "[object Set]" == t) return !e.size; if (c(e)) return !r(e).length; for (var n in e) if (d.call(e, n)) return !1; return !0 } }, function (e, t) { e.exports = function (e, t, n, r) { var i = -1, o = null == e ? 0 : e.length; for (r && o && (n = e[++i]); ++i < o;)n = t(n, e[i], i, e); return n } }, function (e, t) { e.exports = function (e, t, n, r, i) { return i(e, (function (e, i, o) { n = r ? (r = !1, e) : t(n, e, i, o) })), n } }, function (e, t, n) { var r = n(122), i = n(60), o = n(36), a = n(328), s = n(329); e.exports = function (e) { if (null == e) return 0; if (o(e)) return a(e) ? s(e) : e.length; var t = i(e); return "[object Map]" == t || "[object Set]" == t ? e.size : r(e).length } }, function (e, t, n) { var r = n(47), i = n(13), o = n(34); e.exports = function (e) { return "string" == typeof e || !i(e) && o(e) && "[object String]" == r(e) } }, function (e, t, n) { var r = n(330), i = n(331), o = n(332); e.exports = function (e) { return i(e) ? o(e) : r(e) } }, function (e, t, n) { var r = n(180)("length"); e.exports = r }, function (e, t) { var n = RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"); e.exports = function (e) { return n.test(e) } }, function (e, t) { var n = "[\\ud800-\\udfff]", r = "[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]", i = "\\ud83c[\\udffb-\\udfff]", o = "[^\\ud800-\\udfff]", a = "(?:\\ud83c[\\udde6-\\uddff]){2}", s = "[\\ud800-\\udbff][\\udc00-\\udfff]", l = "(?:" + r + "|" + i + ")" + "?", c = "[\\ufe0e\\ufe0f]?" + l + ("(?:\\u200d(?:" + [o, a, s].join("|") + ")[\\ufe0e\\ufe0f]?" + l + ")*"), u = "(?:" + [o + r + "?", r, a, s, n].join("|") + ")", d = RegExp(i + "(?=" + i + ")|" + u + c, "g"); e.exports = function (e) { for (var t = d.lastIndex = 0; d.test(e);)++t; return t } }, function (e, t, n) { var r = n(119), i = n(166), o = n(127), a = n(37), s = n(84), l = n(13), c = n(59), u = n(64), d = n(23), p = n(67); e.exports = function (e, t, n) { var f = l(e), h = f || c(e) || p(e); if (t = a(t, 4), null == n) { var g = e && e.constructor; n = h ? f ? new g : [] : d(e) && u(g) ? i(s(e)) : {} } return (h ? r : o)(e, (function (e, r, i) { return t(n, e, r, i) })), n } }, function (e, t, n) { var r = n(131), i = n(89), o = n(339), a = n(189), s = i((function (e) { return o(r(e, 1, a, !0)) })); e.exports = s }, function (e, t, n) { var r = n(58), i = n(66), o = n(13), a = r ? r.isConcatSpreadable : void 0; e.exports = function (e) { return o(e) || i(e) || !!(a && e && e[a]) } }, function (e, t) { e.exports = function (e, t, n) { switch (n.length) { case 0: return e.call(t); case 1: return e.call(t, n[0]); case 2: return e.call(t, n[0], n[1]); case 3: return e.call(t, n[0], n[1], n[2]) }return e.apply(t, n) } }, function (e, t, n) { var r = n(126), i = n(152), o = n(49), a = i ? function (e, t) { return i(e, "toString", { configurable: !0, enumerable: !1, value: r(t), writable: !0 }) } : o; e.exports = a }, function (e, t) { var n = Date.now; e.exports = function (e) { var t = 0, r = 0; return function () { var i = n(), o = 16 - (i - r); if (r = i, o > 0) { if (++t >= 800) return arguments[0] } else t = 0; return e.apply(void 0, arguments) } } }, function (e, t, n) { var r = n(173), i = n(340), o = n(344), a = n(174), s = n(345), l = n(129); e.exports = function (e, t, n) { var c = -1, u = i, d = e.length, p = !0, f = [], h = f; if (n) p = !1, u = o; else if (d >= 200) { var g = t ? null : s(e); if (g) return l(g); p = !1, u = a, h = new r } else h = t ? [] : f; e: for (; ++c < d;) { var m = e[c], v = t ? t(m) : m; if (m = n || 0 !== m ? m : 0, p && v == v) { for (var b = h.length; b--;)if (h[b] === v) continue e; t && h.push(v), f.push(m) } else u(h, v, n) || (h !== f && h.push(v), f.push(m)) } return f } }, function (e, t, n) { var r = n(341); e.exports = function (e, t) { return !!(null == e ? 0 : e.length) && r(e, t, 0) > -1 } }, function (e, t, n) { var r = n(188), i = n(342), o = n(343); e.exports = function (e, t, n) { return t == t ? o(e, t, n) : r(e, i, n) } }, function (e, t) { e.exports = function (e) { return e != e } }, function (e, t) { e.exports = function (e, t, n) { for (var r = n - 1, i = e.length; ++r < i;)if (e[r] === t) return r; return -1 } }, function (e, t) { e.exports = function (e, t, n) { for (var r = -1, i = null == e ? 0 : e.length; ++r < i;)if (n(t, e[r])) return !0; return !1 } }, function (e, t, n) { var r = n(162), i = n(346), o = n(129), a = r && 1 / o(new r([, -0]))[1] == 1 / 0 ? function (e) { return new r(e) } : i; e.exports = a }, function (e, t) { e.exports = function () { } }, function (e, t, n) { var r = n(88); e.exports = function (e, t) { return r(t, (function (t) { return e[t] })) } }, function (e, t) { e.exports = "2.1.8" }, function (e, t, n) { var r = n(22), i = n(116); function o(e) { return r.map(e.nodes(), (function (t) { var n = e.node(t), i = e.parent(t), o = { v: t }; return r.isUndefined(n) || (o.value = n), r.isUndefined(i) || (o.parent = i), o })) } function a(e) { return r.map(e.edges(), (function (t) { var n = e.edge(t), i = { v: t.v, w: t.w }; return r.isUndefined(t.name) || (i.name = t.name), r.isUndefined(n) || (i.value = n), i })) } e.exports = { write: function (e) { var t = { options: { directed: e.isDirected(), multigraph: e.isMultigraph(), compound: e.isCompound() }, nodes: o(e), edges: a(e) }; r.isUndefined(e.graph()) || (t.value = r.clone(e.graph())); return t }, read: function (e) { var t = new i(e.options).setGraph(e.value); return r.each(e.nodes, (function (e) { t.setNode(e.v, e.value), e.parent && t.setParent(e.v, e.parent) })), r.each(e.edges, (function (e) { t.setEdge({ v: e.v, w: e.w, name: e.name }, e.value) })), t } } }, function (e, t, n) { e.exports = { components: n(351), dijkstra: n(191), dijkstraAll: n(352), findCycles: n(353), floydWarshall: n(354), isAcyclic: n(355), postorder: n(356), preorder: n(357), prim: n(358), tarjan: n(193), topsort: n(194) } }, function (e, t, n) { var r = n(22); e.exports = function (e) { var t, n = {}, i = []; function o(i) { r.has(n, i) || (n[i] = !0, t.push(i), r.each(e.successors(i), o), r.each(e.predecessors(i), o)) } return r.each(e.nodes(), (function (e) { t = [], o(e), t.length && i.push(t) })), i } }, function (e, t, n) { var r = n(191), i = n(22); e.exports = function (e, t, n) { return i.transform(e.nodes(), (function (i, o) { i[o] = r(e, o, t, n) }), {}) } }, function (e, t, n) { var r = n(22), i = n(193); e.exports = function (e) { return r.filter(i(e), (function (t) { return t.length > 1 || 1 === t.length && e.hasEdge(t[0], t[0]) })) } }, function (e, t, n) { var r = n(22); e.exports = function (e, t, n) { return function (e, t, n) { var r = {}, i = e.nodes(); return i.forEach((function (e) { r[e] = {}, r[e][e] = { distance: 0 }, i.forEach((function (t) { e !== t && (r[e][t] = { distance: Number.POSITIVE_INFINITY }) })), n(e).forEach((function (n) { var i = n.v === e ? n.w : n.v, o = t(n); r[e][i] = { distance: o, predecessor: e } })) })), i.forEach((function (e) { var t = r[e]; i.forEach((function (n) { var o = r[n]; i.forEach((function (n) { var r = o[e], i = t[n], a = o[n], s = r.distance + i.distance; s < a.distance && (a.distance = s, a.predecessor = i.predecessor) })) })) })), r }(e, t || i, n || function (t) { return e.outEdges(t) }) }; var i = r.constant(1) }, function (e, t, n) { var r = n(194); e.exports = function (e) { try { r(e) } catch (e) { if (e instanceof r.CycleException) return !1; throw e } return !0 } }, function (e, t, n) { var r = n(195); e.exports = function (e, t) { return r(e, t, "post") } }, function (e, t, n) { var r = n(195); e.exports = function (e, t) { return r(e, t, "pre") } }, function (e, t, n) { var r = n(22), i = n(116), o = n(192); e.exports = function (e, t) { var n, a = new i, s = {}, l = new o; function c(e) { var r = e.v === n ? e.w : e.v, i = l.priority(r); if (void 0 !== i) { var o = t(e); o < i && (s[r] = n, l.decrease(r, o)) } } if (0 === e.nodeCount()) return a; r.each(e.nodes(), (function (e) { l.add(e, Number.POSITIVE_INFINITY), a.setNode(e) })), l.decrease(e.nodes()[0], 0); var u = !1; for (; l.size() > 0;) { if (n = l.removeMin(), r.has(s, n)) a.setEdge(n, s[n]); else { if (u) throw new Error("Input graph is not connected: " + e); u = !0 } e.nodeEdges(n).forEach(c) } return a } }, function (e, t, n) { "use strict"; var r = n(11), i = n(399), o = n(402), a = n(403), s = n(20).normalizeRanks, l = n(405), c = n(20).removeEmptyRanks, u = n(406), d = n(407), p = n(408), f = n(409), h = n(418), g = n(20), m = n(30).Graph; e.exports = function (e, t) { var n = t && t.debugTiming ? g.time : g.notime; n("layout", (function () { var t = n(" buildLayoutGraph", (function () { return function (e) { var t = new m({ multigraph: !0, compound: !0 }), n = $(e.graph()); return t.setGraph(r.merge({}, b, S(n, v), r.pick(n, y))), r.forEach(e.nodes(), (function (n) { var i = $(e.node(n)); t.setNode(n, r.defaults(S(i, x), w)), t.setParent(n, e.parent(n)) })), r.forEach(e.edges(), (function (n) { var i = $(e.edge(n)); t.setEdge(n, r.merge({}, A, S(i, k), r.pick(i, E))) })), t }(e) })); n(" runLayout", (function () { !function (e, t) { t(" makeSpaceForEdgeLabels", (function () { !function (e) { var t = e.graph(); t.ranksep /= 2, r.forEach(e.edges(), (function (n) { var r = e.edge(n); r.minlen *= 2, "c" !== r.labelpos.toLowerCase() && ("TB" === t.rankdir || "BT" === t.rankdir ? r.width += r.labeloffset : r.height += r.labeloffset) })) }(e) })), t(" removeSelfEdges", (function () { !function (e) { r.forEach(e.edges(), (function (t) { if (t.v === t.w) { var n = e.node(t.v); n.selfEdges || (n.selfEdges = []), n.selfEdges.push({ e: t, label: e.edge(t) }), e.removeEdge(t) } })) }(e) })), t(" acyclic", (function () { i.run(e) })), t(" nestingGraph.run", (function () { u.run(e) })), t(" rank", (function () { a(g.asNonCompoundGraph(e)) })), t(" injectEdgeLabelProxies", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); if (n.width && n.height) { var r = e.node(t.v), i = { rank: (e.node(t.w).rank - r.rank) / 2 + r.rank, e: t }; g.addDummyNode(e, "edge-proxy", i, "_ep") } })) }(e) })), t(" removeEmptyRanks", (function () { c(e) })), t(" nestingGraph.cleanup", (function () { u.cleanup(e) })), t(" normalizeRanks", (function () { s(e) })), t(" assignRankMinMax", (function () { !function (e) { var t = 0; r.forEach(e.nodes(), (function (n) { var i = e.node(n); i.borderTop && (i.minRank = e.node(i.borderTop).rank, i.maxRank = e.node(i.borderBottom).rank, t = r.max(t, i.maxRank)) })), e.graph().maxRank = t }(e) })), t(" removeEdgeLabelProxies", (function () { !function (e) { r.forEach(e.nodes(), (function (t) { var n = e.node(t); "edge-proxy" === n.dummy && (e.edge(n.e).labelRank = n.rank, e.removeNode(t)) })) }(e) })), t(" normalize.run", (function () { o.run(e) })), t(" parentDummyChains", (function () { l(e) })), t(" addBorderSegments", (function () { d(e) })), t(" order", (function () { f(e) })), t(" insertSelfEdges", (function () { !function (e) { var t = g.buildLayerMatrix(e); r.forEach(t, (function (t) { var n = 0; r.forEach(t, (function (t, i) { var o = e.node(t); o.order = i + n, r.forEach(o.selfEdges, (function (t) { g.addDummyNode(e, "selfedge", { width: t.label.width, height: t.label.height, rank: o.rank, order: i + ++n, e: t.e, label: t.label }, "_se") })), delete o.selfEdges })) })) }(e) })), t(" adjustCoordinateSystem", (function () { p.adjust(e) })), t(" position", (function () { h(e) })), t(" positionSelfEdges", (function () { !function (e) { r.forEach(e.nodes(), (function (t) { var n = e.node(t); if ("selfedge" === n.dummy) { var r = e.node(n.e.v), i = r.x + r.width / 2, o = r.y, a = n.x - i, s = r.height / 2; e.setEdge(n.e, n.label), e.removeNode(t), n.label.points = [{ x: i + 2 * a / 3, y: o - s }, { x: i + 5 * a / 6, y: o - s }, { x: i + a, y: o }, { x: i + 5 * a / 6, y: o + s }, { x: i + 2 * a / 3, y: o + s }], n.label.x = n.x, n.label.y = n.y } })) }(e) })), t(" removeBorderNodes", (function () { !function (e) { r.forEach(e.nodes(), (function (t) { if (e.children(t).length) { var n = e.node(t), i = e.node(n.borderTop), o = e.node(n.borderBottom), a = e.node(r.last(n.borderLeft)), s = e.node(r.last(n.borderRight)); n.width = Math.abs(s.x - a.x), n.height = Math.abs(o.y - i.y), n.x = a.x + n.width / 2, n.y = i.y + n.height / 2 } })), r.forEach(e.nodes(), (function (t) { "border" === e.node(t).dummy && e.removeNode(t) })) }(e) })), t(" normalize.undo", (function () { o.undo(e) })), t(" fixupEdgeLabelCoords", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); if (r.has(n, "x")) switch ("l" !== n.labelpos && "r" !== n.labelpos || (n.width -= n.labeloffset), n.labelpos) { case "l": n.x -= n.width / 2 + n.labeloffset; break; case "r": n.x += n.width / 2 + n.labeloffset } })) }(e) })), t(" undoCoordinateSystem", (function () { p.undo(e) })), t(" translateGraph", (function () { !function (e) { var t = Number.POSITIVE_INFINITY, n = 0, i = Number.POSITIVE_INFINITY, o = 0, a = e.graph(), s = a.marginx || 0, l = a.marginy || 0; function c(e) { var r = e.x, a = e.y, s = e.width, l = e.height; t = Math.min(t, r - s / 2), n = Math.max(n, r + s / 2), i = Math.min(i, a - l / 2), o = Math.max(o, a + l / 2) } r.forEach(e.nodes(), (function (t) { c(e.node(t)) })), r.forEach(e.edges(), (function (t) { var n = e.edge(t); r.has(n, "x") && c(n) })), t -= s, i -= l, r.forEach(e.nodes(), (function (n) { var r = e.node(n); r.x -= t, r.y -= i })), r.forEach(e.edges(), (function (n) { var o = e.edge(n); r.forEach(o.points, (function (e) { e.x -= t, e.y -= i })), r.has(o, "x") && (o.x -= t), r.has(o, "y") && (o.y -= i) })), a.width = n - t + s, a.height = o - i + l }(e) })), t(" assignNodeIntersects", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n, r, i = e.edge(t), o = e.node(t.v), a = e.node(t.w); i.points ? (n = i.points[0], r = i.points[i.points.length - 1]) : (i.points = [], n = a, r = o), i.points.unshift(g.intersectRect(o, n)), i.points.push(g.intersectRect(a, r)) })) }(e) })), t(" reversePoints", (function () { !function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); n.reversed && n.points.reverse() })) }(e) })), t(" acyclic.undo", (function () { i.undo(e) })) }(t, n) })), n(" updateInputGraph", (function () { !function (e, t) { r.forEach(e.nodes(), (function (n) { var r = e.node(n), i = t.node(n); r && (r.x = i.x, r.y = i.y, t.children(n).length && (r.width = i.width, r.height = i.height)) })), r.forEach(e.edges(), (function (n) { var i = e.edge(n), o = t.edge(n); i.points = o.points, r.has(o, "x") && (i.x = o.x, i.y = o.y) })), e.graph().width = t.graph().width, e.graph().height = t.graph().height }(e, t) })) })) }; var v = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"], b = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" }, y = ["acyclicer", "ranker", "rankdir", "align"], x = ["width", "height"], w = { width: 0, height: 0 }, k = ["minlen", "weight", "width", "height", "labeloffset"], A = { minlen: 1, weight: 1, width: 0, height: 0, labeloffset: 10, labelpos: "r" }, E = ["labelpos"]; function S(e, t) { return r.mapValues(r.pick(e, t), Number) } function $(e) { var t = {}; return r.forEach(e, (function (e, n) { t[n.toLowerCase()] = e })), t } }, function (e, t, n) { var r = n(149); e.exports = function (e) { return r(e, 5) } }, function (e, t, n) { var r = n(89), i = n(57), o = n(90), a = n(48), s = Object.prototype, l = s.hasOwnProperty, c = r((function (e, t) { e = Object(e); var n = -1, r = t.length, c = r > 2 ? t[2] : void 0; for (c && o(t[0], t[1], c) && (r = 1); ++n < r;)for (var u = t[n], d = a(u), p = -1, f = d.length; ++p < f;) { var h = d[p], g = e[h]; (void 0 === g || i(g, s[h]) && !l.call(e, h)) && (e[h] = u[h]) } return e })); e.exports = c }, function (e, t, n) { var r = n(363)(n(364)); e.exports = r }, function (e, t, n) { var r = n(37), i = n(36), o = n(41); e.exports = function (e) { return function (t, n, a) { var s = Object(t); if (!i(t)) { var l = r(n, 3); t = o(t), n = function (e) { return l(s[e], e, s) } } var c = e(t, n, a); return c > -1 ? s[l ? t[c] : c] : void 0 } } }, function (e, t, n) { var r = n(188), i = n(37), o = n(365), a = Math.max; e.exports = function (e, t, n) { var s = null == e ? 0 : e.length; if (!s) return -1; var l = null == n ? 0 : o(n); return l < 0 && (l = a(s + l, 0)), r(e, i(t, 3), l) } }, function (e, t, n) { var r = n(196); e.exports = function (e) { var t = r(e), n = t % 1; return t == t ? n ? t - n : t : 0 } }, function (e, t, n) { var r = n(367), i = n(23), o = n(61), a = /^[-+]0x[0-9a-f]+$/i, s = /^0b[01]+$/i, l = /^0o[0-7]+$/i, c = parseInt; e.exports = function (e) { if ("number" == typeof e) return e; if (o(e)) return NaN; if (i(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = i(t) ? t + "" : t } if ("string" != typeof e) return 0 === e ? e : +e; e = r(e); var n = s.test(e); return n || l.test(e) ? c(e.slice(2), n ? 2 : 8) : a.test(e) ? NaN : +e } }, function (e, t, n) { var r = n(368), i = /^\s+/; e.exports = function (e) { return e ? e.slice(0, r(e) + 1).replace(i, "") : e } }, function (e, t) { var n = /\s/; e.exports = function (e) { for (var t = e.length; t-- && n.test(e.charAt(t));); return t } }, function (e, t, n) { var r = n(128), i = n(169), o = n(48); e.exports = function (e, t) { return null == e ? e : r(e, i(t), o) } }, function (e, t) { e.exports = function (e) { var t = null == e ? 0 : e.length; return t ? e[t - 1] : void 0 } }, function (e, t, n) { var r = n(79), i = n(127), o = n(37); e.exports = function (e, t) { var n = {}; return t = o(t, 3), i(e, (function (e, i, o) { r(n, i, t(e, i, o)) })), n } }, function (e, t, n) { var r = n(132), i = n(373), o = n(49); e.exports = function (e) { return e && e.length ? r(e, o, i) : void 0 } }, function (e, t) { e.exports = function (e, t) { return e > t } }, function (e, t, n) { var r = n(375), i = n(379)((function (e, t, n) { r(e, t, n) })); e.exports = i }, function (e, t, n) { var r = n(73), i = n(198), o = n(128), a = n(376), s = n(23), l = n(48), c = n(199); e.exports = function e(t, n, u, d, p) { t !== n && o(n, (function (o, l) { if (p || (p = new r), s(o)) a(t, n, l, u, e, d, p); else { var f = d ? d(c(t, l), o, l + "", t, n, p) : void 0; void 0 === f && (f = o), i(t, l, f) } }), l) } }, function (e, t, n) { var r = n(198), i = n(155), o = n(164), a = n(156), s = n(165), l = n(66), c = n(13), u = n(189), d = n(59), p = n(64), f = n(23), h = n(377), g = n(67), m = n(199), v = n(378); e.exports = function (e, t, n, b, y, x, w) { var k = m(e, n), A = m(t, n), E = w.get(A); if (E) r(e, n, E); else { var S = x ? x(k, A, n + "", e, t, w) : void 0, $ = void 0 === S; if ($) { var C = c(A), _ = !C && d(A), O = !C && !_ && g(A); S = A, C || _ || O ? c(k) ? S = k : u(k) ? S = a(k) : _ ? ($ = !1, S = i(A, !0)) : O ? ($ = !1, S = o(A, !0)) : S = [] : h(A) || l(A) ? (S = k, l(k) ? S = v(k) : f(k) && !p(k) || (S = s(A))) : $ = !1 } $ && (w.set(A, S), y(S, A, b, x, w), w.delete(A)), r(e, n, S) } } }, function (e, t, n) { var r = n(47), i = n(84), o = n(34), a = Function.prototype, s = Object.prototype, l = a.toString, c = s.hasOwnProperty, u = l.call(Object); e.exports = function (e) { if (!o(e) || "[object Object]" != r(e)) return !1; var t = i(e); if (null === t) return !0; var n = c.call(t, "constructor") && t.constructor; return "function" == typeof n && n instanceof n && l.call(n) == u } }, function (e, t, n) { var r = n(65), i = n(48); e.exports = function (e) { return r(e, i(e)) } }, function (e, t, n) { var r = n(89), i = n(90); e.exports = function (e) { return r((function (t, n) { var r = -1, o = n.length, a = o > 1 ? n[o - 1] : void 0, s = o > 2 ? n[2] : void 0; for (a = e.length > 3 && "function" == typeof a ? (o--, a) : void 0, s && i(n[0], n[1], s) && (a = o < 3 ? void 0 : a, o = 1), t = Object(t); ++r < o;) { var l = n[r]; l && e(t, l, r, a) } return t })) } }, function (e, t, n) { var r = n(132), i = n(200), o = n(49); e.exports = function (e) { return e && e.length ? r(e, o, i) : void 0 } }, function (e, t, n) { var r = n(132), i = n(37), o = n(200); e.exports = function (e, t) { return e && e.length ? r(e, i(t, 2), o) : void 0 } }, function (e, t, n) { var r = n(31); e.exports = function () { return r.Date.now() } }, function (e, t, n) { var r = n(384), i = n(387)((function (e, t) { return null == e ? {} : r(e, t) })); e.exports = i }, function (e, t, n) { var r = n(385), i = n(178); e.exports = function (e, t) { return r(e, t, (function (t, n) { return i(e, n) })) } }, function (e, t, n) { var r = n(86), i = n(386), o = n(87); e.exports = function (e, t, n) { for (var a = -1, s = t.length, l = {}; ++a < s;) { var c = t[a], u = r(e, c); n(u, c) && i(l, o(c, e), u) } return l } }, function (e, t, n) { var r = n(78), i = n(87), o = n(81), a = n(23), s = n(68); e.exports = function (e, t, n, l) { if (!a(e)) return e; for (var c = -1, u = (t = i(t, e)).length, d = u - 1, p = e; null != p && ++c < u;) { var f = s(t[c]), h = n; if ("__proto__" === f || "constructor" === f || "prototype" === f) return e; if (c != d) { var g = p[f]; void 0 === (h = l ? l(g, f, p) : void 0) && (h = a(g) ? g : o(t[c + 1]) ? [] : {}) } r(p, f, h), p = p[f] } return e } }, function (e, t, n) { var r = n(197), i = n(186), o = n(187); e.exports = function (e) { return o(i(e, void 0, r), e + "") } }, function (e, t, n) { var r = n(389)(); e.exports = r }, function (e, t, n) { var r = n(390), i = n(90), o = n(196); e.exports = function (e) { return function (t, n, a) { return a && "number" != typeof a && i(t, n, a) && (n = a = void 0), t = o(t), void 0 === n ? (n = t, t = 0) : n = o(n), a = void 0 === a ? t < n ? 1 : -1 : o(a), r(t, n, a, e) } } }, function (e, t) { var n = Math.ceil, r = Math.max; e.exports = function (e, t, i, o) { for (var a = -1, s = r(n((t - e) / (i || 1)), 0), l = Array(s); s--;)l[o ? s : ++a] = e, e += i; return l } }, function (e, t, n) { var r = n(131), i = n(392), o = n(89), a = n(90), s = o((function (e, t) { if (null == e) return []; var n = t.length; return n > 1 && a(e, t[0], t[1]) ? t = [] : n > 2 && a(t[0], t[1], t[2]) && (t = [t[0]]), i(e, r(t, 1), []) })); e.exports = s }, function (e, t, n) { var r = n(88), i = n(86), o = n(37), a = n(184), s = n(393), l = n(82), c = n(394), u = n(49), d = n(13); e.exports = function (e, t, n) { t = t.length ? r(t, (function (e) { return d(e) ? function (t) { return i(t, 1 === e.length ? e[0] : e) } : e })) : [u]; var p = -1; t = r(t, l(o)); var f = a(e, (function (e, n, i) { return { criteria: r(t, (function (t) { return t(e) })), index: ++p, value: e } })); return s(f, (function (e, t) { return c(e, t, n) })) } }, function (e, t) { e.exports = function (e, t) { var n = e.length; for (e.sort(t); n--;)e[n] = e[n].value; return e } }, function (e, t, n) { var r = n(395); e.exports = function (e, t, n) { for (var i = -1, o = e.criteria, a = t.criteria, s = o.length, l = n.length; ++i < s;) { var c = r(o[i], a[i]); if (c) return i >= l ? c : c * ("desc" == n[i] ? -1 : 1) } return e.index - t.index } }, function (e, t, n) { var r = n(61); e.exports = function (e, t) { if (e !== t) { var n = void 0 !== e, i = null === e, o = e == e, a = r(e), s = void 0 !== t, l = null === t, c = t == t, u = r(t); if (!l && !u && !a && e > t || a && s && c && !l && !u || i && s && c || !n && c || !o) return 1; if (!i && !a && !u && e < t || u && n && o && !i && !a || l && n && o || !s && o || !c) return -1 } return 0 } }, function (e, t, n) { var r = n(177), i = 0; e.exports = function (e) { var t = ++i; return r(e) + t } }, function (e, t, n) { var r = n(78), i = n(398); e.exports = function (e, t) { return i(e || [], t || [], r) } }, function (e, t) { e.exports = function (e, t, n) { for (var r = -1, i = e.length, o = t.length, a = {}; ++r < i;) { var s = r < o ? t[r] : void 0; n(a, e[r], s) } return a } }, function (e, t, n) { "use strict"; var r = n(11), i = n(400); e.exports = { run: function (e) { var t = "greedy" === e.graph().acyclicer ? i(e, function (e) { return function (t) { return e.edge(t).weight } }(e)) : function (e) { var t = [], n = {}, i = {}; function o(a) { r.has(i, a) || (i[a] = !0, n[a] = !0, r.forEach(e.outEdges(a), (function (e) { r.has(n, e.w) ? t.push(e) : o(e.w) })), delete n[a]) } return r.forEach(e.nodes(), o), t }(e); r.forEach(t, (function (t) { var n = e.edge(t); e.removeEdge(t), n.forwardName = t.name, n.reversed = !0, e.setEdge(t.w, t.v, n, r.uniqueId("rev")) })) }, undo: function (e) { r.forEach(e.edges(), (function (t) { var n = e.edge(t); if (n.reversed) { e.removeEdge(t); var r = n.forwardName; delete n.reversed, delete n.forwardName, e.setEdge(t.w, t.v, n, r) } })) } } }, function (e, t, n) { var r = n(11), i = n(30).Graph, o = n(401); e.exports = function (e, t) { if (e.nodeCount() <= 1) return []; var n = function (e, t) { var n = new i, a = 0, s = 0; r.forEach(e.nodes(), (function (e) { n.setNode(e, { v: e, in: 0, out: 0 }) })), r.forEach(e.edges(), (function (e) { var r = n.edge(e.v, e.w) || 0, i = t(e), o = r + i; n.setEdge(e.v, e.w, o), s = Math.max(s, n.node(e.v).out += i), a = Math.max(a, n.node(e.w).in += i) })); var c = r.range(s + a + 3).map((function () { return new o })), u = a + 1; return r.forEach(n.nodes(), (function (e) { l(c, u, n.node(e)) })), { graph: n, buckets: c, zeroIdx: u } }(e, t || a), c = function (e, t, n) { var r, i = [], o = t[t.length - 1], a = t[0]; for (; e.nodeCount();) { for (; r = a.dequeue();)s(e, t, n, r); for (; r = o.dequeue();)s(e, t, n, r); if (e.nodeCount()) for (var l = t.length - 2; l > 0; --l)if (r = t[l].dequeue()) { i = i.concat(s(e, t, n, r, !0)); break } } return i }(n.graph, n.buckets, n.zeroIdx); return r.flatten(r.map(c, (function (t) { return e.outEdges(t.v, t.w) })), !0) }; var a = r.constant(1); function s(e, t, n, i, o) { var a = o ? [] : void 0; return r.forEach(e.inEdges(i.v), (function (r) { var i = e.edge(r), s = e.node(r.v); o && a.push({ v: r.v, w: r.w }), s.out -= i, l(t, n, s) })), r.forEach(e.outEdges(i.v), (function (r) { var i = e.edge(r), o = r.w, a = e.node(o); a.in -= i, l(t, n, a) })), e.removeNode(i.v), a } function l(e, t, n) { n.out ? n.in ? e[n.out - n.in + t].enqueue(n) : e[e.length - 1].enqueue(n) : e[0].enqueue(n) } }, function (e, t) { function n() { var e = {}; e._next = e._prev = e, this._sentinel = e } function r(e) { e._prev._next = e._next, e._next._prev = e._prev, delete e._next, delete e._prev } function i(e, t) { if ("_next" !== e && "_prev" !== e) return t } e.exports = n, n.prototype.dequeue = function () { var e = this._sentinel, t = e._prev; if (t !== e) return r(t), t }, n.prototype.enqueue = function (e) { var t = this._sentinel; e._prev && e._next && r(e), e._next = t._next, t._next._prev = e, t._next = e, e._prev = t }, n.prototype.toString = function () { for (var e = [], t = this._sentinel, n = t._prev; n !== t;)e.push(JSON.stringify(n, i)), n = n._prev; return "[" + e.join(", ") + "]" } }, function (e, t, n) { "use strict"; var r = n(11), i = n(20); e.exports = { run: function (e) { e.graph().dummyChains = [], r.forEach(e.edges(), (function (t) { !function (e, t) { var n, r, o, a = t.v, s = e.node(a).rank, l = t.w, c = e.node(l).rank, u = t.name, d = e.edge(t), p = d.labelRank; if (c === s + 1) return; for (e.removeEdge(t), o = 0, ++s; s < c; ++o, ++s)d.points = [], r = { width: 0, height: 0, edgeLabel: d, edgeObj: t, rank: s }, n = i.addDummyNode(e, "edge", r, "_d"), s === p && (r.width = d.width, r.height = d.height, r.dummy = "edge-label", r.labelpos = d.labelpos), e.setEdge(a, n, { weight: d.weight }, u), 0 === o && e.graph().dummyChains.push(n), a = n; e.setEdge(a, l, { weight: d.weight }, u) }(e, t) })) }, undo: function (e) { r.forEach(e.graph().dummyChains, (function (t) { var n, r = e.node(t), i = r.edgeLabel; for (e.setEdge(r.edgeObj, i); r.dummy;)n = e.successors(t)[0], e.removeNode(t), i.points.push({ x: r.x, y: r.y }), "edge-label" === r.dummy && (i.x = r.x, i.y = r.y, i.width = r.width, i.height = r.height), t = n, r = e.node(t) })) } } }, function (e, t, n) { "use strict"; var r = n(91).longestPath, i = n(201), o = n(404); e.exports = function (e) { switch (e.graph().ranker) { case "network-simplex": s(e); break; case "tight-tree": !function (e) { r(e), i(e) }(e); break; case "longest-path": a(e); break; default: s(e) } }; var a = r; function s(e) { o(e) } }, function (e, t, n) { "use strict"; var r = n(11), i = n(201), o = n(91).slack, a = n(91).longestPath, s = n(30).alg.preorder, l = n(30).alg.postorder, c = n(20).simplify; function u(e) { e = c(e), a(e); var t, n = i(e); for (f(n), d(n, e); t = g(n);)v(n, e, t, m(n, e, t)) } function d(e, t) { var n = l(e, e.nodes()); n = n.slice(0, n.length - 1), r.forEach(n, (function (n) { !function (e, t, n) { var r = e.node(n).parent; e.edge(n, r).cutvalue = p(e, t, n) }(e, t, n) })) } function p(e, t, n) { var i = e.node(n).parent, o = !0, a = t.edge(n, i), s = 0; return a || (o = !1, a = t.edge(i, n)), s = a.weight, r.forEach(t.nodeEdges(n), (function (r) { var a, l, c = r.v === n, u = c ? r.w : r.v; if (u !== i) { var d = c === o, p = t.edge(r).weight; if (s += d ? p : -p, a = n, l = u, e.hasEdge(a, l)) { var f = e.edge(n, u).cutvalue; s += d ? -f : f } } })), s } function f(e, t) { arguments.length < 2 && (t = e.nodes()[0]), h(e, {}, 1, t) } function h(e, t, n, i, o) { var a = n, s = e.node(i); return t[i] = !0, r.forEach(e.neighbors(i), (function (o) { r.has(t, o) || (n = h(e, t, n, o, i)) })), s.low = a, s.lim = n++, o ? s.parent = o : delete s.parent, n } function g(e) { return r.find(e.edges(), (function (t) { return e.edge(t).cutvalue < 0 })) } function m(e, t, n) { var i = n.v, a = n.w; t.hasEdge(i, a) || (i = n.w, a = n.v); var s = e.node(i), l = e.node(a), c = s, u = !1; s.lim > l.lim && (c = l, u = !0); var d = r.filter(t.edges(), (function (t) { return u === b(e, e.node(t.v), c) && u !== b(e, e.node(t.w), c) })); return r.minBy(d, (function (e) { return o(t, e) })) } function v(e, t, n, i) { var o = n.v, a = n.w; e.removeEdge(o, a), e.setEdge(i.v, i.w, {}), f(e), d(e, t), function (e, t) { var n = r.find(e.nodes(), (function (e) { return !t.node(e).parent })), i = s(e, n); i = i.slice(1), r.forEach(i, (function (n) { var r = e.node(n).parent, i = t.edge(n, r), o = !1; i || (i = t.edge(r, n), o = !0), t.node(n).rank = t.node(r).rank + (o ? i.minlen : -i.minlen) })) }(e, t) } function b(e, t, n) { return n.low <= t.lim && t.lim <= n.lim } e.exports = u, u.initLowLimValues = f, u.initCutValues = d, u.calcCutValue = p, u.leaveEdge = g, u.enterEdge = m, u.exchangeEdges = v }, function (e, t, n) { var r = n(11); e.exports = function (e) { var t = function (e) { var t = {}, n = 0; function i(o) { var a = n; r.forEach(e.children(o), i), t[o] = { low: a, lim: n++ } } return r.forEach(e.children(), i), t }(e); r.forEach(e.graph().dummyChains, (function (n) { for (var r = e.node(n), i = r.edgeObj, o = function (e, t, n, r) { var i, o, a = [], s = [], l = Math.min(t[n].low, t[r].low), c = Math.max(t[n].lim, t[r].lim); i = n; do { i = e.parent(i), a.push(i) } while (i && (t[i].low > l || c > t[i].lim)); o = i, i = r; for (; (i = e.parent(i)) !== o;)s.push(i); return { path: a.concat(s.reverse()), lca: o } }(e, t, i.v, i.w), a = o.path, s = o.lca, l = 0, c = a[l], u = !0; n !== i.w;) { if (r = e.node(n), u) { for (; (c = a[l]) !== s && e.node(c).maxRank < r.rank;)l++; c === s && (u = !1) } if (!u) { for (; l < a.length - 1 && e.node(c = a[l + 1]).minRank <= r.rank;)l++; c = a[l] } e.setParent(n, c), n = e.successors(n)[0] } })) } }, function (e, t, n) { var r = n(11), i = n(20); e.exports = { run: function (e) { var t = i.addDummyNode(e, "root", {}, "_root"), n = function (e) { var t = {}; return r.forEach(e.children(), (function (n) { !function n(i, o) { var a = e.children(i); a && a.length && r.forEach(a, (function (e) { n(e, o + 1) })); t[i] = o }(n, 1) })), t }(e), o = r.max(r.values(n)) - 1, a = 2 * o + 1; e.graph().nestingRoot = t, r.forEach(e.edges(), (function (t) { e.edge(t).minlen *= a })); var s = function (e) { return r.reduce(e.edges(), (function (t, n) { return t + e.edge(n).weight }), 0) }(e) + 1; r.forEach(e.children(), (function (l) { !function e(t, n, o, a, s, l, c) { var u = t.children(c); if (!u.length) return void (c !== n && t.setEdge(n, c, { weight: 0, minlen: o })); var d = i.addBorderNode(t, "_bt"), p = i.addBorderNode(t, "_bb"), f = t.node(c); t.setParent(d, c), f.borderTop = d, t.setParent(p, c), f.borderBottom = p, r.forEach(u, (function (r) { e(t, n, o, a, s, l, r); var i = t.node(r), u = i.borderTop ? i.borderTop : r, f = i.borderBottom ? i.borderBottom : r, h = i.borderTop ? a : 2 * a, g = u !== f ? 1 : s - l[c] + 1; t.setEdge(d, u, { weight: h, minlen: g, nestingEdge: !0 }), t.setEdge(f, p, { weight: h, minlen: g, nestingEdge: !0 }) })), t.parent(c) || t.setEdge(n, d, { weight: 0, minlen: s + l[c] }) }(e, t, a, s, o, n, l) })), e.graph().nodeRankFactor = a }, cleanup: function (e) { var t = e.graph(); e.removeNode(t.nestingRoot), delete t.nestingRoot, r.forEach(e.edges(), (function (t) { e.edge(t).nestingEdge && e.removeEdge(t) })) } } }, function (e, t, n) { var r = n(11), i = n(20); function o(e, t, n, r, o, a) { var s = { width: 0, height: 0, rank: a, borderType: t }, l = o[t][a - 1], c = i.addDummyNode(e, "border", s, n); o[t][a] = c, e.setParent(c, r), l && e.setEdge(l, c, { weight: 1 }) } e.exports = function (e) { r.forEach(e.children(), (function t(n) { var i = e.children(n), a = e.node(n); if (i.length && r.forEach(i, t), r.has(a, "minRank")) { a.borderLeft = [], a.borderRight = []; for (var s = a.minRank, l = a.maxRank + 1; s < l; ++s)o(e, "borderLeft", "_bl", n, a, s), o(e, "borderRight", "_br", n, a, s) } })) } }, function (e, t, n) { "use strict"; var r = n(11); function i(e) { r.forEach(e.nodes(), (function (t) { o(e.node(t)) })), r.forEach(e.edges(), (function (t) { o(e.edge(t)) })) } function o(e) { var t = e.width; e.width = e.height, e.height = t } function a(e) { e.y = -e.y } function s(e) { var t = e.x; e.x = e.y, e.y = t } e.exports = { adjust: function (e) { var t = e.graph().rankdir.toLowerCase(); "lr" !== t && "rl" !== t || i(e) }, undo: function (e) { var t = e.graph().rankdir.toLowerCase(); "bt" !== t && "rl" !== t || function (e) { r.forEach(e.nodes(), (function (t) { a(e.node(t)) })), r.forEach(e.edges(), (function (t) { var n = e.edge(t); r.forEach(n.points, a), r.has(n, "y") && a(n) })) }(e); "lr" !== t && "rl" !== t || (!function (e) { r.forEach(e.nodes(), (function (t) { s(e.node(t)) })), r.forEach(e.edges(), (function (t) { var n = e.edge(t); r.forEach(n.points, s), r.has(n, "x") && s(n) })) }(e), i(e)) } } }, function (e, t, n) { "use strict"; var r = n(11), i = n(410), o = n(411), a = n(412), s = n(416), l = n(417), c = n(30).Graph, u = n(20); function d(e, t, n) { return r.map(t, (function (t) { return s(e, t, n) })) } function p(e, t) { var n = new c; r.forEach(e, (function (e) { var i = e.graph().root, o = a(e, i, n, t); r.forEach(o.vs, (function (t, n) { e.node(t).order = n })), l(e, n, o.vs) })) } function f(e, t) { r.forEach(t, (function (t) { r.forEach(t, (function (t, n) { e.node(t).order = n })) })) } e.exports = function (e) { var t = u.maxRank(e), n = d(e, r.range(1, t + 1), "inEdges"), a = d(e, r.range(t - 1, -1, -1), "outEdges"), s = i(e); f(e, s); for (var l, c = Number.POSITIVE_INFINITY, h = 0, g = 0; g < 4; ++h, ++g) { p(h % 2 ? n : a, h % 4 >= 2), s = u.buildLayerMatrix(e); var m = o(e, s); m < c && (g = 0, l = r.cloneDeep(s), c = m) } f(e, l) } }, function (e, t, n) { "use strict"; var r = n(11); e.exports = function (e) { var t = {}, n = r.filter(e.nodes(), (function (t) { return !e.children(t).length })), i = r.max(r.map(n, (function (t) { return e.node(t).rank }))), o = r.map(r.range(i + 1), (function () { return [] })); var a = r.sortBy(n, (function (t) { return e.node(t).rank })); return r.forEach(a, (function n(i) { if (r.has(t, i)) return; t[i] = !0; var a = e.node(i); o[a.rank].push(i), r.forEach(e.successors(i), n) })), o } }, function (e, t, n) { "use strict"; var r = n(11); function i(e, t, n) { for (var i = r.zipObject(n, r.map(n, (function (e, t) { return t }))), o = r.flatten(r.map(t, (function (t) { return r.sortBy(r.map(e.outEdges(t), (function (t) { return { pos: i[t.w], weight: e.edge(t).weight } })), "pos") })), !0), a = 1; a < n.length;)a <<= 1; var s = 2 * a - 1; a -= 1; var l = r.map(new Array(s), (function () { return 0 })), c = 0; return r.forEach(o.forEach((function (e) { var t = e.pos + a; l[t] += e.weight; for (var n = 0; t > 0;)t % 2 && (n += l[t + 1]), l[t = t - 1 >> 1] += e.weight; c += e.weight * n }))), c } e.exports = function (e, t) { for (var n = 0, r = 1; r < t.length; ++r)n += i(e, t[r - 1], t[r]); return n } }, function (e, t, n) { var r = n(11), i = n(413), o = n(414), a = n(415); e.exports = function e(t, n, s, l) { var c = t.children(n), u = t.node(n), d = u ? u.borderLeft : void 0, p = u ? u.borderRight : void 0, f = {}; d && (c = r.filter(c, (function (e) { return e !== d && e !== p }))); var h = i(t, c); r.forEach(h, (function (n) { if (t.children(n.v).length) { var i = e(t, n.v, s, l); f[n.v] = i, r.has(i, "barycenter") && (o = n, a = i, r.isUndefined(o.barycenter) ? (o.barycenter = a.barycenter, o.weight = a.weight) : (o.barycenter = (o.barycenter * o.weight + a.barycenter * a.weight) / (o.weight + a.weight), o.weight += a.weight)) } var o, a })); var g = o(h, s); !function (e, t) { r.forEach(e, (function (e) { e.vs = r.flatten(e.vs.map((function (e) { return t[e] ? t[e].vs : e })), !0) })) }(g, f); var m = a(g, l); if (d && (m.vs = r.flatten([d, m.vs, p], !0), t.predecessors(d).length)) { var v = t.node(t.predecessors(d)[0]), b = t.node(t.predecessors(p)[0]); r.has(m, "barycenter") || (m.barycenter = 0, m.weight = 0), m.barycenter = (m.barycenter * m.weight + v.order + b.order) / (m.weight + 2), m.weight += 2 } return m } }, function (e, t, n) { var r = n(11); e.exports = function (e, t) { return r.map(t, (function (t) { var n = e.inEdges(t); if (n.length) { var i = r.reduce(n, (function (t, n) { var r = e.edge(n), i = e.node(n.v); return { sum: t.sum + r.weight * i.order, weight: t.weight + r.weight } }), { sum: 0, weight: 0 }); return { v: t, barycenter: i.sum / i.weight, weight: i.weight } } return { v: t } })) } }, function (e, t, n) { "use strict"; var r = n(11); e.exports = function (e, t) { var n = {}; return r.forEach(e, (function (e, t) { var i = n[e.v] = { indegree: 0, in: [], out: [], vs: [e.v], i: t }; r.isUndefined(e.barycenter) || (i.barycenter = e.barycenter, i.weight = e.weight) })), r.forEach(t.edges(), (function (e) { var t = n[e.v], i = n[e.w]; r.isUndefined(t) || r.isUndefined(i) || (i.indegree++, t.out.push(n[e.w])) })), function (e) { var t = []; function n(e) { return function (t) { t.merged || (r.isUndefined(t.barycenter) || r.isUndefined(e.barycenter) || t.barycenter >= e.barycenter) && function (e, t) { var n = 0, r = 0; e.weight && (n += e.barycenter * e.weight, r += e.weight); t.weight && (n += t.barycenter * t.weight, r += t.weight); e.vs = t.vs.concat(e.vs), e.barycenter = n / r, e.weight = r, e.i = Math.min(t.i, e.i), t.merged = !0 }(e, t) } } function i(t) { return function (n) { n.in.push(t), 0 == --n.indegree && e.push(n) } } for (; e.length;) { var o = e.pop(); t.push(o), r.forEach(o.in.reverse(), n(o)), r.forEach(o.out, i(o)) } return r.map(r.filter(t, (function (e) { return !e.merged })), (function (e) { return r.pick(e, ["vs", "i", "barycenter", "weight"]) })) }(r.filter(n, (function (e) { return !e.indegree }))) } }, function (e, t, n) { var r = n(11), i = n(20); function o(e, t, n) { for (var i; t.length && (i = r.last(t)).i <= n;)t.pop(), e.push(i.vs), n++; return n } e.exports = function (e, t) { var n = i.partition(e, (function (e) { return r.has(e, "barycenter") })), a = n.lhs, s = r.sortBy(n.rhs, (function (e) { return -e.i })), l = [], c = 0, u = 0, d = 0; a.sort((p = !!t, function (e, t) { return e.barycenter < t.barycenter ? -1 : e.barycenter > t.barycenter ? 1 : p ? t.i - e.i : e.i - t.i })), d = o(l, s, d), r.forEach(a, (function (e) { d += e.vs.length, l.push(e.vs), c += e.barycenter * e.weight, u += e.weight, d = o(l, s, d) })); var p; var f = { vs: r.flatten(l, !0) }; u && (f.barycenter = c / u, f.weight = u); return f } }, function (e, t, n) { var r = n(11), i = n(30).Graph; e.exports = function (e, t, n) { var o = function (e) { var t; for (; e.hasNode(t = r.uniqueId("_root"));); return t }(e), a = new i({ compound: !0 }).setGraph({ root: o }).setDefaultNodeLabel((function (t) { return e.node(t) })); return r.forEach(e.nodes(), (function (i) { var s = e.node(i), l = e.parent(i); (s.rank === t || s.minRank <= t && t <= s.maxRank) && (a.setNode(i), a.setParent(i, l || o), r.forEach(e[n](i), (function (t) { var n = t.v === i ? t.w : t.v, o = a.edge(n, i), s = r.isUndefined(o) ? 0 : o.weight; a.setEdge(n, i, { weight: e.edge(t).weight + s }) })), r.has(s, "minRank") && a.setNode(i, { borderLeft: s.borderLeft[t], borderRight: s.borderRight[t] })) })), a } }, function (e, t, n) { var r = n(11); e.exports = function (e, t, n) { var i, o = {}; r.forEach(n, (function (n) { for (var r, a, s = e.parent(n); s;) { if ((r = e.parent(s)) ? (a = o[r], o[r] = s) : (a = i, i = s), a && a !== s) return void t.setEdge(a, s); s = r } })) } }, function (e, t, n) { "use strict"; var r = n(11), i = n(20), o = n(419).positionX; e.exports = function (e) { (function (e) { var t = i.buildLayerMatrix(e), n = e.graph().ranksep, o = 0; r.forEach(t, (function (t) { var i = r.max(r.map(t, (function (t) { return e.node(t).height }))); r.forEach(t, (function (t) { e.node(t).y = o + i / 2 })), o += i + n })) })(e = i.asNonCompoundGraph(e)), r.forEach(o(e), (function (t, n) { e.node(n).x = t })) } }, function (e, t, n) { "use strict"; var r = n(11), i = n(30).Graph, o = n(20); function a(e, t) { var n = {}; return r.reduce(t, (function (t, i) { var o = 0, a = 0, s = t.length, c = r.last(i); return r.forEach(i, (function (t, u) { var d = function (e, t) { if (e.node(t).dummy) return r.find(e.predecessors(t), (function (t) { return e.node(t).dummy })) }(e, t), p = d ? e.node(d).order : s; (d || t === c) && (r.forEach(i.slice(a, u + 1), (function (t) { r.forEach(e.predecessors(t), (function (r) { var i = e.node(r), a = i.order; !(a < o || p < a) || i.dummy && e.node(t).dummy || l(n, r, t) })) })), a = u + 1, o = p) })), i })), n } function s(e, t) { var n = {}; function i(t, i, o, a, s) { var c; r.forEach(r.range(i, o), (function (i) { c = t[i], e.node(c).dummy && r.forEach(e.predecessors(c), (function (t) { var r = e.node(t); r.dummy && (r.order < a || r.order > s) && l(n, t, c) })) })) } return r.reduce(t, (function (t, n) { var o, a = -1, s = 0; return r.forEach(n, (function (r, l) { if ("border" === e.node(r).dummy) { var c = e.predecessors(r); c.length && (o = e.node(c[0]).order, i(n, s, l, a, o), s = l, a = o) } i(n, s, n.length, o, t.length) })), n })), n } function l(e, t, n) { if (t > n) { var r = t; t = n, n = r } var i = e[t]; i || (e[t] = i = {}), i[n] = !0 } function c(e, t, n) { if (t > n) { var i = t; t = n, n = i } return r.has(e[t], n) } function u(e, t, n, i) { var o = {}, a = {}, s = {}; return r.forEach(t, (function (e) { r.forEach(e, (function (e, t) { o[e] = e, a[e] = e, s[e] = t })) })), r.forEach(t, (function (e) { var t = -1; r.forEach(e, (function (e) { var l = i(e); if (l.length) for (var u = ((l = r.sortBy(l, (function (e) { return s[e] }))).length - 1) / 2, d = Math.floor(u), p = Math.ceil(u); d <= p; ++d) { var f = l[d]; a[e] === e && t < s[f] && !c(n, e, f) && (a[f] = e, a[e] = o[e] = o[f], t = s[f]) } })) })), { root: o, align: a } } function d(e, t, n, o, a) { var s = {}, l = function (e, t, n, o) { var a = new i, s = e.graph(), l = function (e, t, n) { return function (i, o, a) { var s, l = i.node(o), c = i.node(a), u = 0; if (u += l.width / 2, r.has(l, "labelpos")) switch (l.labelpos.toLowerCase()) { case "l": s = -l.width / 2; break; case "r": s = l.width / 2 }if (s && (u += n ? s : -s), s = 0, u += (l.dummy ? t : e) / 2, u += (c.dummy ? t : e) / 2, u += c.width / 2, r.has(c, "labelpos")) switch (c.labelpos.toLowerCase()) { case "l": s = c.width / 2; break; case "r": s = -c.width / 2 }return s && (u += n ? s : -s), s = 0, u } }(s.nodesep, s.edgesep, o); return r.forEach(t, (function (t) { var i; r.forEach(t, (function (t) { var r = n[t]; if (a.setNode(r), i) { var o = n[i], s = a.edge(o, r); a.setEdge(o, r, Math.max(l(e, t, i), s || 0)) } i = t })) })), a }(e, t, n, a), c = a ? "borderLeft" : "borderRight"; function u(e, t) { for (var n = l.nodes(), r = n.pop(), i = {}; r;)i[r] ? e(r) : (i[r] = !0, n.push(r), n = n.concat(t(r))), r = n.pop() } return u((function (e) { s[e] = l.inEdges(e).reduce((function (e, t) { return Math.max(e, s[t.v] + l.edge(t)) }), 0) }), l.predecessors.bind(l)), u((function (t) { var n = l.outEdges(t).reduce((function (e, t) { return Math.min(e, s[t.w] - l.edge(t)) }), Number.POSITIVE_INFINITY), r = e.node(t); n !== Number.POSITIVE_INFINITY && r.borderType !== c && (s[t] = Math.max(s[t], n)) }), l.successors.bind(l)), r.forEach(o, (function (e) { s[e] = s[n[e]] })), s } function p(e, t) { return r.minBy(r.values(t), (function (t) { var n = Number.NEGATIVE_INFINITY, i = Number.POSITIVE_INFINITY; return r.forIn(t, (function (t, r) { var o = function (e, t) { return e.node(t).width }(e, r) / 2; n = Math.max(t + o, n), i = Math.min(t - o, i) })), n - i })) } function f(e, t) { var n = r.values(t), i = r.min(n), o = r.max(n); r.forEach(["u", "d"], (function (n) { r.forEach(["l", "r"], (function (a) { var s, l = n + a, c = e[l]; if (c !== t) { var u = r.values(c); (s = "l" === a ? i - r.min(u) : o - r.max(u)) && (e[l] = r.mapValues(c, (function (e) { return e + s }))) } })) })) } function h(e, t) { return r.mapValues(e.ul, (function (n, i) { if (t) return e[t.toLowerCase()][i]; var o = r.sortBy(r.map(e, i)); return (o[1] + o[2]) / 2 })) } e.exports = { positionX: function (e) { var t, n = o.buildLayerMatrix(e), i = r.merge(a(e, n), s(e, n)), l = {}; r.forEach(["u", "d"], (function (o) { t = "u" === o ? n : r.values(n).reverse(), r.forEach(["l", "r"], (function (n) { "r" === n && (t = r.map(t, (function (e) { return r.values(e).reverse() }))); var a = ("u" === o ? e.predecessors : e.successors).bind(e), s = u(e, t, i, a), c = d(e, t, s.root, s.align, "r" === n); "r" === n && (c = r.mapValues(c, (function (e) { return -e }))), l[o + n] = c })) })); var c = p(e, l); return f(l, c), h(l, e.graph().align) }, findType1Conflicts: a, findType2Conflicts: s, addConflict: l, hasConflict: c, verticalAlignment: u, horizontalCompaction: d, alignCoordinates: f, findSmallestWidthAlignment: p, balance: h } }, function (e, t, n) { var r = n(11), i = n(20), o = n(30).Graph; e.exports = { debugOrdering: function (e) { var t = i.buildLayerMatrix(e), n = new o({ compound: !0, multigraph: !0 }).setGraph({}); return r.forEach(e.nodes(), (function (t) { n.setNode(t, { label: t }), n.setParent(t, "layer" + e.node(t).rank) })), r.forEach(e.edges(), (function (e) { n.setEdge(e.v, e.w, {}, e.name) })), r.forEach(t, (function (e, t) { var i = "layer" + t; n.setNode(i, { rank: "same" }), r.reduce(e, (function (e, t) { return n.setEdge(e, t, { style: "invis" }), t })) })), n } } }, function (e, t) { e.exports = "0.8.5" }, function (e, t, n) { "use strict"; const r = n(423); angular.module("dbt").directive("modelTree", [function () { return { scope: { tree: "=" }, templateUrl: r, link: function (e) { e.nav_selected = "project" } } }]) }, function (e, t) { var n = "/components/model_tree/model_tree.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n\n') }]), e.exports = n }, function (e, t, n) { "use strict"; const r = n(425), i = n(21); n(426), angular.module("dbt").directive("modelTreeLine", ["$state", function (e) { return { scope: { item: "=", depth: "<", resourceType: "@" }, replace: !0, templateUrl: r, link: function (t, n, r, o) { t.depth || (t.depth = 0); var a = t.item.name; if (a) { var s = i.last(a, 15).join(""), l = i.initial(a, s.length).join(""); t.name = { name: a, start: l, end: s }, t.name_start = l, t.name_end = s, t.onFolderClick = function (n) { if (n.active = !n.active, "source" == t.resourceType) { var r = n.name; e.go("dbt.source_list", { source: r }) } else 0 === t.depth && "database" !== n.type && e.go("dbt.project_overview", { project_name: n.name }) }, t.activate = function (n) { t.$emit("clearSearch"), n.active = !0; var r = "dbt." + n.node.resource_type; e.go(r, { unique_id: n.unique_id }) }, t.getIcon = function (e, t) { return "#" + { header: { on: "icn-down", off: "icn-right" }, database: { on: "icn-db-on", off: "icn-db" }, schema: { on: "icn-tree-on", off: "icn-tree" }, table: { on: "icn-doc-on", off: "icn-doc" }, folder: { on: "icn-dir-on", off: "icn-dir" }, file: { on: "icn-doc-on", off: "icn-doc" }, group: { on: "icn-filter", off: "icn-filter" } }[e][t] }, t.getClass = function (e) { return { active: e.active, "menu-tree": "header" == e.type || "schema" == e.type || "folder" == e.type, "menu-main": "header" == e.type, "menu-node": "file" == e.type || "table" == e.type } } } } } }]) }, function (e, t) { var n = "/components/model_tree/model_tree_line.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
  • \n\n \n \n \n \n \n \n {{name.start}}\n {{name.end}}\n \n \n\n \n \n \n \n \n \n {{name.start}}\n {{name.end}}\n \n \n\n
      \n \n
    \n
  • \n') }]), e.exports = n }, function (e, t, n) { var r = n(427); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "\n.unselectable{\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(429); n(33); n(206), r.module("dbt").directive("docsSearch", ["$sce", "project", function (e, t) { return { scope: { query: "=", results: "=", onSelect: "&" }, replace: !0, templateUrl: i, link: function (n) { n.max_results = 20, n.show_all = !1, n.max_results_columns = 3, n.limit_columns = {}, n.checkboxStatus = { show_names: !1, show_descriptions: !1, show_columns: !1, show_column_descriptions: !1, show_code: !1, show_tags: !1 }, n.limit_search = function (e, t, r) { return t < n.max_results || n.show_all }, n.getState = function (e) { return "dbt." + e.resource_type }, n.getModelName = function (e) { return "source" == e.resource_type ? e.source_name + "." + e.name : "macro" == e.resource_type ? e.package_name + "." + e.name : "metric" == e.resource_type ? e.label : "semantic_model" == e.resource_type || "saved_query" == e.resource_type ? e.name : "exposure" == e.resource_type || "model" == e.resource_type && null != e.version ? e.label : e.name }; function r(e) { return e.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&") } function i(e) { return _.words(e.toLowerCase()) } n.$watchGroup(["query", "checkboxStatus.show_names", "checkboxStatus.show_descriptions", "checkboxStatus.show_columns", "checkboxStatus.show_column_descriptions", "checkboxStatus.show_code", "checkboxStatus.show_tags"], (function () { n.results = function (e, t) { if (!_.some(_.values(t))) return e; let n = [], r = []; const { show_names: i, show_descriptions: o, show_columns: a, show_column_descriptions: s, show_code: l, show_tags: c } = t; return _.each(e, (function (e) { _.each(e.matches, (function (t) { if (!r.includes(e.model.unique_id)) { const u = i && ("name" === t.key || "label" == t.key), d = o && "description" == t.key, p = a && "columns" === t.key, f = s && "column_description" === t.key, h = l && "raw_code" === t.key, g = c && "tags" === t.key; (u || d || p || f || h || g) && (r.push(e.model.unique_id), n.push(e)) } })) })), n }(t.search(n.query), n.checkboxStatus) })), n.shorten = function (e) { if (null != e && e.trim().length > 0 && null != n.query && n.query.trim().length > 0) { let t = e.replace(/\s+/g, " "), o = r(i(n.query)[0]), a = t.search(new RegExp(o)), s = a - 75 < 0 ? 0 : a - 75, l = a + 75 > t.length ? t.length : a + 75; return "..." + t.substring(s, l) + "..." } return e }, n.highlight = function (t) { if (!n.query || !t) return e.trustAsHtml(t); let o = "(" + i(n.query).map(e => r(e)).join(")|(") + ")"; return e.trustAsHtml(t.replace(new RegExp(o, "gi"), '$&')) }, n.$watch("query", (function (e, t) { 0 == e.length && (n.show_all = !1, n.limit_columns = {}) })), n.columnFilter = function (e) { var t = []; let r = i(n.query); for (var o in e) r.every(e => -1 != o.toLowerCase().indexOf(e)) && t.push(o); return t }, n.limitColumns = function (e) { return void 0 !== n.limit_columns[e] ? n.limit_columns[e] : 3 } } } }]) }, function (e, t) { var n = "/components/search/search.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n \n
    \n
    \n

    \n {{ query }}\n {{ results.length }} search results\n

    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n

    \n \n {{result.model.resource_type}}\n

    \n

    \n
    \n
    \n
    \n \n columns:\n \n \n \n Show {{ columnFilter(result.model.columns).length - max_results_columns }} more\n
    \n
    \n \n \n \n
    \n
    \n \n tags:\n \n \n \n
    \n
    \n Show {{ results.length - max_results }} more\n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { e.exports = { getQuoteChar: function (e) { var t = (e || {}).adapter_type; return ["bigquery", "spark", "databricks"].indexOf(t) >= 0 ? "`" : '"' } } }, function (e, t, n) { "use strict"; const r = n(432); n(433); const i = n(21); angular.module("dbt").directive("tableDetails", ["$sce", "$filter", "project", function (e, t, n) { return { scope: { model: "=", extras: "=", exclude: "<" }, templateUrl: r, link: function (e) { function r(e, t) { if (0 == e) return "0 bytes"; if (e < 1 && (e *= 1e6), isNaN(parseFloat(e)) || !isFinite(e)) return "-"; void 0 === t && (t = 0); var n = Math.floor(Math.log(e) / Math.log(1024)); return (e / Math.pow(1024, Math.floor(n))).toFixed(t) + " " + ["bytes", "KB", "MB", "GB", "TB", "PB"][n] } function o(e, n) { return void 0 === n && (n = 2), t("number")(100 * e, n) + "%" } function a(e, n) { return void 0 === n && (n = 0), t("number")(e, n) } function s(e) { var t, r, o = !e.metadata, a = e.metadata || {}; t = e.database ? e.database + "." : "", r = o ? void 0 : "source" == e.resource_type ? t + e.schema + "." + e.identifier : t + e.schema + "." + e.alias; const s = e.group ? function (e) { const { name: t, email: r } = n.project.groups[e].owner, i = []; if (t && i.push(t), r) { const e = i.length > 0 ? `<${r}>` : r; i.push(e) } return i.join(" ") }(`group.${e.package_name}.${e.group}`) : a.owner, l = !(!e.hasOwnProperty("config") || !e.config.hasOwnProperty("contract")) && e.config.contract.enforced; var c, u = [{ name: "Owner", value: s }, { name: "Type", value: o ? void 0 : (c = a.type, "BASE TABLE" == c ? { type: "table", name: "table" } : "LATE BINDING VIEW" == c ? { type: "view", name: "late binding view" } : { type: c.toLowerCase(), name: c.toLowerCase() }).name }, { name: "Package", value: e.package_name }, { name: "Language", value: e.language }, { name: "Relation", value: r }, { name: "Access", value: e.access }, { name: "Version", value: e.version }, { name: "Contract", value: l ? "Enforced" : "Not Enforced" }]; return i.filter(u, (function (e) { return void 0 !== e.value })) } e.details = [], e.extended = [], e.exclude = e.exclude || [], e.meta = null, e._show_expanded = !1, e.show_expanded = function (t) { return void 0 !== t && (e._show_expanded = t), e._show_expanded }, e.hasData = function (e) { return !(!e || i.isEmpty(e)) && (1 != e.length || 0 != e[0].include) }, e.$watch("model", (function (t, n) { i.property(["metadata", "type"])(t); var l, c, u, d = t.hasOwnProperty("sources") && null != t.sources[0] ? t.sources[0].source_meta : null; if (e.meta = t.meta || d, e.details = s(t), e.extended = (l = t.stats, c = { rows: a, row_count: a, num_rows: a, max_varchar: a, pct_used: o, size: r, bytes: r, num_bytes: r }, u = i.sortBy(i.values(l), "label"), i.map(u, (function (e) { var t = i.clone(e), n = c[e.id]; return n && (t.value = n(e.value), t.label = e.label.replace("Approximate", "~"), t.label = e.label.replace("Utilization", "Used")), t }))), e.extras) { var p = i.filter(e.extras, (function (e) { return void 0 !== e.value && null !== e.value })); e.details = e.details.concat(p) } e.show_extended = i.where(e.extended, { include: !0 }).length > 0 })), e.queryTag = function (t) { e.$emit("query", t) } } } }]) }, function (e, t) { var n = "/components/table_details/table_details.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    Details
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ k }}
    \n
    {{ v }}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Tags
    \n
    \n {{ tag }} \n
    \n
    untagged
    \n
    \n
    \n
    {{ item.name }}
    \n
    {{ item.value }}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ item.label }}
    \n
    {{ item.value }}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { var r = n(434); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "\n\n.details-content {\n table-layout: fixed;\n}\n\n.detail-body {\n white-space: nowrap;\n overflow-x: scroll;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(436), i = n(21); angular.module("dbt").directive("columnDetails", ["project", function (e) { return { scope: { model: "=" }, templateUrl: r, link: function (t) { t.has_test = function (e, t) { return -1 != i.pluck(e.tests, "short").indexOf(t) }, t.has_constraint = function (e, t) { return !!e.hasOwnProperty("constraints") && e.constraints.some(e => e.type === t) }, t.has_more_info = function (e) { var t = e.tests || [], n = e.description || "", r = e.meta || {}, o = e.constraints || []; return t.length || n.length || o.length || !i.isEmpty(r) }, t.toggle_column_expanded = function (e) { t.has_more_info(e) && (e.expanded = !e.expanded) }, t.getState = function (e) { return "dbt." + e.resource_type }, t.get_col_name = function (t) { return e.caseColumn(t) }, t.get_columns = function (e) { var t = i.chain(e.columns).values().sortBy("index").value(); return i.each(t, (function (e, t) { e.index = t })), t } } } }]) }, function (e, t) { var n = "/components/column_details/column_details.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    \n
    \n Column information is not available for this seed\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    ColumnTypeDescriptionConstraintsData TestsMore?
    \n
    \n {{ get_col_name(column.name) }}\n
    \n
    \n {{ column.type }}

    \n
    \n {{ column.description }}\n \n \n N\n PK\n FK\n C\n +\n \n \n \n U\n N\n F\n A\n +\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    Details
    \n
    \n
    \n
    \n
    {{ k }}
    \n
    {{ v }}
    \n
    \n
    \n
    \n
    \n\n
    \n
    Description
    \n \n
    \n\n
    \n
    Constraints
    \n
    \n
    \n
    \n
    Name
    \n
    {{ constraint.name }}
    \n
    Type
    \n
    {{ constraint.type }}
    \n
    Expression
    \n
    {{ constraint.expression }}
    \n
    \n
    \n
    \n
    \n\n
    \n
    Generic Data Tests
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { "use strict"; const r = n(438); n(33), n(439); function i(e) { return "python" === e ? "language-python" : "language-sql" } angular.module("dbt").directive("codeBlock", ["code", "$timeout", function (e, t) { return { scope: { versions: "=", default: "<", language: "=" }, restrict: "E", templateUrl: r, link: function (n, r) { n.selected_version = n.default, n.language_class = i(n.language), n.source = null, n.setSelected = function (r) { n.selected_version = r, n.source = n.versions[r] || ""; const i = n.source.trim(); n.highlighted = e.highlight(i, n.language), t((function () { Prism.highlightAll() })) }, n.titleCase = function (e) { return e.charAt(0).toUpperCase() + e.substring(1) }, n.copied = !1, n.copy_to_clipboard = function () { e.copy_to_clipboard(n.source), n.copied = !0, setTimeout((function () { n.$apply((function () { n.copied = !1 })) }), 1e3) }, n.$watch("language", (function (e, t) { e && e != t && (n.language_class = i(e)) }), !0), n.$watch("versions", (function (e, t) { if (e) if (n.default) n.setSelected(n.default); else { var r = Object.keys(n.versions); r.length > 0 && n.setSelected(r[0]) } }), !0) } } }]) }, function (e, t) { var n = "/components/code_block/code_block.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    Code
    \n\n') }]), e.exports = n }, function (e, t, n) { var r = n(440); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "pre.code {\n border: none !important;\n overflow-y: visible !important;\n overflow-x: scroll !important;\n padding-bottom: 10px;\n}\n\npre.code code {\n font-family: Monaco, monospace !important;\n font-weight: 400 !important;\n}\n\n.line-numbers-rows {\n border: none !important;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(442); angular.module("dbt").directive("macroArguments", [function () { return { scope: { macro: "=" }, templateUrl: r, link: function (e) { _.each(e.macro.arguments, (function (e) { e.expanded = !1 })) } } }]) }, function (e, t) { var n = "/components/macro_arguments/index.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n
    \n
    \n Details are not available for this macro. This may be due to the fact that this macro doesn\'t have any\n arguments or that they haven\'t been documented yet.\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    ArgumentTypeDescriptionMore?
    \n
    \n {{ arg.name }}\n
    \n
    \n {{ arg.type }}

    \n
    \n {{ arg.description }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    Description
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { "use strict"; const r = n(444); angular.module("dbt").directive("referenceList", ["$state", function (e) { return { scope: { references: "=", node: "=" }, restrict: "E", templateUrl: r, link: function (t) { t.selected_type = null, t.setType = function (e) { t.selected_type = e, t.nodes = t.references[t.selected_type] }, t.getNodeUrl = function (t) { var n = "dbt." + t.resource_type; return e.href(n, { unique_id: t.unique_id, "#": null }) }, t.mapResourceType = function (e) { return "model" == e ? "Models" : "seed" == e ? "Seeds" : "test" == e ? "Data Tests" : "unit_test" == e ? "Unit Tests" : "snapshot" == e ? "Snapshots" : "analysis" == e ? "Analyses" : "macro" == e ? "Macros" : "exposure" == e ? "Exposures" : "metric" == e ? "Metrics" : "semantic_model" == e ? "Semantic Models" : "saved_query" == e ? "Saved Queries" : "operation" == e ? "Operations" : "Nodes" }, t.$watch("references", (function (e) { e && _.size(e) > 0 ? (t.selected_type = _.keys(e)[0], t.has_references = !0, t.nodes = t.references[t.selected_type]) : t.has_references = !1 })) } } }]) }, function (e, t) { var n = "/components/references/index.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    \n No resources reference this {{ node.resource_type }}\n
    \n
    \n \n
    \n \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t, n) { n(446), n(448), n(449), n(450), n(451), n(452), n(453), n(454), n(455), n(456), n(457), n(458) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("ModelCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.copied = !1, e.copy_to_clipboard = function (t) { r.copy_to_clipboard(t), e.copied = !0, setTimeout((function () { e.$apply((function () { e.copied = !1 })) }), 1e3) }, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "\n-- compiled code not found for this model\n" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, "\n.nav-tabs li.nav-pull-right {\n flex: 1 0 auto;\n text-align: right;\n}\n\ntr.column-row-selected {\n\n}\n\ntd.column-expanded{\n padding: 0px !important;\n}\n\ntd.column-expanded > div {\n padding: 5px 10px;\n margin-left: 20px;\n height: 100%;\n\n border-left: 1px solid #ccc !important;\n}\n", ""]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SourceCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.versions = { "Sample SQL": r.generateSourceSQL(e.model) }, e.extra_table_fields = [{ name: "Loader", value: e.model.loader }, { name: "Source", value: e.model.source_name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SeedCtrl", ["$scope", "$state", "project", "code", "$transitions", "$anchorScroll", "$location", function (e, t, n, r, o, a, s) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.versions = { "Example SQL": r.generateSourceSQL(e.model) } })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SnapshotCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "Compiled SQL is not available for this snapshot" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("TestCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "\n-- compiled code not found for this model\n" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(21), o = n(24); n(25), r.module("dbt").controller("MacroCtrl", ["$scope", "$state", "project", "code", "$transitions", "$anchorScroll", "$location", function (e, t, n, r, a, s, l) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.macro = {}, n.ready((function (t) { let n = t.macros[e.model_uid]; if (e.macro = n, e.references = o.getMacroReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = o.getMacroParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.macro.is_adapter_macro) { var r = t.metadata.adapter_type; e.versions = n.impls, n.impls[r] ? e.default_version = r : n.impls.default ? e.default_version = "default" : e.default_version = i.keys(n.impls)[0] } else e.default_version = "Source", e.versions = { Source: e.macro.macro_sql } })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("AnalysisCtrl", ["$scope", "$state", "project", "code", "$transitions", "$anchorScroll", "$location", function (e, t, n, r, o, a, s) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.default_version = "Source", e.versions = { Source: "", Compiled: "" }, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language, e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code } })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("ExposureCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.exposure = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; var r; e.exposure = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length, e.language = n.language, e.exposure.owner.name && e.exposure.owner.email ? r = `${e.exposure.owner.name} <${e.exposure.owner.email}>` : e.exposure.owner.name ? r = "" + e.exposure.owner.name : e.exposure.owner.email && (r = "" + e.exposure.owner.email), e.extra_table_fields = [{ name: "Maturity", value: e.exposure.maturity }, { name: "Owner", value: r }, { name: "Exposure name", value: e.exposure.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("MetricCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.metric = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.metric = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length; const r = "expression" === e.metric.type ? "Expression metric" : "Aggregate metric"; e.extra_table_fields = [{ name: "Metric Type", value: r }, { name: "Metric name", value: e.metric.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SemanticModelCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.semantic_model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.semantic_model = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length; const r = "expression" === e.semantic_model.type ? "Expression semantic_model" : "Aggregate semantic_model"; e.extra_table_fields = [{ name: "Semantic Model Type", value: r }, { name: "Semantic Model name", value: e.semantic_model.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("SavedQueryCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.project = n, e.codeService = r, e.extra_table_fields = [], e.versions = {}, e.saved_query = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.saved_query = n, e.parents = i.getParents(t, n), e.parentsLength = e.parents.length; const r = "expression" === e.saved_query.type ? "Expression saved_query" : "Aggregate saved_query"; e.extra_table_fields = [{ name: "Saved Query Type", value: r }, { name: "Saved Query name", value: e.saved_query.name }] })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(24); n(25), r.module("dbt").controller("OperationCtrl", ["$scope", "$state", "project", "code", "$anchorScroll", "$location", function (e, t, n, r, o, a) { e.model_uid = t.params.unique_id, e.tab = t.params.tab, e.project = n, e.codeService = r, e.versions = {}, e.model = {}, n.ready((function (t) { let n = t.nodes[e.model_uid]; e.model = n, e.references = i.getReferences(t, n), e.referencesLength = Object.keys(e.references).length, e.parents = i.getParents(t, n), e.parentsLength = Object.keys(e.parents).length, e.language = n.language; e.versions = { Source: e.model.raw_code, Compiled: e.model.compiled_code || "\n-- compiled code not found for this model\n" }, setTimeout((function () { o() }), 0) })) }]) }, function (e, t, n) { "use strict"; n(8).module("dbt").controller("GraphCtrl", ["$scope", "$state", "$window", "graph", "project", "selectorService", function (e, t, n, r, i, o) { function a(e) { return e && "source" == e.resource_type ? "source:" + e.source_name + "." + e.name : e && "exposure" == e.resource_type ? "exposure:" + e.name : e && "metric" == e.resource_type ? "metric:" + e.name : e && "semantic_model" == e.resource_type ? "semantic_model:" + e.name : e && "saved_query" == e.resource_type ? "saved_query:" + e.name : e && "model" == e.resource_type && null != e.version ? e.label : e.name ? e.name : "*" } e.graph = r.graph, e.graphService = r, e.graphRendered = function (e) { r.setGraphReady(e) }, e.$watch((function () { return t.params.unique_id }), (function (e, t) { e && e != t && i.find_by_id(e, (function (e) { e && ("sidebar" == r.orientation ? r.showVerticalGraph(a(e), !1) : r.showFullGraph(a(e))) })), e || o.clearViewNode() })) }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(21), o = n(33), a = n(461); n(462), n(206), n(470), n(472), n(475), n(479), r.module("dbt").controller("MainController", ["$scope", "$route", "$state", "project", "graph", "selectorService", "trackingService", "locationService", "$transitions", function (e, t, n, r, s, l, c, u, d) { function p(t) { e.model_uid = t; var n = r.node(t); n && l.resetSelection(n) } function f(e) { e && setTimeout((function () { var t = o("*[data-nav-unique-id='" + e + "']"); t.length && t[0].scrollIntoView && t[0].scrollIntoView({ behavior: "smooth", block: "center", inline: "center" }) }), 1) } e.tree = { database: {}, project: {}, sources: {} }, e.search = { query: "", results: [], is_focused: !1 }, e.logo = a, e.model_uid = null, e.project = {}, o("body").bind("keydown", (function (e) { "t" == event.key && "INPUT" != event.target.tagName && (o("#search").focus(), event.preventDefault()) })), e.onSearchFocus = function (t, n) { e.search.is_focused = n }, e.clearSearch = function () { e.search.is_focused = !1, e.search.query = "", e.search.results = [], o("#search").blur() }, e.$on("clearSearch", (function () { e.clearSearch() })), e.$on("query", (function (t, n) { e.search.is_focused = !0, e.search.query = n })), e.onSearchKeypress = function (t) { "Escape" == t.key && (e.clearSearch(), t.preventDefault()) }, r.getModelTree(n.params.unique_id, (function (t) { e.tree.database = t.database, e.tree.project = t.project, e.tree.sources = t.sources, e.tree.exposures = t.exposures, e.tree.metrics = t.metrics, e.tree.semantic_models = t.semantic_models, e.tree.saved_queries = t.saved_queries, e.tree.groups = t.groups, setTimeout((function () { f(e.model_uid) })) })), d.onSuccess({}, (function (t, n) { var i = t.router.globals.params, o = l.getViewNode(), a = o ? o.unique_id : null, s = i.unique_id, u = !0; if (t.from().name == t.to().name && a == s && (u = !1), u && i.unique_id) { var d = r.updateSelected(i.unique_id); e.tree.database = d.database, e.tree.groups = d.groups, e.tree.project = d.project, e.tree.sources = d.sources, e.search.query = "", p(i.unique_id), setTimeout((function () { f(i.unique_id) })) } u && c.track_pageview() })), e.$watch("search.query", (function (t) { e.search.results = function (t) { if ("" === e.search.query) return t; let n = { name: 10, tags: 5, description: 3, raw_code: 2, columns: 1 }; return i.each(t, (function (t) { t.overallWeight = 0, i.each(Object.keys(n), (function (r) { if (null != t.model[r]) { let o = 0, a = t.model[r], s = e.search.query.toLowerCase(); if ("columns" === r) i.each(a, (function (e) { if (e.name) { let t = e.name.toLowerCase(), n = 0; for (; -1 != n;)n = t.indexOf(s, n), -1 != n && (o++, n++) } })); else if ("tags" === r) i.each(a, (function (e) { let t = e.toLowerCase(), n = 0; for (; -1 != n;)n = t.indexOf(s, n), -1 != n && (o++, n++) })); else { a = a.toLowerCase(); let e = 0; for (; -1 != e;)e = a.indexOf(s, e), -1 != e && (o++, e++) } t.overallWeight += o * n[r] } })) })), t }(r.search(t)) })), r.init(), r.ready((function (t) { e.project = t, e.search.results = r.search(""); var o = i.unique(i.pluck(i.values(t.nodes), "package_name")).sort(), a = [null]; i.each(t.nodes, (function (e) { var t = e.tags; a = i.union(a, t).sort() })), l.init({ packages: o, tags: a }), p(n.params.unique_id); var d = u.parseState(n.params); d.show_graph && s.ready((function () { i.assign(l.selection.dirty, d.selected); var e = l.updateSelection(); s.updateGraph(e) })); var f = t.metadata || {}; c.init({ track: f.send_anonymous_usage_stats, project_id: f.project_id }) })) }]) }, function (e, t) { e.exports = "data:image/svg+xml,%3Csvg width='242' height='90' viewBox='0 0 242 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath d='M240.384 74.5122L239.905 75.8589H239.728L239.249 74.5156V75.8589H238.941V74.0234H239.324L239.816 75.3872L240.309 74.0234H240.691V75.8589H240.384V74.5122ZM238.671 74.3003H238.169V75.8589H237.858V74.3003H237.352V74.0234H238.671V74.3003Z' fill='%23262A38'/%3E %3Cpath d='M154.123 13.915V75.3527H141.672V69.0868C140.37 71.2839 138.499 73.0742 136.22 74.2134C133.779 75.434 131.012 76.085 128.246 76.085C124.828 76.1664 121.41 75.1899 118.562 73.2369C115.633 71.2839 113.354 68.5986 111.889 65.425C110.262 61.7631 109.448 57.8572 109.529 53.8698C109.448 49.8825 110.262 45.9765 111.889 42.3961C113.354 39.3038 115.633 36.6185 118.481 34.7469C121.41 32.8753 124.828 31.9801 128.246 32.0615C130.931 32.0615 133.616 32.6311 135.976 33.8517C138.255 34.991 140.126 36.6999 141.428 38.8156V18.0651L154.123 13.915ZM139.15 63.2279C140.777 61.1121 141.672 58.0199 141.672 54.0326C141.672 50.0452 140.859 47.0344 139.15 44.9187C137.441 42.8029 134.755 41.5823 131.989 41.6637C129.222 41.5009 126.537 42.7215 124.746 44.8373C123.038 46.953 122.142 49.9639 122.142 53.8698C122.142 57.8572 123.038 60.9494 124.746 63.1465C126.455 65.3436 129.222 66.5642 131.989 66.4828C135.081 66.4828 137.522 65.3436 139.15 63.2279Z' fill='%23262A38'/%3E %3Cpath d='M198.635 34.6655C201.564 36.5371 203.843 39.2225 205.226 42.3147C206.853 45.8952 207.667 49.8011 207.586 53.7885C207.667 57.7758 206.853 61.7632 205.226 65.3436C203.761 68.5172 201.483 71.2026 198.553 73.1556C195.705 75.0272 192.287 76.0037 188.87 75.9223C186.103 76.0037 183.336 75.3527 180.895 74.0507C178.617 72.9114 176.745 71.1212 175.524 68.9241V75.2713H162.993V18.0651L175.606 13.915V38.9783C176.826 36.7812 178.698 34.991 180.976 33.8517C183.418 32.5498 186.103 31.8988 188.87 31.9801C192.287 31.8988 195.705 32.8753 198.635 34.6655ZM192.45 63.1465C194.159 60.9494 194.973 57.8572 194.973 53.7885C194.973 49.8825 194.159 46.8716 192.45 44.7559C190.741 42.6402 188.381 41.5823 185.289 41.5823C182.523 41.4196 179.837 42.6402 178.047 44.8373C176.338 47.0344 175.524 50.0452 175.524 53.9512C175.524 57.9386 176.338 61.0308 178.047 63.1465C179.756 65.3436 182.441 66.5642 185.289 66.4015C188.056 66.5642 190.741 65.3436 192.45 63.1465Z' fill='%23262A38'/%3E %3Cpath d='M225 42.4774V58.915C225 61.2749 225.651 62.9838 226.791 64.0416C228.093 65.1809 229.801 65.7505 231.592 65.6691C232.975 65.6691 234.44 65.425 235.742 65.0995V74.8644C233.382 75.6782 230.941 76.085 228.499 76.0037C223.292 76.0037 219.304 74.5389 216.537 71.6094C213.771 68.68 212.387 64.5299 212.387 59.1592V23.1103L225 19.0416V33.038H235.742V42.4774H225Z' fill='%23262A38'/%3E %3Cpath d='M86.1754 3.74322C88.2911 5.77758 89.6745 8.46293 90 11.3924C90 12.613 89.6745 13.4268 88.9421 14.9729C88.2098 16.519 79.1772 32.1429 76.4919 36.4557C74.9458 38.9783 74.132 41.9892 74.132 44.9186C74.132 47.9295 74.9458 50.859 76.4919 53.3816C79.1772 57.6944 88.2098 73.3996 88.9421 74.9457C89.6745 76.4919 90 77.2242 90 78.4448C89.6745 81.3743 88.3725 84.0597 86.2568 86.0127C84.2224 88.1284 81.5371 89.5118 78.689 89.7559C77.4684 89.7559 76.6546 89.4304 75.1899 88.698C73.7251 87.9656 57.7758 79.1772 53.4629 76.4919C53.1374 76.3291 52.8119 76.085 52.4051 75.9222L31.085 63.3092C31.5732 67.3779 33.3635 71.2839 36.2929 74.132C36.8626 74.7016 37.4322 75.1899 38.0832 75.6781C37.5949 75.9222 37.0253 76.1664 36.5371 76.4919C32.2242 79.1772 16.519 88.2098 14.9729 88.9421C13.4268 89.6745 12.6944 90 11.3924 90C8.46293 89.6745 5.77758 88.3725 3.82459 86.2568C1.70886 84.2224 0.325497 81.5371 0 78.6076C0.0813743 77.387 0.406872 76.1664 1.05787 75.1085C1.79024 73.5624 10.8228 57.8571 13.5081 53.5443C15.0542 51.0217 15.868 48.0922 15.868 45.0814C15.868 42.0705 15.0542 39.141 13.5081 36.6184C10.8228 32.1429 1.70886 16.4376 1.05787 14.8915C0.406872 13.8336 0.0813743 12.613 0 11.3924C0.325497 8.46293 1.62749 5.77758 3.74322 3.74322C5.77758 1.62749 8.46293 0.325497 11.3924 0C12.613 0.0813743 13.8336 0.406872 14.9729 1.05787C16.2749 1.62749 27.7486 8.30018 33.8517 11.8807L35.2351 12.6944C35.7233 13.0199 36.1302 13.264 36.4557 13.4268L37.1067 13.8336L58.8336 26.6908C58.3454 21.8083 55.8228 17.3327 51.9168 14.3219C52.4051 14.0778 52.9747 13.8336 53.4629 13.5081C57.7758 10.8228 73.481 1.70886 75.0271 1.05787C76.085 0.406872 77.3056 0.0813743 78.6076 0C81.4557 0.325497 84.1411 1.62749 86.1754 3.74322ZM46.1392 50.7776L50.7776 46.1392C51.4286 45.4882 51.4286 44.5118 50.7776 43.8608L46.1392 39.2224C45.4882 38.5714 44.5118 38.5714 43.8608 39.2224L39.2224 43.8608C38.5714 44.5118 38.5714 45.4882 39.2224 46.1392L43.8608 50.7776C44.4304 51.3472 45.4882 51.3472 46.1392 50.7776Z' fill='%23FF694A'/%3E %3C/svg%3E" }, function (e, t, n) { "use strict"; n.r(t); var r = n(63), i = n.n(r); n(463), n(464), n(465), n(466), n(468); const o = n(8), a = (n(33), n(21)); window.Prism = i.a, o.module("dbt").factory("code", ["$sce", function (e) { var t = { copied: !1, highlight: function (t, n = "sql") { if ("sql" == n) var r = i.a.highlight(t, i.a.languages.sql, "sql"); else if ("python" == n) r = i.a.highlight(t, i.a.languages.python, "python"); return e.trustAsHtml(r) }, copy_to_clipboard: function (e) { var t = document.createElement("textarea"); t.value = e, t.setAttribute("readonly", ""), t.style.position = "absolute", t.style.left = "-9999px", document.body.appendChild(t), t.select(), document.execCommand("copy"), document.body.removeChild(t) }, generateSourceSQL: function (e) { var t = ["select"], n = a.size(e.columns), r = a.keys(e.columns); a.each(r, (function (e, r) { var i = " " + e; r + 1 != n && (i += ","), t.push(i) })); const i = (e.database ? e.database + "." : "") + e.schema + "." + e.identifier; return t.push("from " + i), t.join("\n") } }; return t }]) }, function (e, t) { Prism.languages.sql = { comment: { pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/, lookbehind: !0 }, variable: [{ pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/, greedy: !0 }, /@[\w.$]+/], string: { pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/, greedy: !0, lookbehind: !0 }, identifier: { pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/, greedy: !0, lookbehind: !0, inside: { punctuation: /^`|`$/ } }, function: /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i, keyword: /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i, boolean: /\b(?:FALSE|NULL|TRUE)\b/i, number: /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i, operator: /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i, punctuation: /[;[\]()`,.]/ } }, function (e, t) { Prism.languages.python = { comment: { pattern: /(^|[^\\])#.*/, lookbehind: !0, greedy: !0 }, "string-interpolation": { pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i, greedy: !0, inside: { interpolation: { pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/, lookbehind: !0, inside: { "format-spec": { pattern: /(:)[^:(){}]+(?=\}$)/, lookbehind: !0 }, "conversion-option": { pattern: /![sra](?=[:}]$)/, alias: "punctuation" }, rest: null } }, string: /[\s\S]+/ } }, "triple-quoted-string": { pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i, greedy: !0, alias: "string" }, string: { pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i, greedy: !0 }, function: { pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g, lookbehind: !0 }, "class-name": { pattern: /(\bclass\s+)\w+/i, lookbehind: !0 }, decorator: { pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m, lookbehind: !0, alias: ["annotation", "punctuation"], inside: { punctuation: /\./ } }, keyword: /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/, builtin: /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/, boolean: /\b(?:False|None|True)\b/, number: /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i, operator: /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/, punctuation: /[{}[\];(),.:]/ }, Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest = Prism.languages.python, Prism.languages.py = Prism.languages.python }, function (e, t) { !function () { if ("undefined" != typeof Prism && "undefined" != typeof document) { var e = /\n(?!$)/g, t = Prism.plugins.lineNumbers = { getLine: function (e, t) { if ("PRE" === e.tagName && e.classList.contains("line-numbers")) { var n = e.querySelector(".line-numbers-rows"); if (n) { var r = parseInt(e.getAttribute("data-start"), 10) || 1, i = r + (n.children.length - 1); t < r && (t = r), t > i && (t = i); var o = t - r; return n.children[o] } } }, resize: function (e) { r([e]) }, assumeViewportIndependence: !0 }, n = void 0; window.addEventListener("resize", (function () { t.assumeViewportIndependence && n === window.innerWidth || (n = window.innerWidth, r(Array.prototype.slice.call(document.querySelectorAll("pre.line-numbers")))) })), Prism.hooks.add("complete", (function (t) { if (t.code) { var n = t.element, i = n.parentNode; if (i && /pre/i.test(i.nodeName) && !n.querySelector(".line-numbers-rows") && Prism.util.isActive(n, "line-numbers")) { n.classList.remove("line-numbers"), i.classList.add("line-numbers"); var o, a = t.code.match(e), s = a ? a.length + 1 : 1, l = new Array(s + 1).join(""); (o = document.createElement("span")).setAttribute("aria-hidden", "true"), o.className = "line-numbers-rows", o.innerHTML = l, i.hasAttribute("data-start") && (i.style.counterReset = "linenumber " + (parseInt(i.getAttribute("data-start"), 10) - 1)), t.element.appendChild(o), r([i]), Prism.hooks.run("line-numbers", t) } } })), Prism.hooks.add("line-numbers", (function (e) { e.plugins = e.plugins || {}, e.plugins.lineNumbers = !0 })) } function r(t) { if (0 != (t = t.filter((function (e) { var t = function (e) { if (!e) return null; return window.getComputedStyle ? getComputedStyle(e) : e.currentStyle || null }(e)["white-space"]; return "pre-wrap" === t || "pre-line" === t }))).length) { var n = t.map((function (t) { var n = t.querySelector("code"), r = t.querySelector(".line-numbers-rows"); if (n && r) { var i = t.querySelector(".line-numbers-sizer"), o = n.textContent.split(e); i || ((i = document.createElement("span")).className = "line-numbers-sizer", n.appendChild(i)), i.innerHTML = "0", i.style.display = "block"; var a = i.getBoundingClientRect().height; return i.innerHTML = "", { element: t, lines: o, lineHeights: [], oneLinerHeight: a, sizer: i } } })).filter(Boolean); n.forEach((function (e) { var t = e.sizer, n = e.lines, r = e.lineHeights, i = e.oneLinerHeight; r[n.length - 1] = void 0, n.forEach((function (e, n) { if (e && e.length > 1) { var o = t.appendChild(document.createElement("span")); o.style.display = "block", o.textContent = e } else r[n] = i })) })), n.forEach((function (e) { for (var t = e.sizer, n = e.lineHeights, r = 0, i = 0; i < n.length; i++)void 0 === n[i] && (n[i] = t.children[r++].getBoundingClientRect().height) })), n.forEach((function (e) { var t = e.sizer, n = e.element.querySelector(".line-numbers-rows"); t.style.display = "none", t.innerHTML = "", e.lineHeights.forEach((function (e, t) { n.children[t].style.height = e + "px" })) })) } } }() }, function (e, t, n) { var r = n(467); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, 'pre[class*="language-"].line-numbers {\n\tposition: relative;\n\tpadding-left: 3.8em;\n\tcounter-reset: linenumber;\n}\n\npre[class*="language-"].line-numbers > code {\n\tposition: relative;\n\twhite-space: inherit;\n}\n\n.line-numbers .line-numbers-rows {\n\tposition: absolute;\n\tpointer-events: none;\n\ttop: 0;\n\tfont-size: 100%;\n\tleft: -3.8em;\n\twidth: 3em; /* works for line-numbers below 1000 lines */\n\tletter-spacing: -1px;\n\tborder-right: 1px solid #999;\n\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n}\n\n\t.line-numbers-rows > span {\n\t\tdisplay: block;\n\t\tcounter-increment: linenumber;\n\t}\n\n\t\t.line-numbers-rows > span:before {\n\t\t\tcontent: counter(linenumber);\n\t\t\tcolor: #999;\n\t\t\tdisplay: block;\n\t\t\tpadding-right: 0.8em;\n\t\t\ttext-align: right;\n\t\t}\n', ""]) }, function (e, t, n) { var r = n(469); "string" == typeof r && (r = [[e.i, r, ""]]); var i = { hmr: !0, transform: void 0, insertInto: void 0 }; n(40)(r, i); r.locals && (e.exports = r.locals) }, function (e, t, n) { (e.exports = n(39)(!1)).push([e.i, '/**\n * GHColors theme by Avi Aryan (http://aviaryan.in)\n * Inspired by Github syntax coloring\n */\n\ncode[class*="language-"],\npre[class*="language-"] {\n\tcolor: #393A34;\n\tfont-family: "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;\n\tdirection: ltr;\n\ttext-align: left;\n\twhite-space: pre;\n\tword-spacing: normal;\n\tword-break: normal;\n\tfont-size: .9em;\n\tline-height: 1.2em;\n\n\t-moz-tab-size: 4;\n\t-o-tab-size: 4;\n\ttab-size: 4;\n\n\t-webkit-hyphens: none;\n\t-moz-hyphens: none;\n\t-ms-hyphens: none;\n\thyphens: none;\n}\n\npre > code[class*="language-"] {\n\tfont-size: 1em;\n}\n\npre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,\ncode[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {\n\tbackground: #b3d4fc;\n}\n\npre[class*="language-"]::selection, pre[class*="language-"] ::selection,\ncode[class*="language-"]::selection, code[class*="language-"] ::selection {\n\tbackground: #b3d4fc;\n}\n\n/* Code blocks */\npre[class*="language-"] {\n\tpadding: 1em;\n\tmargin: .5em 0;\n\toverflow: auto;\n\tborder: 1px solid #dddddd;\n\tbackground-color: white;\n}\n\n/* Inline code */\n:not(pre) > code[class*="language-"] {\n\tpadding: .2em;\n\tpadding-top: 1px;\n\tpadding-bottom: 1px;\n\tbackground: #f8f8f8;\n\tborder: 1px solid #dddddd;\n}\n\n.token.comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n\tcolor: #999988;\n\tfont-style: italic;\n}\n\n.token.namespace {\n\topacity: .7;\n}\n\n.token.string,\n.token.attr-value {\n\tcolor: #e3116c;\n}\n\n.token.punctuation,\n.token.operator {\n\tcolor: #393A34; /* no highlight */\n}\n\n.token.entity,\n.token.url,\n.token.symbol,\n.token.number,\n.token.boolean,\n.token.variable,\n.token.constant,\n.token.property,\n.token.regex,\n.token.inserted {\n\tcolor: #36acaa;\n}\n\n.token.atrule,\n.token.keyword,\n.token.attr-name,\n.language-autohotkey .token.selector {\n\tcolor: #00a4db;\n}\n\n.token.function,\n.token.deleted,\n.language-autohotkey .token.tag {\n\tcolor: #9a050f;\n}\n\n.token.tag,\n.token.selector,\n.language-autohotkey .token.keyword {\n\tcolor: #00009f;\n}\n\n.token.important,\n.token.function,\n.token.bold {\n\tfont-weight: bold;\n}\n\n.token.italic {\n\tfont-style: italic;\n}\n', ""]) }, function (e, t, n) { n(33); const r = n(21), i = n(148), o = n(203), a = n(471); angular.module("dbt").factory("graph", ["$state", "$window", "$q", "selectorService", "project", "locationService", function (e, t, n, s, l, c) { var u = { vertical: { userPanningEnabled: !1, boxSelectionEnabled: !1, maxZoom: 1.5 }, horizontal: { userPanningEnabled: !0, boxSelectionEnabled: !1, maxZoom: 1, minZoom: .05 } }, d = { none: { name: "null" }, left_right: { name: "dagre", rankDir: "LR", rankSep: 200, edgeSep: 30, nodeSep: 50 }, top_down: { name: "preset", positions: function (t) { var n = e.params.unique_id; if (!n) return { x: 0, y: 0 }; var a = p.graph.pristine.dag, s = r.sortBy(o.ancestorNodes(a, n, 1)), l = r.sortBy(o.descendentNodes(a, n, 1)), c = r.partial(r.includes, s), u = r.partial(r.includes, l), d = a.filterNodes(c), f = a.filterNodes(u); return function (e, t, n, i) { var o, a = 100 / (1 + Math.max(t.length, n.length)); if (e == i) return { x: 0, y: 0 }; if (r.includes(t, i)) o = { set: t, index: r.indexOf(t, i), factor: -1, type: "parent" }; else { if (!r.includes(n, i)) return { x: 0, y: 0 }; o = { set: n, index: r.indexOf(n, i), factor: 1, type: "child" } } var s = o.set.length; if ("parent" == o.type) var l = { x: (0 + o.index) * a, y: -200 - 100 * (s - o.index - 1) }; else l = { x: (0 + o.index) * a, y: 200 + 100 * (s - o.index - 1) }; return l }(n, i.alg.topsort(d), i.alg.topsort(f).reverse(), t.data("id")) } } }, p = { loading: !0, loaded: n.defer(), graph_element: null, orientation: "sidebar", expanded: !1, graph: { options: u.vertical, pristine: { nodes: {}, edges: {}, dag: null }, elements: [], layout: d.none, style: [{ selector: "edge.vertical", style: { "curve-style": "unbundled-bezier", "target-arrow-shape": "triangle-backcurve", "target-arrow-color": "#027599", "arrow-scale": 1.5, "line-color": "#027599", width: 3, "target-distance-from-node": "5px", "source-endpoint": "0% 50%", "target-endpoint": "0deg" } }, { selector: "edge.horizontal", style: { "curve-style": "unbundled-bezier", "target-arrow-shape": "triangle-backcurve", "target-arrow-color": "#006f8a", "arrow-scale": 1.5, "target-distance-from-node": "10px", "source-distance-from-node": "5px", "line-color": "#006f8a", width: 3, "source-endpoint": "50% 0%", "target-endpoint": "270deg" } }, { selector: "edge[selected=1]", style: { "line-color": "#bd6bb6", "target-arrow-color": "#bd6bb6", "z-index": 1 } }, { selector: 'node[display="none"]', style: { display: "none" } }, { selector: "node.vertical", style: { "text-margin-x": "5px", "background-color": "#0094b3", "border-color": "#0094b3", "font-size": "16px", shape: "ellipse", color: "#fff", width: "5px", height: "5px", padding: "5px", content: "data(label)", "font-weight": 300, "text-valign": "center", "text-halign": "right" } }, { selector: "node.horizontal", style: { "background-color": "#0094b3", "border-color": "#0094b3", "font-size": "24px", shape: "roundrectangle", color: "#fff", width: "label", height: "label", padding: "12px", content: "data(label)", "font-weight": 300, "font-family": '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif', "text-valign": "center", "text-halign": "center", ghost: "yes", "ghost-offset-x": "2px", "ghost-offset-y": "4px", "ghost-opacity": .5, "text-outline-color": "#000", "text-outline-width": "1px", "text-outline-opacity": .2 } }, { selector: 'node[resource_type="source"]', style: { "background-color": "#5fb825", "border-color": "#5fb825" } }, { selector: 'node[resource_type="exposure"]', style: { "background-color": "#ff694b", "border-color": "#ff694b" } }, { selector: 'node[resource_type="metric"]', style: { "background-color": "#ff5688", "border-color": "#ff5688" } }, { selector: 'node[resource_type="semantic_model"]', style: { "background-color": "#ffa8c2", "border-color": "#ffa8c2" } }, { selector: 'node[resource_type="saved_query"]', style: { "background-color": "#ff7f50", "border-color": "#ff7f50" } }, { selector: 'node[language="python"]', style: { "background-color": "#6a5acd", "border-color": "#6a5acd" } }, { selector: "node[node_color]", style: { "background-color": "data(node_color)", "border-color": "data(node_color)" } }, { selector: "node[selected=1]", style: { "background-color": "#bd6bb6", "border-color": "#bd6bb6" } }, { selector: "node.horizontal[selected=1]", style: { "background-color": "#88447d", "border-color": "#88447d" } }, { selector: "node.horizontal.dirty", style: { "background-color": "#919599", "border-color": "#919599" } }, { selector: "node[hidden=1]", style: { "background-color": "#919599", "border-color": "#919599", "background-opacity": .5 } }, { selector: 'node[access="private"]', style: { "background-opacity": .2, "border-width": 2, ghost: "no" } }], ready: function (e) { console.log("graph ready") } } }; function f(e, t, n) { var i = r.map(e, (function (e) { return p.graph.pristine.nodes[e] })), o = []; r.flatten(r.each(e, (function (t) { var n = p.graph.pristine.edges[t]; r.each(n, (function (t) { r.includes(e, t.data.target) && r.includes(e, t.data.source) && o.push(t) })) }))); var s = r.compact(i).concat(r.compact(o)); return r.each(p.graph.elements, (function (e) { e.data.display = "none", e.data.selected = 0, e.data.hidden = 0, e.classes = n })), r.each(s, (function (e) { e.data.display = "element", e.classes = n, t && r.includes(t, e.data.unique_id) && (e.data.selected = 1), r.get(e, ["data", "docs", "show"], !0) || (e.data.hidden = 1); var i = r.get(e, ["data", "docs", "node_color"]); i && a.isValidColor(i) && (e.data.node_color = i) })), p.graph.elements = r.filter(s, (function (e) { return "element" == e.data.display })), e } function h(e, t, n) { var r = p.graph.pristine.dag; if (r) { var i = p.graph.pristine.nodes, o = s.selectNodes(r, i, e), a = n ? o.matched : []; return f(o.selected, a, t) } } return p.setGraphReady = function (e) { p.loading = !1, p.loaded.resolve(), p.graph_element = e }, p.ready = function (e) { p.loaded.promise.then((function () { e(p) })) }, p.manifest = {}, p.packages = [], p.selected_node = null, p.getCanvasHeight = function () { return .8 * t.innerHeight + "px" }, l.ready((function (e) { p.manifest = e, p.packages = r.uniq(r.map(p.manifest.nodes, "package_name")), r.each(r.filter(p.manifest.nodes, (function (e) { var t = r.includes(["model", "seed", "source", "snapshot", "analysis", "exposure", "metric", "semantic_model", "operation", "saved_query"], e.resource_type), n = "test" === e.resource_type && !e.hasOwnProperty("test_metadata"), i = "unit_test" === e.resource_type; return t || n || i })), (function (e) { var t = { group: "nodes", data: r.assign(e, { parent: e.package_name, id: e.unique_id, is_group: "false" }) }; p.graph.pristine.nodes[e.unique_id] = t })), r.each(p.manifest.parent_map, (function (e, t) { r.each(e, (function (e) { var n = p.manifest.nodes[e], i = p.manifest.nodes[t]; if (r.includes(["model", "source", "seed", "snapshot", "metric", "semantic_model", "saved_query"], n.resource_type) && ("test" != i.resource_type || !i.hasOwnProperty("test_metadata"))) { var o = n.unique_id + "|" + i.unique_id, a = { group: "edges", data: { source: n.unique_id, target: i.unique_id, unique_id: o } }, s = i.unique_id; p.graph.pristine.edges[s] || (p.graph.pristine.edges[s] = []), p.graph.pristine.edges[s].push(a) } })) })); var t = new i.Graph({ directed: !0 }); r.each(p.graph.pristine.nodes, (function (e) { t.setNode(e.data.unique_id, e.data.name) })), r.each(p.graph.pristine.edges, (function (e) { r.each(e, (function (e) { t.setEdge(e.data.source, e.data.target) })) })), p.graph.pristine.dag = t, p.graph.elements = r.flatten(r.values(p.graph.pristine.nodes).concat(r.values(p.graph.pristine.edges))), f(t.nodes()) })), p.hideGraph = function () { p.orientation = "sidebar", p.expanded = !1 }, p.showVerticalGraph = function (e, t) { p.orientation = "sidebar", t && (p.expanded = !0); var n = h(r.assign({}, s.options, { include: "+" + e + "+", exclude: "", hops: 1 }), "vertical", !0); return p.graph.layout = d.top_down, p.graph.options = u.vertical, n }, p.showFullGraph = function (e) { p.orientation = "fullscreen", p.expanded = !0; var t = r.assign({}, s.options); e ? (t.include = "+" + e + "+", t.exclude = "") : (t.include = "", t.exclude = ""); var n = h(t, "horizontal", !0); return p.graph.layout = d.left_right, p.graph.options = u.horizontal, c.setState(t), n }, p.updateGraph = function (e) { p.orientation = "fullscreen", p.expanded = !0; var t = h(e, "horizontal", !1); return p.graph.layout = d.left_right, p.graph.options = u.horizontal, c.setState(e), t }, p.deselectNodes = function () { "fullscreen" == p.orientation && p.graph_element.elements().data("selected", 0) }, p.selectNode = function (e) { if ("fullscreen" == p.orientation) { p.graph.pristine.nodes[e]; var t = p.graph.pristine.dag, n = r.indexBy(o.ancestorNodes(t, e)), i = r.indexBy(o.descendentNodes(t, e)); n[e] = e, i[e] = e; var a = p.graph_element; r.each(p.graph.elements, (function (t) { var r = a.$id(t.data.id); n[t.data.source] && n[t.data.target] || i[t.data.source] && i[t.data.target] || t.data.unique_id == e ? r.data("selected", 1) : r.data("selected", 0) })) } }, p.markDirty = function (e) { p.markAllClean(), r.each(e, (function (e) { p.graph_element.$id(e).addClass("dirty") })) }, p.markAllClean = function () { p.graph_element && p.graph_element.elements().removeClass("dirty") }, p }]) }, function (e, t, n) { "use strict"; n.r(t), n.d(t, "isValidColor", (function () { return i })); const r = new Set(["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "ghostwhite", "gold", "goldenrod", "gray", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"]); function i(e) { if (!e) return !1; const t = e.trim().toLowerCase(); if ("" === t) return !1; const n = t.match(/^#([A-Fa-f0-9]{3}){1,2}$/), i = r.has(t); return Boolean(n) || i } }, function (e, t, n) { n(33); const r = n(21), i = n(473); angular.module("dbt").factory("selectorService", ["$state", function (e) { var t = { include: "", exclude: "", packages: [], tags: [null], resource_types: ["model", "seed", "snapshot", "source", "test", "unit_test", "analysis", "exposure", "metric", "semantic_model", "saved_query"], depth: 1 }, n = { view_node: null, selection: { clean: r.clone(t), dirty: r.clone(t) }, options: { packages: [], tags: [null], resource_types: ["model", "seed", "snapshot", "source", "test", "analysis", "exposure", "metric", "semantic_model", "unit_test", "saved_query"] }, init: function (e) { r.each(e, (function (e, r) { n.options[r] = e, t[r] = e, n.selection.clean[r] = e, n.selection.dirty[r] = e })) }, resetSelection: function (e) { var i = { include: e && r.includes(["model", "seed", "snapshot"], e.resource_type) ? "+" + e.name + "+" : e && "source" == e.resource_type ? "+source:" + e.source_name + "." + e.name + "+" : e && "exposure" == e.resource_type ? "+exposure:" + e.name : e && "metric" == e.resource_type ? "+metric:" + e.name : e && "semantic_model" == e.resource_type ? "+semantic_model:" + e.name : e && "saved_query" == e.resource_type ? "+saved_query:" + e.name : e && r.includes(["analysis", "test", "unit_test"], e.resource_type) ? "+" + e.name : "" }, o = r.assign({}, t, i); n.selection.clean = r.clone(o), n.selection.dirty = r.clone(o), n.view_node = e }, getViewNode: function () { return n.view_node }, excludeNode: function (e, t) { var r, i = n.selection.dirty.exclude, o = t.parents ? "+" : "", a = t.children ? "+" : "", s = i.length > 0 ? " " : ""; "source" == e.resource_type ? (o += "source:", r = e.source_name + "." + e.name) : ["exposure", "metric", "semantic_model", "saved_query"].indexOf(e.resource_type) > -1 ? (o += e.resource_type + ":", r = e.name) : r = e.name; var l = i + s + o + r + a; return n.selection.dirty.exclude = l, n.updateSelection() }, selectSource: function (e, t) { var r = "source:" + e + (t.children ? "+" : ""); return n.selection.dirty.include = r, n.updateSelection() }, clearViewNode: function () { n.view_node = null }, isDirty: function () { return !r.isEqual(n.selection.clean, n.selection.dirty) }, updateSelection: function () { return n.selection.clean = r.clone(n.selection.dirty), n.selection.clean }, selectNodes: function (e, t, n) { return i.selectNodes(e, t, n) } }; return n }]) }, function (e, t, n) { const r = n(21), i = n(474); function o(e, t) { return t || (t = " "), r.filter(r.uniq(e.split(t)), (function (e) { return e.length > 0 })) } function a(e) { var t = { raw: e, select_at: !1, select_children: !1, children_depth: null, select_parents: !1, parents_depth: null }; const n = new RegExp("" + /^/.source + /(?(\@))?/.source + /(?((?(\d*))\+))?/.source + /((?([\w.]+)):)?/.source + /(?(.*?))/.source + /(?(\+(?(\d*))))?/.source + /$/.source).exec(e).groups; t.select_at = "@" == n.childs_parents, t.select_parents = !!n.parents, t.select_children = !!n.children, n.parents_depth && (t.parents_depth = parseInt(n.parents_depth)), n.children_depth && (t.children_depth = parseInt(n.children_depth)); var r = n.method, i = n.value; return r ? -1 != r.indexOf(".") && ([r, selector_modifier] = r.split(".", 2), i = { config: selector_modifier, value: i }) : r = "implicit", t.selector_type = r, t.selector_value = i, t } function s(e) { var t = o(e, " "); return r.map(t, (function (e) { var t = o(e, ","); return t.length > 1 ? { method: "intersect", selectors: r.map(t, a) } : { method: "none", selectors: r.map([e], a) } })) } function l(e, t) { var n = s(e), i = null, o = null; return r.each(n, (function (e) { var n = "intersect" == e.method ? r.intersection : r.union; r.each(e.selectors, (function (e) { var r = t(e); null === i ? (i = r.matched, o = r.selected) : (i = n(i, r.matched), o = n(o, r.selected)) })) })), { matched: i || [], selected: o || [] } } e.exports = { splitSpecs: o, parseSpec: a, parseSpecs: s, buildSpec: function (e, t, n) { return { include: s(e), exclude: s(t), hops: n } }, applySpec: l, selectNodes: function (e, t, n) { n.include, n.exclude; var o, a = r.partial(i.getNodesFromSpec, e, t, n.hops); r.values(t), o = 0 == n.include.trim().length ? { selected: e.nodes(), matched: [] } : l(n.include, a); var s = l(n.exclude, a), c = o.selected, u = o.matched; c = r.difference(c, s.selected), u = r.difference(u, s.matched); var d = []; return r.each(c, (function (e) { var i = t[e]; i.data.tags || (i.data.tags = []); var o = r.includes(n.packages, i.data.package_name), a = r.intersection(n.tags, i.data.tags).length > 0, s = r.includes(n.tags, null) && 0 == i.data.tags.length, l = r.includes(n.resource_types, i.data.resource_type); o && (a || s) && l || d.push(i.data.unique_id) })), { selected: r.difference(c, d), matched: r.difference(u, d) } } } }, function (e, t, n) { const r = n(21), i = n(203); var o = "fqn", a = "tag", s = "source", l = "exposure", c = "metric", u = "semantic_model", d = "saved_query", p = "group", f = "path", h = "file", g = "package", m = "config", v = "test_name", b = "test_type", y = {}; function x(e, t, n) { var r = e.slice(-1)[0], i = e.slice(-2, -1)[0]; if (t === r) return !0; if (version_options = [i, i + "_" + r, i + "." + r], n && version_options.includes(t)) return !0; var o = e.reduce((e, t) => e.concat(t.split(".")), []), a = t.split("."); if (o.length < a.length) return !1; for (var s = 0; s < a.length; s++) { var l = a[s]; if ("*" == l) return !0; if (o[s] != l) return !1 } return !0 } function w(e, t) { var n = []; return r.each(e, (function (e) { var i = e.data, o = i.fqn, a = null !== i.version; if (o && "source" != i.resource_type && "exposure" != i.resource_type && "metric" != i.resource_type && "semantic_model" != i.resource_type && "saved_query" != i.resource_type) { var s = r.rest(o); (x(o, t, a) || x(s, t, a)) && n.push(i) } })), r.uniq(n) } function k(e, t) { var n = [], i = t.split("/"); return r.each(e, (function (e) { var t = (e.data.original_file_path || "").split("/"), o = !0; r.each(i, (function (e, n) { "*" == e || "" == e || e != t[n] && (o = !1) })), o && n.push(e.data) })), n } function A(e, t) { var n = []; return r.each(e, (function (e) { var i = e.data.original_file_path.split("/"); r.last(i) == t && n.push(e.data) })), n } function E(e, t) { var n = []; return r.each(e, (function (e) { var i = e.data.tags; r.includes(i, t) && n.push(e.data) })), n } function S(e, t) { var n = []; return r.each(e, (function (e) { e.data.package_name == t && n.push(e.data) })), n } function $(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; r.config && r.config[t.config] == t.value && n.push(r) })), n } function C(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; r.test_metadata && r.test_metadata.name == t && n.push(r) })), n } function _(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("test" != r.resource_type) return !1; (r.hasOwnProperty("test_metadata") && ["schema", "generic"].indexOf(t) > -1 || !r.hasOwnProperty("test_metadata") && ["data", "singular"].indexOf(t) > -1) && n.push(r) })), n } function O(e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("source" == r.resource_type) { var i, o, a = r.source_name, s = r.name; -1 != t.indexOf(".") ? [i, o] = t.split(".", 2) : (i = t, o = null), ("*" == i || i == a && "*" === o || i == a && o === s || i == a && null === o) && n.push(e.data) } })), n } y["implicit"] = function (e, t) { var n = w(e, t), i = k(e, t), o = []; t.toLowerCase().endsWith(".sql") && (o = A(e, t)); var a = r.uniq([].concat(r.map(n, "unique_id"), r.map(i, "unique_id"), r.map(o, "unique_id"))); return r.map(a, t => e[t].data) }, y[o] = w, y[a] = E, y[s] = O, y[l] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("exposure" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[c] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("metric" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[u] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("semantic_model" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[d] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; if ("saved_query" == r.resource_type) { var i = r.name; ("*" == t || t == i) && n.push(e.data) } })), n }, y[p] = function (e, t) { var n = []; return r.each(e, (function (e) { var r = e.data; r.group == t && n.push(r) })), n }, y[f] = k, y[h] = A, y[g] = S, y[m] = $, y[v] = C, y[b] = _, e.exports = { isFQNMatch: x, getNodesByFQN: w, getNodesByTag: E, getNodesBySource: O, getNodesByPath: k, getNodesByPackage: S, getNodesByConfig: $, getNodesByTestName: C, getNodesByTestType: _, getNodesFromSpec: function (e, t, n, o) { const a = y[o.selector_type]; if (!a) return { selected: [], matched: [] }; var s = a(t, o.selector_value), l = [], c = []; return r.each(s, (function (t) { var a = t.unique_id; c.push(t.unique_id); var s = [], u = [], d = []; if (o.select_at && (d = r.union(i.selectAt(e, a))), o.select_parents) { var p = n || o.parents_depth; s = i.ancestorNodes(e, a, p) } if (o.select_children) { p = n || o.children_depth; u = i.descendentNodes(e, a, p) } l = r.union([a], l, u, s, d) })), { selected: l, matched: c } } } }, function (e, t, n) { const r = n(8); n(476); r.module("dbt").factory("trackingService", ["$location", "selectorService", "$rootScope", function (e, t, n) { var r = { initialized: !1, snowplow: null, project_id: null, init: function (e) { r.initialized || (r.initialized = !0, r.project_id = e.project_id, !0 === e.track && r.turn_on_tracking()) }, isHosted: function () { return hostedgetdbt = window.location.hostname.indexOf(".getdbt.com") > -1, hosteddbt = window.location.hostname.indexOf(".dbt.com") > -1, hostedgetdbt || hosteddbt }, turn_on_tracking: function () { var e, t, n, i, o, a; e = window, t = document, n = "script", e[i = "snowplow"] || (e.GlobalSnowplowNamespace = e.GlobalSnowplowNamespace || [], e.GlobalSnowplowNamespace.push(i), e[i] = function () { (e[i].q = e[i].q || []).push(arguments) }, e[i].q = e[i].q || [], o = t.createElement(n), a = t.getElementsByTagName(n)[0], o.async = 1, o.src = "//d1fc8wv8zag5ca.cloudfront.net/2.9.0/sp.js", a.parentNode.insertBefore(o, a)); var s = { appId: "dbt-docs", forceSecureTracker: !0, respectDoNotTrack: !0, userFingerprint: !1, contexts: { webPage: !0 } }; r.isHosted() && (window.location.hostname.indexOf(".getdbt.com") > -1 ? s.cookieDomain = ".getdbt.com" : s.cookieDomain = ".dbt.com"), r.snowplow = window.snowplow, r.snowplow("newTracker", "sp", "fishtownanalytics.sinter-collect.com", s), r.snowplow("enableActivityTracking", 30, 30), r.track_pageview() }, fuzzUrls: function () { r.isHosted() || (r.snowplow("setCustomUrl", "https://fuzzed.getdbt.com/"), r.snowplow("setReferrerUrl", "https://fuzzed.getdbt.com/")) }, getContext: function () { return [{ schema: "iglu:com.dbt/dbt_docs/jsonschema/1-0-0", data: { is_cloud_hosted: r.isHosted(), core_project_id: r.project_id } }] }, track_pageview: function () { if (r.snowplow) { r.fuzzUrls(); r.snowplow("trackPageView", null, r.getContext()) } }, track_event: function (e, t, n, i) { r.snowplow && (r.fuzzUrls(), r.snowplow("trackStructEvent", "dbt-docs", e, t, n, i, r.getContext())) }, track_graph_interaction: function (e, t) { r.snowplow && (r.fuzzUrls(), r.track_event("graph", "interact", e, t)) } }; return r }]) }, function (e, t, n) { var r, i, o, a, s; r = n(477), i = n(204).utf8, o = n(478), a = n(204).bin, (s = function (e, t) { e.constructor == String ? e = t && "binary" === t.encoding ? a.stringToBytes(e) : i.stringToBytes(e) : o(e) ? e = Array.prototype.slice.call(e, 0) : Array.isArray(e) || e.constructor === Uint8Array || (e = e.toString()); for (var n = r.bytesToWords(e), l = 8 * e.length, c = 1732584193, u = -271733879, d = -1732584194, p = 271733878, f = 0; f < n.length; f++)n[f] = 16711935 & (n[f] << 8 | n[f] >>> 24) | 4278255360 & (n[f] << 24 | n[f] >>> 8); n[l >>> 5] |= 128 << l % 32, n[14 + (l + 64 >>> 9 << 4)] = l; var h = s._ff, g = s._gg, m = s._hh, v = s._ii; for (f = 0; f < n.length; f += 16) { var b = c, y = u, x = d, w = p; c = h(c, u, d, p, n[f + 0], 7, -680876936), p = h(p, c, u, d, n[f + 1], 12, -389564586), d = h(d, p, c, u, n[f + 2], 17, 606105819), u = h(u, d, p, c, n[f + 3], 22, -1044525330), c = h(c, u, d, p, n[f + 4], 7, -176418897), p = h(p, c, u, d, n[f + 5], 12, 1200080426), d = h(d, p, c, u, n[f + 6], 17, -1473231341), u = h(u, d, p, c, n[f + 7], 22, -45705983), c = h(c, u, d, p, n[f + 8], 7, 1770035416), p = h(p, c, u, d, n[f + 9], 12, -1958414417), d = h(d, p, c, u, n[f + 10], 17, -42063), u = h(u, d, p, c, n[f + 11], 22, -1990404162), c = h(c, u, d, p, n[f + 12], 7, 1804603682), p = h(p, c, u, d, n[f + 13], 12, -40341101), d = h(d, p, c, u, n[f + 14], 17, -1502002290), c = g(c, u = h(u, d, p, c, n[f + 15], 22, 1236535329), d, p, n[f + 1], 5, -165796510), p = g(p, c, u, d, n[f + 6], 9, -1069501632), d = g(d, p, c, u, n[f + 11], 14, 643717713), u = g(u, d, p, c, n[f + 0], 20, -373897302), c = g(c, u, d, p, n[f + 5], 5, -701558691), p = g(p, c, u, d, n[f + 10], 9, 38016083), d = g(d, p, c, u, n[f + 15], 14, -660478335), u = g(u, d, p, c, n[f + 4], 20, -405537848), c = g(c, u, d, p, n[f + 9], 5, 568446438), p = g(p, c, u, d, n[f + 14], 9, -1019803690), d = g(d, p, c, u, n[f + 3], 14, -187363961), u = g(u, d, p, c, n[f + 8], 20, 1163531501), c = g(c, u, d, p, n[f + 13], 5, -1444681467), p = g(p, c, u, d, n[f + 2], 9, -51403784), d = g(d, p, c, u, n[f + 7], 14, 1735328473), c = m(c, u = g(u, d, p, c, n[f + 12], 20, -1926607734), d, p, n[f + 5], 4, -378558), p = m(p, c, u, d, n[f + 8], 11, -2022574463), d = m(d, p, c, u, n[f + 11], 16, 1839030562), u = m(u, d, p, c, n[f + 14], 23, -35309556), c = m(c, u, d, p, n[f + 1], 4, -1530992060), p = m(p, c, u, d, n[f + 4], 11, 1272893353), d = m(d, p, c, u, n[f + 7], 16, -155497632), u = m(u, d, p, c, n[f + 10], 23, -1094730640), c = m(c, u, d, p, n[f + 13], 4, 681279174), p = m(p, c, u, d, n[f + 0], 11, -358537222), d = m(d, p, c, u, n[f + 3], 16, -722521979), u = m(u, d, p, c, n[f + 6], 23, 76029189), c = m(c, u, d, p, n[f + 9], 4, -640364487), p = m(p, c, u, d, n[f + 12], 11, -421815835), d = m(d, p, c, u, n[f + 15], 16, 530742520), c = v(c, u = m(u, d, p, c, n[f + 2], 23, -995338651), d, p, n[f + 0], 6, -198630844), p = v(p, c, u, d, n[f + 7], 10, 1126891415), d = v(d, p, c, u, n[f + 14], 15, -1416354905), u = v(u, d, p, c, n[f + 5], 21, -57434055), c = v(c, u, d, p, n[f + 12], 6, 1700485571), p = v(p, c, u, d, n[f + 3], 10, -1894986606), d = v(d, p, c, u, n[f + 10], 15, -1051523), u = v(u, d, p, c, n[f + 1], 21, -2054922799), c = v(c, u, d, p, n[f + 8], 6, 1873313359), p = v(p, c, u, d, n[f + 15], 10, -30611744), d = v(d, p, c, u, n[f + 6], 15, -1560198380), u = v(u, d, p, c, n[f + 13], 21, 1309151649), c = v(c, u, d, p, n[f + 4], 6, -145523070), p = v(p, c, u, d, n[f + 11], 10, -1120210379), d = v(d, p, c, u, n[f + 2], 15, 718787259), u = v(u, d, p, c, n[f + 9], 21, -343485551), c = c + b >>> 0, u = u + y >>> 0, d = d + x >>> 0, p = p + w >>> 0 } return r.endian([c, u, d, p]) })._ff = function (e, t, n, r, i, o, a) { var s = e + (t & n | ~t & r) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._gg = function (e, t, n, r, i, o, a) { var s = e + (t & r | n & ~r) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._hh = function (e, t, n, r, i, o, a) { var s = e + (t ^ n ^ r) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._ii = function (e, t, n, r, i, o, a) { var s = e + (n ^ (t | ~r)) + (i >>> 0) + a; return (s << o | s >>> 32 - o) + t }, s._blocksize = 16, s._digestsize = 16, e.exports = function (e, t) { if (null == e) throw new Error("Illegal argument " + e); var n = r.wordsToBytes(s(e, t)); return t && t.asBytes ? n : t && t.asString ? a.bytesToString(n) : r.bytesToHex(n) } }, function (e, t) { var n, r; n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", r = { rotl: function (e, t) { return e << t | e >>> 32 - t }, rotr: function (e, t) { return e << 32 - t | e >>> t }, endian: function (e) { if (e.constructor == Number) return 16711935 & r.rotl(e, 8) | 4278255360 & r.rotl(e, 24); for (var t = 0; t < e.length; t++)e[t] = r.endian(e[t]); return e }, randomBytes: function (e) { for (var t = []; e > 0; e--)t.push(Math.floor(256 * Math.random())); return t }, bytesToWords: function (e) { for (var t = [], n = 0, r = 0; n < e.length; n++, r += 8)t[r >>> 5] |= e[n] << 24 - r % 32; return t }, wordsToBytes: function (e) { for (var t = [], n = 0; n < 32 * e.length; n += 8)t.push(e[n >>> 5] >>> 24 - n % 32 & 255); return t }, bytesToHex: function (e) { for (var t = [], n = 0; n < e.length; n++)t.push((e[n] >>> 4).toString(16)), t.push((15 & e[n]).toString(16)); return t.join("") }, hexToBytes: function (e) { for (var t = [], n = 0; n < e.length; n += 2)t.push(parseInt(e.substr(n, 2), 16)); return t }, bytesToBase64: function (e) { for (var t = [], r = 0; r < e.length; r += 3)for (var i = e[r] << 16 | e[r + 1] << 8 | e[r + 2], o = 0; o < 4; o++)8 * r + 6 * o <= 8 * e.length ? t.push(n.charAt(i >>> 6 * (3 - o) & 63)) : t.push("="); return t.join("") }, base64ToBytes: function (e) { e = e.replace(/[^A-Z0-9+\/]/gi, ""); for (var t = [], r = 0, i = 0; r < e.length; i = ++r % 4)0 != i && t.push((n.indexOf(e.charAt(r - 1)) & Math.pow(2, -2 * i + 8) - 1) << 2 * i | n.indexOf(e.charAt(r)) >>> 6 - 2 * i); return t } }, e.exports = r }, function (e, t) { + function n(e) { return !!e.constructor && "function" == typeof e.constructor.isBuffer && e.constructor.isBuffer(e) } + /*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + e.exports = function (e) { return null != e && (n(e) || function (e) { return "function" == typeof e.readFloatLE && "function" == typeof e.slice && n(e.slice(0, 0)) }(e) || !!e._isBuffer) } + }, function (e, t, n) { n(8).module("dbt").factory("locationService", ["$state", function (e) { var t = {}; return t.parseState = function (e) { return function (e) { return { selected: { include: e.g_i || "", exclude: e.g_e || "" }, show_graph: !!e.g_v } }(e) }, t.setState = function (t) { var n = function (e) { var t = { g_v: 1 }; return t.g_i = e.include, t.g_e = e.exclude, t }(t), r = e.current.name; e.go(r, n) }, t.clearState = function () { var t = e.current.name; e.go(t, { g_i: null, g_e: null, g_v: null }) }, t }]) }, function (e, t, n) { "use strict"; const r = n(8), i = n(202); r.module("dbt").controller("OverviewCtrl", ["$scope", "$state", "project", function (e, t, n) { e.overview_md = "(loading)", n.ready((function (n) { let r = t.params.project_name ? t.params.project_name : null; var o = n.docs["doc.dbt.__overview__"], a = i.filter(n.docs, { name: "__overview__" }); if (i.each(a, (function (e) { "dbt" != e.package_name && (o = e) })), null !== r) { o = n.docs[`doc.${r}.__${r}__`] || o; let e = i.filter(n.docs, { name: `__${r}__` }); i.each(e, e => { e.package_name !== r && (o = e) }) } e.overview_md = o.block_contents })) }]) }, function (e, t, n) { "use strict"; n(8).module("dbt").controller("SourceListCtrl", ["$scope", "$state", "project", function (e, t, n) { e.source = t.params.source, e.model = {}, e.extra_table_fields = [], e.has_more_info = function (e) { return (e.description || "").length }, e.toggle_source_expanded = function (t) { e.has_more_info(t) && (t.expanded = !t.expanded) }, n.ready((function (t) { var n = _.filter(t.nodes, (function (t) { return t.source_name == e.source })); if (0 != n.length) { n.sort((e, t) => e.name.localeCompare(t.name)); var r = n[0]; e.model = { name: e.source, source_description: r.source_description, sources: n }; var i = _.uniq(_.map(n, "metadata.owner")), o = _.uniq(_.map(n, "database")), a = _.uniq(_.map(n, "schema")); e.extra_table_fields = [{ name: "Loader", value: r.loader }, { name: 1 == i.length ? "Owner" : "Owners", value: i.join(", ") }, { name: 1 == o.length ? "Database" : "Databases", value: o.join(", ") }, { name: 1 == a.length ? "Schema" : "Schemas", value: a.join(", ") }, { name: "Tables", value: n.length }] } })) }]) }, function (e, t, n) { const r = n(8), i = { main: n(483), overview: n(484), graph: n(485), source: n(205), source_list: n(486), model: n(487), source: n(205), snapshot: n(488), seed: n(489), unit_test: n(490), test: n(491), analysis: n(492), macro: n(493), exposure: n(494), metric: n(495), semantic_model: n(496), saved_query: n(497), operation: n(498) }; r.module("dbt").config(["$stateProvider", "$urlRouterProvider", function (e, t) { var n = "g_v&g_i&g_e&g_p&g_n"; t.otherwise("/overview"), e.state("dbt", { url: "/", abstract: !0, controller: "MainController", templateUrl: i.main }).state("dbt.overview", { url: "overview?" + n, controller: "OverviewCtrl", templateUrl: i.overview }).state("dbt.project_overview", { url: "overview/:project_name?" + n, controller: "OverviewCtrl", templateUrl: i.overview, params: { project_name: { type: "string" } } }).state("dbt.graph", { url: "graph", controller: "GraphCtrl", templateUrl: i.graph }).state("dbt.model", { url: "model/:unique_id?section&" + n, controller: "ModelCtrl", templateUrl: i.model, params: { unique_id: { type: "string" } } }).state("dbt.seed", { url: "seed/:unique_id?section&" + n, controller: "SeedCtrl", templateUrl: i.seed, params: { unique_id: { type: "string" } } }).state("dbt.snapshot", { url: "snapshot/:unique_id?section&" + n, controller: "SnapshotCtrl", templateUrl: i.snapshot, params: { unique_id: { type: "string" } } }).state("dbt.unit_test", { url: "unit_test/:unique_id?section&" + n, controller: "TestCtrl", templateUrl: i.unit_test, params: { unique_id: { type: "string" } } }).state("dbt.test", { url: "test/:unique_id?section&" + n, controller: "TestCtrl", templateUrl: i.test, params: { unique_id: { type: "string" } } }).state("dbt.analysis", { url: "analysis/:unique_id?section&" + n, controller: "AnalysisCtrl", templateUrl: i.analysis, params: { unique_id: { type: "string" } } }).state("dbt.source", { url: "source/:unique_id?section&" + n, controller: "SourceCtrl", templateUrl: i.source, params: { unique_id: { type: "string" } } }).state("dbt.source_list", { url: "source_list/:source?section&" + n, controller: "SourceListCtrl", templateUrl: i.source_list, params: { source: { type: "string" } } }).state("dbt.macro", { url: "macro/:unique_id?section", controller: "MacroCtrl", templateUrl: i.macro, params: { unique_id: { type: "string" } } }).state("dbt.exposure", { url: "exposure/:unique_id?section&" + n, controller: "ExposureCtrl", templateUrl: i.exposure, params: { unique_id: { type: "string" } } }).state("dbt.metric", { url: "metric/:unique_id?section&" + n, controller: "MetricCtrl", templateUrl: i.metric, params: { unique_id: { type: "string" } } }).state("dbt.semantic_model", { url: "semantic_model/:unique_id?section&" + n, controller: "SemanticModelCtrl", templateUrl: i.semantic_model, params: { unique_id: { type: "string" } } }).state("dbt.saved_query", { url: "saved_query/:unique_id?section&" + n, controller: "SavedQueryCtrl", templateUrl: i.saved_query, params: { unique_id: { type: "string" } } }).state("dbt.operation", { url: "operation/:unique_id?section&" + n, controller: "OperationCtrl", templateUrl: i.operation, params: { unique_id: { type: "string" } } }) }]) }, function (e, t) { var n = "/main/main.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n\n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/overview/overview.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/graph/graph.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '
    \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/sources/source_list.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n\n
    \n
    \n
    \n
    Source Tables
    \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    SourceTableDescriptionLinkMore?
    \n
    \n {{ source.source_name }}\n
    \n
    \n {{ source.name }}

    \n
    \n {{ source.description }}\n \n View docs\n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    Description
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/model.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Columns
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/snapshot.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Columns
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/seed.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    Columns
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/unit_test.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/test.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/analysis.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/macro.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ macro.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Arguments
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Referenced By
    \n \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/exposure.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ exposure.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/metric.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ metric.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/semantic_model.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ semantic_model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Entities
    \n\n
    \n
    \n
    \n
    \n
    Name
    \n
    {{ entity.name }}
    \n
    None
    \n
    Type
    \n
    {{ entity.type }}
    \n
    None
    \n
    Expression
    \n
    {{ entity.expr }}
    \n
    None
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n') }]), e.exports = n }, function (e, t) { var n = "/docs/saved_query.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n\n
    \n
    \n \n
    \n\n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ saved_query.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Entities
    \n\n
    \n
    \n
    \n
    \n
    Name
    \n
    {{ entity.name }}
    \n
    None
    \n
    Type
    \n
    {{ entity.type }}
    \n
    None
    \n
    Expression
    \n
    {{ entity.expr }}
    \n
    None
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    ') }]), e.exports = n }, function (e, t) { var n = "/docs/operation.html"; window.angular.module("ng").run(["$templateCache", function (e) { e.put(n, '\n\n
    \n \n
    \n
    \n
    \n
    \n
    \n
    Description
    \n
    \n
    \n
    \n
    This {{ model.resource_type }} is not currently documented
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n
    \n
    Depends On
    \n \n
    \n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n') }]), e.exports = n }]); + //# sourceMappingURL=main.js.map + + diff --git a/docs/manifest.json b/docs/manifest.json index 828e57d..5971400 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v11.json", "dbt_version": "1.7.13", "generated_at": "2024-10-25T21:34:02.525723Z", "invocation_id": "2450bca4-1dd3-401a-af85-d853c7b64435", "env": {}, "project_name": "amazon_ads_integration_tests", "project_id": "53f7e8001d217038f082b75f25139880", "user_id": "2bfa9082-ea6e-467b-abdc-d0514ab111d9", "send_anonymous_usage_stats": true, "adapter_type": "bigquery"}, "nodes": {"seed.amazon_ads_integration_tests.portfolio_history_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "portfolio_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "portfolio_history_data.csv", "original_file_path": "seeds/portfolio_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.portfolio_history_data", "fqn": ["amazon_ads_integration_tests", "portfolio_history_data"], "alias": "portfolio_history_data", "checksum": {"name": "sha256", "checksum": "f35ce3ea8cd6309e50535134b9375861995eb6cda4e215efc0b170cae03a3eee"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.984122, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`portfolio_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.profile_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "profile_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "profile_data.csv", "original_file_path": "seeds/profile_data.csv", "unique_id": "seed.amazon_ads_integration_tests.profile_data", "fqn": ["amazon_ads_integration_tests", "profile_data"], "alias": "profile_data", "checksum": {"name": "sha256", "checksum": "bf98315483844e348320dc4d774059cb5229ef48b495aebace17dd04520d160b"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.987644, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`profile_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.product_ad_history_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "product_ad_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "product_ad_history_data.csv", "original_file_path": "seeds/product_ad_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.product_ad_history_data", "fqn": ["amazon_ads_integration_tests", "product_ad_history_data"], "alias": "product_ad_history_data", "checksum": {"name": "sha256", "checksum": "7efed04b5599f1f2a4e8db33b56eb1f43c6ed27a77a504c7f8b7d628aac37749"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.989249, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`product_ad_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.campaign_level_report_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "campaign_level_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "campaign_level_report_data.csv", "original_file_path": "seeds/campaign_level_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.campaign_level_report_data", "fqn": ["amazon_ads_integration_tests", "campaign_level_report_data"], "alias": "campaign_level_report_data", "checksum": {"name": "sha256", "checksum": "12c4efc842123e0085f28a11922eba7cb83bd04770a5657c839a8a7b048a9616"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.9907148, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`campaign_level_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.ad_group_history_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "ad_group_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "ad_group_history_data.csv", "original_file_path": "seeds/ad_group_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.ad_group_history_data", "fqn": ["amazon_ads_integration_tests", "ad_group_history_data"], "alias": "ad_group_history_data", "checksum": {"name": "sha256", "checksum": "45753ff9cf086544b805b76303478c515ead8870e4ad9ae3988de8cae6befdde"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.99217, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`ad_group_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.ad_group_level_report_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "ad_group_level_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "ad_group_level_report_data.csv", "original_file_path": "seeds/ad_group_level_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.ad_group_level_report_data", "fqn": ["amazon_ads_integration_tests", "ad_group_level_report_data"], "alias": "ad_group_level_report_data", "checksum": {"name": "sha256", "checksum": "b8d7399c22df2187d6518c6db0d9125b6c93172cf23200a8cbc365d43532d2ba"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.993634, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`ad_group_level_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.campaign_history_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "campaign_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "campaign_history_data.csv", "original_file_path": "seeds/campaign_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.campaign_history_data", "fqn": ["amazon_ads_integration_tests", "campaign_history_data"], "alias": "campaign_history_data", "checksum": {"name": "sha256", "checksum": "3d38ddc1be2adfacae84317efdae75934a980d07ae96f326be8533c48ca8d559"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.995243, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`campaign_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "search_term_ad_keyword_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "search_term_ad_keyword_report_data.csv", "original_file_path": "seeds/search_term_ad_keyword_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data", "fqn": ["amazon_ads_integration_tests", "search_term_ad_keyword_report_data"], "alias": "search_term_ad_keyword_report_data", "checksum": {"name": "sha256", "checksum": "72e0151237f3fc67bea3d517f7ef50c94ce494d2c0017fced4e1287623639722"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.996674, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`search_term_ad_keyword_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.keyword_history_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "keyword_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "keyword_history_data.csv", "original_file_path": "seeds/keyword_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.keyword_history_data", "fqn": ["amazon_ads_integration_tests", "keyword_history_data"], "alias": "keyword_history_data", "checksum": {"name": "sha256", "checksum": "35e901af84f48df213520df34aebcf37dc5bcb701dec9bc639aff95853e53d71"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.998105, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`keyword_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.targeting_keyword_report_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "targeting_keyword_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "targeting_keyword_report_data.csv", "original_file_path": "seeds/targeting_keyword_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.targeting_keyword_report_data", "fqn": ["amazon_ads_integration_tests", "targeting_keyword_report_data"], "alias": "targeting_keyword_report_data", "checksum": {"name": "sha256", "checksum": "465149df01ea42da88e6faab29bc91faaed75d50c2e04cece5c7a4a442e31994"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891997.9995441, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`targeting_keyword_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.advertised_product_report_data": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "advertised_product_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "advertised_product_report_data.csv", "original_file_path": "seeds/advertised_product_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.advertised_product_report_data", "fqn": ["amazon_ads_integration_tests", "advertised_product_report_data"], "alias": "advertised_product_report_data", "checksum": {"name": "sha256", "checksum": "009fa251b9195cc87bbb5e05587165c4121ba87433d392792a42f8d11fe992b5"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1729891998.00099, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`advertised_product_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "model.amazon_ads_source.stg_amazon_ads__campaign_level_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__campaign_level_report.sql", "original_file_path": "models/stg_amazon_ads__campaign_level_report.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_level_report", "fqn": ["amazon_ads_source", "stg_amazon_ads__campaign_level_report"], "alias": "stg_amazon_ads__campaign_level_report", "checksum": {"name": "sha256", "checksum": "faff85e0a0f4e67a8a53f8de1035e545336154fc516d4fc1dd0b994c0228ec01"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Campaign reports contain performance data broken down at the campaign level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_applicable_budget_rule_id": {"name": "campaign_applicable_budget_rule_id", "description": "The ID associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_applicable_budget_rule_name": {"name": "campaign_applicable_budget_rule_name", "description": "The name associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_rule_based_budget_amount": {"name": "campaign_rule_based_budget_amount", "description": "The value of the rule-based budget for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.454497, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__campaign_level_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__campaign_level_report_tmp')),\n staging_columns=get_campaign_level_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n campaign_applicable_budget_rule_id,\n campaign_applicable_budget_rule_name,\n campaign_bidding_strategy,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n campaign_rule_based_budget_amount,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n\n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__campaign_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_level_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_campaign_level_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads_source.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__campaign_level_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n campaign_applicable_budget_rule_id\n \n as \n \n campaign_applicable_budget_rule_id\n \n, \n \n \n campaign_applicable_budget_rule_name\n \n as \n \n campaign_applicable_budget_rule_name\n \n, \n \n \n campaign_bidding_strategy\n \n as \n \n campaign_bidding_strategy\n \n, \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n campaign_rule_based_budget_amount\n \n as \n \n campaign_rule_based_budget_amount\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n purchases_30_d\n \n as \n \n purchases_30_d\n \n, \n \n \n sales_30_d\n \n as \n \n sales_30_d\n \n\n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n campaign_applicable_budget_rule_id,\n campaign_applicable_budget_rule_name,\n campaign_bidding_strategy,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as string) as campaign_id,\n campaign_rule_based_budget_amount,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n\n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__ad_group_level_report.sql", "original_file_path": "models/stg_amazon_ads__ad_group_level_report.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report", "fqn": ["amazon_ads_source", "stg_amazon_ads__ad_group_level_report"], "alias": "stg_amazon_ads__ad_group_level_report", "checksum": {"name": "sha256", "checksum": "e9a02b686f84b5e0bfaff8e878e8f3459f669cb340f7344e3b61994b7be15d6d"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance by Amazon ad group.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.449429, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_level_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__ad_group_level_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__ad_group_level_report_tmp')),\n staging_columns=get_ad_group_level_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n campaign_bidding_strategy,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__ad_group_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_level_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_level_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_ad_group_level_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads_source.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__ad_group_level_report.sql", "compiled": true, "compiled_code": "\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_level_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n campaign_bidding_strategy\n \n as \n \n campaign_bidding_strategy\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n cast(null as INT64) as \n \n purchases_30_d\n \n , \n cast(null as FLOAT64) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as string) as ad_group_id,\n campaign_bidding_strategy,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__advertised_product_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__advertised_product_report.sql", "original_file_path": "models/stg_amazon_ads__advertised_product_report.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__advertised_product_report", "fqn": ["amazon_ads_source", "stg_amazon_ads__advertised_product_report"], "alias": "stg_amazon_ads__advertised_product_report", "checksum": {"name": "sha256", "checksum": "d68ba58014d1c07153a6527dfd801e0b7472e9c4c80704c9b591659154ed6553"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Advertised product reports contain performance data for products that are advertised as part of your campaigns.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_id": {"name": "ad_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertised_asin": {"name": "advertised_asin", "description": "The ASIN associated to an advertised product.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertised_sku": {"name": "advertised_sku", "description": "The SKU being advertised.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.4508932, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__advertised_product_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__advertised_product_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__advertised_product_report_tmp')),\n staging_columns=get_advertised_product_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_id as {{ dbt.type_string() }}) as ad_id,\n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n advertised_asin,\n advertised_sku,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__advertised_product_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__advertised_product_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__advertised_product_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_advertised_product_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads_source.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__advertised_product_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__advertised_product_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n cast(null as string) as \n \n advertised_asin\n \n , \n cast(null as string) as \n \n advertised_sku\n \n , \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n cast(null as INT64) as \n \n purchases_30_d\n \n , \n cast(null as FLOAT64) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_id as string) as ad_id,\n cast(ad_group_id as string) as ad_group_id,\n advertised_asin,\n advertised_sku,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as string) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__portfolio_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__portfolio_history.sql", "original_file_path": "models/stg_amazon_ads__portfolio_history.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__portfolio_history", "fqn": ["amazon_ads_source", "stg_amazon_ads__portfolio_history"], "alias": "stg_amazon_ads__portfolio_history", "checksum": {"name": "sha256", "checksum": "7492e34b2032f5ee64914c76852d669aa3cee452d469f9db719aaa40d7901ec9"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record represents a portfolio in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_amount": {"name": "budget_amount", "description": "The budget amount associated with the portfolio. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_currency_code": {"name": "budget_currency_code", "description": "The currency used for all monetary values for entities under this profile. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_end_date": {"name": "budget_end_date", "description": "The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_start_date": {"name": "budget_start_date", "description": "The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_policy": {"name": "budget_policy", "description": "The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "in_budget": {"name": "in_budget", "description": "Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.457469, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__portfolio_history`", "raw_code": "{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__portfolio_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__portfolio_history_tmp')),\n staging_columns=get_portfolio_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as portfolio_id,\n budget_amount,\n budget_currency_code,\n budget_end_date,\n budget_policy,\n budget_start_date,\n creation_date,\n in_budget,\n last_updated_date,\n name as portfolio_name,\n cast(profile_id as {{ dbt.type_string() }}) as profile_id,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__portfolio_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__portfolio_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.enabled_vars", "macro.amazon_ads_source.get_portfolio_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__portfolio_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__portfolio_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n budget_amount\n \n as \n \n budget_amount\n \n, \n \n \n budget_currency_code\n \n as \n \n budget_currency_code\n \n, \n \n \n budget_end_date\n \n as \n \n budget_end_date\n \n, \n \n \n budget_policy\n \n as \n \n budget_policy\n \n, \n \n \n budget_start_date\n \n as \n \n budget_start_date\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n in_budget\n \n as \n \n in_budget\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n profile_id\n \n as \n \n profile_id\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n state\n \n as \n \n state\n \n\n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as string) as portfolio_id,\n budget_amount,\n budget_currency_code,\n budget_end_date,\n budget_policy,\n budget_start_date,\n creation_date,\n in_budget,\n last_updated_date,\n name as portfolio_name,\n cast(profile_id as string) as profile_id,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__campaign_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__campaign_history.sql", "original_file_path": "models/stg_amazon_ads__campaign_history.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_history", "fqn": ["amazon_ads_source", "stg_amazon_ads__campaign_history"], "alias": "stg_amazon_ads__campaign_history", "checksum": {"name": "sha256", "checksum": "2d4efd6602d2d8e18cacbb116dd66d4ca8969a8b7623902fd7084a4572325aca"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record represents a campaign in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "bidding_strategy": {"name": "bidding_strategy", "description": "The bidding strategy associated with a campaign (legacyForSales, autoForSales, or manual.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget": {"name": "budget", "description": "The budget for the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_type": {"name": "budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "effective_budget": {"name": "effective_budget", "description": "Adjusted budget for the campaign that has been impacted by a budget rule.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "end_date": {"name": "end_date", "description": "The end date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "start_date": {"name": "start_date", "description": "The start date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "targeting_type": {"name": "targeting_type", "description": "The type of targeting used for the campaign, either manual or auto.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.453405, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__campaign_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__campaign_history_tmp')),\n staging_columns=get_campaign_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as campaign_id,\n last_updated_date,\n bidding_strategy,\n creation_date,\n end_date,\n name as campaign_name,\n cast(portfolio_id as {{ dbt.type_string() }}) as portfolio_id,\n cast(profile_id as {{ dbt.type_string() }}) as profile_id,\n serving_status,\n start_date,\n state,\n targeting_type,\n budget,\n budget_type,\n effective_budget,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_campaign_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__campaign_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n bidding_strategy\n \n as \n \n bidding_strategy\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n end_date\n \n as \n \n end_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n portfolio_id\n \n as \n \n portfolio_id\n \n, \n \n \n profile_id\n \n as \n \n profile_id\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n start_date\n \n as \n \n start_date\n \n, \n \n \n state\n \n as \n \n state\n \n, \n \n \n targeting_type\n \n as \n \n targeting_type\n \n, \n \n \n budget\n \n as \n \n budget\n \n, \n \n \n budget_type\n \n as \n \n budget_type\n \n, \n \n \n effective_budget\n \n as \n \n effective_budget\n \n\n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as string) as campaign_id,\n last_updated_date,\n bidding_strategy,\n creation_date,\n end_date,\n name as campaign_name,\n cast(portfolio_id as string) as portfolio_id,\n cast(profile_id as string) as profile_id,\n serving_status,\n start_date,\n state,\n targeting_type,\n budget,\n budget_type,\n effective_budget,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__product_ad_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__product_ad_history.sql", "original_file_path": "models/stg_amazon_ads__product_ad_history.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__product_ad_history", "fqn": ["amazon_ads_source", "stg_amazon_ads__product_ad_history"], "alias": "stg_amazon_ads__product_ad_history", "checksum": {"name": "sha256", "checksum": "a561e039270a2906c3b2c4612600325afadd04e43ede1e59146f94f89a09e86c"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record represents a product in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_id": {"name": "ad_id", "description": "The ID of the Ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "asin": {"name": "asin", "description": "The ASIN associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sku": {"name": "sku", "description": "The product SKU associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.458242, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__product_ad_history`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__product_ad_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__product_ad_history_tmp')),\n staging_columns=get_product_ad_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as ad_id,\n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n asin,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n creation_date,\n last_updated_date,\n serving_status,\n sku,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__product_ad_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__product_ad_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_product_ad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__product_ad_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__product_ad_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n asin\n \n as \n \n asin\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n sku\n \n as \n \n sku\n \n, \n \n \n state\n \n as \n \n state\n \n\n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as string) as ad_id,\n cast(ad_group_id as string) as ad_group_id,\n asin,\n cast(campaign_id as string) as campaign_id,\n creation_date,\n last_updated_date,\n serving_status,\n sku,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__targeting_keyword_report.sql", "original_file_path": "models/stg_amazon_ads__targeting_keyword_report.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report", "fqn": ["amazon_ads_source", "stg_amazon_ads__targeting_keyword_report"], "alias": "stg_amazon_ads__targeting_keyword_report", "checksum": {"name": "sha256", "checksum": "70565b72db3435e73426ccce95715ecb48b66aa5e390ea51ff0b19c60eb2d6f1"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Targeting reports contain performance metrics broken down by both targeting expressions and keywords.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_keyword_status": {"name": "ad_keyword_status", "description": "Current status of a keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_type": {"name": "keyword_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.4615932, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__targeting_keyword_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__targeting_keyword_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__targeting_keyword_report_tmp')),\n staging_columns=get_targeting_keyword_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as {{ dbt.type_string() }}) as keyword_id,\n keyword_type,\n match_type,\n targeting,\n purchases_30_d,\n sales_30_d\n\n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__targeting_keyword_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__targeting_keyword_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__targeting_keyword_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_targeting_keyword_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads_source.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__targeting_keyword_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__targeting_keyword_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n ad_keyword_status\n \n as \n \n ad_keyword_status\n \n, \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n keyword_bid\n \n as \n \n keyword_bid\n \n, \n \n \n keyword_id\n \n as \n \n keyword_id\n \n, \n \n \n keyword_type\n \n as \n \n keyword_type\n \n, \n \n \n match_type\n \n as \n \n match_type\n \n, \n \n \n targeting\n \n as \n \n targeting\n \n, \n cast(null as INT64) as \n \n purchases_30_d\n \n , \n cast(null as FLOAT64) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as string) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as string) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as string) as keyword_id,\n keyword_type,\n match_type,\n targeting,\n purchases_30_d,\n sales_30_d\n\n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__profile": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__profile", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__profile.sql", "original_file_path": "models/stg_amazon_ads__profile.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__profile", "fqn": ["amazon_ads_source", "stg_amazon_ads__profile"], "alias": "stg_amazon_ads__profile", "checksum": {"name": "sha256", "checksum": "b19222876f75b5b7f2172737e7020be2bd0fe52e2fa55ecfb2eb1c437ac054bf"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record represents a profile. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "_fivetran_deleted": {"name": "_fivetran_deleted", "description": "Boolean created by Fivetran to indicate whether the record has been deleted.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_marketplace_string_id": {"name": "account_marketplace_string_id", "description": "The identifier of the marketplace to which the account is associated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_sub_type": {"name": "account_sub_type", "description": "The account subtype.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_type": {"name": "account_type", "description": "One of seller, vendor, or agency.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_valid_payment_method": {"name": "account_valid_payment_method", "description": "For Vendors, this returns if the Advertiser has set up a valid payment method.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency_code": {"name": "currency_code", "description": "The currency used for all monetary values for entities under this profile.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "daily_budget": {"name": "daily_budget", "description": "Daily budget for Sponsored Product campaigns for seller type accounts.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "The time zone used for all date-based campaign management and reporting.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.460315, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__profile_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__profile_tmp')),\n staging_columns=get_profile_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as profile_id,\n cast(account_id as {{ dbt.type_string() }}) as account_id,\n account_marketplace_string_id,\n account_name,\n account_sub_type,\n account_type,\n account_valid_payment_method,\n country_code,\n currency_code,\n daily_budget,\n timezone,\n _fivetran_deleted\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__profile_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__profile_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_profile_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__profile_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__profile.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile_tmp`\n),\n\nfields as (\n\n select\n \n \n \n id\n \n as \n \n id\n \n, \n \n \n account_id\n \n as \n \n account_id\n \n, \n \n \n account_marketplace_string_id\n \n as \n \n account_marketplace_string_id\n \n, \n \n \n account_name\n \n as \n \n account_name\n \n, \n \n \n account_sub_type\n \n as \n \n account_sub_type\n \n, \n \n \n account_type\n \n as \n \n account_type\n \n, \n \n \n account_valid_payment_method\n \n as \n \n account_valid_payment_method\n \n, \n \n \n country_code\n \n as \n \n country_code\n \n, \n \n \n currency_code\n \n as \n \n currency_code\n \n, \n \n \n daily_budget\n \n as \n \n daily_budget\n \n, \n \n \n timezone\n \n as \n \n timezone\n \n, \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n\n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as string) as profile_id,\n cast(account_id as string) as account_id,\n account_marketplace_string_id,\n account_name,\n account_sub_type,\n account_type,\n account_valid_payment_method,\n country_code,\n currency_code,\n daily_budget,\n timezone,\n _fivetran_deleted\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__keyword_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__keyword_history.sql", "original_file_path": "models/stg_amazon_ads__keyword_history.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__keyword_history", "fqn": ["amazon_ads_source", "stg_amazon_ads__keyword_history"], "alias": "stg_amazon_ads__keyword_history", "checksum": {"name": "sha256", "checksum": "8fef1df7058e8d7f41b82c40ee263ed0969637aafc90670ab3c2068f3be788fd"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record represents a keyword in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "bid": {"name": "bid", "description": "Bid associated with this keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "match_type": {"name": "match_type", "description": "One of (broad, exact, or phrase.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "native_language_keyword": {"name": "native_language_keyword", "description": "The unlocalized keyword text in the preferred locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "native_language_locale": {"name": "native_language_locale", "description": "The preferred language locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.4558752, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__keyword_history`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__keyword_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__keyword_history_tmp')),\n staging_columns=get_keyword_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as keyword_id,\n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n bid,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n creation_date,\n keyword_text,\n last_updated_date,\n match_type,\n native_language_keyword,\n serving_status,\n state,\n native_language_locale,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__keyword_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__keyword_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_keyword_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__keyword_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__keyword_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n bid\n \n as \n \n bid\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n keyword_text\n \n as \n \n keyword_text\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n match_type\n \n as \n \n match_type\n \n, \n \n \n native_language_keyword\n \n as \n \n native_language_keyword\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n state\n \n as \n \n state\n \n, \n \n \n native_language_locale\n \n as \n \n native_language_locale\n \n\n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as string) as keyword_id,\n cast(ad_group_id as string) as ad_group_id,\n bid,\n cast(campaign_id as string) as campaign_id,\n creation_date,\n keyword_text,\n last_updated_date,\n match_type,\n native_language_keyword,\n serving_status,\n state,\n native_language_locale,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__ad_group_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__ad_group_history.sql", "original_file_path": "models/stg_amazon_ads__ad_group_history.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "fqn": ["amazon_ads_source", "stg_amazon_ads__ad_group_history"], "alias": "stg_amazon_ads__ad_group_history", "checksum": {"name": "sha256", "checksum": "ad915eee0f9060ec6076a785633fb14e6a4197f55b4a2f5dfe8e523b3428d7fe"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record represents an ad group in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "default_bid": {"name": "default_bid", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.4477582, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__ad_group_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__ad_group_history_tmp')),\n staging_columns=get_ad_group_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as ad_group_id,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n creation_date,\n default_bid,\n last_updated_date,\n name as ad_group_name,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_ad_group_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__ad_group_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n default_bid\n \n as \n \n default_bid\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n state\n \n as \n \n state\n \n\n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as string) as ad_group_id,\n cast(campaign_id as string) as campaign_id,\n creation_date,\n default_bid,\n last_updated_date,\n name as ad_group_name,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report", "resource_type": "model", "package_name": "amazon_ads_source", "path": "stg_amazon_ads__search_term_ad_keyword_report.sql", "original_file_path": "models/stg_amazon_ads__search_term_ad_keyword_report.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report", "fqn": ["amazon_ads_source", "stg_amazon_ads__search_term_ad_keyword_report"], "alias": "stg_amazon_ads__search_term_ad_keyword_report", "checksum": {"name": "sha256", "checksum": "43ad5dca44d474500e342be039a6942d725816f1006303d496722f8931f00410"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Search term reports contain search term performance metrics broken down by targeting expressions and keywords.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_keyword_status": {"name": "ad_keyword_status", "description": "Current status of a keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "search_term": {"name": "search_term", "description": "The search term used by the customer.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads_source://models/stg_amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"materialized": "table", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.462353, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__search_term_ad_keyword_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__search_term_ad_keyword_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__search_term_ad_keyword_report_tmp')),\n staging_columns=get_search_term_ad_keyword_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as {{ dbt.type_string() }}) as keyword_id,\n search_term,\n targeting,\n purchases_30_d,\n sales_30_d\n\n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__search_term_ad_keyword_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads_source.get_search_term_ad_keyword_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads_source.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads__search_term_ad_keyword_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__search_term_ad_keyword_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n cast(null as string) as \n \n ad_keyword_status\n \n , \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n keyword_bid\n \n as \n \n keyword_bid\n \n, \n \n \n keyword_id\n \n as \n \n keyword_id\n \n, \n \n \n search_term\n \n as \n \n search_term\n \n, \n \n \n targeting\n \n as \n \n targeting\n \n, \n cast(null as INT64) as \n \n purchases_30_d\n \n , \n cast(null as FLOAT64) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as string) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as string) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as string) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as string) as keyword_id,\n search_term,\n targeting,\n purchases_30_d,\n sales_30_d\n\n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__keyword_history_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__keyword_history_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__keyword_history_tmp"], "alias": "stg_amazon_ads__keyword_history_tmp", "checksum": {"name": "sha256", "checksum": "c142330a3f12a74e80ec0f0645c51afe68190e156f8e55913f9653d58bade07d"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.268945, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__keyword_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='keyword_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='keyword_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "keyword_history"], ["amazon_ads", "keyword_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.keyword_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__keyword_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`keyword_history_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__profile_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__profile_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__profile_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__profile_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__profile_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__profile_tmp"], "alias": "stg_amazon_ads__profile_tmp", "checksum": {"name": "sha256", "checksum": "3b418e24c0a6ea40bf9d5a6855a3aeb96c4548339c127142014b61602b62da35"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.287542, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='profile', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='profile',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "profile"], ["amazon_ads", "profile"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.profile"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__profile_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`profile_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__search_term_ad_keyword_report_tmp"], "alias": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "checksum": {"name": "sha256", "checksum": "ae1c9bf47b0cc22b217eaf505173ce06e0b1861722b9415ab54d4a8f13eac3cc"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.2916942, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__search_term_ad_keyword_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='search_term_ad_keyword_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='search_term_ad_keyword_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "search_term_ad_keyword_report"], ["amazon_ads", "search_term_ad_keyword_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`search_term_ad_keyword_report_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__product_ad_history_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__product_ad_history_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__product_ad_history_tmp"], "alias": "stg_amazon_ads__product_ad_history_tmp", "checksum": {"name": "sha256", "checksum": "5cf7d1f7a9db1fc2e083a4c66e20630efb5268b83337f2b51e9134fb74c91062"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.295881, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__product_ad_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='product_ad_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='product_ad_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "product_ad_history"], ["amazon_ads", "product_ad_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.product_ad_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__product_ad_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`product_ad_history_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__ad_group_history_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__ad_group_history_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__ad_group_history_tmp"], "alias": "stg_amazon_ads__ad_group_history_tmp", "checksum": {"name": "sha256", "checksum": "a4a15e75690b1457f5e0f40d7dccd135bf8ac2c8598152a159fdac4e7df9c110"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.3005152, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_group_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='ad_group_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "ad_group_history"], ["amazon_ads", "ad_group_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.ad_group_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__ad_group_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`ad_group_history_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__campaign_level_report_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__campaign_level_report_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__campaign_level_report_tmp"], "alias": "stg_amazon_ads__campaign_level_report_tmp", "checksum": {"name": "sha256", "checksum": "34b2a26051b11d48d8a3c29349032a928ecd80207c1d2e9222407fa6b3cdd835"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.30472, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_level_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='campaign_level_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "campaign_level_report"], ["amazon_ads", "campaign_level_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.campaign_level_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__campaign_level_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`campaign_level_report_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__targeting_keyword_report_tmp"], "alias": "stg_amazon_ads__targeting_keyword_report_tmp", "checksum": {"name": "sha256", "checksum": "b4171c02c2583338e3767f969b5799359e262da90821bebe28da24bf0db030ce"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.3087978, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__targeting_keyword_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='targeting_keyword_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='targeting_keyword_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "targeting_keyword_report"], ["amazon_ads", "targeting_keyword_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.targeting_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`targeting_keyword_report_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__portfolio_history_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__portfolio_history_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__portfolio_history_tmp"], "alias": "stg_amazon_ads__portfolio_history_tmp", "checksum": {"name": "sha256", "checksum": "e3d32e4c31e5335c6eb282ec238bcedbcbe559a9f08e0e3daf3ac682f965b806"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.3129559, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__portfolio_history_tmp`", "raw_code": "{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='portfolio_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='portfolio_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "portfolio_history"], ["amazon_ads", "portfolio_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.enabled_vars", "macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.portfolio_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__portfolio_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`portfolio_history_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__campaign_history_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__campaign_history_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__campaign_history_tmp"], "alias": "stg_amazon_ads__campaign_history_tmp", "checksum": {"name": "sha256", "checksum": "0187c7725896fbcdf1bbcbae9d300353ed94df3ec8b0d90e8e63f4bf0d266a15"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.317145, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='campaign_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "campaign_history"], ["amazon_ads", "campaign_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.campaign_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__campaign_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`campaign_history_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__ad_group_level_report_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__ad_group_level_report_tmp"], "alias": "stg_amazon_ads__ad_group_level_report_tmp", "checksum": {"name": "sha256", "checksum": "8482674eabaf3fd22e7f482b0baa19f8289a10598455aebc81d56fe90b63f60f"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.321986, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_level_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_group_level_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='ad_group_level_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "ad_group_level_report"], ["amazon_ads", "ad_group_level_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.ad_group_level_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`ad_group_level_report_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report_tmp", "resource_type": "model", "package_name": "amazon_ads_source", "path": "tmp/stg_amazon_ads__advertised_product_report_tmp.sql", "original_file_path": "models/tmp/stg_amazon_ads__advertised_product_report_tmp.sql", "unique_id": "model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp", "fqn": ["amazon_ads_source", "tmp", "stg_amazon_ads__advertised_product_report_tmp"], "alias": "stg_amazon_ads__advertised_product_report_tmp", "checksum": {"name": "sha256", "checksum": "630c5233213d1ccc88fe253f8eeac5b8e4bc415443891fff3687dbdb50ee8ca0"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"materialized": "view", "schema": "amazon_ads_{{ var('directed_schema','dev') }}", "enabled": true}, "created_at": 1729891998.326051, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__advertised_product_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='advertised_product_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='advertised_product_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["amazon_ads", "advertised_product_report"], ["amazon_ads", "advertised_product_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads_source.amazon_ads.advertised_product_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/tmp/stg_amazon_ads__advertised_product_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`amazon_ads_test`.`advertised_product_report_data`", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.amazon_ads__portfolio_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__portfolio_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__portfolio_report.sql", "original_file_path": "models/amazon_ads__portfolio_report.sql", "unique_id": "model.amazon_ads.amazon_ads__portfolio_report", "fqn": ["amazon_ads", "amazon_ads__portfolio_report"], "alias": "amazon_ads__portfolio_report", "checksum": {"name": "sha256", "checksum": "51082e4847994f4c12b8ff5651fd864a541d5a4ea45d3d15c7d3e38be96a1556"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance at the portfolio level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_amount": {"name": "budget_amount", "description": "The budget amount associated with the portfolio. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_currency_code": {"name": "budget_currency_code", "description": "The currency used for all monetary values for entities under this profile. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_end_date": {"name": "budget_end_date", "description": "The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_start_date": {"name": "budget_start_date", "description": "The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_policy": {"name": "budget_policy", "description": "The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "in_budget": {"name": "in_budget", "description": "Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1729891998.597599, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__portfolio_report`", "raw_code": "{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }}\n\nwith report as (\n select *\n --use campaign report since portfolio report not provided\n from {{ var('campaign_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ var('profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ var('portfolio_history') }}\n where is_most_recent_record = True\n), \n\ncampaigns as (\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n portfolios.budget_amount,\n portfolios.budget_currency_code,\n portfolios.budget_start_date,\n portfolios.budget_end_date,\n portfolios.budget_policy,\n portfolios.in_budget,\n portfolios.serving_status,\n portfolios.state,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__campaign_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }} \n\n from portfolios\n\n left join campaigns\n on campaigns.portfolio_id = portfolios.portfolio_id\n and campaigns.source_relation = portfolios.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n left join report\n on report.campaign_id = campaigns.campaign_id\n and report.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(16) }}\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "stg_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.enabled_vars", "macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads_source.stg_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__portfolio_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n --use campaign report since portfolio report not provided\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report`\n), \n\naccount_info as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__portfolio_history`\n where is_most_recent_record = True\n), \n\ncampaigns as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n portfolios.budget_amount,\n portfolios.budget_currency_code,\n portfolios.budget_start_date,\n portfolios.budget_end_date,\n portfolios.budget_policy,\n portfolios.in_budget,\n portfolios.serving_status,\n portfolios.state,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n \n\n from portfolios\n\n left join campaigns\n on campaigns.portfolio_id = portfolios.portfolio_id\n and campaigns.source_relation = portfolios.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n left join report\n on report.campaign_id = campaigns.campaign_id\n and report.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.amazon_ads__search_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__search_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__search_report.sql", "original_file_path": "models/amazon_ads__search_report.sql", "unique_id": "model.amazon_ads.amazon_ads__search_report", "fqn": ["amazon_ads", "amazon_ads__search_report"], "alias": "amazon_ads__search_report", "checksum": {"name": "sha256", "checksum": "53ae303090bb93999e58de71448ae75e0c4ac7a252acbea8b17dfe31342aa9ed"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance at the search term level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "search_term": {"name": "search_term", "description": "The search term used by the customer.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1729891998.599114, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__search_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ var('search_term_ad_keyword_report') }}\n), \n\naccount_info as (\n select *\n from {{ var('profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ var('ad_group_history') }}\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from {{ var('keyword_history') }}\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.match_type,\n keywords.serving_status,\n keywords.state,\n report.search_term,\n report.targeting,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__search_term_ad_keyword_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }} \n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(19) }}\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_amazon_ads__search_term_ad_keyword_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}, {"name": "stg_amazon_ads__keyword_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "model.amazon_ads_source.stg_amazon_ads__keyword_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__search_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__search_term_ad_keyword_report`\n), \n\naccount_info as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`int_amazon_ads__portfolio_history`\n), \n\ncampaigns as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history`\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__keyword_history`\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.match_type,\n keywords.serving_status,\n keywords.state,\n report.search_term,\n report.targeting,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n \n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.amazon_ads__ad_group_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__ad_group_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__ad_group_report.sql", "original_file_path": "models/amazon_ads__ad_group_report.sql", "unique_id": "model.amazon_ads.amazon_ads__ad_group_report", "fqn": ["amazon_ads", "amazon_ads__ad_group_report"], "alias": "amazon_ads__ad_group_report", "checksum": {"name": "sha256", "checksum": "86308d6f351c465b283d0ee99e548bf769b2f9040ad43f6d5c34e839fb40fe98"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance at the ad group level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "default_bid": {"name": "default_bid", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1729891998.595422, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__ad_group_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ var('ad_group_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ var('profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ var('ad_group_history') }}\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n campaigns.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n ad_groups.serving_status,\n ad_groups.state,\n ad_groups.default_bid,\n report.campaign_bidding_strategy,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__ad_group_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = ad_groups.campaign_id\n and campaigns.source_relation = ad_groups.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(16) }}\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__ad_group_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_level_report`\n), \n\naccount_info as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`int_amazon_ads__portfolio_history`\n), \n\ncampaigns as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history`\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n campaigns.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n ad_groups.serving_status,\n ad_groups.state,\n ad_groups.default_bid,\n report.campaign_bidding_strategy,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n\n\n from report\n\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = ad_groups.campaign_id\n and campaigns.source_relation = ad_groups.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.amazon_ads__keyword_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__keyword_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__keyword_report.sql", "original_file_path": "models/amazon_ads__keyword_report.sql", "unique_id": "model.amazon_ads.amazon_ads__keyword_report", "fqn": ["amazon_ads", "amazon_ads__keyword_report"], "alias": "amazon_ads__keyword_report", "checksum": {"name": "sha256", "checksum": "537907f2ff10aeb390a0fe795fdd6a15fa2ccb9d812ee18d566f7454195c7ffb"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance at the keyword level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_type": {"name": "keyword_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1729891998.598376, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__keyword_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ var('targeting_keyword_report') }}\n), \n\naccount_info as (\n select *\n from {{ var('profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ var('ad_group_history') }}\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from {{ var('keyword_history') }}\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.serving_status,\n keywords.state,\n report.keyword_bid,\n report.keyword_type,\n report.match_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__targeting_keyword_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(19) }}\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_amazon_ads__targeting_keyword_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}, {"name": "stg_amazon_ads__keyword_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "model.amazon_ads_source.stg_amazon_ads__keyword_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__keyword_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__targeting_keyword_report`\n), \n\naccount_info as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`int_amazon_ads__portfolio_history`\n), \n\ncampaigns as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history`\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__keyword_history`\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.serving_status,\n keywords.state,\n report.keyword_bid,\n report.keyword_type,\n report.match_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n\n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.amazon_ads__campaign_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__campaign_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__campaign_report.sql", "original_file_path": "models/amazon_ads__campaign_report.sql", "unique_id": "model.amazon_ads.amazon_ads__campaign_report", "fqn": ["amazon_ads", "amazon_ads__campaign_report"], "alias": "amazon_ads__campaign_report", "checksum": {"name": "sha256", "checksum": "96235a5e080d57ca27ecb691353d2d3040fc44b9edd887700da32d02bb1a75da"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance at the campaign level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1729891998.5969028, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__campaign_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ var('campaign_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ var('profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n report.campaign_bidding_strategy,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__campaign_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }} \n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n {{ dbt_utils.group_by(14) }}\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__campaign_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report`\n), \n\naccount_info as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`int_amazon_ads__portfolio_history`\n), \n\ncampaigns as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n report.campaign_bidding_strategy,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n \n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.amazon_ads__account_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__account_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__account_report.sql", "original_file_path": "models/amazon_ads__account_report.sql", "unique_id": "model.amazon_ads.amazon_ads__account_report", "fqn": ["amazon_ads", "amazon_ads__account_report"], "alias": "amazon_ads__account_report", "checksum": {"name": "sha256", "checksum": "96e024b6d0bba898b6217c46302599c0dd71314373844d87fd1326e4f355dcc5"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance at the account level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1729891998.594696, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__account_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n --use campaign report since account report not provided\n from {{ var('campaign_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ var('profile') }}\n where _fivetran_deleted = False\n),\n\ncampaigns as (\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__campaign_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n \n\n {{ dbt_utils.group_by(6) }}\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads_source.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__account_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n --use campaign report since account report not provided\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report`\n), \n\naccount_info as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\n where _fivetran_deleted = False\n),\n\ncampaigns as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n\n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n \n\n group by 1,2,3,4,5,6\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.amazon_ads__ad_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "amazon_ads__ad_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__ad_report.sql", "original_file_path": "models/amazon_ads__ad_report.sql", "unique_id": "model.amazon_ads.amazon_ads__ad_report", "fqn": ["amazon_ads", "amazon_ads__ad_report"], "alias": "amazon_ads__ad_report", "checksum": {"name": "sha256", "checksum": "eb55ea57fa0faebf74b1d3eefcc27cb7e10e1fbacb3cf4a785f7f2ee585896be"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "Each record in this table represents the daily performance at the ad level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_id": {"name": "ad_id", "description": "The ID of the Ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertised_asin": {"name": "advertised_asin", "description": "The ASIN associated to an advertised product.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertised_sku": {"name": "advertised_sku", "description": "The SKU being advertised.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1729891998.596247, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__ad_report`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ var('advertised_product_report') }}\n), \n\naccount_info as (\n select *\n from {{ var('profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ var('ad_group_history') }}\n where is_most_recent_record = True\n), \n\nads as (\n select *\n from {{ var('product_ad_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.ad_id,\n ads.serving_status,\n ads.state,\n report.advertised_asin,\n report.advertised_sku,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__advertised_product_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n \n left join ads\n on ads.ad_id = report.ad_id\n and ads.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n {{ dbt_utils.group_by(20) }}\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_amazon_ads__advertised_product_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}, {"name": "stg_amazon_ads__product_ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "model.amazon_ads_source.stg_amazon_ads__product_ad_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__ad_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__advertised_product_report`\n), \n\naccount_info as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`int_amazon_ads__portfolio_history`\n), \n\ncampaigns as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history`\n where is_most_recent_record = True\n), \n\nads as (\n select *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__product_ad_history`\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.ad_id,\n ads.serving_status,\n ads.state,\n report.advertised_asin,\n report.advertised_sku,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n\n\n from report\n \n left join ads\n on ads.ad_id = report.ad_id\n and ads.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.amazon_ads.int_amazon_ads__portfolio_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test_amazon_ads_dev", "name": "int_amazon_ads__portfolio_history", "resource_type": "model", "package_name": "amazon_ads", "path": "intermediate/int_amazon_ads__portfolio_history.sql", "original_file_path": "models/intermediate/int_amazon_ads__portfolio_history.sql", "unique_id": "model.amazon_ads.int_amazon_ads__portfolio_history", "fqn": ["amazon_ads", "intermediate", "int_amazon_ads__portfolio_history"], "alias": "int_amazon_ads__portfolio_history", "checksum": {"name": "sha256", "checksum": "a82e6f8deab555d84fbf0bd7cd0035b1a5301cac631f14b6e23a3ddcfc03d319"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1729891998.3959308, "relation_name": "`dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`int_amazon_ads__portfolio_history`", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{# This intermediate model creates a dummy portfolio table if the user does not use portfolios. \nIf they are using them, the normal portfolio_history will be used. #}\n\nwith portfolios as (\n select\n {% if var('amazon_ads__portfolio_history_enabled', True) %}\n *\n from {{ var('portfolio_history') }}\n where is_most_recent_record = True\n {% else %}\n cast(null as {{ dbt.type_string() }}) as source_relation,\n {# uses the columns macro from the source package to populate column names #}\n {%- set columns = amazon_ads_source.get_portfolio_history_columns() -%}\n {% for column in columns %}\n {# set null for each column #}\n {%- if column['name'] == 'id' -%}\n cast(null as {{ dbt.type_string() }}) as portfolio_id\n {%- elif column['name'] == 'name' -%}\n cast(null as {{ dbt.type_string() }}) as portfolio_name\n {%- elif column['name'] == 'profile_id' -%}\n cast(null as {{ dbt.type_string() }}) as profile_id\n {%- else -%}\n cast(null as {{ column['datatype'] }}) as {{ column['name'] }}\n {%- endif -%}\n {# add comma if not the last column #}\n {%- if not loop.last -%} , {% endif -%}\n {% endfor %}\n {% endif %}\n)\n\nselect * \nfrom portfolios", "language": "sql", "refs": [{"name": "stg_amazon_ads__portfolio_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history"]}, "compiled_path": "target/compiled/amazon_ads/models/intermediate/int_amazon_ads__portfolio_history.sql", "compiled": true, "compiled_code": "\n\n\n\nwith portfolios as (\n select\n \n *\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__portfolio_history`\n where is_most_recent_record = True\n \n)\n\nselect * \nfrom portfolios", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__ad_group_history')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__ad_group_history_ad_group_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__ad_group_history_ad_group_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__ad_group_history_ad_group_id"], "alias": "not_null_stg_amazon_ads__ad_group_history_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.495729, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__ad_group_history_ad_group_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_group_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history`\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_group_id", "file_key_name": "models.stg_amazon_ads__ad_group_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__ad_group_history"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_history_source_relation__ad_group_id__last_updated_date.5873194717": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_group_id", "last_updated_date"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__ad_group_history')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_history_source_relation__ad_group_id__last_updated_date", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_081d093fe910afe8793a47b1c0c4e4c0.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_history_source_relation__ad_group_id__last_updated_date.5873194717", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_history_source_relation__ad_group_id__last_updated_date"], "alias": "dbt_utils_unique_combination_o_081d093fe910afe8793a47b1c0c4e4c0", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_081d093fe910afe8793a47b1c0c4e4c0", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_081d093fe910afe8793a47b1c0c4e4c0"}, "created_at": 1729891998.497101, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_081d093fe910afe8793a47b1c0c4e4c0\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_081d093fe910afe8793a47b1c0c4e4c0.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_group_id, last_updated_date\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_history`\n group by source_relation, ad_group_id, last_updated_date\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__ad_group_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__ad_group_history"}, "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__ad_group_level_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id"], "alias": "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.5044851, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_level_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_group_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_level_report`\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_group_id", "file_key_name": "models.stg_amazon_ads__ad_group_level_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_level_report_source_relation__ad_group_id__date_day.180ec0225e": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_group_id", "date_day"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__ad_group_level_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_level_report_source_relation__ad_group_id__date_day", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_e922b897539d42aba70496d7bac26e7d.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_level_report_source_relation__ad_group_id__date_day.180ec0225e", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_level_report_source_relation__ad_group_id__date_day"], "alias": "dbt_utils_unique_combination_o_e922b897539d42aba70496d7bac26e7d", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_e922b897539d42aba70496d7bac26e7d", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_e922b897539d42aba70496d7bac26e7d"}, "created_at": 1729891998.505633, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_e922b897539d42aba70496d7bac26e7d\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_level_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_e922b897539d42aba70496d7bac26e7d.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_group_id, date_day\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__ad_group_level_report`\n group by source_relation, ad_group_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__ad_group_level_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"}, "test.amazon_ads_source.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__advertised_product_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__advertised_product_report_ad_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__advertised_product_report_ad_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__advertised_product_report_ad_id"], "alias": "not_null_stg_amazon_ads__advertised_product_report_ad_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.508729, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__advertised_product_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__advertised_product_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__advertised_product_report`\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_id", "file_key_name": "models.stg_amazon_ads__advertised_product_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__advertised_product_report"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__advertised_product_report_source_relation__ad_id__date_day.e170148d6c": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "date_day"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__advertised_product_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__advertised_product_report_source_relation__ad_id__date_day", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_d7f9cbf345eb187052ca5dee9eb30d65.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__advertised_product_report_source_relation__ad_id__date_day.e170148d6c", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__advertised_product_report_source_relation__ad_id__date_day"], "alias": "dbt_utils_unique_combination_o_d7f9cbf345eb187052ca5dee9eb30d65", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_d7f9cbf345eb187052ca5dee9eb30d65", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_d7f9cbf345eb187052ca5dee9eb30d65"}, "created_at": 1729891998.509862, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_d7f9cbf345eb187052ca5dee9eb30d65\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__advertised_product_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_d7f9cbf345eb187052ca5dee9eb30d65.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, date_day\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__advertised_product_report`\n group by source_relation, ad_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__advertised_product_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__advertised_product_report"}, "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__campaign_history')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__campaign_history_campaign_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__campaign_history_campaign_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__campaign_history_campaign_id"], "alias": "not_null_stg_amazon_ads__campaign_history_campaign_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.5125399, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__campaign_history_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "campaign_id", "file_key_name": "models.stg_amazon_ads__campaign_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__campaign_history"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_history_source_relation__campaign_id__last_updated_date.f58b6293d6": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "last_updated_date"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__campaign_history')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_history_source_relation__campaign_id__last_updated_date", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_d2c52c088434839a8e4c14e13249a927.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_history_source_relation__campaign_id__last_updated_date.f58b6293d6", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_history_source_relation__campaign_id__last_updated_date"], "alias": "dbt_utils_unique_combination_o_d2c52c088434839a8e4c14e13249a927", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_d2c52c088434839a8e4c14e13249a927", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_d2c52c088434839a8e4c14e13249a927"}, "created_at": 1729891998.51367, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_d2c52c088434839a8e4c14e13249a927\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_d2c52c088434839a8e4c14e13249a927.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, campaign_id, last_updated_date\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_history`\n group by source_relation, campaign_id, last_updated_date\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__campaign_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__campaign_history"}, "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__campaign_level_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__campaign_level_report_campaign_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__campaign_level_report_campaign_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__campaign_level_report_campaign_id"], "alias": "not_null_stg_amazon_ads__campaign_level_report_campaign_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.51636, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__campaign_level_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report`\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "campaign_id", "file_key_name": "models.stg_amazon_ads__campaign_level_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__campaign_level_report"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_level_report_source_relation__campaign_id__date_day.f6bb472aa5": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "date_day"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__campaign_level_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_level_report_source_relation__campaign_id__date_day", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_a8c1294f589331807ed94a085ea4442e.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_level_report_source_relation__campaign_id__date_day.f6bb472aa5", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_level_report_source_relation__campaign_id__date_day"], "alias": "dbt_utils_unique_combination_o_a8c1294f589331807ed94a085ea4442e", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_a8c1294f589331807ed94a085ea4442e", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_a8c1294f589331807ed94a085ea4442e"}, "created_at": 1729891998.517502, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_a8c1294f589331807ed94a085ea4442e\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_a8c1294f589331807ed94a085ea4442e.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, campaign_id, date_day\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__campaign_level_report`\n group by source_relation, campaign_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__campaign_level_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__campaign_level_report"}, "test.amazon_ads_source.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "keyword_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__keyword_history')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__keyword_history_keyword_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__keyword_history_keyword_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__keyword_history_keyword_id"], "alias": "not_null_stg_amazon_ads__keyword_history_keyword_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.520161, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__keyword_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__keyword_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__keyword_history_keyword_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect keyword_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__keyword_history`\nwhere keyword_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "keyword_id", "file_key_name": "models.stg_amazon_ads__keyword_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__keyword_history"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__keyword_history_source_relation__keyword_id__last_updated_date.611a8411e0": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "keyword_id", "last_updated_date"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__keyword_history')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__keyword_history_source_relation__keyword_id__last_updated_date", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_9993166b721f655d435b4edd795037c7.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__keyword_history_source_relation__keyword_id__last_updated_date.611a8411e0", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__keyword_history_source_relation__keyword_id__last_updated_date"], "alias": "dbt_utils_unique_combination_o_9993166b721f655d435b4edd795037c7", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_9993166b721f655d435b4edd795037c7", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_9993166b721f655d435b4edd795037c7"}, "created_at": 1729891998.521288, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_9993166b721f655d435b4edd795037c7\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__keyword_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__keyword_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_9993166b721f655d435b4edd795037c7.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, keyword_id, last_updated_date\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__keyword_history`\n group by source_relation, keyword_id, last_updated_date\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__keyword_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__keyword_history"}, "test.amazon_ads_source.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "portfolio_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__portfolio_history')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__portfolio_history_portfolio_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__portfolio_history_portfolio_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__portfolio_history_portfolio_id"], "alias": "not_null_stg_amazon_ads__portfolio_history_portfolio_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.5239658, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__portfolio_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__portfolio_history_portfolio_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect portfolio_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__portfolio_history`\nwhere portfolio_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "portfolio_id", "file_key_name": "models.stg_amazon_ads__portfolio_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__portfolio_history"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__portfolio_history_source_relation__portfolio_id__last_updated_date.e0bb6ee3e0": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "portfolio_id", "last_updated_date"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__portfolio_history')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__portfolio_history_source_relation__portfolio_id__last_updated_date", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_c25df2eeb1122c4477d6aba602f654a0.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__portfolio_history_source_relation__portfolio_id__last_updated_date.e0bb6ee3e0", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__portfolio_history_source_relation__portfolio_id__last_updated_date"], "alias": "dbt_utils_unique_combination_o_c25df2eeb1122c4477d6aba602f654a0", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_c25df2eeb1122c4477d6aba602f654a0", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_c25df2eeb1122c4477d6aba602f654a0"}, "created_at": 1729891998.525103, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_c25df2eeb1122c4477d6aba602f654a0\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__portfolio_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_c25df2eeb1122c4477d6aba602f654a0.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, portfolio_id, last_updated_date\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__portfolio_history`\n group by source_relation, portfolio_id, last_updated_date\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__portfolio_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__portfolio_history"}, "test.amazon_ads_source.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__product_ad_history')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__product_ad_history_ad_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__product_ad_history_ad_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__product_ad_history_ad_id"], "alias": "not_null_stg_amazon_ads__product_ad_history_ad_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.527789, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__product_ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__product_ad_history_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__product_ad_history`\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_id", "file_key_name": "models.stg_amazon_ads__product_ad_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__product_ad_history"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__product_ad_history_source_relation__ad_id__last_updated_date.90fb8d59e6": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "last_updated_date"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__product_ad_history')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__product_ad_history_source_relation__ad_id__last_updated_date", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_d56439b310a40f6e76cd66e4c5e2e585.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__product_ad_history_source_relation__ad_id__last_updated_date.90fb8d59e6", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__product_ad_history_source_relation__ad_id__last_updated_date"], "alias": "dbt_utils_unique_combination_o_d56439b310a40f6e76cd66e4c5e2e585", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_d56439b310a40f6e76cd66e4c5e2e585", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_d56439b310a40f6e76cd66e4c5e2e585"}, "created_at": 1729891998.528914, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_d56439b310a40f6e76cd66e4c5e2e585\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__product_ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_d56439b310a40f6e76cd66e4c5e2e585.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, last_updated_date\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__product_ad_history`\n group by source_relation, ad_id, last_updated_date\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__product_ad_history", "attached_node": "model.amazon_ads_source.stg_amazon_ads__product_ad_history"}, "test.amazon_ads_source.not_null_stg_amazon_ads__profile_profile_id.bd192c102b": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "profile_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__profile')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__profile_profile_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__profile_profile_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__profile_profile_id.bd192c102b", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__profile_profile_id"], "alias": "not_null_stg_amazon_ads__profile_profile_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.531581, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__profile", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__profile"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__profile_profile_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect profile_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__profile`\nwhere profile_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "profile_id", "file_key_name": "models.stg_amazon_ads__profile", "attached_node": "model.amazon_ads_source.stg_amazon_ads__profile"}, "test.amazon_ads_source.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "keyword_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__targeting_keyword_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id"], "alias": "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.5326889, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__targeting_keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect keyword_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__targeting_keyword_report`\nwhere keyword_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "keyword_id", "file_key_name": "models.stg_amazon_ads__targeting_keyword_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__targeting_keyword_report_source_relation__keyword_id__date_day.4190f2a661": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "keyword_id", "date_day"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__targeting_keyword_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__targeting_keyword_report_source_relation__keyword_id__date_day", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_f4291d49d1c17f6aa8babe0eddf0aaa7.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__targeting_keyword_report_source_relation__keyword_id__date_day.4190f2a661", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__targeting_keyword_report_source_relation__keyword_id__date_day"], "alias": "dbt_utils_unique_combination_o_f4291d49d1c17f6aa8babe0eddf0aaa7", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_f4291d49d1c17f6aa8babe0eddf0aaa7", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_f4291d49d1c17f6aa8babe0eddf0aaa7"}, "created_at": 1729891998.533806, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_f4291d49d1c17f6aa8babe0eddf0aaa7\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__targeting_keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_f4291d49d1c17f6aa8babe0eddf0aaa7.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, keyword_id, date_day\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__targeting_keyword_report`\n group by source_relation, keyword_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__targeting_keyword_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"}, "test.amazon_ads_source.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "search_term", "model": "{{ get_where_subquery(ref('stg_amazon_ads__search_term_ad_keyword_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term", "resource_type": "test", "package_name": "amazon_ads_source", "path": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06", "fqn": ["amazon_ads_source", "not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term"], "alias": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe"}, "created_at": 1729891998.536463, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(alias=\"not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__search_term_ad_keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect search_term\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__search_term_ad_keyword_report`\nwhere search_term is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "search_term", "file_key_name": "models.stg_amazon_ads__search_term_ad_keyword_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"}, "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__search_term_ad_keyword_report_source_relation__search_term__keyword_id__date_day.00ccbc3eda": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "search_term", "keyword_id", "date_day"], "model": "{{ get_where_subquery(ref('stg_amazon_ads__search_term_ad_keyword_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_amazon_ads__search_term_ad_keyword_report_source_relation__search_term__keyword_id__date_day", "resource_type": "test", "package_name": "amazon_ads_source", "path": "dbt_utils_unique_combination_o_b887ad48bec1a39219806a1125ea4e30.sql", "original_file_path": "models/stg_amazon_ads.yml", "unique_id": "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__search_term_ad_keyword_report_source_relation__search_term__keyword_id__date_day.00ccbc3eda", "fqn": ["amazon_ads_source", "dbt_utils_unique_combination_of_columns_stg_amazon_ads__search_term_ad_keyword_report_source_relation__search_term__keyword_id__date_day"], "alias": "dbt_utils_unique_combination_o_b887ad48bec1a39219806a1125ea4e30", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_b887ad48bec1a39219806a1125ea4e30", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_b887ad48bec1a39219806a1125ea4e30"}, "created_at": 1729891998.5375779, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_b887ad48bec1a39219806a1125ea4e30\") }}", "language": "sql", "refs": [{"name": "stg_amazon_ads__search_term_ad_keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads_source/models/stg_amazon_ads.yml/dbt_utils_unique_combination_o_b887ad48bec1a39219806a1125ea4e30.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, search_term, keyword_id, date_day\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`stg_amazon_ads__search_term_ad_keyword_report`\n group by source_relation, search_term, keyword_id, date_day\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.stg_amazon_ads__search_term_ad_keyword_report", "attached_node": "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"}, "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "profile_id", "model": "{{ get_where_subquery(ref('amazon_ads__account_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__account_report_profile_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__account_report_profile_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66", "fqn": ["amazon_ads", "not_null_amazon_ads__account_report_profile_id"], "alias": "not_null_amazon_ads__account_report_profile_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.599668, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__account_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__account_report_profile_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect profile_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__account_report`\nwhere profile_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "profile_id", "file_key_name": "models.amazon_ads__account_report", "attached_node": "model.amazon_ads.amazon_ads__account_report"}, "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "account_id", "model": "{{ get_where_subquery(ref('amazon_ads__account_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__account_report_account_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__account_report_account_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061", "fqn": ["amazon_ads", "not_null_amazon_ads__account_report_account_id"], "alias": "not_null_amazon_ads__account_report_account_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.600887, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__account_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__account_report_account_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect account_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__account_report`\nwhere account_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "account_id", "file_key_name": "models.amazon_ads__account_report", "attached_node": "model.amazon_ads.amazon_ads__account_report"}, "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__account_report_source_relation__date_day__profile_id.5ff488055c": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "date_day", "profile_id"], "model": "{{ get_where_subquery(ref('amazon_ads__account_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_amazon_ads__account_report_source_relation__date_day__profile_id", "resource_type": "test", "package_name": "amazon_ads", "path": "dbt_utils_unique_combination_o_416219fe3044d8d47e223761d365cb57.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__account_report_source_relation__date_day__profile_id.5ff488055c", "fqn": ["amazon_ads", "dbt_utils_unique_combination_of_columns_amazon_ads__account_report_source_relation__date_day__profile_id"], "alias": "dbt_utils_unique_combination_o_416219fe3044d8d47e223761d365cb57", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_416219fe3044d8d47e223761d365cb57", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_416219fe3044d8d47e223761d365cb57"}, "created_at": 1729891998.60202, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_416219fe3044d8d47e223761d365cb57\") }}", "language": "sql", "refs": [{"name": "amazon_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__account_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/dbt_utils_unique_combination_o_416219fe3044d8d47e223761d365cb57.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, date_day, profile_id\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__account_report`\n group by source_relation, date_day, profile_id\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.amazon_ads__account_report", "attached_node": "model.amazon_ads.amazon_ads__account_report"}, "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('amazon_ads__ad_group_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__ad_group_report_ad_group_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__ad_group_report_ad_group_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a", "fqn": ["amazon_ads", "not_null_amazon_ads__ad_group_report_ad_group_id"], "alias": "not_null_amazon_ads__ad_group_report_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.604768, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__ad_group_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__ad_group_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__ad_group_report_ad_group_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_group_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__ad_group_report`\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_group_id", "file_key_name": "models.amazon_ads__ad_group_report", "attached_node": "model.amazon_ads.amazon_ads__ad_group_report"}, "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_group_report_source_relation__date_day__ad_group_id.9f5387d4e0": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "date_day", "ad_group_id"], "model": "{{ get_where_subquery(ref('amazon_ads__ad_group_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_amazon_ads__ad_group_report_source_relation__date_day__ad_group_id", "resource_type": "test", "package_name": "amazon_ads", "path": "dbt_utils_unique_combination_o_e8503e4f9f94438125f72f1d09111a10.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_group_report_source_relation__date_day__ad_group_id.9f5387d4e0", "fqn": ["amazon_ads", "dbt_utils_unique_combination_of_columns_amazon_ads__ad_group_report_source_relation__date_day__ad_group_id"], "alias": "dbt_utils_unique_combination_o_e8503e4f9f94438125f72f1d09111a10", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_e8503e4f9f94438125f72f1d09111a10", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_e8503e4f9f94438125f72f1d09111a10"}, "created_at": 1729891998.605885, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_e8503e4f9f94438125f72f1d09111a10\") }}", "language": "sql", "refs": [{"name": "amazon_ads__ad_group_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__ad_group_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/dbt_utils_unique_combination_o_e8503e4f9f94438125f72f1d09111a10.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, date_day, ad_group_id\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__ad_group_report`\n group by source_relation, date_day, ad_group_id\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.amazon_ads__ad_group_report", "attached_node": "model.amazon_ads.amazon_ads__ad_group_report"}, "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('amazon_ads__ad_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__ad_report_ad_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__ad_report_ad_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3", "fqn": ["amazon_ads", "not_null_amazon_ads__ad_report_ad_id"], "alias": "not_null_amazon_ads__ad_report_ad_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.6088881, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__ad_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__ad_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__ad_report`\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_id", "file_key_name": "models.amazon_ads__ad_report", "attached_node": "model.amazon_ads.amazon_ads__ad_report"}, "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_report_source_relation__date_day__ad_id.5c0ccedb91": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "date_day", "ad_id"], "model": "{{ get_where_subquery(ref('amazon_ads__ad_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_amazon_ads__ad_report_source_relation__date_day__ad_id", "resource_type": "test", "package_name": "amazon_ads", "path": "dbt_utils_unique_combination_o_83fde40f0388d2e6fb8c9c3244db5f32.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_report_source_relation__date_day__ad_id.5c0ccedb91", "fqn": ["amazon_ads", "dbt_utils_unique_combination_of_columns_amazon_ads__ad_report_source_relation__date_day__ad_id"], "alias": "dbt_utils_unique_combination_o_83fde40f0388d2e6fb8c9c3244db5f32", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_83fde40f0388d2e6fb8c9c3244db5f32", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_83fde40f0388d2e6fb8c9c3244db5f32"}, "created_at": 1729891998.6100092, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_83fde40f0388d2e6fb8c9c3244db5f32\") }}", "language": "sql", "refs": [{"name": "amazon_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__ad_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/dbt_utils_unique_combination_o_83fde40f0388d2e6fb8c9c3244db5f32.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, date_day, ad_id\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__ad_report`\n group by source_relation, date_day, ad_id\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.amazon_ads__ad_report", "attached_node": "model.amazon_ads.amazon_ads__ad_report"}, "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('amazon_ads__campaign_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__campaign_report_campaign_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__campaign_report_campaign_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c", "fqn": ["amazon_ads", "not_null_amazon_ads__campaign_report_campaign_id"], "alias": "not_null_amazon_ads__campaign_report_campaign_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.660911, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__campaign_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__campaign_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__campaign_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__campaign_report`\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "campaign_id", "file_key_name": "models.amazon_ads__campaign_report", "attached_node": "model.amazon_ads.amazon_ads__campaign_report"}, "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__campaign_report_source_relation__date_day__campaign_id.0fcead4f41": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "date_day", "campaign_id"], "model": "{{ get_where_subquery(ref('amazon_ads__campaign_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_amazon_ads__campaign_report_source_relation__date_day__campaign_id", "resource_type": "test", "package_name": "amazon_ads", "path": "dbt_utils_unique_combination_o_fa3819f4bf4290da54c5b88ce0d9dc36.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__campaign_report_source_relation__date_day__campaign_id.0fcead4f41", "fqn": ["amazon_ads", "dbt_utils_unique_combination_of_columns_amazon_ads__campaign_report_source_relation__date_day__campaign_id"], "alias": "dbt_utils_unique_combination_o_fa3819f4bf4290da54c5b88ce0d9dc36", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_fa3819f4bf4290da54c5b88ce0d9dc36", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_fa3819f4bf4290da54c5b88ce0d9dc36"}, "created_at": 1729891998.6620622, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_fa3819f4bf4290da54c5b88ce0d9dc36\") }}", "language": "sql", "refs": [{"name": "amazon_ads__campaign_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__campaign_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/dbt_utils_unique_combination_o_fa3819f4bf4290da54c5b88ce0d9dc36.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, date_day, campaign_id\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__campaign_report`\n group by source_relation, date_day, campaign_id\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.amazon_ads__campaign_report", "attached_node": "model.amazon_ads.amazon_ads__campaign_report"}, "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "profile_id", "model": "{{ get_where_subquery(ref('amazon_ads__portfolio_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__portfolio_report_profile_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__portfolio_report_profile_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6", "fqn": ["amazon_ads", "not_null_amazon_ads__portfolio_report_profile_id"], "alias": "not_null_amazon_ads__portfolio_report_profile_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.664968, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__portfolio_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__portfolio_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__portfolio_report_profile_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect profile_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__portfolio_report`\nwhere profile_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "profile_id", "file_key_name": "models.amazon_ads__portfolio_report", "attached_node": "model.amazon_ads.amazon_ads__portfolio_report"}, "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__portfolio_report_source_relation__date_day__portfolio_id.b3bfe4fce4": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "date_day", "portfolio_id"], "model": "{{ get_where_subquery(ref('amazon_ads__portfolio_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_amazon_ads__portfolio_report_source_relation__date_day__portfolio_id", "resource_type": "test", "package_name": "amazon_ads", "path": "dbt_utils_unique_combination_o_cbcf46ab6ce03f3dedf83ab5cd9dd622.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__portfolio_report_source_relation__date_day__portfolio_id.b3bfe4fce4", "fqn": ["amazon_ads", "dbt_utils_unique_combination_of_columns_amazon_ads__portfolio_report_source_relation__date_day__portfolio_id"], "alias": "dbt_utils_unique_combination_o_cbcf46ab6ce03f3dedf83ab5cd9dd622", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_cbcf46ab6ce03f3dedf83ab5cd9dd622", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_cbcf46ab6ce03f3dedf83ab5cd9dd622"}, "created_at": 1729891998.666084, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_cbcf46ab6ce03f3dedf83ab5cd9dd622\") }}", "language": "sql", "refs": [{"name": "amazon_ads__portfolio_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__portfolio_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/dbt_utils_unique_combination_o_cbcf46ab6ce03f3dedf83ab5cd9dd622.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, date_day, portfolio_id\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__portfolio_report`\n group by source_relation, date_day, portfolio_id\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.amazon_ads__portfolio_report", "attached_node": "model.amazon_ads.amazon_ads__portfolio_report"}, "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "keyword_id", "model": "{{ get_where_subquery(ref('amazon_ads__keyword_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__keyword_report_keyword_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__keyword_report_keyword_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a", "fqn": ["amazon_ads", "not_null_amazon_ads__keyword_report_keyword_id"], "alias": "not_null_amazon_ads__keyword_report_keyword_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.6687481, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__keyword_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__keyword_report_keyword_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect keyword_id\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__keyword_report`\nwhere keyword_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "keyword_id", "file_key_name": "models.amazon_ads__keyword_report", "attached_node": "model.amazon_ads.amazon_ads__keyword_report"}, "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__keyword_report_source_relation__date_day__keyword_id.34f042afc1": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "date_day", "keyword_id"], "model": "{{ get_where_subquery(ref('amazon_ads__keyword_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_amazon_ads__keyword_report_source_relation__date_day__keyword_id", "resource_type": "test", "package_name": "amazon_ads", "path": "dbt_utils_unique_combination_o_91428774900936bd3a49f04fdde1a93d.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__keyword_report_source_relation__date_day__keyword_id.34f042afc1", "fqn": ["amazon_ads", "dbt_utils_unique_combination_of_columns_amazon_ads__keyword_report_source_relation__date_day__keyword_id"], "alias": "dbt_utils_unique_combination_o_91428774900936bd3a49f04fdde1a93d", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_91428774900936bd3a49f04fdde1a93d", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_91428774900936bd3a49f04fdde1a93d"}, "created_at": 1729891998.669871, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_91428774900936bd3a49f04fdde1a93d\") }}", "language": "sql", "refs": [{"name": "amazon_ads__keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__keyword_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/dbt_utils_unique_combination_o_91428774900936bd3a49f04fdde1a93d.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, date_day, keyword_id\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__keyword_report`\n group by source_relation, date_day, keyword_id\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.amazon_ads__keyword_report", "attached_node": "model.amazon_ads.amazon_ads__keyword_report"}, "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a": {"test_metadata": {"name": "not_null", "kwargs": {"column_name": "search_term", "model": "{{ get_where_subquery(ref('amazon_ads__search_report')) }}"}, "namespace": null}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "not_null_amazon_ads__search_report_search_term", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__search_report_search_term.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a", "fqn": ["amazon_ads", "not_null_amazon_ads__search_report_search_term"], "alias": "not_null_amazon_ads__search_report_search_term", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {}, "created_at": 1729891998.672529, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "amazon_ads__search_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__search_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__search_report_search_term.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect search_term\nfrom `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__search_report`\nwhere search_term is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "search_term", "file_key_name": "models.amazon_ads__search_report", "attached_node": "model.amazon_ads.amazon_ads__search_report"}, "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__search_report_source_relation__date_day__search_term__keyword_id.21a027f105": {"test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "date_day", "search_term", "keyword_id"], "model": "{{ get_where_subquery(ref('amazon_ads__search_report')) }}"}, "namespace": "dbt_utils"}, "database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_amazon_ads__search_report_source_relation__date_day__search_term__keyword_id", "resource_type": "test", "package_name": "amazon_ads", "path": "dbt_utils_unique_combination_o_101099c02761163dd498edf7f610e670.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__search_report_source_relation__date_day__search_term__keyword_id.21a027f105", "fqn": ["amazon_ads", "dbt_utils_unique_combination_of_columns_amazon_ads__search_report_source_relation__date_day__search_term__keyword_id"], "alias": "dbt_utils_unique_combination_o_101099c02761163dd498edf7f610e670", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_101099c02761163dd498edf7f610e670", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"alias": "dbt_utils_unique_combination_o_101099c02761163dd498edf7f610e670"}, "created_at": 1729891998.67364, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_101099c02761163dd498edf7f610e670\") }}", "language": "sql", "refs": [{"name": "amazon_ads__search_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.test_unique_combination_of_columns", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__search_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/dbt_utils_unique_combination_o_101099c02761163dd498edf7f610e670.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, date_day, search_term, keyword_id\n from `dbt-package-testing`.`amazon_ads_test_amazon_ads_dev`.`amazon_ads__search_report`\n group by source_relation, date_day, search_term, keyword_id\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": null, "file_key_name": "models.amazon_ads__search_report", "attached_node": "model.amazon_ads.amazon_ads__search_report"}}, "sources": {"source.amazon_ads_source.amazon_ads.ad_group_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "ad_group_history", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.ad_group_history", "fqn": ["amazon_ads_source", "amazon_ads", "ad_group_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "ad_group_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents an ad group in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "default_bid": {"name": "default_bid", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`ad_group_history_data`", "created_at": 1729891998.6777139}, "source.amazon_ads_source.amazon_ads.ad_group_level_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "ad_group_level_report", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.ad_group_level_report", "fqn": ["amazon_ads_source", "amazon_ads", "ad_group_level_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "ad_group_level_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record in this table represents the daily performance by Amazon ad group.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`ad_group_level_report_data`", "created_at": 1729891998.6778638}, "source.amazon_ads_source.amazon_ads.advertised_product_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "advertised_product_report", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.advertised_product_report", "fqn": ["amazon_ads_source", "amazon_ads", "advertised_product_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "advertised_product_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Advertised product reports contain performance data for products that are advertised as part of your campaigns.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_id": {"name": "ad_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertised_asin": {"name": "advertised_asin", "description": "The ASIN associated to an advertised product.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertised_sku": {"name": "advertised_sku", "description": "The SKU being advertised.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`advertised_product_report_data`", "created_at": 1729891998.6779861}, "source.amazon_ads_source.amazon_ads.campaign_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "campaign_history", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.campaign_history", "fqn": ["amazon_ads_source", "amazon_ads", "campaign_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "campaign_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a campaign in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "bidding_strategy": {"name": "bidding_strategy", "description": "The bidding strategy associated with a campaign (legacyForSales, autoForSales, or manual.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget": {"name": "budget", "description": "The budget for the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_type": {"name": "budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "effective_budget": {"name": "effective_budget", "description": "Adjusted budget for the campaign that has been impacted by a budget rule.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "end_date": {"name": "end_date", "description": "The end date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "start_date": {"name": "start_date", "description": "The start date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "targeting_type": {"name": "targeting_type", "description": "The type of targeting used for the campaign, either manual or auto.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`campaign_history_data`", "created_at": 1729891998.678105}, "source.amazon_ads_source.amazon_ads.campaign_level_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "campaign_level_report", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.campaign_level_report", "fqn": ["amazon_ads_source", "amazon_ads", "campaign_level_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "campaign_level_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record in this table represents the daily performance by Amazon campaign.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_applicable_budget_rule_id": {"name": "campaign_applicable_budget_rule_id", "description": "The ID associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_applicable_budget_rule_name": {"name": "campaign_applicable_budget_rule_name", "description": "The name associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_rule_based_budget_amount": {"name": "campaign_rule_based_budget_amount", "description": "The value of the rule-based budget for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`campaign_level_report_data`", "created_at": 1729891998.678221}, "source.amazon_ads_source.amazon_ads.keyword_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "keyword_history", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.keyword_history", "fqn": ["amazon_ads_source", "amazon_ads", "keyword_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "keyword_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a keyword in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "bid": {"name": "bid", "description": "Bid associated with this keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "match_type": {"name": "match_type", "description": "One of (broad, exact, or phrase.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "native_language_keyword": {"name": "native_language_keyword", "description": "The unlocalized keyword text in the preferred locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "native_language_locale": {"name": "native_language_locale", "description": "The preferred language locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`keyword_history_data`", "created_at": 1729891998.678333}, "source.amazon_ads_source.amazon_ads.portfolio_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "portfolio_history", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.portfolio_history", "fqn": ["amazon_ads_source", "amazon_ads", "portfolio_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "portfolio_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a portfolio in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_amount": {"name": "budget_amount", "description": "The budget amount associated with the portfolio. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_currency_code": {"name": "budget_currency_code", "description": "The currency used for all monetary values for entities under this profile. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_end_date": {"name": "budget_end_date", "description": "The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_start_date": {"name": "budget_start_date", "description": "The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "budget_policy": {"name": "budget_policy", "description": "The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "in_budget": {"name": "in_budget", "description": "Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`portfolio_history_data`", "created_at": 1729891998.6784441}, "source.amazon_ads_source.amazon_ads.product_ad_history": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "product_ad_history", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.product_ad_history", "fqn": ["amazon_ads_source", "amazon_ads", "product_ad_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "product_ad_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a product in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the Ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "asin": {"name": "asin", "description": "The Amazon Standard Identification Number (ASIN) associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sku": {"name": "sku", "description": "The product SKU associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`product_ad_history_data`", "created_at": 1729891998.6785479}, "source.amazon_ads_source.amazon_ads.profile": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "profile", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.profile", "fqn": ["amazon_ads_source", "amazon_ads", "profile"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "profile_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a profile. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "columns": {"_fivetran_deleted": {"name": "_fivetran_deleted", "description": "Boolean created by Fivetran to indicate whether the record has been deleted.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "ID of the profile.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_marketplace_string_id": {"name": "account_marketplace_string_id", "description": "The identifier of the marketplace to which the account is associated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_sub_type": {"name": "account_sub_type", "description": "The account subtype.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_type": {"name": "account_type", "description": "One of seller, vendor, or agency.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "account_valid_payment_method": {"name": "account_valid_payment_method", "description": "For Vendors, this returns if the Advertiser has set up a valid payment method.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency_code": {"name": "currency_code", "description": "The currency used for all monetary values for entities under this profile.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "daily_budget": {"name": "daily_budget", "description": "Daily budget for Sponsored Product campaigns for seller type accounts.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "The time zone used for all date-based campaign management and reporting.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`profile_data`", "created_at": 1729891998.678658}, "source.amazon_ads_source.amazon_ads.targeting_keyword_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "targeting_keyword_report", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.targeting_keyword_report", "fqn": ["amazon_ads_source", "amazon_ads", "targeting_keyword_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "targeting_keyword_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Targeting reports contain performance metrics broken down by both targeting expressions and keywords.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_keyword_status": {"name": "ad_keyword_status", "description": "Current status of a keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_type": {"name": "keyword_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`targeting_keyword_report_data`", "created_at": 1729891998.678891}, "source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report": {"database": "dbt-package-testing", "schema": "amazon_ads_test", "name": "search_term_ad_keyword_report", "resource_type": "source", "package_name": "amazon_ads_source", "path": "models/src_amazon_ads.yml", "original_file_path": "models/src_amazon_ads.yml", "unique_id": "source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report", "fqn": ["amazon_ads_source", "amazon_ads", "search_term_ad_keyword_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "search_term_ad_keyword_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Search term reports contain search term performance metrics broken down by targeting expressions and keywords.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "search_term": {"name": "search_term", "description": "The search term used by the customer.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "`dbt-package-testing`.`amazon_ads_test`.`search_term_ad_keyword_report_data`", "created_at": 1729891998.679004}}, "macros": {"macro.dbt_bigquery.date_sharded_table": {"name": "date_sharded_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/etc.sql", "original_file_path": "macros/etc.sql", "unique_id": "macro.dbt_bigquery.date_sharded_table", "macro_sql": "{% macro date_sharded_table(base_name) %}\n {{ return(base_name ~ \"[DBT__PARTITION_DATE]\") }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.163476, "supported_languages": null}, "macro.dbt_bigquery.grant_access_to": {"name": "grant_access_to", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/etc.sql", "original_file_path": "macros/etc.sql", "unique_id": "macro.dbt_bigquery.grant_access_to", "macro_sql": "{% macro grant_access_to(entity, entity_type, role, grant_target_dict) -%}\n {% do adapter.grant_access_to(entity, entity_type, role, grant_target_dict) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1637151, "supported_languages": null}, "macro.dbt_bigquery.get_partitions_metadata": {"name": "get_partitions_metadata", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/etc.sql", "original_file_path": "macros/etc.sql", "unique_id": "macro.dbt_bigquery.get_partitions_metadata", "macro_sql": "\n\n{%- macro get_partitions_metadata(table) -%}\n {%- if execute -%}\n {%- set res = adapter.get_partitions_metadata(table) -%}\n {{- return(res) -}}\n {%- endif -%}\n {{- return(None) -}}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1640031, "supported_languages": null}, "macro.dbt_bigquery.bigquery__create_table_as": {"name": "bigquery__create_table_as", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__create_table_as", "macro_sql": "{% macro bigquery__create_table_as(temporary, relation, compiled_code, language='sql') -%}\n {%- if language == 'sql' -%}\n {%- set raw_partition_by = config.get('partition_by', none) -%}\n {%- set raw_cluster_by = config.get('cluster_by', none) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {%- set partition_config = adapter.parse_partition_by(raw_partition_by) -%}\n {%- if partition_config.time_ingestion_partitioning -%}\n {%- set columns = get_columns_with_types_in_query_sql(sql) -%}\n {%- set table_dest_columns_csv = columns_without_partition_fields_csv(partition_config, columns) -%}\n {%- set columns = '(' ~ table_dest_columns_csv ~ ')' -%}\n {%- endif -%}\n\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(compiled_code) }}\n {{ get_table_columns_and_constraints() }}\n {%- set compiled_code = get_select_subquery(compiled_code) %}\n {% else %}\n {#-- cannot do contracts at the same time as time ingestion partitioning -#}\n {{ columns }}\n {% endif %}\n {{ partition_by(partition_config) }}\n {{ cluster_by(raw_cluster_by) }}\n\n {{ bigquery_table_options(config, model, temporary) }}\n\n {#-- PARTITION BY cannot be used with the AS query_statement clause.\n https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#partition_expression\n -#}\n {%- if not partition_config.time_ingestion_partitioning %}\n as (\n {{ compiled_code }}\n );\n {%- endif %}\n {%- elif language == 'python' -%}\n {#--\n N.B. Python models _can_ write to temp views HOWEVER they use a different session\n and have already expired by the time they need to be used (I.E. in merges for incremental models)\n\n TODO: Deep dive into spark sessions to see if we can reuse a single session for an entire\n dbt invocation.\n --#}\n\n {#-- when a user wants to change the schema of an existing relation, they must intentionally drop the table in the dataset --#}\n {%- set old_relation = adapter.get_relation(database=relation.database, schema=relation.schema, identifier=relation.identifier) -%}\n {%- if (old_relation.is_table and (should_full_refresh())) -%}\n {% do adapter.drop_relation(relation) %}\n {%- endif -%}\n {{ py_write_table(compiled_code=compiled_code, target_relation=relation.quote(database=False, schema=False, identifier=False)) }}\n {%- else -%}\n {% do exceptions.raise_compiler_error(\"bigquery__create_table_as macro didn't get supported language, it got %s\" % language) %}\n {%- endif -%}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_bigquery.get_columns_with_types_in_query_sql", "macro.dbt_bigquery.columns_without_partition_fields_csv", "macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery", "macro.dbt_bigquery.partition_by", "macro.dbt_bigquery.cluster_by", "macro.dbt_bigquery.bigquery_table_options", "macro.dbt.should_full_refresh", "macro.dbt_bigquery.py_write_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.168579, "supported_languages": null}, "macro.dbt_bigquery.bigquery__create_view_as": {"name": "bigquery__create_view_as", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__create_view_as", "macro_sql": "{% macro bigquery__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\n create or replace view {{ relation }}\n {{ bigquery_view_options(config, model) }}\n {%- set contract_config = config.get('contract') -%}\n {%- if contract_config.enforced -%}\n {{ get_assert_columns_equivalent(sql) }}\n {%- endif %}\n as {{ sql }};\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery_view_options", "macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.169081, "supported_languages": null}, "macro.dbt_bigquery.bigquery__drop_schema": {"name": "bigquery__drop_schema", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__drop_schema", "macro_sql": "{% macro bigquery__drop_schema(relation) -%}\n {{ adapter.drop_schema(relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.169224, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_columns_in_relation": {"name": "bigquery__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_columns_in_relation", "macro_sql": "{% macro bigquery__get_columns_in_relation(relation) -%}\n {{ return(adapter.get_columns_in_relation(relation)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.169375, "supported_languages": null}, "macro.dbt_bigquery.bigquery__list_relations_without_caching": {"name": "bigquery__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__list_relations_without_caching", "macro_sql": "{% macro bigquery__list_relations_without_caching(schema_relation) -%}\n {{ return(adapter.list_relations_without_caching(schema_relation)) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.169528, "supported_languages": null}, "macro.dbt_bigquery.bigquery__list_schemas": {"name": "bigquery__list_schemas", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__list_schemas", "macro_sql": "{% macro bigquery__list_schemas(database) -%}\n {{ return(adapter.list_schemas(database)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.169677, "supported_languages": null}, "macro.dbt_bigquery.bigquery__check_schema_exists": {"name": "bigquery__check_schema_exists", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__check_schema_exists", "macro_sql": "{% macro bigquery__check_schema_exists(information_schema, schema) %}\n {{ return(adapter.check_schema_exists(information_schema.database, schema)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.169863, "supported_languages": null}, "macro.dbt_bigquery.bigquery__persist_docs": {"name": "bigquery__persist_docs", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__persist_docs", "macro_sql": "{% macro bigquery__persist_docs(relation, model, for_relation, for_columns) -%}\n {% if for_columns and config.persist_column_docs() and model.columns %}\n {% do alter_column_comment(relation, model.columns) %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.170153, "supported_languages": null}, "macro.dbt_bigquery.bigquery__alter_column_comment": {"name": "bigquery__alter_column_comment", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__alter_column_comment", "macro_sql": "{% macro bigquery__alter_column_comment(relation, column_dict) -%}\n {% do adapter.update_columns(relation, column_dict) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.170315, "supported_languages": null}, "macro.dbt_bigquery.bigquery__alter_relation_add_columns": {"name": "bigquery__alter_relation_add_columns", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__alter_relation_add_columns", "macro_sql": "{% macro bigquery__alter_relation_add_columns(relation, add_columns) %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation }}\n {% for column in add_columns %}\n add column {{ column.name }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {{ return(run_query(sql)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.170749, "supported_languages": null}, "macro.dbt_bigquery.bigquery__alter_relation_drop_columns": {"name": "bigquery__alter_relation_drop_columns", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__alter_relation_drop_columns", "macro_sql": "{% macro bigquery__alter_relation_drop_columns(relation, drop_columns) %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation }}\n\n {% for column in drop_columns %}\n drop column {{ column.name }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {{ return(run_query(sql)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.171144, "supported_languages": null}, "macro.dbt_bigquery.bigquery__alter_column_type": {"name": "bigquery__alter_column_type", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__alter_column_type", "macro_sql": "{% macro bigquery__alter_column_type(relation, column_name, new_column_type) -%}\n {#-- Changing a column's data type using a query requires you to scan the entire table.\n The query charges can be significant if the table is very large.\n\n https://cloud.google.com/bigquery/docs/manually-changing-schemas#changing_a_columns_data_type\n #}\n {% set relation_columns = get_columns_in_relation(relation) %}\n\n {% set sql %}\n select\n {%- for col in relation_columns -%}\n {% if col.column == column_name %}\n CAST({{ col.quoted }} AS {{ new_column_type }}) AS {{ col.quoted }}\n {%- else %}\n {{ col.quoted }}\n {%- endif %}\n {%- if not loop.last %},{% endif -%}\n {%- endfor %}\n from {{ relation }}\n {% endset %}\n\n {% call statement('alter_column_type') %}\n {{ create_table_as(False, relation, sql)}}\n {%- endcall %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_columns_in_relation", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.171828, "supported_languages": null}, "macro.dbt_bigquery.bigquery__test_unique": {"name": "bigquery__test_unique", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__test_unique", "macro_sql": "{% macro bigquery__test_unique(model, column_name) %}\n\nwith dbt_test__target as (\n\n select {{ column_name }} as unique_field\n from {{ model }}\n where {{ column_name }} is not null\n\n)\n\nselect\n unique_field,\n count(*) as n_records\n\nfrom dbt_test__target\ngroup by unique_field\nhaving count(*) > 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1720011, "supported_languages": null}, "macro.dbt_bigquery.bigquery__upload_file": {"name": "bigquery__upload_file", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_bigquery.bigquery__upload_file", "macro_sql": "{% macro bigquery__upload_file(local_file_path, database, table_schema, table_name) %}\n\n {{ log(\"kwargs: \" ~ kwargs) }}\n\n {% do adapter.upload_file(local_file_path, database, table_schema, table_name, kwargs=kwargs) %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.172284, "supported_languages": null}, "macro.dbt_bigquery.bigquery__create_csv_table": {"name": "bigquery__create_csv_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/seed.sql", "original_file_path": "macros/materializations/seed.sql", "unique_id": "macro.dbt_bigquery.bigquery__create_csv_table", "macro_sql": "{% macro bigquery__create_csv_table(model, agate_table) %}\n -- no-op\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.172669, "supported_languages": null}, "macro.dbt_bigquery.bigquery__reset_csv_table": {"name": "bigquery__reset_csv_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/seed.sql", "original_file_path": "macros/materializations/seed.sql", "unique_id": "macro.dbt_bigquery.bigquery__reset_csv_table", "macro_sql": "{% macro bigquery__reset_csv_table(model, full_refresh, old_relation, agate_table) %}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.172833, "supported_languages": null}, "macro.dbt_bigquery.bigquery__load_csv_rows": {"name": "bigquery__load_csv_rows", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/seed.sql", "original_file_path": "macros/materializations/seed.sql", "unique_id": "macro.dbt_bigquery.bigquery__load_csv_rows", "macro_sql": "{% macro bigquery__load_csv_rows(model, agate_table) %}\n\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {{ adapter.load_dataframe(model['database'], model['schema'], model['alias'],\n \t\t\t\t\t\t\tagate_table, column_override) }}\n\n {% call statement() %}\n alter table {{ this.render() }} set {{ bigquery_table_options(config, model) }}\n {% endcall %}\n\n {% if config.persist_relation_docs() and 'description' in model %}\n\n \t{{ adapter.update_table_description(model['database'], model['schema'], model['alias'], model['description']) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_bigquery.bigquery_table_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1736052, "supported_languages": null}, "macro.dbt_bigquery.bigquery__handle_existing_table": {"name": "bigquery__handle_existing_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/view.sql", "original_file_path": "macros/materializations/view.sql", "unique_id": "macro.dbt_bigquery.bigquery__handle_existing_table", "macro_sql": "{% macro bigquery__handle_existing_table(full_refresh, old_relation) %}\n {%- if full_refresh -%}\n {{ adapter.drop_relation(old_relation) }}\n {%- else -%}\n {{ exceptions.relation_wrong_type(old_relation, 'view') }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.174187, "supported_languages": null}, "macro.dbt_bigquery.materialization_view_bigquery": {"name": "materialization_view_bigquery", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/view.sql", "original_file_path": "macros/materializations/view.sql", "unique_id": "macro.dbt_bigquery.materialization_view_bigquery", "macro_sql": "{% materialization view, adapter='bigquery' -%}\n -- grab current tables grants config for comparision later on\n {% set grant_config = config.get('grants') %}\n\n {% set to_return = bigquery__create_or_replace_view() %}\n\n {% set target_relation = this.incorporate(type='view') %}\n\n {% do persist_docs(target_relation, model) %}\n\n {% if config.get('grant_access_to') %}\n {% for grant_target_dict in config.get('grant_access_to') %}\n {% do adapter.grant_access_to(this, 'view', None, grant_target_dict) %}\n {% endfor %}\n {% endif %}\n\n {% do return(to_return) %}\n\n{%- endmaterialization %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__create_or_replace_view", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.174866, "supported_languages": ["sql"]}, "macro.dbt_bigquery.materialization_table_bigquery": {"name": "materialization_table_bigquery", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/table.sql", "original_file_path": "macros/materializations/table.sql", "unique_id": "macro.dbt_bigquery.materialization_table_bigquery", "macro_sql": "{% materialization table, adapter='bigquery', supported_languages=['sql', 'python']-%}\n\n {%- set language = model['language'] -%}\n {%- set identifier = model['alias'] -%}\n {%- set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) -%}\n {%- set exists_not_as_table = (old_relation is not none and not old_relation.is_table) -%}\n {%- set target_relation = api.Relation.create(database=database, schema=schema, identifier=identifier, type='table') -%}\n\n -- grab current tables grants config for comparision later on\n {%- set grant_config = config.get('grants') -%}\n\n {{ run_hooks(pre_hooks) }}\n\n {#\n We only need to drop this thing if it is not a table.\n If it _is_ already a table, then we can overwrite it without downtime\n Unlike table -> view, no need for `--full-refresh`: dropping a view is no big deal\n #}\n {%- if exists_not_as_table -%}\n {{ adapter.drop_relation(old_relation) }}\n {%- endif -%}\n\n -- build model\n {%- set raw_partition_by = config.get('partition_by', none) -%}\n {%- set partition_by = adapter.parse_partition_by(raw_partition_by) -%}\n {%- set cluster_by = config.get('cluster_by', none) -%}\n {% if not adapter.is_replaceable(old_relation, partition_by, cluster_by) %}\n {% do log(\"Hard refreshing \" ~ old_relation ~ \" because it is not replaceable\") %}\n {% do adapter.drop_relation(old_relation) %}\n {% endif %}\n\n -- build model\n {%- call statement('main', language=language) -%}\n {{ create_table_as(False, target_relation, compiled_code, language) }}\n {%- endcall -%}\n\n {{ run_hooks(post_hooks) }}\n\n {% set should_revoke = should_revoke(old_relation, full_refresh_mode=True) %}\n {% do apply_grants(target_relation, grant_config, should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.create_table_as", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1790159, "supported_languages": ["sql", "python"]}, "macro.dbt_bigquery.py_write_table": {"name": "py_write_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/table.sql", "original_file_path": "macros/materializations/table.sql", "unique_id": "macro.dbt_bigquery.py_write_table", "macro_sql": "{% macro py_write_table(compiled_code, target_relation) %}\nfrom pyspark.sql import SparkSession\n{%- set raw_partition_by = config.get('partition_by', none) -%}\n{%- set raw_cluster_by = config.get('cluster_by', none) -%}\n{%- set partition_config = adapter.parse_partition_by(raw_partition_by) %}\n\nspark = SparkSession.builder.appName('smallTest').getOrCreate()\n\nspark.conf.set(\"viewsEnabled\",\"true\")\nspark.conf.set(\"temporaryGcsBucket\",\"{{target.gcs_bucket}}\")\n\n{{ compiled_code }}\ndbt = dbtObj(spark.read.format(\"bigquery\").load)\ndf = model(dbt, spark)\n\n# COMMAND ----------\n# this is materialization code dbt generated, please do not modify\n\nimport pyspark\n# make sure pandas exists before using it\ntry:\n import pandas\n pandas_available = True\nexcept ImportError:\n pandas_available = False\n\n# make sure pyspark.pandas exists before using it\ntry:\n import pyspark.pandas\n pyspark_pandas_api_available = True\nexcept ImportError:\n pyspark_pandas_api_available = False\n\n# make sure databricks.koalas exists before using it\ntry:\n import databricks.koalas\n koalas_available = True\nexcept ImportError:\n koalas_available = False\n\n# preferentially convert pandas DataFrames to pandas-on-Spark or Koalas DataFrames first\n# since they know how to convert pandas DataFrames better than `spark.createDataFrame(df)`\n# and converting from pandas-on-Spark to Spark DataFrame has no overhead\nif pyspark_pandas_api_available and pandas_available and isinstance(df, pandas.core.frame.DataFrame):\n df = pyspark.pandas.frame.DataFrame(df)\nelif koalas_available and pandas_available and isinstance(df, pandas.core.frame.DataFrame):\n df = databricks.koalas.frame.DataFrame(df)\n\n# convert to pyspark.sql.dataframe.DataFrame\nif isinstance(df, pyspark.sql.dataframe.DataFrame):\n pass # since it is already a Spark DataFrame\nelif pyspark_pandas_api_available and isinstance(df, pyspark.pandas.frame.DataFrame):\n df = df.to_spark()\nelif koalas_available and isinstance(df, databricks.koalas.frame.DataFrame):\n df = df.to_spark()\nelif pandas_available and isinstance(df, pandas.core.frame.DataFrame):\n df = spark.createDataFrame(df)\nelse:\n msg = f\"{type(df)} is not a supported type for dbt Python materialization\"\n raise Exception(msg)\n\ndf.write \\\n .mode(\"overwrite\") \\\n .format(\"bigquery\") \\\n .option(\"writeMethod\", \"indirect\").option(\"writeDisposition\", 'WRITE_TRUNCATE') \\\n {%- if partition_config is not none %}\n {%- if partition_config.data_type | lower in ('date','timestamp','datetime') %}\n .option(\"partitionField\", \"{{- partition_config.field -}}\") \\\n {%- if partition_config.granularity is not none %}\n .option(\"partitionType\", \"{{- partition_config.granularity| upper -}}\") \\\n {%- endif %}\n {%- endif %}\n {%- endif %}\n {%- if raw_cluster_by is not none %}\n .option(\"clusteredFields\", \"{{- raw_cluster_by | join(',') -}}\") \\\n {%- endif %}\n .save(\"{{target_relation}}\")\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.179992, "supported_languages": null}, "macro.dbt_bigquery.materialization_copy_bigquery": {"name": "materialization_copy_bigquery", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/copy.sql", "original_file_path": "macros/materializations/copy.sql", "unique_id": "macro.dbt_bigquery.materialization_copy_bigquery", "macro_sql": "{% materialization copy, adapter='bigquery' -%}\n\n {# Setup #}\n {{ run_hooks(pre_hooks) }}\n\n {% set destination = this.incorporate(type='table') %}\n\n {# there can be several ref() or source() according to BQ copy API docs #}\n {# cycle over ref() and source() to create source tables array #}\n {% set source_array = [] %}\n {% for ref_table in model.refs %}\n {{ source_array.append(ref(ref_table.get('package'), ref_table.name, version=ref_table.get('version'))) }}\n {% endfor %}\n\n {% for src_table in model.sources %}\n {{ source_array.append(source(*src_table)) }}\n {% endfor %}\n\n {# Call adapter copy_table function #}\n {%- set result_str = adapter.copy_table(\n source_array,\n destination,\n config.get('copy_materialization', default = 'table')) -%}\n\n {{ store_result('main', response=result_str) }}\n\n {# Clean up #}\n {{ run_hooks(post_hooks) }}\n {%- do apply_grants(target_relation, grant_config) -%}\n {{ adapter.commit() }}\n\n {{ return({'relations': [destination]}) }}\n{%- endmaterialization %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1813278, "supported_languages": ["sql"]}, "macro.dbt_bigquery.dbt_bigquery_validate_get_incremental_strategy": {"name": "dbt_bigquery_validate_get_incremental_strategy", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "unique_id": "macro.dbt_bigquery.dbt_bigquery_validate_get_incremental_strategy", "macro_sql": "{% macro dbt_bigquery_validate_get_incremental_strategy(config) %}\n {#-- Find and validate the incremental strategy #}\n {%- set strategy = config.get(\"incremental_strategy\") or 'merge' -%}\n\n {% set invalid_strategy_msg -%}\n Invalid incremental strategy provided: {{ strategy }}\n Expected one of: 'merge', 'insert_overwrite'\n {%- endset %}\n {% if strategy not in ['merge', 'insert_overwrite'] %}\n {% do exceptions.raise_compiler_error(invalid_strategy_msg) %}\n {% endif %}\n\n {% do return(strategy) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.183456, "supported_languages": null}, "macro.dbt_bigquery.source_sql_with_partition": {"name": "source_sql_with_partition", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "unique_id": "macro.dbt_bigquery.source_sql_with_partition", "macro_sql": "{% macro source_sql_with_partition(partition_by, source_sql) %}\n\n {%- if partition_by.time_ingestion_partitioning %}\n {{ return(wrap_with_time_ingestion_partitioning_sql(partition_by, source_sql, False)) }}\n {% else %}\n {{ return(source_sql) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.wrap_with_time_ingestion_partitioning_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.183753, "supported_languages": null}, "macro.dbt_bigquery.bq_create_table_as": {"name": "bq_create_table_as", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "unique_id": "macro.dbt_bigquery.bq_create_table_as", "macro_sql": "{% macro bq_create_table_as(partition_by, temporary, relation, compiled_code, language='sql') %}\n {%- set _dbt_max_partition = declare_dbt_max_partition(this, partition_by, compiled_code, language) -%}\n {% if partition_by.time_ingestion_partitioning and language == 'python' %}\n {% do exceptions.raise_compiler_error(\n \"Python models do not support ingestion time partitioning\"\n ) %}\n {% elif partition_by.time_ingestion_partitioning and language == 'sql' %}\n {#-- Create the table before inserting data as ingestion time partitioned tables can't be created with the transformed data --#}\n {% do run_query(create_table_as(temporary, relation, compiled_code)) %}\n {{ return(_dbt_max_partition + bq_insert_into_ingestion_time_partitioned_table_sql(relation, compiled_code)) }}\n {% else %}\n {{ return(_dbt_max_partition + create_table_as(temporary, relation, compiled_code, language)) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.declare_dbt_max_partition", "macro.dbt.run_query", "macro.dbt.create_table_as", "macro.dbt_bigquery.bq_insert_into_ingestion_time_partitioned_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.18451, "supported_languages": null}, "macro.dbt_bigquery.bq_generate_incremental_build_sql": {"name": "bq_generate_incremental_build_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "unique_id": "macro.dbt_bigquery.bq_generate_incremental_build_sql", "macro_sql": "{% macro bq_generate_incremental_build_sql(\n strategy, tmp_relation, target_relation, sql, unique_key, partition_by, partitions, dest_columns, tmp_relation_exists, copy_partitions, incremental_predicates\n) %}\n {#-- if partitioned, use BQ scripting to get the range of partition values to be updated --#}\n {% if strategy == 'insert_overwrite' %}\n\n {% set build_sql = bq_generate_incremental_insert_overwrite_build_sql(\n tmp_relation, target_relation, sql, unique_key, partition_by, partitions, dest_columns, tmp_relation_exists, copy_partitions\n ) %}\n\n {% else %} {# strategy == 'merge' #}\n\n {% set build_sql = bq_generate_incremental_merge_build_sql(\n tmp_relation, target_relation, sql, unique_key, partition_by, dest_columns, tmp_relation_exists, incremental_predicates\n ) %}\n\n {% endif %}\n\n {{ return(build_sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bq_generate_incremental_insert_overwrite_build_sql", "macro.dbt_bigquery.bq_generate_incremental_merge_build_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.185157, "supported_languages": null}, "macro.dbt_bigquery.materialization_incremental_bigquery": {"name": "materialization_incremental_bigquery", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental.sql", "original_file_path": "macros/materializations/incremental.sql", "unique_id": "macro.dbt_bigquery.materialization_incremental_bigquery", "macro_sql": "{% materialization incremental, adapter='bigquery', supported_languages=['sql', 'python'] -%}\n\n {%- set unique_key = config.get('unique_key') -%}\n {%- set full_refresh_mode = (should_full_refresh()) -%}\n {%- set language = model['language'] %}\n\n {%- set target_relation = this %}\n {%- set existing_relation = load_relation(this) %}\n {%- set tmp_relation = make_temp_relation(this) %}\n\n {#-- Validate early so we don't run SQL if the strategy is invalid --#}\n {% set strategy = dbt_bigquery_validate_get_incremental_strategy(config) -%}\n\n {%- set raw_partition_by = config.get('partition_by', none) -%}\n {%- set partition_by = adapter.parse_partition_by(raw_partition_by) -%}\n {%- set partitions = config.get('partitions', none) -%}\n {%- set cluster_by = config.get('cluster_by', none) -%}\n\n {% set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') %}\n {% set incremental_predicates = config.get('predicates', default=none) or config.get('incremental_predicates', default=none) %}\n\n -- grab current tables grants config for comparison later on\n {% set grant_config = config.get('grants') %}\n\n {{ run_hooks(pre_hooks) }}\n\n {% if partition_by.copy_partitions is true and strategy != 'insert_overwrite' %} {#-- We can't copy partitions with merge strategy --#}\n {% set wrong_strategy_msg -%}\n The 'copy_partitions' option requires the 'incremental_strategy' option to be set to 'insert_overwrite'.\n {%- endset %}\n {% do exceptions.raise_compiler_error(wrong_strategy_msg) %}\n\n {% elif existing_relation is none %}\n {%- call statement('main', language=language) -%}\n {{ bq_create_table_as(partition_by, False, target_relation, compiled_code, language) }}\n {%- endcall -%}\n\n {% elif existing_relation.is_view %}\n {#-- There's no way to atomically replace a view with a table on BQ --#}\n {{ adapter.drop_relation(existing_relation) }}\n {%- call statement('main', language=language) -%}\n {{ bq_create_table_as(partition_by, False, target_relation, compiled_code, language) }}\n {%- endcall -%}\n\n {% elif full_refresh_mode %}\n {#-- If the partition/cluster config has changed, then we must drop and recreate --#}\n {% if not adapter.is_replaceable(existing_relation, partition_by, cluster_by) %}\n {% do log(\"Hard refreshing \" ~ existing_relation ~ \" because it is not replaceable\") %}\n {{ adapter.drop_relation(existing_relation) }}\n {% endif %}\n {%- call statement('main', language=language) -%}\n {{ bq_create_table_as(partition_by, False, target_relation, compiled_code, language) }}\n {%- endcall -%}\n\n {% else %}\n {%- if language == 'python' and strategy == 'insert_overwrite' -%}\n {#-- This lets us move forward assuming no python will be directly templated into a query --#}\n {%- set python_unsupported_msg -%}\n The 'insert_overwrite' strategy is not yet supported for python models.\n {%- endset %}\n {% do exceptions.raise_compiler_error(python_unsupported_msg) %}\n {%- endif -%}\n\n {% set tmp_relation_exists = false %}\n {% if on_schema_change != 'ignore' or language == 'python' %}\n {#-- Check first, since otherwise we may not build a temp table --#}\n {#-- Python always needs to create a temp table --#}\n {%- call statement('create_tmp_relation', language=language) -%}\n {{ bq_create_table_as(partition_by, True, tmp_relation, compiled_code, language) }}\n {%- endcall -%}\n {% set tmp_relation_exists = true %}\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, tmp_relation, existing_relation) %}\n {% endif %}\n\n {% if not dest_columns %}\n {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n {% endif %}\n {#-- Add time ingestion pseudo column to destination column as not part of the 'schema' but still need it for actual data insertion --#}\n {% if partition_by.time_ingestion_partitioning %}\n {% set dest_columns = adapter.add_time_ingestion_partition_column(partition_by, dest_columns) %}\n {% endif %}\n\n {% set build_sql = bq_generate_incremental_build_sql(\n strategy, tmp_relation, target_relation, compiled_code, unique_key, partition_by, partitions, dest_columns, tmp_relation_exists, partition_by.copy_partitions, incremental_predicates\n ) %}\n\n {%- call statement('main') -%}\n {{ build_sql }}\n {% endcall %}\n\n {%- if language == 'python' and tmp_relation -%}\n {{ adapter.drop_relation(tmp_relation) }}\n {%- endif -%}\n\n {% endif %}\n\n {{ run_hooks(post_hooks) }}\n\n {% set target_relation = this.incorporate(type='table') %}\n\n {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n {% do apply_grants(target_relation, grant_config, should_revoke) %}\n\n {% do persist_docs(target_relation, model) %}\n\n {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh", "macro.dbt.load_relation", "macro.dbt.make_temp_relation", "macro.dbt_bigquery.dbt_bigquery_validate_get_incremental_strategy", "macro.dbt.incremental_validate_on_schema_change", "macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt_bigquery.bq_create_table_as", "macro.dbt.process_schema_changes", "macro.dbt_bigquery.bq_generate_incremental_build_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.189186, "supported_languages": ["sql", "python"]}, "macro.dbt_bigquery.bigquery__snapshot_hash_arguments": {"name": "bigquery__snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/snapshot.sql", "original_file_path": "macros/materializations/snapshot.sql", "unique_id": "macro.dbt_bigquery.bigquery__snapshot_hash_arguments", "macro_sql": "{% macro bigquery__snapshot_hash_arguments(args) -%}\n to_hex(md5(concat({%- for arg in args -%}\n coalesce(cast({{ arg }} as string), ''){% if not loop.last %}, '|',{% endif -%}\n {%- endfor -%}\n )))\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.189787, "supported_languages": null}, "macro.dbt_bigquery.bigquery__create_columns": {"name": "bigquery__create_columns", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/snapshot.sql", "original_file_path": "macros/materializations/snapshot.sql", "unique_id": "macro.dbt_bigquery.bigquery__create_columns", "macro_sql": "{% macro bigquery__create_columns(relation, columns) %}\n {{ adapter.alter_table_add_columns(relation, columns) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1900108, "supported_languages": null}, "macro.dbt_bigquery.bigquery__post_snapshot": {"name": "bigquery__post_snapshot", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/snapshot.sql", "original_file_path": "macros/materializations/snapshot.sql", "unique_id": "macro.dbt_bigquery.bigquery__post_snapshot", "macro_sql": "{% macro bigquery__post_snapshot(staging_relation) %}\n -- Clean up the snapshot temp table\n {% do drop_relation(staging_relation) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1901681, "supported_languages": null}, "macro.dbt_bigquery.bigquery__can_clone_table": {"name": "bigquery__can_clone_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/clone.sql", "original_file_path": "macros/materializations/clone.sql", "unique_id": "macro.dbt_bigquery.bigquery__can_clone_table", "macro_sql": "{% macro bigquery__can_clone_table() %}\n {{ return(True) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1904068, "supported_languages": null}, "macro.dbt_bigquery.bigquery__create_or_replace_clone": {"name": "bigquery__create_or_replace_clone", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/clone.sql", "original_file_path": "macros/materializations/clone.sql", "unique_id": "macro.dbt_bigquery.bigquery__create_or_replace_clone", "macro_sql": "{% macro bigquery__create_or_replace_clone(this_relation, defer_relation) %}\n create or replace\n table {{ this_relation }}\n clone {{ defer_relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.190567, "supported_languages": null}, "macro.dbt_bigquery.bq_generate_incremental_merge_build_sql": {"name": "bq_generate_incremental_merge_build_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/merge.sql", "original_file_path": "macros/materializations/incremental_strategy/merge.sql", "unique_id": "macro.dbt_bigquery.bq_generate_incremental_merge_build_sql", "macro_sql": "{% macro bq_generate_incremental_merge_build_sql(\n tmp_relation, target_relation, sql, unique_key, partition_by, dest_columns, tmp_relation_exists, incremental_predicates\n) %}\n {%- set source_sql -%}\n {%- if tmp_relation_exists -%}\n (\n select\n {% if partition_by.time_ingestion_partitioning -%}\n {{ partition_by.insertable_time_partitioning_field() }},\n {%- endif -%}\n * from {{ tmp_relation }}\n )\n {%- else -%} {#-- wrap sql in parens to make it a subquery --#}\n (\n {%- if partition_by.time_ingestion_partitioning -%}\n {{ wrap_with_time_ingestion_partitioning_sql(partition_by, sql, True) }}\n {%- else -%}\n {{sql}}\n {%- endif %}\n )\n {%- endif -%}\n {%- endset -%}\n\n {% set build_sql = get_merge_sql(target_relation, source_sql, unique_key, dest_columns, incremental_predicates) %}\n\n {{ return(build_sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.wrap_with_time_ingestion_partitioning_sql", "macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.191509, "supported_languages": null}, "macro.dbt_bigquery.declare_dbt_max_partition": {"name": "declare_dbt_max_partition", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/common.sql", "original_file_path": "macros/materializations/incremental_strategy/common.sql", "unique_id": "macro.dbt_bigquery.declare_dbt_max_partition", "macro_sql": "{% macro declare_dbt_max_partition(relation, partition_by, compiled_code, language='sql') %}\n\n {#-- TODO: revisit partitioning with python models --#}\n {%- if '_dbt_max_partition' in compiled_code and language == 'sql' -%}\n\n declare _dbt_max_partition {{ partition_by.data_type_for_partition() }} default (\n select max({{ partition_by.field }}) from {{ this }}\n where {{ partition_by.field }} is not null\n );\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1919758, "supported_languages": null}, "macro.dbt_bigquery.bq_generate_incremental_insert_overwrite_build_sql": {"name": "bq_generate_incremental_insert_overwrite_build_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "original_file_path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "unique_id": "macro.dbt_bigquery.bq_generate_incremental_insert_overwrite_build_sql", "macro_sql": "{% macro bq_generate_incremental_insert_overwrite_build_sql(\n tmp_relation, target_relation, sql, unique_key, partition_by, partitions, dest_columns, tmp_relation_exists, copy_partitions\n) %}\n {% if partition_by is none %}\n {% set missing_partition_msg -%}\n The 'insert_overwrite' strategy requires the `partition_by` config.\n {%- endset %}\n {% do exceptions.raise_compiler_error(missing_partition_msg) %}\n {% endif %}\n\n {% set build_sql = bq_insert_overwrite_sql(\n tmp_relation, target_relation, sql, unique_key, partition_by, partitions, dest_columns, tmp_relation_exists, copy_partitions\n ) %}\n\n {{ return(build_sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bq_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.194905, "supported_languages": null}, "macro.dbt_bigquery.bq_copy_partitions": {"name": "bq_copy_partitions", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "original_file_path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "unique_id": "macro.dbt_bigquery.bq_copy_partitions", "macro_sql": "{% macro bq_copy_partitions(tmp_relation, target_relation, partitions, partition_by) %}\n\n {% for partition in partitions %}\n {% if partition_by.data_type == 'int64' %}\n {% set partition = partition | as_text %}\n {% elif partition_by.granularity == 'hour' %}\n {% set partition = partition.strftime(\"%Y%m%d%H\") %}\n {% elif partition_by.granularity == 'day' %}\n {% set partition = partition.strftime(\"%Y%m%d\") %}\n {% elif partition_by.granularity == 'month' %}\n {% set partition = partition.strftime(\"%Y%m\") %}\n {% elif partition_by.granularity == 'year' %}\n {% set partition = partition.strftime(\"%Y\") %}\n {% endif %}\n {% set tmp_relation_partitioned = api.Relation.create(database=tmp_relation.database, schema=tmp_relation.schema, identifier=tmp_relation.table ~ '$' ~ partition, type=tmp_relation.type) %}\n {% set target_relation_partitioned = api.Relation.create(database=target_relation.database, schema=target_relation.schema, identifier=target_relation.table ~ '$' ~ partition, type=target_relation.type) %}\n {% do adapter.copy_table(tmp_relation_partitioned, target_relation_partitioned, \"table\") %}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.1962838, "supported_languages": null}, "macro.dbt_bigquery.bq_insert_overwrite_sql": {"name": "bq_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "original_file_path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "unique_id": "macro.dbt_bigquery.bq_insert_overwrite_sql", "macro_sql": "{% macro bq_insert_overwrite_sql(\n tmp_relation, target_relation, sql, unique_key, partition_by, partitions, dest_columns, tmp_relation_exists, copy_partitions\n) %}\n {% if partitions is not none and partitions != [] %} {# static #}\n {{ bq_static_insert_overwrite_sql(tmp_relation, target_relation, sql, partition_by, partitions, dest_columns, tmp_relation_exists, copy_partitions) }}\n {% else %} {# dynamic #}\n {{ bq_dynamic_insert_overwrite_sql(tmp_relation, target_relation, sql, unique_key, partition_by, dest_columns, tmp_relation_exists, copy_partitions) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bq_static_insert_overwrite_sql", "macro.dbt_bigquery.bq_dynamic_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.196856, "supported_languages": null}, "macro.dbt_bigquery.bq_static_insert_overwrite_sql": {"name": "bq_static_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "original_file_path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "unique_id": "macro.dbt_bigquery.bq_static_insert_overwrite_sql", "macro_sql": "{% macro bq_static_insert_overwrite_sql(\n tmp_relation, target_relation, sql, partition_by, partitions, dest_columns, tmp_relation_exists, copy_partitions\n) %}\n\n {% set predicate -%}\n {{ partition_by.render_wrapped(alias='DBT_INTERNAL_DEST') }} in (\n {{ partitions | join (', ') }}\n )\n {%- endset %}\n\n {%- set source_sql -%}\n (\n {% if partition_by.time_ingestion_partitioning and tmp_relation_exists -%}\n select\n {{ partition_by.insertable_time_partitioning_field() }},\n * from {{ tmp_relation }}\n {% elif tmp_relation_exists -%}\n select\n * from {{ tmp_relation }}\n {%- elif partition_by.time_ingestion_partitioning -%}\n {{ wrap_with_time_ingestion_partitioning_sql(partition_by, sql, True) }}\n {%- else -%}\n {{sql}}\n {%- endif -%}\n\n )\n {%- endset -%}\n\n {% if copy_partitions %}\n {% do bq_copy_partitions(tmp_relation, target_relation, partitions, partition_by) %}\n {% else %}\n\n {#-- In case we're putting the model SQL _directly_ into the MERGE statement,\n we need to prepend the MERGE statement with the user-configured sql_header,\n which may be needed to resolve that model SQL (e.g. referencing a variable or UDF in the header)\n in the \"temporary table exists\" case, we save the model SQL result as a temp table first, wherein the\n sql_header is included by the create_table_as macro.\n #}\n -- 1. run the merge statement\n {{ get_insert_overwrite_merge_sql(target_relation, source_sql, dest_columns, [predicate], include_sql_header = not tmp_relation_exists) }};\n\n {%- if tmp_relation_exists -%}\n -- 2. clean up the temp table\n drop table if exists {{ tmp_relation }};\n {%- endif -%}\n\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.wrap_with_time_ingestion_partitioning_sql", "macro.dbt_bigquery.bq_copy_partitions", "macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.197875, "supported_languages": null}, "macro.dbt_bigquery.bq_dynamic_copy_partitions_insert_overwrite_sql": {"name": "bq_dynamic_copy_partitions_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "original_file_path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "unique_id": "macro.dbt_bigquery.bq_dynamic_copy_partitions_insert_overwrite_sql", "macro_sql": "{% macro bq_dynamic_copy_partitions_insert_overwrite_sql(\n tmp_relation, target_relation, sql, unique_key, partition_by, dest_columns, tmp_relation_exists, copy_partitions\n ) %}\n {%- if tmp_relation_exists is false -%}\n {# We run temp table creation in a separated script to move to partitions copy if it doesn't already exist #}\n {%- call statement('create_tmp_relation_for_copy', language='sql') -%}\n {{ bq_create_table_as(partition_by, True, tmp_relation, sql, 'sql')\n }}\n {%- endcall %}\n {%- endif -%}\n {%- set partitions_sql -%}\n select distinct {{ partition_by.render_wrapped() }}\n from {{ tmp_relation }}\n {%- endset -%}\n {%- set partitions = run_query(partitions_sql).columns[0].values() -%}\n {# We copy the partitions #}\n {%- do bq_copy_partitions(tmp_relation, target_relation, partitions, partition_by) -%}\n -- Clean up the temp table\n drop table if exists {{ tmp_relation }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_bigquery.bq_create_table_as", "macro.dbt.run_query", "macro.dbt_bigquery.bq_copy_partitions"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.198582, "supported_languages": null}, "macro.dbt_bigquery.bq_dynamic_insert_overwrite_sql": {"name": "bq_dynamic_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "original_file_path": "macros/materializations/incremental_strategy/insert_overwrite.sql", "unique_id": "macro.dbt_bigquery.bq_dynamic_insert_overwrite_sql", "macro_sql": "{% macro bq_dynamic_insert_overwrite_sql(tmp_relation, target_relation, sql, unique_key, partition_by, dest_columns, tmp_relation_exists, copy_partitions) %}\n {%- if copy_partitions is true %}\n {{ bq_dynamic_copy_partitions_insert_overwrite_sql(tmp_relation, target_relation, sql, unique_key, partition_by, dest_columns, tmp_relation_exists, copy_partitions) }}\n {% else -%}\n {% set predicate -%}\n {{ partition_by.render_wrapped(alias='DBT_INTERNAL_DEST') }} in unnest(dbt_partitions_for_replacement)\n {%- endset %}\n\n {%- set source_sql -%}\n (\n select\n {% if partition_by.time_ingestion_partitioning -%}\n {{ partition_by.insertable_time_partitioning_field() }},\n {%- endif -%}\n * from {{ tmp_relation }}\n )\n {%- endset -%}\n\n -- generated script to merge partitions into {{ target_relation }}\n declare dbt_partitions_for_replacement array<{{ partition_by.data_type_for_partition() }}>;\n\n {# have we already created the temp table to check for schema changes? #}\n {% if not tmp_relation_exists %}\n -- 1. create a temp table with model data\n {{ bq_create_table_as(partition_by, True, tmp_relation, sql, 'sql') }}\n {% else %}\n -- 1. temp table already exists, we used it to check for schema changes\n {% endif %}\n {%- set partition_field = partition_by.time_partitioning_field() if partition_by.time_ingestion_partitioning else partition_by.render_wrapped() -%}\n\n -- 2. define partitions to update\n set (dbt_partitions_for_replacement) = (\n select as struct\n -- IGNORE NULLS: this needs to be aligned to _dbt_max_partition, which ignores null\n array_agg(distinct {{ partition_field }} IGNORE NULLS)\n from {{ tmp_relation }}\n );\n\n -- 3. run the merge statement\n {{ get_insert_overwrite_merge_sql(target_relation, source_sql, dest_columns, [predicate]) }};\n\n -- 4. clean up the temp table\n drop table if exists {{ tmp_relation }}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bq_dynamic_copy_partitions_insert_overwrite_sql", "macro.dbt_bigquery.bq_create_table_as", "macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.199851, "supported_languages": null}, "macro.dbt_bigquery.wrap_with_time_ingestion_partitioning_sql": {"name": "wrap_with_time_ingestion_partitioning_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "original_file_path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "unique_id": "macro.dbt_bigquery.wrap_with_time_ingestion_partitioning_sql", "macro_sql": "{% macro wrap_with_time_ingestion_partitioning_sql(partition_by, sql, is_nested) %}\n\n select TIMESTAMP({{ partition_by.field }}) as {{ partition_by.insertable_time_partitioning_field() }}, * EXCEPT({{ partition_by.field }}) from (\n {{ sql }}\n ){%- if not is_nested -%};{%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.20136, "supported_languages": null}, "macro.dbt_bigquery.get_quoted_with_types_csv": {"name": "get_quoted_with_types_csv", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "original_file_path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "unique_id": "macro.dbt_bigquery.get_quoted_with_types_csv", "macro_sql": "{% macro get_quoted_with_types_csv(columns) %}\n {% set quoted = [] %}\n {% for col in columns -%}\n {%- do quoted.append(adapter.quote(col.name) ~ \" \" ~ col.data_type) -%}\n {%- endfor %}\n {%- set dest_cols_csv = quoted | join(', ') -%}\n {{ return(dest_cols_csv) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.201798, "supported_languages": null}, "macro.dbt_bigquery.columns_without_partition_fields_csv": {"name": "columns_without_partition_fields_csv", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "original_file_path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "unique_id": "macro.dbt_bigquery.columns_without_partition_fields_csv", "macro_sql": "{% macro columns_without_partition_fields_csv(partition_config, columns) -%}\n {%- set columns_no_partition = partition_config.reject_partition_field_column(columns) -%}\n {% set columns_names = get_quoted_with_types_csv(columns_no_partition) %}\n {{ return(columns_names) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_bigquery.get_quoted_with_types_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.202071, "supported_languages": null}, "macro.dbt_bigquery.bq_insert_into_ingestion_time_partitioned_table_sql": {"name": "bq_insert_into_ingestion_time_partitioned_table_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "original_file_path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "unique_id": "macro.dbt_bigquery.bq_insert_into_ingestion_time_partitioned_table_sql", "macro_sql": "{% macro bq_insert_into_ingestion_time_partitioned_table_sql(target_relation, sql) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n {%- set raw_partition_by = config.get('partition_by', none) -%}\n {%- set partition_by = adapter.parse_partition_by(raw_partition_by) -%}\n {% set dest_columns = adapter.get_columns_in_relation(target_relation) %}\n {%- set dest_columns_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n insert into {{ target_relation }} ({{ partition_by.insertable_time_partitioning_field() }}, {{ dest_columns_csv }})\n {{ wrap_with_time_ingestion_partitioning_sql(partition_by, sql, False) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt_bigquery.wrap_with_time_ingestion_partitioning_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.202754, "supported_languages": null}, "macro.dbt_bigquery.get_columns_with_types_in_query_sql": {"name": "get_columns_with_types_in_query_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "original_file_path": "macros/materializations/incremental_strategy/time_ingestion_tables.sql", "unique_id": "macro.dbt_bigquery.get_columns_with_types_in_query_sql", "macro_sql": "{% macro get_columns_with_types_in_query_sql(select_sql) %}\n {% set sql %}\n {%- set sql_header = config.get('sql_header', none) -%}\n {{ sql_header if sql_header is not none }}\n select * from (\n {{ select_sql }}\n ) as __dbt_sbq\n where false\n limit 0\n {% endset %}\n {{ return(adapter.get_columns_in_select_sql(sql)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.203116, "supported_languages": null}, "macro.dbt_bigquery.bigquery__drop_relation": {"name": "bigquery__drop_relation", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt_bigquery.bigquery__drop_relation", "macro_sql": "{% macro bigquery__drop_relation(relation) -%}\n {% do adapter.drop_relation(relation) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.203292, "supported_languages": null}, "macro.dbt_bigquery.bigquery_options": {"name": "bigquery_options", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/options.sql", "original_file_path": "macros/relations/options.sql", "unique_id": "macro.dbt_bigquery.bigquery_options", "macro_sql": "{% macro bigquery_options(opts) %}\n {% set options -%}\n OPTIONS({% for opt_key, opt_val in opts.items() %}\n {{ opt_key }}={{ opt_val }}{{ \",\" if not loop.last }}\n {% endfor %})\n {%- endset %}\n {%- do return(options) -%}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.203739, "supported_languages": null}, "macro.dbt_bigquery.cluster_by": {"name": "cluster_by", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/cluster.sql", "original_file_path": "macros/relations/cluster.sql", "unique_id": "macro.dbt_bigquery.cluster_by", "macro_sql": "{% macro cluster_by(raw_cluster_by) %}\n {%- if raw_cluster_by is not none -%}\n cluster by {% if raw_cluster_by is string -%}\n {% set raw_cluster_by = [raw_cluster_by] %}\n {%- endif -%}\n {%- for cluster in raw_cluster_by -%}\n {{ cluster }}\n {%- if not loop.last -%}, {% endif -%}\n {%- endfor -%}\n\n {% endif %}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2042181, "supported_languages": null}, "macro.dbt_bigquery.bigquery__rename_relation": {"name": "bigquery__rename_relation", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt_bigquery.bigquery__rename_relation", "macro_sql": "{% macro bigquery__rename_relation(from_relation, to_relation) -%}\n {% do adapter.rename_relation(from_relation, to_relation) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.204413, "supported_languages": null}, "macro.dbt_bigquery.partition_by": {"name": "partition_by", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/partition.sql", "original_file_path": "macros/relations/partition.sql", "unique_id": "macro.dbt_bigquery.partition_by", "macro_sql": "{% macro partition_by(partition_config) -%}\n {%- if partition_config is none -%}\n {% do return('') %}\n {%- elif partition_config.time_ingestion_partitioning -%}\n partition by {{ partition_config.render_wrapped() }}\n {%- elif partition_config.data_type | lower in ('date','timestamp','datetime') -%}\n partition by {{ partition_config.render() }}\n {%- elif partition_config.data_type | lower in ('int64') -%}\n {%- set range = partition_config.range -%}\n partition by range_bucket(\n {{ partition_config.field }},\n generate_array({{ range.start}}, {{ range.end }}, {{ range.interval }})\n )\n {%- endif -%}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2053819, "supported_languages": null}, "macro.dbt_bigquery.bigquery__drop_materialized_view": {"name": "bigquery__drop_materialized_view", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt_bigquery.bigquery__drop_materialized_view", "macro_sql": "{% macro bigquery__drop_materialized_view(relation) %}\n drop materialized view if exists {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.205555, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_replace_materialized_view_as_sql": {"name": "bigquery__get_replace_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_replace_materialized_view_as_sql", "macro_sql": "{% macro bigquery__get_replace_materialized_view_as_sql(relation, sql) %}\n\n {%- set materialized_view = adapter.Relation.materialized_view_from_model_node(config.model) -%}\n\n create or replace materialized view if not exists {{ relation }}\n {% if materialized_view.partition %}{{ partition_by(materialized_view.partition) }}{% endif %}\n {% if materialized_view.cluster %}{{ cluster_by(materialized_view.cluster.fields) }}{% endif %}\n {{ bigquery_options(materialized_view.options.as_ddl_dict()) }}\n as {{ sql }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.partition_by", "macro.dbt_bigquery.cluster_by", "macro.dbt_bigquery.bigquery_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.206202, "supported_languages": null}, "macro.dbt_bigquery.bigquery__refresh_materialized_view": {"name": "bigquery__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt_bigquery.bigquery__refresh_materialized_view", "macro_sql": "{% macro bigquery__refresh_materialized_view(relation) %}\n call bq.refresh_materialized_view('{{ relation.database }}.{{ relation.schema }}.{{ relation.identifier }}')\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.206432, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_alter_materialized_view_as_sql": {"name": "bigquery__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_alter_materialized_view_as_sql", "macro_sql": "{% macro bigquery__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 {% if configuration_changes.requires_full_refresh %}\n {{ get_replace_sql(existing_relation, relation, sql) }}\n {% else %}\n\n alter materialized view {{ relation }}\n set {{ bigquery_options(configuration_changes.options.context.as_ddl_dict()) }}\n\n {%- endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_replace_sql", "macro.dbt_bigquery.bigquery_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2070432, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_materialized_view_configuration_changes": {"name": "bigquery__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_materialized_view_configuration_changes", "macro_sql": "{% macro bigquery__get_materialized_view_configuration_changes(existing_relation, new_config) %}\n {% set _existing_materialized_view = adapter.describe_relation(existing_relation) %}\n {% set _configuration_changes = existing_relation.materialized_view_config_changeset(_existing_materialized_view, new_config) %}\n {% do return(_configuration_changes) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.207356, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_create_materialized_view_as_sql": {"name": "bigquery__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_create_materialized_view_as_sql", "macro_sql": "{% macro bigquery__get_create_materialized_view_as_sql(relation, sql) %}\n\n {%- set materialized_view = adapter.Relation.materialized_view_from_model_node(config.model) -%}\n\n create materialized view if not exists {{ relation }}\n {% if materialized_view.partition %}{{ partition_by(materialized_view.partition) }}{% endif %}\n {% if materialized_view.cluster %}{{ cluster_by(materialized_view.cluster.fields) }}{% endif %}\n {{ bigquery_options(materialized_view.options.as_ddl_dict()) }}\n as {{ sql }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.partition_by", "macro.dbt_bigquery.cluster_by", "macro.dbt_bigquery.bigquery_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.207993, "supported_languages": null}, "macro.dbt_bigquery.bigquery__drop_table": {"name": "bigquery__drop_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt_bigquery.bigquery__drop_table", "macro_sql": "{% macro bigquery__drop_table(relation) %}\n drop table if exists {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2081332, "supported_languages": null}, "macro.dbt_bigquery.bigquery_table_options": {"name": "bigquery_table_options", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/table/options.sql", "original_file_path": "macros/relations/table/options.sql", "unique_id": "macro.dbt_bigquery.bigquery_table_options", "macro_sql": "{% macro bigquery_table_options(config, node, temporary) %}\n {% set opts = adapter.get_table_options(config, node, temporary) %}\n {%- do return(bigquery_options(opts)) -%}\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.208435, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_rename_table_sql": {"name": "bigquery__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_rename_table_sql", "macro_sql": "{%- macro bigquery__get_rename_table_sql(relation, new_name) -%}\n alter table {{ relation }} rename to {{ new_name }}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.208607, "supported_languages": null}, "macro.dbt_bigquery.bigquery__drop_view": {"name": "bigquery__drop_view", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt_bigquery.bigquery__drop_view", "macro_sql": "{% macro bigquery__drop_view(relation) %}\n drop view if exists {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.208742, "supported_languages": null}, "macro.dbt_bigquery.bigquery__create_or_replace_view": {"name": "bigquery__create_or_replace_view", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt_bigquery.bigquery__create_or_replace_view", "macro_sql": "{% macro bigquery__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 not old_relation.is_view -%}\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 %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt_bigquery.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.210635, "supported_languages": null}, "macro.dbt_bigquery.handle_existing_table": {"name": "handle_existing_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt_bigquery.handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2108579, "supported_languages": null}, "macro.dbt_bigquery.default__handle_existing_table": {"name": "default__handle_existing_table", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt_bigquery.default__handle_existing_table", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.211104, "supported_languages": null}, "macro.dbt_bigquery.bigquery_view_options": {"name": "bigquery_view_options", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/view/options.sql", "original_file_path": "macros/relations/view/options.sql", "unique_id": "macro.dbt_bigquery.bigquery_view_options", "macro_sql": "{% macro bigquery_view_options(config, node) %}\n {% set opts = adapter.get_view_options(config, node) %}\n {%- do return(bigquery_options(opts)) -%}\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery_options"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.211384, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_rename_view_sql": {"name": "bigquery__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_rename_view_sql", "macro_sql": "{%- macro bigquery__get_rename_view_sql(relation, new_name) -%}\n alter view {{ relation }} rename to {{ new_name }}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2115579, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_catalog_relations": {"name": "bigquery__get_catalog_relations", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/by_relation.sql", "original_file_path": "macros/catalog/by_relation.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_catalog_relations", "macro_sql": "{% macro bigquery__get_catalog_relations(information_schema, relations) -%}\n\n {%- if (relations | length) == 0 -%}\n {# Hopefully nothing cares about the columns we return when there are no rows #}\n {%- set query = \"select 1 as id limit 0\" -%}\n\n {%- else -%}\n {%- set query -%}\n with\n table_shards_stage as ({{ _bigquery__get_table_shards_sql(information_schema) }}),\n table_shards as (\n select * from table_shards_stage\n where (\n {%- for relation in relations -%}\n (\n upper(table_schema) = upper('{{ relation.schema }}')\n and upper(table_name) = upper('{{ relation.identifier }}')\n )\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n ),\n tables as ({{ _bigquery__get_tables_sql() }}),\n table_stats as ({{ _bigquery__get_table_stats_sql() }}),\n\n columns as ({{ _bigquery__get_columns_sql(information_schema) }}),\n column_stats as ({{ _bigquery__get_column_stats_sql() }})\n\n {{ _bigquery__get_extended_catalog_sql() }}\n {%- endset -%}\n\n {%- endif -%}\n\n {{ return(run_query(query)) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery._bigquery__get_table_shards_sql", "macro.dbt_bigquery._bigquery__get_tables_sql", "macro.dbt_bigquery._bigquery__get_table_stats_sql", "macro.dbt_bigquery._bigquery__get_columns_sql", "macro.dbt_bigquery._bigquery__get_column_stats_sql", "macro.dbt_bigquery._bigquery__get_extended_catalog_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.212932, "supported_languages": null}, "macro.dbt_bigquery._bigquery__get_table_shards_sql": {"name": "_bigquery__get_table_shards_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/catalog.sql", "original_file_path": "macros/catalog/catalog.sql", "unique_id": "macro.dbt_bigquery._bigquery__get_table_shards_sql", "macro_sql": "{% macro _bigquery__get_table_shards_sql(information_schema) %}\n select\n tables.project_id as table_catalog,\n tables.dataset_id as table_schema,\n coalesce(REGEXP_EXTRACT(tables.table_id, '^(.+)[0-9]{8}$'), tables.table_id) as table_name,\n tables.table_id as shard_name,\n REGEXP_EXTRACT(tables.table_id, '^.+([0-9]{8})$') as shard_index,\n REGEXP_CONTAINS(tables.table_id, '^.+[0-9]{8}$') and tables.type = 1 as is_date_shard,\n case\n when materialized_views.table_name is not null then 'materialized view'\n when tables.type = 1 then 'table'\n when tables.type = 2 then 'view'\n else 'external'\n end as table_type,\n tables.type = 1 as is_table,\n JSON_VALUE(table_description.option_value) as table_comment,\n tables.size_bytes,\n tables.row_count\n from {{ information_schema.replace(information_schema_view='__TABLES__') }} tables\n left join {{ information_schema.replace(information_schema_view='MATERIALIZED_VIEWS') }} materialized_views\n on materialized_views.table_catalog = tables.project_id\n and materialized_views.table_schema = tables.dataset_id\n and materialized_views.table_name = tables.table_id\n left join {{ information_schema.replace(information_schema_view='TABLE_OPTIONS') }} table_description\n on table_description.table_catalog = tables.project_id\n and table_description.table_schema = tables.dataset_id\n and table_description.table_name = tables.table_id\n and table_description.option_name = 'description'\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2158139, "supported_languages": null}, "macro.dbt_bigquery._bigquery__get_tables_sql": {"name": "_bigquery__get_tables_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/catalog.sql", "original_file_path": "macros/catalog/catalog.sql", "unique_id": "macro.dbt_bigquery._bigquery__get_tables_sql", "macro_sql": "{% macro _bigquery__get_tables_sql() %}\n select distinct\n table_catalog,\n table_schema,\n table_name,\n is_date_shard,\n table_type,\n is_table,\n table_comment\n from table_shards\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.215908, "supported_languages": null}, "macro.dbt_bigquery._bigquery__get_table_stats_sql": {"name": "_bigquery__get_table_stats_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/catalog.sql", "original_file_path": "macros/catalog/catalog.sql", "unique_id": "macro.dbt_bigquery._bigquery__get_table_stats_sql", "macro_sql": "{% macro _bigquery__get_table_stats_sql() %}\n select\n table_catalog,\n table_schema,\n table_name,\n max(shard_name) as latest_shard_name,\n min(shard_index) as shard_min,\n max(shard_index) as shard_max,\n count(shard_index) as shard_count,\n sum(size_bytes) as size_bytes,\n sum(row_count) as row_count\n from table_shards\n group by 1, 2, 3\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2160041, "supported_languages": null}, "macro.dbt_bigquery._bigquery__get_columns_sql": {"name": "_bigquery__get_columns_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/catalog.sql", "original_file_path": "macros/catalog/catalog.sql", "unique_id": "macro.dbt_bigquery._bigquery__get_columns_sql", "macro_sql": "{% macro _bigquery__get_columns_sql(information_schema) %}\n select\n columns.table_catalog,\n columns.table_schema,\n columns.table_name as shard_name,\n coalesce(paths.field_path, '') as column_name,\n -- invent a row number to account for nested fields\n -- BQ does not treat these nested properties as independent fields\n row_number() over (\n partition by\n columns.table_catalog,\n columns.table_schema,\n columns.table_name\n order by\n columns.ordinal_position,\n paths.field_path\n ) as column_index,\n coalesce(paths.data_type, '') as column_type,\n paths.description as column_comment,\n case when columns.is_partitioning_column = 'YES' then 1 else 0 end as is_partitioning_column,\n case when columns.is_partitioning_column = 'YES' then paths.field_path end as partition_column,\n case when columns.clustering_ordinal_position is not null then 1 else 0 end as is_clustering_column,\n case when columns.clustering_ordinal_position is not null then paths.field_path end as cluster_column,\n columns.clustering_ordinal_position\n from {{ information_schema.replace(information_schema_view='COLUMNS') }} columns\n join {{ information_schema.replace(information_schema_view='COLUMN_FIELD_PATHS') }} paths\n on paths.table_catalog = columns.table_catalog\n and paths.table_schema = columns.table_schema\n and paths.table_name = columns.table_name\n and paths.column_name = columns.column_name\n where columns.ordinal_position is not null\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.216288, "supported_languages": null}, "macro.dbt_bigquery._bigquery__get_column_stats_sql": {"name": "_bigquery__get_column_stats_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/catalog.sql", "original_file_path": "macros/catalog/catalog.sql", "unique_id": "macro.dbt_bigquery._bigquery__get_column_stats_sql", "macro_sql": "{% macro _bigquery__get_column_stats_sql() %}\n select\n table_catalog,\n table_schema,\n shard_name,\n max(is_partitioning_column) = 1 as is_partitioned,\n max(partition_column) as partition_column,\n max(is_clustering_column) = 1 as is_clustered,\n array_to_string(\n array_agg(\n cluster_column ignore nulls\n order by clustering_ordinal_position\n ), ', '\n ) as clustering_columns\n from columns\n group by 1, 2, 3\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2164, "supported_languages": null}, "macro.dbt_bigquery._bigquery__get_extended_catalog_sql": {"name": "_bigquery__get_extended_catalog_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/catalog.sql", "original_file_path": "macros/catalog/catalog.sql", "unique_id": "macro.dbt_bigquery._bigquery__get_extended_catalog_sql", "macro_sql": "{% macro _bigquery__get_extended_catalog_sql() %}\n select\n tables.table_catalog as table_database,\n tables.table_schema,\n case\n when tables.is_date_shard then concat(tables.table_name, '*')\n else tables.table_name\n end as table_name,\n tables.table_type,\n tables.table_comment,\n -- coalesce column metadata fields to ensure they are non-null for catalog generation\n -- external table columns are not present in COLUMN_FIELD_PATHS\n coalesce(columns.column_name, '') as column_name,\n coalesce(columns.column_index, 1) as column_index,\n coalesce(columns.column_type, '') as column_type,\n coalesce(columns.column_comment, '') as column_comment,\n\n 'Shard count' as `stats__date_shards__label`,\n table_stats.shard_count as `stats__date_shards__value`,\n 'The number of date shards in this table' as `stats__date_shards__description`,\n tables.is_date_shard as `stats__date_shards__include`,\n\n 'Shard (min)' as `stats__date_shard_min__label`,\n table_stats.shard_min as `stats__date_shard_min__value`,\n 'The first date shard in this table' as `stats__date_shard_min__description`,\n tables.is_date_shard as `stats__date_shard_min__include`,\n\n 'Shard (max)' as `stats__date_shard_max__label`,\n table_stats.shard_max as `stats__date_shard_max__value`,\n 'The last date shard in this table' as `stats__date_shard_max__description`,\n tables.is_date_shard as `stats__date_shard_max__include`,\n\n '# Rows' as `stats__num_rows__label`,\n table_stats.row_count as `stats__num_rows__value`,\n 'Approximate count of rows in this table' as `stats__num_rows__description`,\n tables.is_table as `stats__num_rows__include`,\n\n 'Approximate Size' as `stats__num_bytes__label`,\n table_stats.size_bytes as `stats__num_bytes__value`,\n 'Approximate size of table as reported by BigQuery' as `stats__num_bytes__description`,\n tables.is_table as `stats__num_bytes__include`,\n\n 'Partitioned By' as `stats__partitioning_type__label`,\n column_stats.partition_column as `stats__partitioning_type__value`,\n 'The partitioning column for this table' as `stats__partitioning_type__description`,\n column_stats.is_partitioned as `stats__partitioning_type__include`,\n\n 'Clustered By' as `stats__clustering_fields__label`,\n column_stats.clustering_columns as `stats__clustering_fields__value`,\n 'The clustering columns for this table' as `stats__clustering_fields__description`,\n column_stats.is_clustered as `stats__clustering_fields__include`\n\n from tables\n join table_stats\n on table_stats.table_catalog = tables.table_catalog\n and table_stats.table_schema = tables.table_schema\n and table_stats.table_name = tables.table_name\n left join column_stats\n on column_stats.table_catalog = tables.table_catalog\n and column_stats.table_schema = tables.table_schema\n and column_stats.shard_name = table_stats.latest_shard_name\n left join columns\n on columns.table_catalog = tables.table_catalog\n and columns.table_schema = tables.table_schema\n and columns.shard_name = table_stats.latest_shard_name\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2166688, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_catalog": {"name": "bigquery__get_catalog", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/catalog/by_schema.sql", "original_file_path": "macros/catalog/by_schema.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_catalog", "macro_sql": "{% macro bigquery__get_catalog(information_schema, schemas) -%}\n\n {%- if (schemas | length) == 0 -%}\n {# Hopefully nothing cares about the columns we return when there are no rows #}\n {%- set query = \"select 1 as id limit 0\" -%}\n\n {%- else -%}\n {%- set query -%}\n with\n table_shards as (\n {{ _bigquery__get_table_shards_sql(information_schema) }}\n where (\n {%- for schema in schemas -%}\n upper(tables.dataset_id) = upper('{{ schema }}')\n {%- if not loop.last %} or {% endif -%}\n {%- endfor -%}\n )\n ),\n tables as ({{ _bigquery__get_tables_sql() }}),\n table_stats as ({{ _bigquery__get_table_stats_sql() }}),\n\n columns as ({{ _bigquery__get_columns_sql(information_schema) }}),\n column_stats as ({{ _bigquery__get_column_stats_sql() }})\n\n {{ _bigquery__get_extended_catalog_sql() }}\n {%- endset -%}\n\n {%- endif -%}\n\n {{ return(run_query(query)) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery._bigquery__get_table_shards_sql", "macro.dbt_bigquery._bigquery__get_tables_sql", "macro.dbt_bigquery._bigquery__get_table_stats_sql", "macro.dbt_bigquery._bigquery__get_columns_sql", "macro.dbt_bigquery._bigquery__get_column_stats_sql", "macro.dbt_bigquery._bigquery__get_extended_catalog_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.217844, "supported_languages": null}, "macro.dbt_bigquery.bigquery__except": {"name": "bigquery__except", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt_bigquery.bigquery__except", "macro_sql": "{% macro bigquery__except() %}\n\n except distinct\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.217956, "supported_languages": null}, "macro.dbt_bigquery.bigquery__dateadd": {"name": "bigquery__dateadd", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt_bigquery.bigquery__dateadd", "macro_sql": "{% macro bigquery__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n datetime_add(\n cast( {{ from_date_or_timestamp }} as datetime),\n interval {{ interval }} {{ datepart }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.218194, "supported_languages": null}, "macro.dbt_bigquery.bigquery__current_timestamp": {"name": "bigquery__current_timestamp", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/timestamps.sql", "original_file_path": "macros/utils/timestamps.sql", "unique_id": "macro.dbt_bigquery.bigquery__current_timestamp", "macro_sql": "{% macro bigquery__current_timestamp() -%}\n current_timestamp()\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2183769, "supported_languages": null}, "macro.dbt_bigquery.bigquery__snapshot_string_as_time": {"name": "bigquery__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/timestamps.sql", "original_file_path": "macros/utils/timestamps.sql", "unique_id": "macro.dbt_bigquery.bigquery__snapshot_string_as_time", "macro_sql": "{% macro bigquery__snapshot_string_as_time(timestamp) -%}\n {%- set result = 'TIMESTAMP(\"' ~ timestamp ~ '\")' -%}\n {{ return(result) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.218567, "supported_languages": null}, "macro.dbt_bigquery.bigquery__current_timestamp_backcompat": {"name": "bigquery__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/timestamps.sql", "original_file_path": "macros/utils/timestamps.sql", "unique_id": "macro.dbt_bigquery.bigquery__current_timestamp_backcompat", "macro_sql": "{% macro bigquery__current_timestamp_backcompat() -%}\n current_timestamp\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2186491, "supported_languages": null}, "macro.dbt_bigquery.bigquery__intersect": {"name": "bigquery__intersect", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt_bigquery.bigquery__intersect", "macro_sql": "{% macro bigquery__intersect() %}\n\n intersect distinct\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.218755, "supported_languages": null}, "macro.dbt_bigquery.bigquery__escape_single_quotes": {"name": "bigquery__escape_single_quotes", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt_bigquery.bigquery__escape_single_quotes", "macro_sql": "{% macro bigquery__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\", \"\\\\'\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.218945, "supported_languages": null}, "macro.dbt_bigquery.bigquery__format_column": {"name": "bigquery__format_column", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/get_columns_spec_ddl.sql", "original_file_path": "macros/utils/get_columns_spec_ddl.sql", "unique_id": "macro.dbt_bigquery.bigquery__format_column", "macro_sql": "{% macro bigquery__format_column(column) -%}\n {% set data_type = column.data_type %}\n {% set formatted = column.column.lower() ~ \" \" ~ data_type %}\n {{ return({'name': column.name, 'data_type': data_type, 'formatted': formatted}) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.219976, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_empty_schema_sql": {"name": "bigquery__get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/get_columns_spec_ddl.sql", "original_file_path": "macros/utils/get_columns_spec_ddl.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_empty_schema_sql", "macro_sql": "{% macro bigquery__get_empty_schema_sql(columns) %}\n {%- set col_err = [] -%}\n {% for col in columns.values() %}\n {%- if col['data_type'] is not defined -%}\n {{ col_err.append(col['name']) }}\n {%- endif -%}\n {%- endfor -%}\n {%- if (col_err | length) > 0 -%}\n {{ exceptions.column_type_missing(column_names=col_err) }}\n {%- endif -%}\n\n {%- set columns = adapter.nest_column_data_types(columns) -%}\n {{ return(dbt.default__get_empty_schema_sql(columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_schema_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.220583, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_select_subquery": {"name": "bigquery__get_select_subquery", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/get_columns_spec_ddl.sql", "original_file_path": "macros/utils/get_columns_spec_ddl.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_select_subquery", "macro_sql": "{% macro bigquery__get_select_subquery(sql) %}\n select {{ adapter.dispatch('get_column_names')() }}\n from (\n {{ sql }}\n ) as model_subq\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.220757, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_column_names": {"name": "bigquery__get_column_names", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/get_columns_spec_ddl.sql", "original_file_path": "macros/utils/get_columns_spec_ddl.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_column_names", "macro_sql": "{% macro bigquery__get_column_names() %}\n {#- loop through nested user_provided_columns to get column names -#}\n {%- set user_provided_columns = adapter.nest_column_data_types(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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.221249, "supported_languages": null}, "macro.dbt_bigquery.bigquery__right": {"name": "bigquery__right", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt_bigquery.bigquery__right", "macro_sql": "{% macro bigquery__right(string_text, length_expression) %}\n\n case when {{ length_expression }} = 0\n then ''\n else\n substr(\n {{ string_text }},\n -1 * ({{ length_expression }})\n )\n end\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.221494, "supported_languages": null}, "macro.dbt_bigquery.bigquery__listagg": {"name": "bigquery__listagg", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt_bigquery.bigquery__listagg", "macro_sql": "{% macro bigquery__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n {% if limit_num -%}\n limit {{ limit_num }}\n {%- endif %}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.221892, "supported_languages": null}, "macro.dbt_bigquery.bigquery__datediff": {"name": "bigquery__datediff", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt_bigquery.bigquery__datediff", "macro_sql": "{% macro bigquery__datediff(first_date, second_date, datepart) -%}\n\n {% if dbt_version[0] == 1 and dbt_version[2] >= 2 %}\n {{ return(dbt.datediff(first_date, second_date, datepart)) }}\n {% else %}\n\n datetime_diff(\n cast({{second_date}} as datetime),\n cast({{first_date}} as datetime),\n {{datepart}}\n )\n\n {% endif %}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2223969, "supported_languages": null}, "macro.dbt_bigquery.bigquery__safe_cast": {"name": "bigquery__safe_cast", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt_bigquery.bigquery__safe_cast", "macro_sql": "{% macro bigquery__safe_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2225668, "supported_languages": null}, "macro.dbt_bigquery.bigquery__hash": {"name": "bigquery__hash", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt_bigquery.bigquery__hash", "macro_sql": "{% macro bigquery__hash(field) -%}\n to_hex({{dbt.default__hash(field)}})\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.222733, "supported_languages": null}, "macro.dbt_bigquery.bigquery__position": {"name": "bigquery__position", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt_bigquery.bigquery__position", "macro_sql": "{% macro bigquery__position(substring_text, string_text) %}\n\n strpos(\n {{ string_text }},\n {{ substring_text }}\n\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.222913, "supported_languages": null}, "macro.dbt_bigquery.bigquery__array_concat": {"name": "bigquery__array_concat", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt_bigquery.bigquery__array_concat", "macro_sql": "{% macro bigquery__array_concat(array_1, array_2) -%}\n array_concat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2230809, "supported_languages": null}, "macro.dbt_bigquery.bigquery__bool_or": {"name": "bigquery__bool_or", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt_bigquery.bigquery__bool_or", "macro_sql": "{% macro bigquery__bool_or(expression) -%}\n\n logical_or({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.223216, "supported_languages": null}, "macro.dbt_bigquery.bigquery__split_part": {"name": "bigquery__split_part", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt_bigquery.bigquery__split_part", "macro_sql": "{% macro bigquery__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n split(\n {{ string_text }},\n {{ delimiter_text }}\n )[safe_offset({{ part_number - 1 }})]\n {% else %}\n split(\n {{ string_text }},\n {{ delimiter_text }}\n )[safe_offset(\n length({{ string_text }})\n - length(\n replace({{ string_text }}, {{ delimiter_text }}, '')\n ) + 1 + {{ part_number }}\n )]\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2238479, "supported_languages": null}, "macro.dbt_bigquery.bigquery__date_trunc": {"name": "bigquery__date_trunc", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt_bigquery.bigquery__date_trunc", "macro_sql": "{% macro bigquery__date_trunc(datepart, date) -%}\n timestamp_trunc(\n cast({{date}} as timestamp),\n {{datepart}}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.224027, "supported_languages": null}, "macro.dbt_bigquery.bigquery__array_construct": {"name": "bigquery__array_construct", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt_bigquery.bigquery__array_construct", "macro_sql": "{% macro bigquery__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n [ {{ inputs|join(' , ') }} ]\n {% else %}\n ARRAY<{{data_type}}>[]\n {% endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2243378, "supported_languages": null}, "macro.dbt_bigquery.bigquery__array_append": {"name": "bigquery__array_append", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt_bigquery.bigquery__array_append", "macro_sql": "{% macro bigquery__array_append(array, new_element) -%}\n {{ array_concat(array, array_construct([new_element])) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.array_concat", "macro.dbt.array_construct"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.224548, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_show_grant_sql": {"name": "bigquery__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_show_grant_sql", "macro_sql": "{% macro bigquery__get_show_grant_sql(relation) %}\n {% set location = adapter.get_dataset_location(relation) %}\n {% set relation = relation.incorporate(location=location) %}\n\n select privilege_type, grantee\n from {{ relation.information_schema(\"OBJECT_PRIVILEGES\") }}\n where object_schema = \"{{ relation.dataset }}\"\n and object_name = \"{{ relation.identifier }}\"\n -- filter out current user\n and split(grantee, ':')[offset(1)] != session_user()\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.225201, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_grant_sql": {"name": "bigquery__get_grant_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_grant_sql", "macro_sql": "\n\n\n{%- macro bigquery__get_grant_sql(relation, privilege, grantee) -%}\n grant `{{ privilege }}` on {{ relation.type }} {{ relation }} to {{ '\\\"' + grantee|join('\\\", \\\"') + '\\\"' }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.225454, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_revoke_sql": {"name": "bigquery__get_revoke_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_revoke_sql", "macro_sql": "{%- macro bigquery__get_revoke_sql(relation, privilege, grantee) -%}\n revoke `{{ privilege }}` on {{ relation.type }} {{ relation }} from {{ '\\\"' + grantee|join('\\\", \\\"') + '\\\"' }}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2257018, "supported_languages": null}, "macro.dbt_bigquery.bigquery__get_empty_subquery_sql": {"name": "bigquery__get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt_bigquery.bigquery__get_empty_subquery_sql", "macro_sql": "{% macro bigquery__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 and current_timestamp() = current_timestamp()\n limit 0\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.225997, "supported_languages": null}, "macro.dbt_bigquery.bigquery__resolve_model_name": {"name": "bigquery__resolve_model_name", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt_bigquery.bigquery__resolve_model_name", "macro_sql": "{% macro bigquery__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('`', '') | replace('\"', '\\\"') }}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.226248, "supported_languages": null}, "macro.dbt.run_hooks": {"name": "run_hooks", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.run_hooks", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.227415, "supported_languages": null}, "macro.dbt.make_hook_config": {"name": "make_hook_config", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.227616, "supported_languages": null}, "macro.dbt.before_begin": {"name": "before_begin", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.227764, "supported_languages": null}, "macro.dbt.in_transaction": {"name": "in_transaction", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2279072, "supported_languages": null}, "macro.dbt.after_commit": {"name": "after_commit", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.22805, "supported_languages": null}, "macro.dbt.set_sql_header": {"name": "set_sql_header", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2284238, "supported_languages": null}, "macro.dbt.should_full_refresh": {"name": "should_full_refresh", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_full_refresh", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.228727, "supported_languages": null}, "macro.dbt.should_store_failures": {"name": "should_store_failures", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_store_failures", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.229035, "supported_languages": null}, "macro.dbt.snapshot_merge_sql": {"name": "snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2294788, "supported_languages": null}, "macro.dbt.default__snapshot_merge_sql": {"name": "default__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.default__snapshot_merge_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.229752, "supported_languages": null}, "macro.dbt.strategy_dispatch": {"name": "strategy_dispatch", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.strategy_dispatch", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.233296, "supported_languages": null}, "macro.dbt.snapshot_hash_arguments": {"name": "snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.233469, "supported_languages": null}, "macro.dbt.default__snapshot_hash_arguments": {"name": "default__snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_hash_arguments", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.233691, "supported_languages": null}, "macro.dbt.snapshot_timestamp_strategy": {"name": "snapshot_timestamp_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_timestamp_strategy", "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 %}", "depends_on": {"macros": ["macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2344189, "supported_languages": null}, "macro.dbt.snapshot_string_as_time": {"name": "snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.234585, "supported_languages": null}, "macro.dbt.default__snapshot_string_as_time": {"name": "default__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_string_as_time", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.234755, "supported_languages": null}, "macro.dbt.snapshot_check_all_get_existing_columns": {"name": "snapshot_check_all_get_existing_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "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 %}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2362502, "supported_languages": null}, "macro.dbt.snapshot_check_strategy": {"name": "snapshot_check_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_strategy", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.237569, "supported_languages": null}, "macro.dbt.create_columns": {"name": "create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.241724, "supported_languages": null}, "macro.dbt.default__create_columns": {"name": "default__create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation }} add column \"{{ column.name }}\" {{ column.data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2420108, "supported_languages": null}, "macro.dbt.post_snapshot": {"name": "post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.242183, "supported_languages": null}, "macro.dbt.default__post_snapshot": {"name": "default__post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.242275, "supported_languages": null}, "macro.dbt.get_true_sql": {"name": "get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_true_sql", "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_true_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2424252, "supported_languages": null}, "macro.dbt.default__get_true_sql": {"name": "default__get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__get_true_sql", "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.242541, "supported_languages": null}, "macro.dbt.snapshot_staging_table": {"name": "snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.snapshot_staging_table", "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 %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2427452, "supported_languages": null}, "macro.dbt.default__snapshot_staging_table": {"name": "default__snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__snapshot_staging_table", "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 %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.243644, "supported_languages": null}, "macro.dbt.build_snapshot_table": {"name": "build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.243836, "supported_languages": null}, "macro.dbt.default__build_snapshot_table": {"name": "default__build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n\n select *,\n {{ strategy.scd_id }} as dbt_scd_id,\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 from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.244101, "supported_languages": null}, "macro.dbt.build_snapshot_staging_table": {"name": "build_snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set temp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, temp_relation, select) }}\n {% endcall %}\n\n {% do return(temp_relation) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.244531, "supported_languages": null}, "macro.dbt.materialization_snapshot_default": {"name": "materialization_snapshot_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "unique_id": "macro.dbt.materialization_snapshot_default", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.250697, "supported_languages": ["sql"]}, "macro.dbt.materialization_test_default": {"name": "materialization_test_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "unique_id": "macro.dbt.materialization_test_default", "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 -%}", "depends_on": {"macros": ["macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.get_create_sql", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.253451, "supported_languages": ["sql"]}, "macro.dbt.get_test_sql": {"name": "get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_test_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.253921, "supported_languages": null}, "macro.dbt.default__get_test_sql": {"name": "default__get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_test_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2542331, "supported_languages": null}, "macro.dbt.get_where_subquery": {"name": "get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.254608, "supported_languages": null}, "macro.dbt.default__get_where_subquery": {"name": "default__get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.default__get_where_subquery", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.254991, "supported_languages": null}, "macro.dbt.materialization_materialized_view_default": {"name": "materialization_materialized_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialization_materialized_view_default", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2599308, "supported_languages": ["sql"]}, "macro.dbt.materialized_view_setup": {"name": "materialized_view_setup", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_setup", "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 %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2603252, "supported_languages": null}, "macro.dbt.materialized_view_teardown": {"name": "materialized_view_teardown", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_teardown", "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 %}", "depends_on": {"macros": ["macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.260576, "supported_languages": null}, "macro.dbt.materialized_view_get_build_sql": {"name": "materialized_view_get_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_get_build_sql", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2618828, "supported_languages": null}, "macro.dbt.materialized_view_execute_no_op": {"name": "materialized_view_execute_no_op", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_no_op", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2621162, "supported_languages": null}, "macro.dbt.materialized_view_execute_build_sql": {"name": "materialized_view_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_build_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.262779, "supported_languages": null}, "macro.dbt.materialization_view_default": {"name": "materialization_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view.sql", "original_file_path": "macros/materializations/models/view.sql", "unique_id": "macro.dbt.materialization_view_default", "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 -%}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.265728, "supported_languages": ["sql"]}, "macro.dbt.materialization_table_default": {"name": "materialization_table_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table.sql", "original_file_path": "macros/materializations/models/table.sql", "unique_id": "macro.dbt.materialization_table_default", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2686222, "supported_languages": ["sql"]}, "macro.dbt.get_quoted_csv": {"name": "get_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_quoted_csv", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2702641, "supported_languages": null}, "macro.dbt.diff_columns": {"name": "diff_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_columns", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2708411, "supported_languages": null}, "macro.dbt.diff_column_data_types": {"name": "diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_column_data_types", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.27155, "supported_languages": null}, "macro.dbt.get_merge_update_columns": {"name": "get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_merge_update_columns", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2717981, "supported_languages": null}, "macro.dbt.default__get_merge_update_columns": {"name": "default__get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__get_merge_update_columns", "macro_sql": "{% macro default__get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {%- set default_cols = dest_columns | map(attribute=\"quoted\") | list -%}\n\n {%- if merge_update_columns and merge_exclude_columns -%}\n {{ exceptions.raise_compiler_error(\n 'Model cannot specify merge_update_columns and merge_exclude_columns. Please update model to use only one config'\n )}}\n {%- elif merge_update_columns -%}\n {%- set update_columns = merge_update_columns -%}\n {%- elif merge_exclude_columns -%}\n {%- set update_columns = [] -%}\n {%- for column in dest_columns -%}\n {% if column.column | lower not in merge_exclude_columns | map(\"lower\") | list %}\n {%- do update_columns.append(column.quoted) -%}\n {% endif %}\n {%- endfor -%}\n {%- else -%}\n {%- set update_columns = default_cols -%}\n {%- endif -%}\n\n {{ return(update_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.272525, "supported_languages": null}, "macro.dbt.get_merge_sql": {"name": "get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.279168, "supported_languages": null}, "macro.dbt.default__get_merge_sql": {"name": "default__get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2808, "supported_languages": null}, "macro.dbt.get_delete_insert_merge_sql": {"name": "get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_delete_insert_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.281064, "supported_languages": null}, "macro.dbt.default__get_delete_insert_merge_sql": {"name": "default__get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.282088, "supported_languages": null}, "macro.dbt.get_insert_overwrite_merge_sql": {"name": "get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.282361, "supported_languages": null}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"name": "default__get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {#-- The only time include_sql_header is True: --#}\n {#-- BigQuery + insert_overwrite strategy + \"static\" partitions config --#}\n {#-- We should consider including the sql header at the materialization level instead --#}\n\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.283019, "supported_languages": null}, "macro.dbt.is_incremental": {"name": "is_incremental", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "unique_id": "macro.dbt.is_incremental", "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 %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.28372, "supported_languages": null}, "macro.dbt.get_incremental_append_sql": {"name": "get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_append_sql", "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2847302, "supported_languages": null}, "macro.dbt.default__get_incremental_append_sql": {"name": "default__get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_append_sql", "macro_sql": "{% macro default__get_incremental_append_sql(arg_dict) %}\n\n {% do return(get_insert_into_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_into_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.284985, "supported_languages": null}, "macro.dbt.get_incremental_delete_insert_sql": {"name": "get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_delete_insert_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_delete_insert_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.285184, "supported_languages": null}, "macro.dbt.default__get_incremental_delete_insert_sql": {"name": "default__get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_delete_insert_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.285501, "supported_languages": null}, "macro.dbt.get_incremental_merge_sql": {"name": "get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_merge_sql", "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.285783, "supported_languages": null}, "macro.dbt.default__get_incremental_merge_sql": {"name": "default__get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2860959, "supported_languages": null}, "macro.dbt.get_incremental_insert_overwrite_sql": {"name": "get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.286289, "supported_languages": null}, "macro.dbt.default__get_incremental_insert_overwrite_sql": {"name": "default__get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_insert_overwrite_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.286572, "supported_languages": null}, "macro.dbt.get_incremental_default_sql": {"name": "get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_default_sql", "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_default_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.286771, "supported_languages": null}, "macro.dbt.default__get_incremental_default_sql": {"name": "default__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_default_sql", "macro_sql": "{% macro default__get_incremental_default_sql(arg_dict) %}\n\n {% do return(get_incremental_append_sql(arg_dict)) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.286936, "supported_languages": null}, "macro.dbt.get_insert_into_sql": {"name": "get_insert_into_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_insert_into_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.287244, "supported_languages": null}, "macro.dbt.materialization_incremental_default": {"name": "materialization_incremental_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "unique_id": "macro.dbt.materialization_incremental_default", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.292473, "supported_languages": ["sql"]}, "macro.dbt.incremental_validate_on_schema_change": {"name": "incremental_validate_on_schema_change", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.incremental_validate_on_schema_change", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.298202, "supported_languages": null}, "macro.dbt.check_for_schema_changes": {"name": "check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n\n {% set schema_changed = False %}\n\n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n\n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n\n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.2994869, "supported_languages": null}, "macro.dbt.sync_column_schemas": {"name": "sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.sync_column_schemas", "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 %}", "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3007581, "supported_languages": null}, "macro.dbt.process_schema_changes": {"name": "process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.process_schema_changes", "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 %}", "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.301642, "supported_languages": null}, "macro.dbt.can_clone_table": {"name": "can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.can_clone_table", "macro_sql": "{% macro can_clone_table() %}\n {{ return(adapter.dispatch('can_clone_table', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__can_clone_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3018932, "supported_languages": null}, "macro.dbt.default__can_clone_table": {"name": "default__can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.default__can_clone_table", "macro_sql": "{% macro default__can_clone_table() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3020191, "supported_languages": null}, "macro.dbt.create_or_replace_clone": {"name": "create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.create_or_replace_clone", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__create_or_replace_clone"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3023229, "supported_languages": null}, "macro.dbt.default__create_or_replace_clone": {"name": "default__create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.default__create_or_replace_clone", "macro_sql": "{% macro default__create_or_replace_clone(this_relation, defer_relation) %}\n create or replace table {{ this_relation }} clone {{ defer_relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.30246, "supported_languages": null}, "macro.dbt.materialization_clone_default": {"name": "materialization_clone_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/clone.sql", "original_file_path": "macros/materializations/models/clone/clone.sql", "unique_id": "macro.dbt.materialization_clone_default", "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 -%}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.306175, "supported_languages": ["sql"]}, "macro.dbt.materialization_seed_default": {"name": "materialization_seed_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "unique_id": "macro.dbt.materialization_seed_default", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.309474, "supported_languages": ["sql"]}, "macro.dbt.create_csv_table": {"name": "create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.314852, "supported_languages": null}, "macro.dbt.default__create_csv_table": {"name": "default__create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.315823, "supported_languages": null}, "macro.dbt.reset_csv_table": {"name": "reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.reset_csv_table", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.316074, "supported_languages": null}, "macro.dbt.default__reset_csv_table": {"name": "default__reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__reset_csv_table", "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 %}", "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.316579, "supported_languages": null}, "macro.dbt.get_csv_sql": {"name": "get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_csv_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_csv_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3167841, "supported_languages": null}, "macro.dbt.default__get_csv_sql": {"name": "default__get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_csv_sql", "macro_sql": "{% macro default__get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ create_or_truncate_sql }};\n -- dbt seed --\n {{ insert_sql }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3169239, "supported_languages": null}, "macro.dbt.get_binding_char": {"name": "get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.317075, "supported_languages": null}, "macro.dbt.default__get_binding_char": {"name": "default__get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.317195, "supported_languages": null}, "macro.dbt.get_batch_size": {"name": "get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.317363, "supported_languages": null}, "macro.dbt.default__get_batch_size": {"name": "default__get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.317482, "supported_languages": null}, "macro.dbt.get_seed_column_quoted_csv": {"name": "get_seed_column_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_seed_column_quoted_csv", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3179672, "supported_languages": null}, "macro.dbt.load_csv_rows": {"name": "load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.318151, "supported_languages": null}, "macro.dbt.default__load_csv_rows": {"name": "default__load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__load_csv_rows", "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 %}", "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.319465, "supported_languages": null}, "macro.dbt.generate_alias_name": {"name": "generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.generate_alias_name", "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 %}", "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.319914, "supported_languages": null}, "macro.dbt.default__generate_alias_name": {"name": "default__generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.default__generate_alias_name", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.320299, "supported_languages": null}, "macro.dbt.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name", "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 %}", "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3208268, "supported_languages": null}, "macro.dbt.default__generate_schema_name": {"name": "default__generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.321101, "supported_languages": null}, "macro.dbt.generate_schema_name_for_env": {"name": "generate_schema_name_for_env", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name_for_env", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.321392, "supported_languages": null}, "macro.dbt.generate_database_name": {"name": "generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.generate_database_name", "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 %}", "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.32179, "supported_languages": null}, "macro.dbt.default__generate_database_name": {"name": "default__generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.32205, "supported_languages": null}, "macro.dbt.get_drop_sql": {"name": "get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.get_drop_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.322776, "supported_languages": null}, "macro.dbt.default__get_drop_sql": {"name": "default__get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__get_drop_sql", "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", "depends_on": {"macros": ["macro.dbt.drop_view", "macro.dbt.drop_table", "macro.dbt.drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.323157, "supported_languages": null}, "macro.dbt.drop_relation": {"name": "drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.323346, "supported_languages": null}, "macro.dbt.default__drop_relation": {"name": "default__drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n {{ get_drop_sql(relation) }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.323553, "supported_languages": null}, "macro.dbt.drop_relation_if_exists": {"name": "drop_relation_if_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.323761, "supported_languages": null}, "macro.dbt.get_replace_sql": {"name": "get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.get_replace_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.324567, "supported_languages": null}, "macro.dbt.default__get_replace_sql": {"name": "default__get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.default__get_replace_sql", "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 %}", "depends_on": {"macros": ["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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.325891, "supported_languages": null}, "macro.dbt.get_create_intermediate_sql": {"name": "get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.get_create_intermediate_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_create_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.326277, "supported_languages": null}, "macro.dbt.default__get_create_intermediate_sql": {"name": "default__get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.default__get_create_intermediate_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.326529, "supported_languages": null}, "macro.dbt.get_drop_backup_sql": {"name": "get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.get_drop_backup_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_drop_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3268569, "supported_languages": null}, "macro.dbt.default__get_drop_backup_sql": {"name": "default__get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.default__get_drop_backup_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.327069, "supported_languages": null}, "macro.dbt.get_rename_sql": {"name": "get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.get_rename_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.327796, "supported_languages": null}, "macro.dbt.default__get_rename_sql": {"name": "default__get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__get_rename_sql", "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", "depends_on": {"macros": ["macro.dbt.get_rename_view_sql", "macro.dbt.get_rename_table_sql", "macro.dbt.get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.328243, "supported_languages": null}, "macro.dbt.rename_relation": {"name": "rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.328459, "supported_languages": null}, "macro.dbt.default__rename_relation": {"name": "default__rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__rename_relation", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3287559, "supported_languages": null}, "macro.dbt.get_create_backup_sql": {"name": "get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.get_create_backup_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_create_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3291361, "supported_languages": null}, "macro.dbt.default__get_create_backup_sql": {"name": "default__get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.default__get_create_backup_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.329441, "supported_languages": null}, "macro.dbt.get_create_sql": {"name": "get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.get_create_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3301, "supported_languages": null}, "macro.dbt.default__get_create_sql": {"name": "default__get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.default__get_create_sql", "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 -%}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.330574, "supported_languages": null}, "macro.dbt.get_rename_intermediate_sql": {"name": "get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.get_rename_intermediate_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_rename_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.330922, "supported_languages": null}, "macro.dbt.default__get_rename_intermediate_sql": {"name": "default__get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.default__get_rename_intermediate_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.331139, "supported_languages": null}, "macro.dbt.drop_materialized_view": {"name": "drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.drop_materialized_view", "macro_sql": "{% macro drop_materialized_view(relation) -%}\n {{ return(adapter.dispatch('drop_materialized_view', 'dbt')(relation)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.33142, "supported_languages": null}, "macro.dbt.default__drop_materialized_view": {"name": "default__drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.default__drop_materialized_view", "macro_sql": "{% macro default__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.331535, "supported_languages": null}, "macro.dbt.get_replace_materialized_view_sql": {"name": "get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.get_replace_materialized_view_sql", "macro_sql": "{% macro get_replace_materialized_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_materialized_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.331816, "supported_languages": null}, "macro.dbt.default__get_replace_materialized_view_sql": {"name": "default__get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.default__get_replace_materialized_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3319721, "supported_languages": null}, "macro.dbt.refresh_materialized_view": {"name": "refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.refresh_materialized_view", "macro_sql": "{% macro refresh_materialized_view(relation) %}\n {{- log('Applying REFRESH to: ' ~ relation) -}}\n {{- adapter.dispatch('refresh_materialized_view', 'dbt')(relation) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__refresh_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.332292, "supported_languages": null}, "macro.dbt.default__refresh_materialized_view": {"name": "default__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.default__refresh_materialized_view", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.332513, "supported_languages": null}, "macro.dbt.get_rename_materialized_view_sql": {"name": "get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.get_rename_materialized_view_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.332791, "supported_languages": null}, "macro.dbt.default__get_rename_materialized_view_sql": {"name": "default__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.default__get_rename_materialized_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.332942, "supported_languages": null}, "macro.dbt.get_alter_materialized_view_as_sql": {"name": "get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_alter_materialized_view_as_sql", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3335638, "supported_languages": null}, "macro.dbt.default__get_alter_materialized_view_as_sql": {"name": "default__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_alter_materialized_view_as_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3337579, "supported_languages": null}, "macro.dbt.get_materialized_view_configuration_changes": {"name": "get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_materialized_view_configuration_changes", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_materialized_view_configuration_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.334049, "supported_languages": null}, "macro.dbt.default__get_materialized_view_configuration_changes": {"name": "default__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_materialized_view_configuration_changes", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.334194, "supported_languages": null}, "macro.dbt.get_create_materialized_view_as_sql": {"name": "get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.get_create_materialized_view_as_sql", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3344698, "supported_languages": null}, "macro.dbt.default__get_create_materialized_view_as_sql": {"name": "default__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.default__get_create_materialized_view_as_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3346171, "supported_languages": null}, "macro.dbt.get_table_columns_and_constraints": {"name": "get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_table_columns_and_constraints", "macro_sql": "{%- macro get_table_columns_and_constraints() -%}\n {{ adapter.dispatch('get_table_columns_and_constraints', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3356318, "supported_languages": null}, "macro.dbt.default__get_table_columns_and_constraints": {"name": "default__get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_table_columns_and_constraints", "macro_sql": "{% macro default__get_table_columns_and_constraints() -%}\n {{ return(table_columns_and_constraints()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.335758, "supported_languages": null}, "macro.dbt.table_columns_and_constraints": {"name": "table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.table_columns_and_constraints", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3363042, "supported_languages": null}, "macro.dbt.get_assert_columns_equivalent": {"name": "get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_assert_columns_equivalent", "macro_sql": "\n\n{%- macro get_assert_columns_equivalent(sql) -%}\n {{ adapter.dispatch('get_assert_columns_equivalent', 'dbt')(sql) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.336475, "supported_languages": null}, "macro.dbt.default__get_assert_columns_equivalent": {"name": "default__get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_assert_columns_equivalent", "macro_sql": "{% macro default__get_assert_columns_equivalent(sql) -%}\n {{ return(assert_columns_equivalent(sql)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.336611, "supported_languages": null}, "macro.dbt.assert_columns_equivalent": {"name": "assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.assert_columns_equivalent", "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 %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query", "macro.dbt.get_empty_schema_sql", "macro.dbt.format_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.338014, "supported_languages": null}, "macro.dbt.format_columns": {"name": "format_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.format_columns", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__format_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3384042, "supported_languages": null}, "macro.dbt.default__format_column": {"name": "default__format_column", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__format_column", "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 -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3387551, "supported_languages": null}, "macro.dbt.drop_table": {"name": "drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.drop_table", "macro_sql": "{% macro drop_table(relation) -%}\n {{ return(adapter.dispatch('drop_table', 'dbt')(relation)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__drop_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.339027, "supported_languages": null}, "macro.dbt.default__drop_table": {"name": "default__drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.default__drop_table", "macro_sql": "{% macro default__drop_table(relation) -%}\n drop table if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.339134, "supported_languages": null}, "macro.dbt.get_replace_table_sql": {"name": "get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.get_replace_table_sql", "macro_sql": "{% macro get_replace_table_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_table_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3394072, "supported_languages": null}, "macro.dbt.default__get_replace_table_sql": {"name": "default__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.default__get_replace_table_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.33967, "supported_languages": null}, "macro.dbt.get_rename_table_sql": {"name": "get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.get_rename_table_sql", "macro_sql": "{% macro get_rename_table_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_table_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_rename_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3400571, "supported_languages": null}, "macro.dbt.default__get_rename_table_sql": {"name": "default__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.default__get_rename_table_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3402328, "supported_languages": null}, "macro.dbt.get_create_table_as_sql": {"name": "get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_create_table_as_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.341161, "supported_languages": null}, "macro.dbt.default__get_create_table_as_sql": {"name": "default__get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.341376, "supported_languages": null}, "macro.dbt.create_table_as": {"name": "create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.create_table_as", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.341873, "supported_languages": null}, "macro.dbt.default__create_table_as": {"name": "default__create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__create_table_as", "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 %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.342656, "supported_languages": null}, "macro.dbt.default__get_column_names": {"name": "default__get_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_column_names", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.343159, "supported_languages": null}, "macro.dbt.get_select_subquery": {"name": "get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_select_subquery", "macro_sql": "{% macro get_select_subquery(sql) %}\n {{ return(adapter.dispatch('get_select_subquery', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.343364, "supported_languages": null}, "macro.dbt.default__get_select_subquery": {"name": "default__get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_select_subquery", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3435829, "supported_languages": null}, "macro.dbt.drop_view": {"name": "drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.drop_view", "macro_sql": "{% macro drop_view(relation) -%}\n {{ return(adapter.dispatch('drop_view', 'dbt')(relation)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__drop_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.343885, "supported_languages": null}, "macro.dbt.default__drop_view": {"name": "default__drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.default__drop_view", "macro_sql": "{% macro default__drop_view(relation) -%}\n drop view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3440058, "supported_languages": null}, "macro.dbt.get_replace_view_sql": {"name": "get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.get_replace_view_sql", "macro_sql": "{% macro get_replace_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.344918, "supported_languages": null}, "macro.dbt.default__get_replace_view_sql": {"name": "default__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__get_replace_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.345078, "supported_languages": null}, "macro.dbt.create_or_replace_view": {"name": "create_or_replace_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.create_or_replace_view", "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 %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3465989, "supported_languages": null}, "macro.dbt.handle_existing_table": {"name": "handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.346818, "supported_languages": null}, "macro.dbt.default__handle_existing_table": {"name": "default__handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__handle_existing_table", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3470569, "supported_languages": null}, "macro.dbt.get_rename_view_sql": {"name": "get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.get_rename_view_sql", "macro_sql": "{% macro get_rename_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_rename_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.347451, "supported_languages": null}, "macro.dbt.default__get_rename_view_sql": {"name": "default__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.default__get_rename_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.347637, "supported_languages": null}, "macro.dbt.get_create_view_as_sql": {"name": "get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.348076, "supported_languages": null}, "macro.dbt.default__get_create_view_as_sql": {"name": "default__get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.348247, "supported_languages": null}, "macro.dbt.create_view_as": {"name": "create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.348434, "supported_languages": null}, "macro.dbt.default__create_view_as": {"name": "default__create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__create_view_as", "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 %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.348874, "supported_languages": null}, "macro.dbt.default__test_relationships": {"name": "default__test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "unique_id": "macro.dbt.default__test_relationships", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.349246, "supported_languages": null}, "macro.dbt.default__test_not_null": {"name": "default__test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "unique_id": "macro.dbt.default__test_not_null", "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 %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.349617, "supported_languages": null}, "macro.dbt.default__test_unique": {"name": "default__test_unique", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "unique_id": "macro.dbt.default__test_unique", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.349993, "supported_languages": null}, "macro.dbt.default__test_accepted_values": {"name": "default__test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "unique_id": "macro.dbt.default__test_accepted_values", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.350614, "supported_languages": null}, "macro.dbt.statement": {"name": "statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.statement", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.35215, "supported_languages": null}, "macro.dbt.noop_statement": {"name": "noop_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.noop_statement", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.35275, "supported_languages": null}, "macro.dbt.run_query": {"name": "run_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.run_query", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.353056, "supported_languages": null}, "macro.dbt.convert_datetime": {"name": "convert_datetime", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.354995, "supported_languages": null}, "macro.dbt.dates_in_range": {"name": "dates_in_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.dates_in_range", "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 %}", "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.356332, "supported_languages": null}, "macro.dbt.partition_range": {"name": "partition_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.partition_range", "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 %}", "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3571289, "supported_languages": null}, "macro.dbt.py_current_timestring": {"name": "py_current_timestring", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.py_current_timestring", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.357377, "supported_languages": null}, "macro.dbt.except": {"name": "except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.35762, "supported_languages": null}, "macro.dbt.default__except": {"name": "default__except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.357704, "supported_languages": null}, "macro.dbt.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.get_intervals_between", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3584929, "supported_languages": null}, "macro.dbt.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__get_intervals_between", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.35912, "supported_languages": null}, "macro.dbt.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.359371, "supported_languages": null}, "macro.dbt.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__date_spine", "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 %}", "depends_on": {"macros": ["macro.dbt.generate_series", "macro.dbt.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3598552, "supported_languages": null}, "macro.dbt.replace": {"name": "replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.360252, "supported_languages": null}, "macro.dbt.default__replace": {"name": "default__replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.default__replace", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.360427, "supported_languages": null}, "macro.dbt.concat": {"name": "concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt')(fields)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3606799, "supported_languages": null}, "macro.dbt.default__concat": {"name": "default__concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.360812, "supported_languages": null}, "macro.dbt.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.361658, "supported_languages": null}, "macro.dbt.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__get_powers_of_two", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.36211, "supported_languages": null}, "macro.dbt.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.362311, "supported_languages": null}, "macro.dbt.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__generate_series", "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 %}", "depends_on": {"macros": ["macro.dbt.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.362863, "supported_languages": null}, "macro.dbt.length": {"name": "length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__length"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.363141, "supported_languages": null}, "macro.dbt.default__length": {"name": "default__length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.default__length", "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.363251, "supported_languages": null}, "macro.dbt.dateadd": {"name": "dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.363596, "supported_languages": null}, "macro.dbt.default__dateadd": {"name": "default__dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.363769, "supported_languages": null}, "macro.dbt.intersect": {"name": "intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__intersect"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.364, "supported_languages": null}, "macro.dbt.default__intersect": {"name": "default__intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.364167, "supported_languages": null}, "macro.dbt.escape_single_quotes": {"name": "escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.escape_single_quotes", "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__escape_single_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3644311, "supported_languages": null}, "macro.dbt.default__escape_single_quotes": {"name": "default__escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.default__escape_single_quotes", "macro_sql": "{% macro default__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\",\"''\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.364579, "supported_languages": null}, "macro.dbt.right": {"name": "right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__right"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.364874, "supported_languages": null}, "macro.dbt.default__right": {"name": "default__right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.365013, "supported_languages": null}, "macro.dbt.listagg": {"name": "listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.listagg", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__listagg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.365661, "supported_languages": null}, "macro.dbt.default__listagg": {"name": "default__listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.default__listagg", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.366079, "supported_languages": null}, "macro.dbt.datediff": {"name": "datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt')(first_date, second_date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.366417, "supported_languages": null}, "macro.dbt.default__datediff": {"name": "default__datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) -%}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.366581, "supported_languages": null}, "macro.dbt.safe_cast": {"name": "safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.366873, "supported_languages": null}, "macro.dbt.default__safe_cast": {"name": "default__safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.default__safe_cast", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.367018, "supported_languages": null}, "macro.dbt.hash": {"name": "hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__hash"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.367276, "supported_languages": null}, "macro.dbt.default__hash": {"name": "default__hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.367441, "supported_languages": null}, "macro.dbt.cast_bool_to_text": {"name": "cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt') (field) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.367691, "supported_languages": null}, "macro.dbt.default__cast_bool_to_text": {"name": "default__cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ api.Column.translate_type('string') }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.367858, "supported_languages": null}, "macro.dbt.any_value": {"name": "any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.any_value", "macro_sql": "{% macro any_value(expression) -%}\n {{ return(adapter.dispatch('any_value', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__any_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.368116, "supported_languages": null}, "macro.dbt.default__any_value": {"name": "default__any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.default__any_value", "macro_sql": "{% macro default__any_value(expression) -%}\n\n any_value({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.368225, "supported_languages": null}, "macro.dbt.position": {"name": "position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__position"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.368511, "supported_languages": null}, "macro.dbt.default__position": {"name": "default__position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.368646, "supported_languages": null}, "macro.dbt.string_literal": {"name": "string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3688908, "supported_languages": null}, "macro.dbt.default__string_literal": {"name": "default__string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.369056, "supported_languages": null}, "macro.dbt.type_string": {"name": "type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.370006, "supported_languages": null}, "macro.dbt.default__type_string": {"name": "default__type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_string", "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.370165, "supported_languages": null}, "macro.dbt.type_timestamp": {"name": "type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.37033, "supported_languages": null}, "macro.dbt.default__type_timestamp": {"name": "default__type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.370482, "supported_languages": null}, "macro.dbt.type_float": {"name": "type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.370645, "supported_languages": null}, "macro.dbt.default__type_float": {"name": "default__type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_float", "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.370795, "supported_languages": null}, "macro.dbt.type_numeric": {"name": "type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3709598, "supported_languages": null}, "macro.dbt.default__type_numeric": {"name": "default__type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.371146, "supported_languages": null}, "macro.dbt.type_bigint": {"name": "type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3713112, "supported_languages": null}, "macro.dbt.default__type_bigint": {"name": "default__type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3714628, "supported_languages": null}, "macro.dbt.type_int": {"name": "type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.371626, "supported_languages": null}, "macro.dbt.default__type_int": {"name": "default__type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_int", "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3717701, "supported_languages": null}, "macro.dbt.type_boolean": {"name": "type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_boolean", "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3719301, "supported_languages": null}, "macro.dbt.default__type_boolean": {"name": "default__type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_boolean", "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.372077, "supported_languages": null}, "macro.dbt.array_concat": {"name": "array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.array_concat", "macro_sql": "{% macro array_concat(array_1, array_2) -%}\n {{ return(adapter.dispatch('array_concat', 'dbt')(array_1, array_2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__array_concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.372413, "supported_languages": null}, "macro.dbt.default__array_concat": {"name": "default__array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.default__array_concat", "macro_sql": "{% macro default__array_concat(array_1, array_2) -%}\n array_cat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.372555, "supported_languages": null}, "macro.dbt.bool_or": {"name": "bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.bool_or", "macro_sql": "{% macro bool_or(expression) -%}\n {{ return(adapter.dispatch('bool_or', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__bool_or"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3728042, "supported_languages": null}, "macro.dbt.default__bool_or": {"name": "default__bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.default__bool_or", "macro_sql": "{% macro default__bool_or(expression) -%}\n\n bool_or({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.37291, "supported_languages": null}, "macro.dbt.last_day": {"name": "last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3732538, "supported_languages": null}, "macro.dbt.default_last_day": {"name": "default_last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default_last_day", "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", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.373586, "supported_languages": null}, "macro.dbt.default__last_day": {"name": "default__last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.373739, "supported_languages": null}, "macro.dbt.split_part": {"name": "split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.split_part", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3742762, "supported_languages": null}, "macro.dbt.default__split_part": {"name": "default__split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.default__split_part", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.374439, "supported_languages": null}, "macro.dbt._split_part_negative": {"name": "_split_part_negative", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt._split_part_negative", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3746629, "supported_languages": null}, "macro.dbt.date_trunc": {"name": "date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt') (datepart, date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.374936, "supported_languages": null}, "macro.dbt.default__date_trunc": {"name": "default__date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) -%}\n date_trunc('{{datepart}}', {{date}})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3750641, "supported_languages": null}, "macro.dbt.array_construct": {"name": "array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.array_construct", "macro_sql": "{% macro array_construct(inputs=[], data_type=api.Column.translate_type('integer')) -%}\n {{ return(adapter.dispatch('array_construct', 'dbt')(inputs, data_type)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__array_construct"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3754392, "supported_languages": null}, "macro.dbt.default__array_construct": {"name": "default__array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.default__array_construct", "macro_sql": "{% macro default__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n array[ {{ inputs|join(' , ') }} ]\n {% else %}\n array[]::{{data_type}}[]\n {% endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3756852, "supported_languages": null}, "macro.dbt.array_append": {"name": "array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.array_append", "macro_sql": "{% macro array_append(array, new_element) -%}\n {{ return(adapter.dispatch('array_append', 'dbt')(array, new_element)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__array_append"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.375972, "supported_languages": null}, "macro.dbt.default__array_append": {"name": "default__array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.default__array_append", "macro_sql": "{% macro default__array_append(array, new_element) -%}\n array_append({{ array }}, {{ new_element }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.376107, "supported_languages": null}, "macro.dbt.create_schema": {"name": "create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.376479, "supported_languages": null}, "macro.dbt.default__create_schema": {"name": "default__create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.37667, "supported_languages": null}, "macro.dbt.drop_schema": {"name": "drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.376833, "supported_languages": null}, "macro.dbt.default__drop_schema": {"name": "default__drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3770208, "supported_languages": null}, "macro.dbt.current_timestamp": {"name": "current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp", "macro_sql": "{%- macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.377506, "supported_languages": null}, "macro.dbt.default__current_timestamp": {"name": "default__current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter ' + adapter.type()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3776672, "supported_languages": null}, "macro.dbt.snapshot_get_time": {"name": "snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.snapshot_get_time", "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.377816, "supported_languages": null}, "macro.dbt.default__snapshot_get_time": {"name": "default__snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.377929, "supported_languages": null}, "macro.dbt.current_timestamp_backcompat": {"name": "current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_backcompat", "macro_sql": "{% macro current_timestamp_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.378104, "supported_languages": null}, "macro.dbt.default__current_timestamp_backcompat": {"name": "default__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_backcompat", "macro_sql": "{% macro default__current_timestamp_backcompat() %}\n current_timestamp::timestamp\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.378182, "supported_languages": null}, "macro.dbt.current_timestamp_in_utc_backcompat": {"name": "current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_in_utc_backcompat", "macro_sql": "{% macro current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_in_utc_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__current_timestamp_in_utc_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.37841, "supported_languages": null}, "macro.dbt.default__current_timestamp_in_utc_backcompat": {"name": "default__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro default__current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp_backcompat", "macro.dbt_bigquery.bigquery__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.378578, "supported_languages": null}, "macro.dbt.get_create_index_sql": {"name": "get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.37944, "supported_languages": null}, "macro.dbt.default__get_create_index_sql": {"name": "default__get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.379609, "supported_languages": null}, "macro.dbt.create_indexes": {"name": "create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.379782, "supported_languages": null}, "macro.dbt.default__create_indexes": {"name": "default__create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.380204, "supported_languages": null}, "macro.dbt.get_drop_index_sql": {"name": "get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_drop_index_sql", "macro_sql": "{% macro get_drop_index_sql(relation, index_name) -%}\n {{ adapter.dispatch('get_drop_index_sql', 'dbt')(relation, index_name) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_drop_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3803961, "supported_languages": null}, "macro.dbt.default__get_drop_index_sql": {"name": "default__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_drop_index_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.380537, "supported_languages": null}, "macro.dbt.get_show_indexes_sql": {"name": "get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_show_indexes_sql", "macro_sql": "{% macro get_show_indexes_sql(relation) -%}\n {{ adapter.dispatch('get_show_indexes_sql', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3806999, "supported_languages": null}, "macro.dbt.default__get_show_indexes_sql": {"name": "default__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_show_indexes_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.380828, "supported_languages": null}, "macro.dbt.make_intermediate_relation": {"name": "make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_intermediate_relation", "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_intermediate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3828359, "supported_languages": null}, "macro.dbt.default__make_intermediate_relation": {"name": "default__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_intermediate_relation", "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.383007, "supported_languages": null}, "macro.dbt.make_temp_relation": {"name": "make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3832278, "supported_languages": null}, "macro.dbt.default__make_temp_relation": {"name": "default__make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_temp_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3835242, "supported_languages": null}, "macro.dbt.make_backup_relation": {"name": "make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_backup_relation", "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 %}", "depends_on": {"macros": ["macro.dbt.default__make_backup_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.383776, "supported_languages": null}, "macro.dbt.default__make_backup_relation": {"name": "default__make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_backup_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.384119, "supported_languages": null}, "macro.dbt.truncate_relation": {"name": "truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.384303, "supported_languages": null}, "macro.dbt.default__truncate_relation": {"name": "default__truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.384469, "supported_languages": null}, "macro.dbt.get_or_create_relation": {"name": "get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.get_or_create_relation", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.384717, "supported_languages": null}, "macro.dbt.default__get_or_create_relation": {"name": "default__get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3853471, "supported_languages": null}, "macro.dbt.load_cached_relation": {"name": "load_cached_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_cached_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.385581, "supported_languages": null}, "macro.dbt.load_relation": {"name": "load_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.385726, "supported_languages": null}, "macro.dbt.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.386154, "supported_languages": null}, "macro.dbt.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.386566, "supported_languages": null}, "macro.dbt.validate_sql": {"name": "validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.validate_sql", "macro_sql": "{% macro validate_sql(sql) -%}\n {{ return(adapter.dispatch('validate_sql', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__validate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.38685, "supported_languages": null}, "macro.dbt.default__validate_sql": {"name": "default__validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.default__validate_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.387077, "supported_languages": null}, "macro.dbt.copy_grants": {"name": "copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.copy_grants", "macro_sql": "{% macro copy_grants() %}\n {{ return(adapter.dispatch('copy_grants', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3888, "supported_languages": null}, "macro.dbt.default__copy_grants": {"name": "default__copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__copy_grants", "macro_sql": "{% macro default__copy_grants() %}\n {{ return(True) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.388928, "supported_languages": null}, "macro.dbt.support_multiple_grantees_per_dcl_statement": {"name": "support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement", "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3891, "supported_languages": null}, "macro.dbt.default__support_multiple_grantees_per_dcl_statement": {"name": "default__support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement", "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.389212, "supported_languages": null}, "macro.dbt.should_revoke": {"name": "should_revoke", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.should_revoke", "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 %}", "depends_on": {"macros": ["macro.dbt.copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.389557, "supported_languages": null}, "macro.dbt.get_show_grant_sql": {"name": "get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_show_grant_sql", "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_show_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.389754, "supported_languages": null}, "macro.dbt.default__get_show_grant_sql": {"name": "default__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_show_grant_sql", "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3898602, "supported_languages": null}, "macro.dbt.get_grant_sql": {"name": "get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_grant_sql", "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.390086, "supported_languages": null}, "macro.dbt.default__get_grant_sql": {"name": "default__get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_grant_sql", "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", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.39028, "supported_languages": null}, "macro.dbt.get_revoke_sql": {"name": "get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_revoke_sql", "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_revoke_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.390516, "supported_languages": null}, "macro.dbt.default__get_revoke_sql": {"name": "default__get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_revoke_sql", "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", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.390708, "supported_languages": null}, "macro.dbt.get_dcl_statement_list": {"name": "get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_dcl_statement_list", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_dcl_statement_list"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.39094, "supported_languages": null}, "macro.dbt.default__get_dcl_statement_list": {"name": "default__get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_dcl_statement_list", "macro_sql": "\n\n{%- macro default__get_dcl_statement_list(relation, grant_config, get_dcl_macro) -%}\n {#\n -- Unpack grant_config into specific privileges and the set of users who need them granted/revoked.\n -- Depending on whether this database supports multiple grantees per statement, pass in the list of\n -- all grantees per privilege, or (if not) template one statement per privilege-grantee pair.\n -- `get_dcl_macro` will be either `get_grant_sql` or `get_revoke_sql`\n #}\n {%- set dcl_statements = [] -%}\n {%- for privilege, grantees in grant_config.items() %}\n {%- if support_multiple_grantees_per_dcl_statement() and grantees -%}\n {%- set dcl = get_dcl_macro(relation, privilege, grantees) -%}\n {%- do dcl_statements.append(dcl) -%}\n {%- else -%}\n {%- for grantee in grantees -%}\n {% set dcl = get_dcl_macro(relation, privilege, [grantee]) %}\n {%- do dcl_statements.append(dcl) -%}\n {% endfor -%}\n {%- endif -%}\n {%- endfor -%}\n {{ return(dcl_statements) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3917, "supported_languages": null}, "macro.dbt.call_dcl_statements": {"name": "call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.call_dcl_statements", "macro_sql": "{% macro call_dcl_statements(dcl_statement_list) %}\n {{ return(adapter.dispatch(\"call_dcl_statements\", \"dbt\")(dcl_statement_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3918898, "supported_languages": null}, "macro.dbt.default__call_dcl_statements": {"name": "default__call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__call_dcl_statements", "macro_sql": "{% macro default__call_dcl_statements(dcl_statement_list) %}\n {#\n -- By default, supply all grant + revoke statements in a single semicolon-separated block,\n -- so that they're all processed together.\n\n -- Some databases do not support this. Those adapters will need to override this macro\n -- to run each statement individually.\n #}\n {% call statement('grants') %}\n {% for dcl_statement in dcl_statement_list %}\n {{ dcl_statement }};\n {% endfor %}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.392139, "supported_languages": null}, "macro.dbt.apply_grants": {"name": "apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.apply_grants", "macro_sql": "{% macro apply_grants(relation, grant_config, should_revoke) %}\n {{ return(adapter.dispatch(\"apply_grants\", \"dbt\")(relation, grant_config, should_revoke)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.392372, "supported_languages": null}, "macro.dbt.default__apply_grants": {"name": "default__apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__apply_grants", "macro_sql": "{% macro default__apply_grants(relation, grant_config, should_revoke=True) %}\n {#-- If grant_config is {} or None, this is a no-op --#}\n {% if grant_config %}\n {% if should_revoke %}\n {#-- We think previous grants may have carried over --#}\n {#-- Show current grants and calculate diffs --#}\n {% set current_grants_table = run_query(get_show_grant_sql(relation)) %}\n {% set current_grants_dict = adapter.standardize_grants_dict(current_grants_table) %}\n {% set needs_granting = diff_of_two_dicts(grant_config, current_grants_dict) %}\n {% set needs_revoking = diff_of_two_dicts(current_grants_dict, grant_config) %}\n {% if not (needs_granting or needs_revoking) %}\n {{ log('On ' ~ relation ~': All grants are in place, no revocation or granting needed.')}}\n {% endif %}\n {% else %}\n {#-- We don't think there's any chance of previous grants having carried over. --#}\n {#-- Jump straight to granting what the user has configured. --#}\n {% set needs_revoking = {} %}\n {% set needs_granting = grant_config %}\n {% endif %}\n {% if needs_granting or needs_revoking %}\n {% set revoke_statement_list = get_dcl_statement_list(relation, needs_revoking, get_revoke_sql) %}\n {% set grant_statement_list = get_dcl_statement_list(relation, needs_granting, get_grant_sql) %}\n {% set dcl_statement_list = revoke_statement_list + grant_statement_list %}\n {% if dcl_statement_list %}\n {{ call_dcl_statements(dcl_statement_list) }}\n {% endif %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_grant_sql", "macro.dbt.get_dcl_statement_list", "macro.dbt.call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3935308, "supported_languages": null}, "macro.dbt.get_show_sql": {"name": "get_show_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_show_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.394073, "supported_languages": null}, "macro.dbt.get_limit_subquery_sql": {"name": "get_limit_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_limit_subquery_sql", "macro_sql": "{% macro get_limit_subquery_sql(sql, limit) %}\n {{ adapter.dispatch('get_limit_subquery_sql', 'dbt')(sql, limit) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_limit_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.394274, "supported_languages": null}, "macro.dbt.default__get_limit_subquery_sql": {"name": "default__get_limit_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.default__get_limit_subquery_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.394413, "supported_languages": null}, "macro.dbt.alter_column_comment": {"name": "alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3950841, "supported_languages": null}, "macro.dbt.default__alter_column_comment": {"name": "default__alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.395253, "supported_languages": null}, "macro.dbt.alter_relation_comment": {"name": "alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.3954601, "supported_languages": null}, "macro.dbt.default__alter_relation_comment": {"name": "default__alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.395637, "supported_languages": null}, "macro.dbt.persist_docs": {"name": "persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.persist_docs", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.395927, "supported_languages": null}, "macro.dbt.default__persist_docs": {"name": "default__persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__persist_docs", "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 %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.396419, "supported_languages": null}, "macro.dbt.get_catalog_relations": {"name": "get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_relations", "macro_sql": "{% macro get_catalog_relations(information_schema, relations) -%}\n {{ return(adapter.dispatch('get_catalog_relations', 'dbt')(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.399306, "supported_languages": null}, "macro.dbt.default__get_catalog_relations": {"name": "default__get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_relations", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.399576, "supported_languages": null}, "macro.dbt.get_catalog": {"name": "get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.399782, "supported_languages": null}, "macro.dbt.default__get_catalog": {"name": "default__get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.400042, "supported_languages": null}, "macro.dbt.information_schema_name": {"name": "information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4002292, "supported_languages": null}, "macro.dbt.default__information_schema_name": {"name": "default__information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.40039, "supported_languages": null}, "macro.dbt.list_schemas": {"name": "list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.400568, "supported_languages": null}, "macro.dbt.default__list_schemas": {"name": "default__list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_schemas", "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 %}", "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.40089, "supported_languages": null}, "macro.dbt.check_schema_exists": {"name": "check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4010959, "supported_languages": null}, "macro.dbt.default__check_schema_exists": {"name": "default__check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.401407, "supported_languages": null}, "macro.dbt.list_relations_without_caching": {"name": "list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4015949, "supported_languages": null}, "macro.dbt.default__list_relations_without_caching": {"name": "default__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_relations_without_caching", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.401758, "supported_languages": null}, "macro.dbt.get_relations": {"name": "get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relations", "macro_sql": "{% macro get_relations() %}\n {{ return(adapter.dispatch('get_relations', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.401929, "supported_languages": null}, "macro.dbt.default__get_relations": {"name": "default__get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relations", "macro_sql": "{% macro default__get_relations() %}\n {{ exceptions.raise_not_implemented(\n 'get_relations macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4020832, "supported_languages": null}, "macro.dbt.get_relation_last_modified": {"name": "get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relation_last_modified", "macro_sql": "{% macro get_relation_last_modified(information_schema, relations) %}\n {{ return(adapter.dispatch('get_relation_last_modified', 'dbt')(information_schema, relations)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_relation_last_modified"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.402293, "supported_languages": null}, "macro.dbt.default__get_relation_last_modified": {"name": "default__get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relation_last_modified", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4024699, "supported_languages": null}, "macro.dbt.get_columns_in_relation": {"name": "get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.404799, "supported_languages": null}, "macro.dbt.default__get_columns_in_relation": {"name": "default__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4049711, "supported_languages": null}, "macro.dbt.sql_convert_columns_in_relation": {"name": "sql_convert_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.sql_convert_columns_in_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4052951, "supported_languages": null}, "macro.dbt.get_empty_subquery_sql": {"name": "get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_subquery_sql", "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 %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.405523, "supported_languages": null}, "macro.dbt.default__get_empty_subquery_sql": {"name": "default__get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_subquery_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4057379, "supported_languages": null}, "macro.dbt.get_empty_schema_sql": {"name": "get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_schema_sql", "macro_sql": "{% macro get_empty_schema_sql(columns) -%}\n {{ return(adapter.dispatch('get_empty_schema_sql', 'dbt')(columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__get_empty_schema_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.405926, "supported_languages": null}, "macro.dbt.default__get_empty_schema_sql": {"name": "default__get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_schema_sql", "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 as {{ 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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4071739, "supported_languages": null}, "macro.dbt.get_column_schema_from_query": {"name": "get_column_schema_from_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_column_schema_from_query", "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 %}", "depends_on": {"macros": ["macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.407537, "supported_languages": null}, "macro.dbt.get_columns_in_query": {"name": "get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.407725, "supported_languages": null}, "macro.dbt.default__get_columns_in_query": {"name": "default__get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_query", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4080782, "supported_languages": null}, "macro.dbt.alter_column_type": {"name": "alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4083068, "supported_languages": null}, "macro.dbt.default__alter_column_type": {"name": "default__alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4089139, "supported_languages": null}, "macro.dbt.alter_relation_add_remove_columns": {"name": "alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.40918, "supported_languages": null}, "macro.dbt.default__alter_relation_add_remove_columns": {"name": "default__alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n\n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation }}\n\n {% for column in add_columns %}\n add column {{ column.name }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n\n {% for column in remove_columns %}\n drop column {{ column.name }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4099789, "supported_languages": null}, "macro.dbt.resolve_model_name": {"name": "resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.resolve_model_name", "macro_sql": "{% macro resolve_model_name(input_model_name) %}\n {{ return(adapter.dispatch('resolve_model_name', 'dbt')(input_model_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.411668, "supported_languages": null}, "macro.dbt.default__resolve_model_name": {"name": "default__resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.default__resolve_model_name", "macro_sql": "\n\n{%- macro default__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('\"', '\\\"') }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.41183, "supported_languages": null}, "macro.dbt.build_ref_function": {"name": "build_ref_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_ref_function", "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 %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.412704, "supported_languages": null}, "macro.dbt.build_source_function": {"name": "build_source_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_source_function", "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 %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.41312, "supported_languages": null}, "macro.dbt.build_config_dict": {"name": "build_config_dict", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_config_dict", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.413776, "supported_languages": null}, "macro.dbt.py_script_postfix": {"name": "py_script_postfix", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_postfix", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.41428, "supported_languages": null}, "macro.dbt.py_script_comment": {"name": "py_script_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_comment", "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.414363, "supported_languages": null}, "macro.dbt.test_unique": {"name": "test_unique", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_bigquery.bigquery__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.414888, "supported_languages": null}, "macro.dbt.test_not_null": {"name": "test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4151292, "supported_languages": null}, "macro.dbt.test_accepted_values": {"name": "test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_accepted_values", "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 %}", "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4154198, "supported_languages": null}, "macro.dbt.test_relationships": {"name": "test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_relationships", "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 %}", "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4157062, "supported_languages": null}, "macro.dbt_utils.get_url_host": {"name": "get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.get_url_host", "macro_sql": "{% macro get_url_host(field) -%}\n {{ return(adapter.dispatch('get_url_host', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_host"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4160619, "supported_languages": null}, "macro.dbt_utils.default__get_url_host": {"name": "default__get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.default__get_url_host", "macro_sql": "{% macro default__get_url_host(field) -%}\n\n{%- set parsed =\n dbt.split_part(\n dbt.split_part(\n dbt.replace(\n dbt.replace(\n dbt.replace(field, \"'android-app://'\", \"''\"\n ), \"'http://'\", \"''\"\n ), \"'https://'\", \"''\"\n ), \"'/'\", 1\n ), \"'?'\", 1\n )\n\n-%}\n\n\n {{ dbt.safe_cast(\n parsed,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part", "macro.dbt.replace", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.416557, "supported_languages": null}, "macro.dbt_utils.get_url_path": {"name": "get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.get_url_path", "macro_sql": "{% macro get_url_path(field) -%}\n {{ return(adapter.dispatch('get_url_path', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_path"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.417042, "supported_languages": null}, "macro.dbt_utils.default__get_url_path": {"name": "default__get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.default__get_url_path", "macro_sql": "{% macro default__get_url_path(field) -%}\n\n {%- set stripped_url =\n dbt.replace(\n dbt.replace(field, \"'http://'\", \"''\"), \"'https://'\", \"''\")\n -%}\n\n {%- set first_slash_pos -%}\n coalesce(\n nullif({{ dbt.position(\"'/'\", stripped_url) }}, 0),\n {{ dbt.position(\"'?'\", stripped_url) }} - 1\n )\n {%- endset -%}\n\n {%- set parsed_path =\n dbt.split_part(\n dbt.right(\n stripped_url,\n dbt.length(stripped_url) ~ \"-\" ~ first_slash_pos\n ),\n \"'?'\", 1\n )\n -%}\n\n {{ dbt.safe_cast(\n parsed_path,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.position", "macro.dbt.split_part", "macro.dbt.right", "macro.dbt.length", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.417792, "supported_languages": null}, "macro.dbt_utils.get_url_parameter": {"name": "get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.get_url_parameter", "macro_sql": "{% macro get_url_parameter(field, url_parameter) -%}\n {{ return(adapter.dispatch('get_url_parameter', 'dbt_utils')(field, url_parameter)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.418111, "supported_languages": null}, "macro.dbt_utils.default__get_url_parameter": {"name": "default__get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.default__get_url_parameter", "macro_sql": "{% macro default__get_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"='\" -%}\n\n{%- set split = dbt.split_part(dbt.split_part(field, formatted_url_parameter, 2), \"'&'\", 1) -%}\n\nnullif({{ split }},'')\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.418435, "supported_languages": null}, "macro.dbt_utils.test_fewer_rows_than": {"name": "test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.test_fewer_rows_than", "macro_sql": "{% test fewer_rows_than(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_fewer_rows_than', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_fewer_rows_than"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.419528, "supported_languages": null}, "macro.dbt_utils.default__test_fewer_rows_than": {"name": "default__test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.default__test_fewer_rows_than", "macro_sql": "{% macro default__test_fewer_rows_than(model, compare_model, group_by_columns) %}\n\n{{ config(fail_calc = 'sum(coalesce(row_count_delta, 0))') }}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in equal_rowcount. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_fewer_rows_than'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_our_model \n from {{ model }}\n {{ groupby_gb_cols }}\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_comparison_model \n from {{ compare_model }}\n {{ groupby_gb_cols }}\n\n),\ncounts as (\n\n select\n\n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_our_model,\n count_comparison_model\n from a\n full join b on \n a.id_dbtutils_test_fewer_rows_than = b.id_dbtutils_test_fewer_rows_than\n {{ join_gb_cols }}\n\n),\nfinal as (\n\n select *,\n case\n -- fail the test if we have more rows than the reference model and return the row count delta\n when count_our_model > count_comparison_model then (count_our_model - count_comparison_model)\n -- fail the test if they are the same number\n when count_our_model = count_comparison_model then 1\n -- pass the test if the delta is positive (i.e. return the number 0)\n else 0\n end as row_count_delta\n from counts\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.420563, "supported_languages": null}, "macro.dbt_utils.test_equal_rowcount": {"name": "test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.test_equal_rowcount", "macro_sql": "{% test equal_rowcount(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_equal_rowcount', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equal_rowcount"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.421441, "supported_languages": null}, "macro.dbt_utils.default__test_equal_rowcount": {"name": "default__test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.default__test_equal_rowcount", "macro_sql": "{% macro default__test_equal_rowcount(model, compare_model, group_by_columns) %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = 'sum(coalesce(diff_count, 0))') }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(', ') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in fewer_rows_than. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_equal_rowcount'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_a \n from {{ model }}\n {{groupby_gb_cols}}\n\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_b \n from {{ compare_model }}\n {{groupby_gb_cols}}\n\n),\nfinal as (\n\n select\n \n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_a,\n count_b,\n abs(count_a - count_b) as diff_count\n\n from a\n full join b\n on\n a.id_dbtutils_test_equal_rowcount = b.id_dbtutils_test_equal_rowcount\n {{join_gb_cols}}\n\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.422524, "supported_languages": null}, "macro.dbt_utils.test_relationships_where": {"name": "test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.test_relationships_where", "macro_sql": "{% test relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n {{ return(adapter.dispatch('test_relationships_where', 'dbt_utils')(model, column_name, to, field, from_condition, to_condition)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_relationships_where"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.423203, "supported_languages": null}, "macro.dbt_utils.default__test_relationships_where": {"name": "default__test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.default__test_relationships_where", "macro_sql": "{% macro default__test_relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n\nwith left_table as (\n\n select\n {{column_name}} as id\n\n from {{model}}\n\n where {{column_name}} is not null\n and {{from_condition}}\n\n),\n\nright_table as (\n\n select\n {{field}} as id\n\n from {{to}}\n\n where {{field}} is not null\n and {{to_condition}}\n\n),\n\nexceptions as (\n\n select\n left_table.id,\n right_table.id as right_id\n\n from left_table\n\n left join right_table\n on left_table.id = right_table.id\n\n where right_table.id is null\n\n)\n\nselect * from exceptions\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.423556, "supported_languages": null}, "macro.dbt_utils.test_recency": {"name": "test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.test_recency", "macro_sql": "{% test recency(model, field, datepart, interval, ignore_time_component=False, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_recency', 'dbt_utils')(model, field, datepart, interval, ignore_time_component, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_recency"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4242911, "supported_languages": null}, "macro.dbt_utils.default__test_recency": {"name": "default__test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.default__test_recency", "macro_sql": "{% macro default__test_recency(model, field, datepart, interval, ignore_time_component, group_by_columns) %}\n\n{% set threshold = 'cast(' ~ dbt.dateadd(datepart, interval * -1, dbt.current_timestamp()) ~ ' as ' ~ ('date' if ignore_time_component else dbt.type_timestamp()) ~ ')' %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nwith recency as (\n\n select \n\n {{ select_gb_cols }}\n {% if ignore_time_component %}\n cast(max({{ field }}) as date) as most_recent\n {%- else %}\n max({{ field }}) as most_recent\n {%- endif %}\n\n from {{ model }}\n\n {{ groupby_gb_cols }}\n\n)\n\nselect\n\n {{ select_gb_cols }}\n most_recent,\n {{ threshold }} as threshold\n\nfrom recency\nwhere most_recent < {{ threshold }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.current_timestamp", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4251451, "supported_languages": null}, "macro.dbt_utils.test_not_constant": {"name": "test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.test_not_constant", "macro_sql": "{% test not_constant(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_constant', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_constant"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4256032, "supported_languages": null}, "macro.dbt_utils.default__test_not_constant": {"name": "default__test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.default__test_not_constant", "macro_sql": "{% macro default__test_not_constant(model, column_name, group_by_columns) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nselect\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count(distinct {{ column_name }}) as filler_column\n\nfrom {{ model }}\n\n {{groupby_gb_cols}}\n\nhaving count(distinct {{ column_name }}) = 1\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.426065, "supported_languages": null}, "macro.dbt_utils.test_accepted_range": {"name": "test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.test_accepted_range", "macro_sql": "{% test accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n {{ return(adapter.dispatch('test_accepted_range', 'dbt_utils')(model, column_name, min_value, max_value, inclusive)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_accepted_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.426682, "supported_languages": null}, "macro.dbt_utils.default__test_accepted_range": {"name": "default__test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.default__test_accepted_range", "macro_sql": "{% macro default__test_accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n\nwith meet_condition as(\n select *\n from {{ model }}\n),\n\nvalidation_errors as (\n select *\n from meet_condition\n where\n -- never true, defaults to an empty result set. Exists to ensure any combo of the `or` clauses below succeeds\n 1 = 2\n\n {%- if min_value is not none %}\n -- records with a value >= min_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} > {{- \"=\" if inclusive }} {{ min_value }}\n {%- endif %}\n\n {%- if max_value is not none %}\n -- records with a value <= max_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} < {{- \"=\" if inclusive }} {{ max_value }}\n {%- endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.427163, "supported_languages": null}, "macro.dbt_utils.test_not_accepted_values": {"name": "test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.test_not_accepted_values", "macro_sql": "{% test not_accepted_values(model, column_name, values, quote=True) %}\n {{ return(adapter.dispatch('test_not_accepted_values', 'dbt_utils')(model, column_name, values, quote)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.427713, "supported_languages": null}, "macro.dbt_utils.default__test_not_accepted_values": {"name": "default__test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.default__test_not_accepted_values", "macro_sql": "{% macro default__test_not_accepted_values(model, column_name, values, quote=True) %}\nwith all_values as (\n\n select distinct\n {{ column_name }} as value_field\n\n from {{ model }}\n\n),\n\nvalidation_errors as (\n\n select\n value_field\n\n from all_values\n where value_field 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)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.428098, "supported_languages": null}, "macro.dbt_utils.test_at_least_one": {"name": "test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.test_at_least_one", "macro_sql": "{% test at_least_one(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_at_least_one', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_at_least_one"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.428782, "supported_languages": null}, "macro.dbt_utils.default__test_at_least_one": {"name": "default__test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.default__test_at_least_one", "macro_sql": "{% macro default__test_at_least_one(model, column_name, group_by_columns) %}\n\n{% set pruned_cols = [column_name] %}\n\n{% if group_by_columns|length() > 0 %}\n\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n {% set pruned_cols = group_by_columns %}\n\n {% if column_name not in pruned_cols %}\n {% do pruned_cols.append(column_name) %}\n {% endif %}\n\n{% endif %}\n\n{% set select_pruned_cols = pruned_cols|join(' ,') %}\n\nselect *\nfrom (\n with pruned_rows as (\n select\n {{ select_pruned_cols }}\n from {{ model }}\n {% if group_by_columns|length() == 0 %}\n where {{ column_name }} is not null\n limit 1\n {% endif %}\n )\n select\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count({{ column_name }}) as filler_column\n\n from pruned_rows\n\n {{groupby_gb_cols}}\n\n having count({{ column_name }}) = 0\n\n) validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.429721, "supported_languages": null}, "macro.dbt_utils.test_unique_combination_of_columns": {"name": "test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.test_unique_combination_of_columns", "macro_sql": "{% test unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n {{ return(adapter.dispatch('test_unique_combination_of_columns', 'dbt_utils')(model, combination_of_columns, quote_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_combination_of_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4303548, "supported_languages": null}, "macro.dbt_utils.default__test_unique_combination_of_columns": {"name": "default__test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.default__test_unique_combination_of_columns", "macro_sql": "{% macro default__test_unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n\n{% if not quote_columns %}\n {%- set column_list=combination_of_columns %}\n{% elif quote_columns %}\n {%- set column_list=[] %}\n {% for column in combination_of_columns -%}\n {% set column_list = column_list.append( adapter.quote(column) ) %}\n {%- endfor %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`quote_columns` argument for unique_combination_of_columns test must be one of [True, False] Got: '\" ~ quote ~\"'.'\"\n ) }}\n{% endif %}\n\n{%- set columns_csv=column_list | join(', ') %}\n\n\nwith validation_errors as (\n\n select\n {{ columns_csv }}\n from {{ model }}\n group by {{ columns_csv }}\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.431009, "supported_languages": null}, "macro.dbt_utils.test_cardinality_equality": {"name": "test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.test_cardinality_equality", "macro_sql": "{% test cardinality_equality(model, column_name, to, field) %}\n {{ return(adapter.dispatch('test_cardinality_equality', 'dbt_utils')(model, column_name, to, field)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_cardinality_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.431574, "supported_languages": null}, "macro.dbt_utils.default__test_cardinality_equality": {"name": "default__test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.default__test_cardinality_equality", "macro_sql": "{% macro default__test_cardinality_equality(model, column_name, to, field) %}\n\n{# T-SQL does not let you use numbers as aliases for columns #}\n{# Thus, no \"GROUP BY 1\" #}\n\nwith table_a as (\nselect\n {{ column_name }},\n count(*) as num_rows\nfrom {{ model }}\ngroup by {{ column_name }}\n),\n\ntable_b as (\nselect\n {{ field }},\n count(*) as num_rows\nfrom {{ to }}\ngroup by {{ field }}\n),\n\nexcept_a as (\n select *\n from table_a\n {{ dbt.except() }}\n select *\n from table_b\n),\n\nexcept_b as (\n select *\n from table_b\n {{ dbt.except() }}\n select *\n from table_a\n),\n\nunioned as (\n select *\n from except_a\n union all\n select *\n from except_b\n)\n\nselect *\nfrom unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.431922, "supported_languages": null}, "macro.dbt_utils.test_expression_is_true": {"name": "test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.test_expression_is_true", "macro_sql": "{% test expression_is_true(model, expression, column_name=None) %}\n {{ return(adapter.dispatch('test_expression_is_true', 'dbt_utils')(model, expression, column_name)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_expression_is_true"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4323242, "supported_languages": null}, "macro.dbt_utils.default__test_expression_is_true": {"name": "default__test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.default__test_expression_is_true", "macro_sql": "{% macro default__test_expression_is_true(model, expression, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else \"1\" %}\n\nselect\n {{ column_list }}\nfrom {{ model }}\n{% if column_name is none %}\nwhere not({{ expression }})\n{%- else %}\nwhere not({{ column_name }} {{ expression }})\n{%- endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.432686, "supported_languages": null}, "macro.dbt_utils.test_not_null_proportion": {"name": "test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.test_not_null_proportion", "macro_sql": "{% macro test_not_null_proportion(model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_null_proportion', 'dbt_utils')(model, group_by_columns, **kwargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_proportion"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4333591, "supported_languages": null}, "macro.dbt_utils.default__test_not_null_proportion": {"name": "default__test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.default__test_not_null_proportion", "macro_sql": "{% macro default__test_not_null_proportion(model, group_by_columns) %}\n\n{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}\n{% set at_least = kwargs.get('at_least', kwargs.get('arg')) %}\n{% set at_most = kwargs.get('at_most', kwargs.get('arg', 1)) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith validation as (\n select\n {{select_gb_cols}}\n sum(case when {{ column_name }} is null then 0 else 1 end) / cast(count(*) as {{ dbt.type_numeric() }}) as not_null_proportion\n from {{ model }}\n {{groupby_gb_cols}}\n),\nvalidation_errors as (\n select\n {{select_gb_cols}}\n not_null_proportion\n from validation\n where not_null_proportion < {{ at_least }} or not_null_proportion > {{ at_most }}\n)\nselect\n *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4342148, "supported_languages": null}, "macro.dbt_utils.test_sequential_values": {"name": "test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.test_sequential_values", "macro_sql": "{% test sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n {{ return(adapter.dispatch('test_sequential_values', 'dbt_utils')(model, column_name, interval, datepart, group_by_columns)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_sequential_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.435126, "supported_languages": null}, "macro.dbt_utils.default__test_sequential_values": {"name": "default__test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.default__test_sequential_values", "macro_sql": "{% macro default__test_sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n{% set previous_column_name = \"previous_\" ~ dbt_utils.slugify(column_name) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(',') + ', ' %}\n {% set partition_gb_cols = 'partition by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith windowed as (\n\n select\n {{ select_gb_cols }}\n {{ column_name }},\n lag({{ column_name }}) over (\n {{partition_gb_cols}}\n order by {{ column_name }}\n ) as {{ previous_column_name }}\n from {{ model }}\n),\n\nvalidation_errors as (\n select\n *\n from windowed\n {% if datepart %}\n where not(cast({{ column_name }} as {{ dbt.type_timestamp() }})= cast({{ dbt.dateadd(datepart, interval, previous_column_name) }} as {{ dbt.type_timestamp() }}))\n {% else %}\n where not({{ column_name }} = {{ previous_column_name }} + {{ interval }})\n {% endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.slugify", "macro.dbt.type_timestamp", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4360478, "supported_languages": null}, "macro.dbt_utils.test_equality": {"name": "test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.test_equality", "macro_sql": "{% test equality(model, compare_model, compare_columns=None, exclude_columns=None, precision = None) %}\n {{ return(adapter.dispatch('test_equality', 'dbt_utils')(model, compare_model, compare_columns, exclude_columns, precision)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.438001, "supported_languages": null}, "macro.dbt_utils.default__test_equality": {"name": "default__test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.default__test_equality", "macro_sql": "{% macro default__test_equality(model, compare_model, compare_columns=None, exclude_columns=None, precision = None) %}\n\n{%- if compare_columns and exclude_columns -%}\n {{ exceptions.raise_compiler_error(\"Both a compare and an ignore list were provided to the `equality` macro. Only one is allowed\") }}\n{%- endif -%}\n\n{% set set_diff %}\n count(*) + coalesce(abs(\n sum(case when which_diff = 'a_minus_b' then 1 else 0 end) -\n sum(case when which_diff = 'b_minus_a' then 1 else 0 end)\n ), 0)\n{% endset %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = set_diff) }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n\n\n-- setup\n{%- do dbt_utils._is_relation(model, 'test_equality') -%}\n\n{# Ensure there are no extra columns in the compare_model vs model #}\n{%- if not compare_columns -%}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- do dbt_utils._is_ephemeral(compare_model, 'test_equality') -%}\n\n {%- set model_columns = adapter.get_columns_in_relation(model) -%}\n {%- set compare_model_columns = adapter.get_columns_in_relation(compare_model) -%}\n\n\n {%- if exclude_columns -%}\n {#-- Lower case ignore columns for easier comparison --#}\n {%- set exclude_columns = exclude_columns | map(\"lower\") | list %}\n\n {# Filter out the excluded columns #}\n {%- set include_columns = [] %}\n {%- set include_model_columns = [] %}\n {%- for column in model_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n {%- for column in compare_model_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_model_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n\n {%- set compare_columns_set = set(include_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- set compare_model_columns_set = set(include_model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- else -%}\n {%- set compare_columns_set = set(model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- set compare_model_columns_set = set(compare_model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- endif -%}\n\n {% if compare_columns_set != compare_model_columns_set %}\n {{ exceptions.raise_compiler_error(compare_model ~\" has less columns than \" ~ model ~ \", please ensure they have the same columns or use the `compare_columns` or `exclude_columns` arguments to subset them.\") }}\n {% endif %}\n\n\n{% endif %}\n\n{%- if not precision -%}\n {%- if not compare_columns -%}\n {# \n You cannot get the columns in an ephemeral model (due to not existing in the information schema),\n so if the user does not provide an explicit list of columns we must error in the case it is ephemeral\n #}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set compare_columns = adapter.get_columns_in_relation(model)-%}\n\n {%- if exclude_columns -%}\n {#-- Lower case ignore columns for easier comparison --#}\n {%- set exclude_columns = exclude_columns | map(\"lower\") | list %}\n\n {# Filter out the excluded columns #}\n {%- set include_columns = [] %}\n {%- for column in compare_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n\n {%- set compare_columns = include_columns | map(attribute='quoted') %}\n {%- else -%} {# Compare columns provided #}\n {%- set compare_columns = compare_columns | map(attribute='quoted') %}\n {%- endif -%}\n {%- endif -%}\n\n {% set compare_cols_csv = compare_columns | join(', ') %}\n\n{% else %} {# Precision required #}\n {#-\n If rounding is required, we need to get the types, so it cannot be ephemeral even if they provide column names\n -#}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set columns = adapter.get_columns_in_relation(model) -%}\n\n {% set columns_list = [] %}\n {%- for col in columns -%}\n {%- if (\n (col.name|lower in compare_columns|map('lower') or not compare_columns) and\n (col.name|lower not in exclude_columns|map('lower') or not exclude_columns)\n ) -%}\n {# Databricks double type is not picked up by any number type checks in dbt #}\n {%- if col.is_float() or col.is_numeric() or col.data_type == 'double' -%}\n {# Cast is required due to postgres not having round for a double precision number #}\n {%- do columns_list.append('round(cast(' ~ col.quoted ~ ' as ' ~ dbt.type_numeric() ~ '),' ~ precision ~ ') as ' ~ col.quoted) -%}\n {%- else -%} {# Non-numeric type #}\n {%- do columns_list.append(col.quoted) -%}\n {%- endif -%}\n {% endif %}\n {%- endfor -%}\n\n {% set compare_cols_csv = columns_list | join(', ') %}\n\n{% endif %}\n\nwith a as (\n\n select * from {{ model }}\n\n),\n\nb as (\n\n select * from {{ compare_model }}\n\n),\n\na_minus_b as (\n\n select {{compare_cols_csv}} from a\n {{ dbt.except() }}\n select {{compare_cols_csv}} from b\n\n),\n\nb_minus_a as (\n\n select {{compare_cols_csv}} from b\n {{ dbt.except() }}\n select {{compare_cols_csv}} from a\n\n),\n\nunioned as (\n\n select 'a_minus_b' as which_diff, a_minus_b.* from a_minus_b\n union all\n select 'b_minus_a' as which_diff, b_minus_a.* from b_minus_a\n\n)\n\nselect * from unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.type_numeric", "macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4421592, "supported_languages": null}, "macro.dbt_utils.test_not_empty_string": {"name": "test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.test_not_empty_string", "macro_sql": "{% test not_empty_string(model, column_name, trim_whitespace=true) %}\n\n {{ return(adapter.dispatch('test_not_empty_string', 'dbt_utils')(model, column_name, trim_whitespace)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_empty_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.442698, "supported_languages": null}, "macro.dbt_utils.default__test_not_empty_string": {"name": "default__test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.default__test_not_empty_string", "macro_sql": "{% macro default__test_not_empty_string(model, column_name, trim_whitespace=true) %}\n\n with\n \n all_values as (\n\n select \n\n\n {% if trim_whitespace == true -%}\n\n trim({{ column_name }}) as {{ column_name }}\n\n {%- else -%}\n\n {{ column_name }}\n\n {%- endif %}\n \n from {{ model }}\n\n ),\n\n errors as (\n\n select * from all_values\n where {{ column_name }} = ''\n\n )\n\n select * from errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4430022, "supported_languages": null}, "macro.dbt_utils.test_mutually_exclusive_ranges": {"name": "test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.test_mutually_exclusive_ranges", "macro_sql": "{% test mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n {{ return(adapter.dispatch('test_mutually_exclusive_ranges', 'dbt_utils')(model, lower_bound_column, upper_bound_column, partition_by, gaps, zero_length_range_allowed)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_mutually_exclusive_ranges"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.446582, "supported_languages": null}, "macro.dbt_utils.default__test_mutually_exclusive_ranges": {"name": "default__test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.default__test_mutually_exclusive_ranges", "macro_sql": "{% macro default__test_mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n{% if gaps == 'not_allowed' %}\n {% set allow_gaps_operator='=' %}\n {% set allow_gaps_operator_in_words='equal_to' %}\n{% elif gaps == 'allowed' %}\n {% set allow_gaps_operator='<=' %}\n {% set allow_gaps_operator_in_words='less_than_or_equal_to' %}\n{% elif gaps == 'required' %}\n {% set allow_gaps_operator='<' %}\n {% set allow_gaps_operator_in_words='less_than' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`gaps` argument for mutually_exclusive_ranges test must be one of ['not_allowed', 'allowed', 'required'] Got: '\" ~ gaps ~\"'.'\"\n ) }}\n{% endif %}\n{% if not zero_length_range_allowed %}\n {% set allow_zero_length_operator='<' %}\n {% set allow_zero_length_operator_in_words='less_than' %}\n{% elif zero_length_range_allowed %}\n {% set allow_zero_length_operator='<=' %}\n {% set allow_zero_length_operator_in_words='less_than_or_equal_to' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`zero_length_range_allowed` argument for mutually_exclusive_ranges test must be one of [true, false] Got: '\" ~ zero_length_range_allowed ~\"'.'\"\n ) }}\n{% endif %}\n\n{% set partition_clause=\"partition by \" ~ partition_by if partition_by else '' %}\n\nwith window_functions as (\n\n select\n {% if partition_by %}\n {{ partition_by }} as partition_by_col,\n {% endif %}\n {{ lower_bound_column }} as lower_bound,\n {{ upper_bound_column }} as upper_bound,\n\n lead({{ lower_bound_column }}) over (\n {{ partition_clause }}\n order by {{ lower_bound_column }}, {{ upper_bound_column }}\n ) as next_lower_bound,\n\n row_number() over (\n {{ partition_clause }}\n order by {{ lower_bound_column }} desc, {{ upper_bound_column }} desc\n ) = 1 as is_last_record\n\n from {{ model }}\n\n),\n\ncalc as (\n -- We want to return records where one of our assumptions fails, so we'll use\n -- the `not` function with `and` statements so we can write our assumptions more cleanly\n select\n *,\n\n -- For each record: lower_bound should be < upper_bound.\n -- Coalesce it to return an error on the null case (implicit assumption\n -- these columns are not_null)\n coalesce(\n lower_bound {{ allow_zero_length_operator }} upper_bound,\n false\n ) as lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound,\n\n -- For each record: upper_bound {{ allow_gaps_operator }} the next lower_bound.\n -- Coalesce it to handle null cases for the last record.\n coalesce(\n upper_bound {{ allow_gaps_operator }} next_lower_bound,\n is_last_record,\n false\n ) as upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n\n from window_functions\n\n),\n\nvalidation_errors as (\n\n select\n *\n from calc\n\n where not(\n -- THE FOLLOWING SHOULD BE TRUE --\n lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound\n and upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n )\n)\n\nselect * from validation_errors\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.44812, "supported_languages": null}, "macro.dbt_utils.pretty_log_format": {"name": "pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.pretty_log_format", "macro_sql": "{% macro pretty_log_format(message) %}\n {{ return(adapter.dispatch('pretty_log_format', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4483929, "supported_languages": null}, "macro.dbt_utils.default__pretty_log_format": {"name": "default__pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.default__pretty_log_format", "macro_sql": "{% macro default__pretty_log_format(message) %}\n {{ return( dbt_utils.pretty_time() ~ ' + ' ~ message) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.448565, "supported_languages": null}, "macro.dbt_utils._is_relation": {"name": "_is_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_relation.sql", "original_file_path": "macros/jinja_helpers/_is_relation.sql", "unique_id": "macro.dbt_utils._is_relation", "macro_sql": "{% macro _is_relation(obj, macro) %}\n {%- if not (obj is mapping and obj.get('metadata', {}).get('type', '').endswith('Relation')) -%}\n {%- do exceptions.raise_compiler_error(\"Macro \" ~ macro ~ \" expected a Relation but received the value: \" ~ obj) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.449009, "supported_languages": null}, "macro.dbt_utils.pretty_time": {"name": "pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.pretty_time", "macro_sql": "{% macro pretty_time(format='%H:%M:%S') %}\n {{ return(adapter.dispatch('pretty_time', 'dbt_utils')(format)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.449287, "supported_languages": null}, "macro.dbt_utils.default__pretty_time": {"name": "default__pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.default__pretty_time", "macro_sql": "{% macro default__pretty_time(format='%H:%M:%S') %}\n {{ return(modules.datetime.datetime.now().strftime(format)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.449484, "supported_languages": null}, "macro.dbt_utils.log_info": {"name": "log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.log_info", "macro_sql": "{% macro log_info(message) %}\n {{ return(adapter.dispatch('log_info', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__log_info"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.449738, "supported_languages": null}, "macro.dbt_utils.default__log_info": {"name": "default__log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.default__log_info", "macro_sql": "{% macro default__log_info(message) %}\n {{ log(dbt_utils.pretty_log_format(message), info=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4499142, "supported_languages": null}, "macro.dbt_utils.slugify": {"name": "slugify", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/slugify.sql", "original_file_path": "macros/jinja_helpers/slugify.sql", "unique_id": "macro.dbt_utils.slugify", "macro_sql": "{% macro slugify(string) %}\n\n{% if not string %}\n{{ return('') }}\n{% endif %}\n\n{#- Lower case the string -#}\n{% set string = string | lower %}\n{#- Replace spaces and dashes with underscores -#}\n{% set string = modules.re.sub('[ -]+', '_', string) %}\n{#- Only take letters, numbers, and underscores -#}\n{% set string = modules.re.sub('[^a-z0-9_]+', '', string) %}\n{#- Prepends \"_\" if string begins with a number -#}\n{% set string = modules.re.sub('^[0-9]', '_' + string[0], string) %}\n\n{{ return(string) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.450652, "supported_languages": null}, "macro.dbt_utils._is_ephemeral": {"name": "_is_ephemeral", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_ephemeral.sql", "original_file_path": "macros/jinja_helpers/_is_ephemeral.sql", "unique_id": "macro.dbt_utils._is_ephemeral", "macro_sql": "{% macro _is_ephemeral(obj, macro) %}\n {%- if obj.is_cte -%}\n {% set ephemeral_prefix = api.Relation.add_ephemeral_prefix('') %}\n {% if obj.name.startswith(ephemeral_prefix) %}\n {% set model_name = obj.name[(ephemeral_prefix|length):] %}\n {% else %}\n {% set model_name = obj.name %}\n {%- endif -%}\n {% set error_message %}\nThe `{{ macro }}` macro cannot be used with ephemeral models, as it relies on the information schema.\n\n`{{ model_name }}` is an ephemeral model. Consider making it a view or table instead.\n {% endset %}\n {%- do exceptions.raise_compiler_error(error_message) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.451493, "supported_languages": null}, "macro.dbt_utils.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt_utils')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.452205, "supported_languages": null}, "macro.dbt_utils.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__get_intervals_between", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4528031, "supported_languages": null}, "macro.dbt_utils.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt_utils')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.453037, "supported_languages": null}, "macro.dbt_utils.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n{# call as follows:\n\ndate_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n) #}\n\n\nwith rawdata as (\n\n {{dbt_utils.generate_series(\n dbt_utils.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n),\n\nall_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\nfiltered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n)\n\nselect * from filtered\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.generate_series", "macro.dbt_utils.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.453403, "supported_languages": null}, "macro.dbt_utils.safe_subtract": {"name": "safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.safe_subtract", "macro_sql": "{%- macro safe_subtract(field_list) -%}\n {{ return(adapter.dispatch('safe_subtract', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_subtract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.453784, "supported_languages": null}, "macro.dbt_utils.default__safe_subtract": {"name": "default__safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.default__safe_subtract", "macro_sql": "\n\n{%- macro default__safe_subtract(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_subtract` macro takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' -\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.454398, "supported_languages": null}, "macro.dbt_utils.nullcheck_table": {"name": "nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.nullcheck_table", "macro_sql": "{% macro nullcheck_table(relation) %}\n {{ return(adapter.dispatch('nullcheck_table', 'dbt_utils')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.454725, "supported_languages": null}, "macro.dbt_utils.default__nullcheck_table": {"name": "default__nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.default__nullcheck_table", "macro_sql": "{% macro default__nullcheck_table(relation) %}\n\n {%- do dbt_utils._is_relation(relation, 'nullcheck_table') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'nullcheck_table') -%}\n {% set cols = adapter.get_columns_in_relation(relation) %}\n\n select {{ dbt_utils.nullcheck(cols) }}\n from {{relation}}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.455086, "supported_languages": null}, "macro.dbt_utils.get_relations_by_pattern": {"name": "get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.get_relations_by_pattern", "macro_sql": "{% macro get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_pattern', 'dbt_utils')(schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4557939, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_pattern": {"name": "default__get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_pattern", "macro_sql": "{% macro default__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.456748, "supported_languages": null}, "macro.dbt_utils.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4576461, "supported_languages": null}, "macro.dbt_utils.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__get_powers_of_two", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.458133, "supported_languages": null}, "macro.dbt_utils.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.458356, "supported_languages": null}, "macro.dbt_utils.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt_utils.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 %}", "depends_on": {"macros": ["macro.dbt_utils.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.458904, "supported_languages": null}, "macro.dbt_utils.get_relations_by_prefix": {"name": "get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.get_relations_by_prefix", "macro_sql": "{% macro get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_prefix', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.459608, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_prefix": {"name": "default__get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_prefix", "macro_sql": "{% macro default__get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_prefix_sql(schema, prefix, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.460469, "supported_languages": null}, "macro.dbt_utils.get_tables_by_prefix_sql": {"name": "get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_prefix_sql", "macro_sql": "{% macro get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_prefix_sql', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.460882, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_prefix_sql": {"name": "default__get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_prefix_sql", "macro_sql": "{% macro default__get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(\n schema_pattern = schema,\n table_pattern = prefix ~ '%',\n exclude = exclude,\n database = database\n ) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.461169, "supported_languages": null}, "macro.dbt_utils.star": {"name": "star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.star", "macro_sql": "{% macro star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {{ return(adapter.dispatch('star', 'dbt_utils')(from, relation_alias, except, prefix, suffix, quote_identifiers)) }}\r\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__star"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4624379, "supported_languages": null}, "macro.dbt_utils.default__star": {"name": "default__star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.default__star", "macro_sql": "{% macro default__star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {%- do dbt_utils._is_relation(from, 'star') -%}\r\n {%- do dbt_utils._is_ephemeral(from, 'star') -%}\r\n\r\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\r\n {%- if not execute -%}\r\n {% do return('*') %}\r\n {%- endif -%}\r\n\r\n {% set cols = dbt_utils.get_filtered_columns_in_relation(from, except) %}\r\n\r\n {%- if cols|length <= 0 -%}\r\n {% if flags.WHICH == 'compile' %}\r\n {% set response %}\r\n*\r\n/* No columns were returned. Maybe the relation doesn't exist yet \r\nor all columns were excluded. This star is only output during \r\ndbt compile, and exists to keep SQLFluff happy. */\r\n {% endset %}\r\n {% do return(response) %}\r\n {% else %}\r\n {% do return(\"/* no columns returned from star() macro */\") %}\r\n {% endif %}\r\n {%- else -%}\r\n {%- for col in cols %}\r\n {%- if relation_alias %}{{ relation_alias }}.{% else %}{%- endif -%}\r\n {%- if quote_identifiers -%}\r\n {{ adapter.quote(col)|trim }} {%- if prefix!='' or suffix!='' %} as {{ adapter.quote(prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {%- else -%}\r\n {{ col|trim }} {%- if prefix!='' or suffix!='' %} as {{ (prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {% endif %}\r\n {%- if not loop.last %},{{ '\\n ' }}{%- endif -%}\r\n {%- endfor -%}\r\n {% endif %}\r\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4639418, "supported_languages": null}, "macro.dbt_utils.unpivot": {"name": "unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.unpivot", "macro_sql": "{% macro unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', quote_identifiers=False) -%}\n {{ return(adapter.dispatch('unpivot', 'dbt_utils')(relation, cast_to, exclude, remove, field_name, value_name, quote_identifiers)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__unpivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4655008, "supported_languages": null}, "macro.dbt_utils.default__unpivot": {"name": "default__unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.default__unpivot", "macro_sql": "{% macro default__unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', quote_identifiers=False) -%}\n\n {% if not relation %}\n {{ exceptions.raise_compiler_error(\"Error: argument `relation` is required for `unpivot` macro.\") }}\n {% endif %}\n\n {%- set exclude = exclude if exclude is not none else [] %}\n {%- set remove = remove if remove is not none else [] %}\n\n {%- set include_cols = [] %}\n\n {%- set table_columns = {} %}\n\n {%- do table_columns.update({relation: []}) %}\n\n {%- do dbt_utils._is_relation(relation, 'unpivot') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'unpivot') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) %}\n\n {%- for col in cols -%}\n {%- if col.column.lower() not in remove|map('lower') and col.column.lower() not in exclude|map('lower') -%}\n {% do include_cols.append(col) %}\n {%- endif %}\n {%- endfor %}\n\n\n {%- for col in include_cols -%}\n {%- set current_col_name = adapter.quote(col.column) if quote_identifiers else col.column -%}\n select\n {%- for exclude_col in exclude %}\n {{ adapter.quote(exclude_col) if quote_identifiers else exclude_col }},\n {%- endfor %}\n\n cast('{{ col.column }}' as {{ dbt.type_string() }}) as {{ adapter.quote(field_name) if quote_identifiers else field_name }},\n cast( {% if col.data_type == 'boolean' %}\n {{ dbt.cast_bool_to_text(current_col_name) }}\n {% else %}\n {{ current_col_name }}\n {% endif %}\n as {{ cast_to }}) as {{ adapter.quote(value_name) if quote_identifiers else value_name }}\n\n from {{ relation }}\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n {%- endfor -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.type_string", "macro.dbt.cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.467445, "supported_languages": null}, "macro.dbt_utils.safe_divide": {"name": "safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.safe_divide", "macro_sql": "{% macro safe_divide(numerator, denominator) -%}\n {{ return(adapter.dispatch('safe_divide', 'dbt_utils')(numerator, denominator)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_divide"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.467753, "supported_languages": null}, "macro.dbt_utils.default__safe_divide": {"name": "default__safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.default__safe_divide", "macro_sql": "{% macro default__safe_divide(numerator, denominator) %}\n ( {{ numerator }} ) / nullif( ( {{ denominator }} ), 0)\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.467902, "supported_languages": null}, "macro.dbt_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n {{ return(adapter.dispatch('union_relations', 'dbt_utils')(relations, column_override, include, exclude, source_column_name, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4711711, "supported_languages": null}, "macro.dbt_utils.default__union_relations": {"name": "default__union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.default__union_relations", "macro_sql": "\n\n{%- macro default__union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n {%- set all_excludes = [] -%}\n {%- set all_includes = [] -%}\n\n {%- if exclude -%}\n {%- for exc in exclude -%}\n {%- do all_excludes.append(exc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- if include -%}\n {%- for inc in include -%}\n {%- do all_includes.append(inc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column | lower in all_excludes -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column | lower not in all_includes -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n {%- set dbt_command = flags.WHICH -%}\n\n\n {% if dbt_command in ['run', 'build'] %}\n {% if (include | length > 0 or exclude | length > 0) and not column_superset.keys() %}\n {%- set relations_string -%}\n {%- for relation in relations -%}\n {{ relation.name }}\n {%- if not loop.last %}, {% endif -%}\n {%- endfor -%}\n {%- endset -%}\n\n {%- set error_message -%}\n There were no columns found to union for relations {{ relations_string }}\n {%- endset -%}\n\n {{ exceptions.raise_compiler_error(error_message) }}\n {%- endif -%}\n {%- endif -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n {%- if source_column_name is not none %}\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {%- endif %}\n\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ relation }}\n\n {% if where -%}\n where {{ where }}\n {%- endif %}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4746811, "supported_languages": null}, "macro.dbt_utils.group_by": {"name": "group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.group_by", "macro_sql": "{%- macro group_by(n) -%}\n {{ return(adapter.dispatch('group_by', 'dbt_utils')(n)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__group_by"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.474989, "supported_languages": null}, "macro.dbt_utils.default__group_by": {"name": "default__group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.default__group_by", "macro_sql": "\n\n{%- macro default__group_by(n) -%}\n\n group by {% for i in range(1, n + 1) -%}\n {{ i }}{{ ',' if not loop.last }} \n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.475244, "supported_languages": null}, "macro.dbt_utils.deduplicate": {"name": "deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.deduplicate", "macro_sql": "{%- macro deduplicate(relation, partition_by, order_by) -%}\n {{ return(adapter.dispatch('deduplicate', 'dbt_utils')(relation, partition_by, order_by)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.bigquery__deduplicate"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.476185, "supported_languages": null}, "macro.dbt_utils.default__deduplicate": {"name": "default__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.default__deduplicate", "macro_sql": "\n\n{%- macro default__deduplicate(relation, partition_by, order_by) -%}\n\n with row_numbered as (\n select\n _inner.*,\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) as rn\n from {{ relation }} as _inner\n )\n\n select\n distinct data.*\n from {{ relation }} as data\n {#\n -- Not all DBs will support natural joins but the ones that do include:\n -- Oracle, MySQL, SQLite, Redshift, Teradata, Materialize, Databricks\n -- Apache Spark, SingleStore, Vertica\n -- Those that do not appear to support natural joins include:\n -- SQLServer, Trino, Presto, Rockset, Athena\n #}\n natural join row_numbered\n where row_numbered.rn = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.476407, "supported_languages": null}, "macro.dbt_utils.redshift__deduplicate": {"name": "redshift__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.redshift__deduplicate", "macro_sql": "{% macro redshift__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }} as tt\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4765859, "supported_languages": null}, "macro.dbt_utils.postgres__deduplicate": {"name": "postgres__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.postgres__deduplicate", "macro_sql": "\n{%- macro postgres__deduplicate(relation, partition_by, order_by) -%}\n\n select\n distinct on ({{ partition_by }}) *\n from {{ relation }}\n order by {{ partition_by }}{{ ',' ~ order_by }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.47678, "supported_languages": null}, "macro.dbt_utils.snowflake__deduplicate": {"name": "snowflake__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.snowflake__deduplicate", "macro_sql": "\n{%- macro snowflake__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.476949, "supported_languages": null}, "macro.dbt_utils.databricks__deduplicate": {"name": "databricks__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.databricks__deduplicate", "macro_sql": "\n{%- macro databricks__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4771159, "supported_languages": null}, "macro.dbt_utils.bigquery__deduplicate": {"name": "bigquery__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.bigquery__deduplicate", "macro_sql": "\n{%- macro bigquery__deduplicate(relation, partition_by, order_by) -%}\n\n select unique.*\n from (\n select\n array_agg (\n original\n order by {{ order_by }}\n limit 1\n )[offset(0)] unique\n from {{ relation }} original\n group by {{ partition_by }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.477291, "supported_languages": null}, "macro.dbt_utils.surrogate_key": {"name": "surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.surrogate_key", "macro_sql": "{%- macro surrogate_key(field_list) -%}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('surrogate_key', 'dbt_utils')(field_list, *varargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.477681, "supported_languages": null}, "macro.dbt_utils.default__surrogate_key": {"name": "default__surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.default__surrogate_key", "macro_sql": "\n\n{%- macro default__surrogate_key(field_list) -%}\n\n{%- set error_message = '\nWarning: `dbt_utils.surrogate_key` has been replaced by \\\n`dbt_utils.generate_surrogate_key`. The new macro treats null values \\\ndifferently to empty strings. To restore the behaviour of the original \\\nmacro, add a global variable in dbt_project.yml called \\\n`surrogate_key_treat_nulls_as_empty_strings` to your \\\ndbt_project.yml file with a value of True. \\\nThe {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4779189, "supported_languages": null}, "macro.dbt_utils.safe_add": {"name": "safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.safe_add", "macro_sql": "{%- macro safe_add(field_list) -%}\n {{ return(adapter.dispatch('safe_add', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4782999, "supported_languages": null}, "macro.dbt_utils.default__safe_add": {"name": "default__safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.default__safe_add", "macro_sql": "\n\n{%- macro default__safe_add(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_add` macro now takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.warn(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' +\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.478848, "supported_languages": null}, "macro.dbt_utils.nullcheck": {"name": "nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.nullcheck", "macro_sql": "{% macro nullcheck(cols) %}\n {{ return(adapter.dispatch('nullcheck', 'dbt_utils')(cols)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.479187, "supported_languages": null}, "macro.dbt_utils.default__nullcheck": {"name": "default__nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.default__nullcheck", "macro_sql": "{% macro default__nullcheck(cols) %}\n{%- for col in cols %}\n\n {% if col.is_string() -%}\n\n nullif({{col.name}},'') as {{col.name}}\n\n {%- else -%}\n\n {{col.name}}\n\n {%- endif -%}\n\n{%- if not loop.last -%} , {%- endif -%}\n\n{%- endfor -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4795241, "supported_languages": null}, "macro.dbt_utils.get_tables_by_pattern_sql": {"name": "get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_pattern_sql", "macro_sql": "{% macro get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_pattern_sql', 'dbt_utils')\n (schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.bigquery__get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.482804, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_pattern_sql": {"name": "default__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_pattern_sql", "macro_sql": "{% macro default__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n select distinct\n table_schema as {{ adapter.quote('table_schema') }},\n table_name as {{ adapter.quote('table_name') }},\n {{ dbt_utils.get_table_types_sql() }}\n from {{ database }}.information_schema.tables\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4831731, "supported_languages": null}, "macro.dbt_utils.redshift__get_tables_by_pattern_sql": {"name": "redshift__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.redshift__get_tables_by_pattern_sql", "macro_sql": "{% macro redshift__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% set sql %}\n select distinct\n table_schema as {{ adapter.quote('table_schema') }},\n table_name as {{ adapter.quote('table_name') }},\n {{ dbt_utils.get_table_types_sql() }}\n from \"{{ database }}\".\"information_schema\".\"tables\"\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n union all\n select distinct\n schemaname as {{ adapter.quote('table_schema') }},\n tablename as {{ adapter.quote('table_name') }},\n 'external' as {{ adapter.quote('table_type') }}\n from svv_external_tables\n where redshift_database_name = '{{ database }}'\n and schemaname ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n {% endset %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.483924, "supported_languages": null}, "macro.dbt_utils.bigquery__get_tables_by_pattern_sql": {"name": "bigquery__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.bigquery__get_tables_by_pattern_sql", "macro_sql": "{% macro bigquery__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% if '%' in schema_pattern %}\n {% set schemata=dbt_utils._bigquery__get_matching_schemata(schema_pattern, database) %}\n {% else %}\n {% set schemata=[schema_pattern] %}\n {% endif %}\n\n {% set sql %}\n {% for schema in schemata %}\n select distinct\n table_schema,\n table_name,\n {{ dbt_utils.get_table_types_sql() }}\n\n from {{ adapter.quote(database) }}.{{ schema }}.INFORMATION_SCHEMA.TABLES\n where lower(table_name) like lower ('{{ table_pattern }}')\n and lower(table_name) not like lower ('{{ exclude }}')\n\n {% if not loop.last %} union all {% endif %}\n\n {% endfor %}\n {% endset %}\n\n {{ return(sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._bigquery__get_matching_schemata", "macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.484652, "supported_languages": null}, "macro.dbt_utils._bigquery__get_matching_schemata": {"name": "_bigquery__get_matching_schemata", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils._bigquery__get_matching_schemata", "macro_sql": "{% macro _bigquery__get_matching_schemata(schema_pattern, database) %}\n {% if execute %}\n\n {% set sql %}\n select schema_name from {{ adapter.quote(database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like lower('{{ schema_pattern }}')\n {% endset %}\n\n {% set results=run_query(sql) %}\n\n {% set schemata=results.columns['schema_name'].values() %}\n\n {{ return(schemata) }}\n\n {% else %}\n\n {{ return([]) }}\n\n {% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.485167, "supported_languages": null}, "macro.dbt_utils.get_column_values": {"name": "get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.get_column_values", "macro_sql": "{% macro get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {{ return(adapter.dispatch('get_column_values', 'dbt_utils')(table, column, order_by, max_records, default, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_column_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.48631, "supported_languages": null}, "macro.dbt_utils.default__get_column_values": {"name": "default__get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.default__get_column_values", "macro_sql": "{% macro default__get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {% set default = [] if not default %}\n {{ return(default) }}\n {% endif %}\n\n {%- do dbt_utils._is_ephemeral(table, 'get_column_values') -%}\n\n {# Not all relations are tables. Renaming for internal clarity without breaking functionality for anyone using named arguments #}\n {# TODO: Change the method signature in a future 0.x.0 release #}\n {%- set target_relation = table -%}\n\n {# adapter.load_relation is a convenience wrapper to avoid building a Relation when we already have one #}\n {% set relation_exists = (load_relation(target_relation)) is not none %}\n\n {%- call statement('get_column_values', fetch_result=true) %}\n\n {%- if not relation_exists and default is none -%}\n\n {{ exceptions.raise_compiler_error(\"In get_column_values(): relation \" ~ target_relation ~ \" does not exist and no default value was provided.\") }}\n\n {%- elif not relation_exists and default is not none -%}\n\n {{ log(\"Relation \" ~ target_relation ~ \" does not exist. Returning the default value: \" ~ default) }}\n\n {{ return(default) }}\n\n {%- else -%}\n\n\n select\n {{ column }} as value\n\n from {{ target_relation }}\n\n {% if where is not none %}\n where {{ where }}\n {% endif %}\n\n group by {{ column }}\n order by {{ order_by }}\n\n {% if max_records is not none %}\n limit {{ max_records }}\n {% endif %}\n\n {% endif %}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_column_values') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values) }}\n {%- else -%}\n {{ return(default) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_ephemeral", "macro.dbt.load_relation", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.487831, "supported_languages": null}, "macro.dbt_utils.pivot": {"name": "pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.pivot", "macro_sql": "{% macro pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {{ return(adapter.dispatch('pivot', 'dbt_utils')(column, values, alias, agg, cmp, prefix, suffix, then_value, else_value, quote_identifiers, distinct)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4889112, "supported_languages": null}, "macro.dbt_utils.default__pivot": {"name": "default__pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.default__pivot", "macro_sql": "{% macro default__pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {% for value in values %}\n {{ agg }}(\n {% if distinct %} distinct {% endif %}\n case\n when {{ column }} {{ cmp }} '{{ dbt.escape_single_quotes(value) }}'\n then {{ then_value }}\n else {{ else_value }}\n end\n )\n {% if alias %}\n {% if quote_identifiers %}\n as {{ adapter.quote(prefix ~ value ~ suffix) }}\n {% else %}\n as {{ dbt_utils.slugify(prefix ~ value ~ suffix) }}\n {% endif %}\n {% endif %}\n {% if not loop.last %},{% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.escape_single_quotes", "macro.dbt_utils.slugify"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.489763, "supported_languages": null}, "macro.dbt_utils.get_filtered_columns_in_relation": {"name": "get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.get_filtered_columns_in_relation", "macro_sql": "{% macro get_filtered_columns_in_relation(from, except=[]) -%}\n {{ return(adapter.dispatch('get_filtered_columns_in_relation', 'dbt_utils')(from, except)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4902341, "supported_languages": null}, "macro.dbt_utils.default__get_filtered_columns_in_relation": {"name": "default__get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.default__get_filtered_columns_in_relation", "macro_sql": "{% macro default__get_filtered_columns_in_relation(from, except=[]) -%}\n {%- do dbt_utils._is_relation(from, 'get_filtered_columns_in_relation') -%}\n {%- do dbt_utils._is_ephemeral(from, 'get_filtered_columns_in_relation') -%}\n\n {# -- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return('') }}\n {% endif %}\n\n {%- set include_cols = [] %}\n {%- set cols = adapter.get_columns_in_relation(from) -%}\n {%- set except = except | map(\"lower\") | list %}\n {%- for col in cols -%}\n {%- if col.column|lower not in except -%}\n {% do include_cols.append(col.column) %}\n {%- endif %}\n {%- endfor %}\n\n {{ return(include_cols) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.490965, "supported_languages": null}, "macro.dbt_utils.width_bucket": {"name": "width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.width_bucket", "macro_sql": "{% macro width_bucket(expr, min_value, max_value, num_buckets) %}\n {{ return(adapter.dispatch('width_bucket', 'dbt_utils') (expr, min_value, max_value, num_buckets)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__width_bucket"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4917471, "supported_languages": null}, "macro.dbt_utils.default__width_bucket": {"name": "default__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.default__width_bucket", "macro_sql": "{% macro default__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is eaxtly at the bucket egde\n case\n when\n mod(\n {{ dbt.safe_cast(expr, dbt.type_numeric() ) }},\n {{ dbt.safe_cast(bin_size, dbt.type_numeric() ) }}\n ) = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.safe_cast", "macro.dbt.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4922209, "supported_languages": null}, "macro.dbt_utils.snowflake__width_bucket": {"name": "snowflake__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.snowflake__width_bucket", "macro_sql": "{% macro snowflake__width_bucket(expr, min_value, max_value, num_buckets) %}\n width_bucket({{ expr }}, {{ min_value }}, {{ max_value }}, {{ num_buckets }} )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.492415, "supported_languages": null}, "macro.dbt_utils.get_query_results_as_dict": {"name": "get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.get_query_results_as_dict", "macro_sql": "{% macro get_query_results_as_dict(query) %}\n {{ return(adapter.dispatch('get_query_results_as_dict', 'dbt_utils')(query)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_query_results_as_dict"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4928021, "supported_languages": null}, "macro.dbt_utils.default__get_query_results_as_dict": {"name": "default__get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.default__get_query_results_as_dict", "macro_sql": "{% macro default__get_query_results_as_dict(query) %}\n\n{# This macro returns a dictionary of the form {column_name: (tuple_of_results)} #}\n\n {%- call statement('get_query_results', fetch_result=True,auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {% set sql_results={} %}\n\n {%- if execute -%}\n {% set sql_results_table = load_result('get_query_results').table.columns %}\n {% for column_name, column in sql_results_table.items() %}\n {% do sql_results.update({column_name: column.values()}) %}\n {% endfor %}\n {%- endif -%}\n\n {{ return(sql_results) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.493406, "supported_languages": null}, "macro.dbt_utils.generate_surrogate_key": {"name": "generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.generate_surrogate_key", "macro_sql": "{%- macro generate_surrogate_key(field_list) -%}\n {{ return(adapter.dispatch('generate_surrogate_key', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.493868, "supported_languages": null}, "macro.dbt_utils.default__generate_surrogate_key": {"name": "default__generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.default__generate_surrogate_key", "macro_sql": "\n\n{%- macro default__generate_surrogate_key(field_list) -%}\n\n{%- if var('surrogate_key_treat_nulls_as_empty_strings', False) -%}\n {%- set default_null_value = \"\" -%}\n{%- else -%}\n {%- set default_null_value = '_dbt_utils_surrogate_key_null_' -%}\n{%- endif -%}\n\n{%- set fields = [] -%}\n\n{%- for field in field_list -%}\n\n {%- do fields.append(\n \"coalesce(cast(\" ~ field ~ \" as \" ~ dbt.type_string() ~ \"), '\" ~ default_null_value ~\"')\"\n ) -%}\n\n {%- if not loop.last %}\n {%- do fields.append(\"'-'\") -%}\n {%- endif -%}\n\n{%- endfor -%}\n\n{{ dbt.hash(dbt.concat(fields)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.hash", "macro.dbt.concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.494505, "supported_languages": null}, "macro.dbt_utils.get_table_types_sql": {"name": "get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.get_table_types_sql", "macro_sql": "{%- macro get_table_types_sql() -%}\n {{ return(adapter.dispatch('get_table_types_sql', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils.default__get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.495046, "supported_languages": null}, "macro.dbt_utils.default__get_table_types_sql": {"name": "default__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.default__get_table_types_sql", "macro_sql": "{% macro default__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'EXTERNAL TABLE' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.49519, "supported_languages": null}, "macro.dbt_utils.postgres__get_table_types_sql": {"name": "postgres__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.postgres__get_table_types_sql", "macro_sql": "{% macro postgres__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'FOREIGN' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.495331, "supported_languages": null}, "macro.dbt_utils.databricks__get_table_types_sql": {"name": "databricks__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.databricks__get_table_types_sql", "macro_sql": "{% macro databricks__get_table_types_sql() %}\n case table_type\n when 'MANAGED' then 'table'\n when 'BASE TABLE' then 'table'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.495469, "supported_languages": null}, "macro.dbt_utils.get_single_value": {"name": "get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.get_single_value", "macro_sql": "{% macro get_single_value(query, default=none) %}\n {{ return(adapter.dispatch('get_single_value', 'dbt_utils')(query, default)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_single_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.495986, "supported_languages": null}, "macro.dbt_utils.default__get_single_value": {"name": "default__get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.default__get_single_value", "macro_sql": "{% macro default__get_single_value(query, default) %}\n\n{# This macro returns the (0, 0) record in a query, i.e. the first row of the first column #}\n\n {%- call statement('get_query_result', fetch_result=True, auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {%- if execute -%}\n\n {% set r = load_result('get_query_result').table.columns[0].values() %}\n {% if r | length == 0 %}\n {% do print('Query `' ~ query ~ '` returned no rows. Using the default value: ' ~ default) %}\n {% set sql_result = default %}\n {% else %}\n {% set sql_result = r[0] %}\n {% endif %}\n \n {%- else -%}\n \n {% set sql_result = default %}\n \n {%- endif -%}\n\n {% do return(sql_result) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.496809, "supported_languages": null}, "macro.dbt_utils.degrees_to_radians": {"name": "degrees_to_radians", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.degrees_to_radians", "macro_sql": "{% macro degrees_to_radians(degrees) -%}\n acos(-1) * {{degrees}} / 180\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.497896, "supported_languages": null}, "macro.dbt_utils.haversine_distance": {"name": "haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.haversine_distance", "macro_sql": "{% macro haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n {{ return(adapter.dispatch('haversine_distance', 'dbt_utils')(lat1,lon1,lat2,lon2,unit)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.bigquery__haversine_distance"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.498179, "supported_languages": null}, "macro.dbt_utils.default__haversine_distance": {"name": "default__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.default__haversine_distance", "macro_sql": "{% macro default__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n\n 2 * 3961 * asin(sqrt(power((sin(radians(({{ lat2 }} - {{ lat1 }}) / 2))), 2) +\n cos(radians({{lat1}})) * cos(radians({{lat2}})) *\n power((sin(radians(({{ lon2 }} - {{ lon1 }}) / 2))), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.4987588, "supported_languages": null}, "macro.dbt_utils.bigquery__haversine_distance": {"name": "bigquery__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.bigquery__haversine_distance", "macro_sql": "{% macro bigquery__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{% set radians_lat1 = dbt_utils.degrees_to_radians(lat1) %}\n{% set radians_lat2 = dbt_utils.degrees_to_radians(lat2) %}\n{% set radians_lon1 = dbt_utils.degrees_to_radians(lon1) %}\n{% set radians_lon2 = dbt_utils.degrees_to_radians(lon2) %}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n 2 * 3961 * asin(sqrt(power(sin(({{ radians_lat2 }} - {{ radians_lat1 }}) / 2), 2) +\n cos({{ radians_lat1 }}) * cos({{ radians_lat2 }}) *\n power(sin(({{ radians_lon2 }} - {{ radians_lon1 }}) / 2), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.degrees_to_radians"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.499585, "supported_languages": null}, "macro.amazon_ads_source.get_ad_group_history_columns": {"name": "get_ad_group_history_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_ad_group_history_columns.sql", "original_file_path": "macros/get_ad_group_history_columns.sql", "unique_id": "macro.amazon_ads_source.get_ad_group_history_columns", "macro_sql": "{% macro get_ad_group_history_columns() %}\n\n{% set columns = [\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"default_bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.500583, "supported_languages": null}, "macro.amazon_ads_source.get_product_ad_history_columns": {"name": "get_product_ad_history_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_product_ad_history_columns.sql", "original_file_path": "macros/get_product_ad_history_columns.sql", "unique_id": "macro.amazon_ads_source.get_product_ad_history_columns", "macro_sql": "{% macro get_product_ad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"asin\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"sku\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5016708, "supported_languages": null}, "macro.amazon_ads_source.get_profile_columns": {"name": "get_profile_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_profile_columns.sql", "original_file_path": "macros/get_profile_columns.sql", "unique_id": "macro.amazon_ads_source.get_profile_columns", "macro_sql": "{% macro get_profile_columns() %}\n\n{% set columns = [\n {\"name\": \"id\", \"datatype\": dbt.type_int()},\n {\"name\": \"account_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_marketplace_string_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_name\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_sub_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_valid_payment_method\", \"datatype\": dbt.type_boolean()},\n {\"name\": \"country_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"daily_budget\", \"datatype\": dbt.type_int()},\n {\"name\": \"timezone\", \"datatype\": dbt.type_string()},\n {\"name\": \"_fivetran_deleted\", \"datatype\": dbt.type_boolean()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.503149, "supported_languages": null}, "macro.amazon_ads_source.amazon_ads_add_pass_through_columns": {"name": "amazon_ads_add_pass_through_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/amazon_ads_add_pass_though_columns.sql", "original_file_path": "macros/amazon_ads_add_pass_though_columns.sql", "unique_id": "macro.amazon_ads_source.amazon_ads_add_pass_through_columns", "macro_sql": "{% macro amazon_ads_add_pass_through_columns(base_columns, pass_through_fields, except_fields=[]) %}\n\n{% if pass_through_fields %}\n {% for column in pass_through_fields %}\n \n {% if column is mapping %}\n {% set col_name = column.alias|default(column.name)|lower %}\n\n {% if col_name not in except_fields %}\n {% if column.alias %}\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n {% else %}\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n {% endif %}\n {% endif %}\n\n {% else %}\n {% if column|lower not in except_fields %}\n {% do base_columns.append({ \"name\": column, \"datatype\": dbt.type_string()}) %}\n {% endif %}\n {% endif %}\n\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.504849, "supported_languages": null}, "macro.amazon_ads_source.get_advertised_product_report_columns": {"name": "get_advertised_product_report_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_advertised_product_report_columns.sql", "original_file_path": "macros/get_advertised_product_report_columns.sql", "unique_id": "macro.amazon_ads_source.get_advertised_product_report_columns", "macro_sql": "{% macro get_advertised_product_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"ad_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"advertised_asin\", \"datatype\": dbt.type_string()},\n {\"name\": \"advertised_sku\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__advertised_product_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads_source.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.506738, "supported_languages": null}, "macro.amazon_ads_source.get_ad_group_level_report_columns": {"name": "get_ad_group_level_report_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_ad_group_level_report_columns.sql", "original_file_path": "macros/get_ad_group_level_report_columns.sql", "unique_id": "macro.amazon_ads_source.get_ad_group_level_report_columns", "macro_sql": "{% macro get_ad_group_level_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"campaign_bidding_strategy\", \"datatype\": dbt.type_string()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__ad_group_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads_source.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.507967, "supported_languages": null}, "macro.amazon_ads_source.get_search_term_ad_keyword_report_columns": {"name": "get_search_term_ad_keyword_report_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_search_term_ad_keyword_report_columns.sql", "original_file_path": "macros/get_search_term_ad_keyword_report_columns.sql", "unique_id": "macro.amazon_ads_source.get_search_term_ad_keyword_report_columns", "macro_sql": "{% macro get_search_term_ad_keyword_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"ad_keyword_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"keyword_bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"keyword_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"search_term\", \"datatype\": dbt.type_string()},\n {\"name\": \"targeting\", \"datatype\": dbt.type_string()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__search_term_ad_keyword_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads_source.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.510069, "supported_languages": null}, "macro.amazon_ads_source.get_campaign_level_report_columns": {"name": "get_campaign_level_report_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_campaign_level_report_columns.sql", "original_file_path": "macros/get_campaign_level_report_columns.sql", "unique_id": "macro.amazon_ads_source.get_campaign_level_report_columns", "macro_sql": "{% macro get_campaign_level_report_columns() %}\n\n{% set columns = [\n {\"name\": \"campaign_applicable_budget_rule_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_applicable_budget_rule_name\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_bidding_strategy\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"campaign_rule_based_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__campaign_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_float", "macro.dbt.type_int", "macro.amazon_ads_source.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.511864, "supported_languages": null}, "macro.amazon_ads_source.get_campaign_history_columns": {"name": "get_campaign_history_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_campaign_history_columns.sql", "original_file_path": "macros/get_campaign_history_columns.sql", "unique_id": "macro.amazon_ads_source.get_campaign_history_columns", "macro_sql": "{% macro get_campaign_history_columns() %}\n\n{% set columns = [\n {\"name\": \"bidding_strategy\", \"datatype\": dbt.type_string()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"end_date\", \"datatype\": \"date\"},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"portfolio_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"profile_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"start_date\", \"datatype\": \"date\"},\n {\"name\": \"state\", \"datatype\": dbt.type_string()},\n {\"name\": \"targeting_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"budget\", \"datatype\": dbt.type_float()},\n {\"name\": \"budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"effective_budget\", \"datatype\": dbt.type_float()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_timestamp", "macro.dbt.type_int", "macro.dbt.type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.513553, "supported_languages": null}, "macro.amazon_ads_source.get_portfolio_history_columns": {"name": "get_portfolio_history_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_portfolio_history_columns.sql", "original_file_path": "macros/get_portfolio_history_columns.sql", "unique_id": "macro.amazon_ads_source.get_portfolio_history_columns", "macro_sql": "{% macro get_portfolio_history_columns() %}\n\n{% set columns = [\n {\"name\": \"budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"budget_end_date\", \"datatype\": \"date\"},\n {\"name\": \"budget_policy\", \"datatype\": dbt.type_string()},\n {\"name\": \"budget_start_date\", \"datatype\": \"date\"},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_int()},\n {\"name\": \"in_budget\", \"datatype\": \"boolean\"},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"profile_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_float", "macro.dbt.type_string", "macro.dbt.type_timestamp", "macro.dbt.type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.515, "supported_languages": null}, "macro.amazon_ads_source.get_targeting_keyword_report_columns": {"name": "get_targeting_keyword_report_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_targeting_keyword_report_columns.sql", "original_file_path": "macros/get_targeting_keyword_report_columns.sql", "unique_id": "macro.amazon_ads_source.get_targeting_keyword_report_columns", "macro_sql": "{% macro get_targeting_keyword_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"ad_keyword_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"keyword_bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"keyword_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"keyword_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"match_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"targeting\", \"datatype\": dbt.type_string()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__targeting_keyword_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads_source.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.517075, "supported_languages": null}, "macro.amazon_ads_source.get_keyword_history_columns": {"name": "get_keyword_history_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/get_keyword_history_columns.sql", "original_file_path": "macros/get_keyword_history_columns.sql", "unique_id": "macro.amazon_ads_source.get_keyword_history_columns", "macro_sql": "{% macro get_keyword_history_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"keyword_text\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"match_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"native_language_keyword\", \"datatype\": dbt.type_string()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()},\n {\"name\": \"native_language_locale\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_float", "macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.518476, "supported_languages": null}, "macro.amazon_ads_source.amazon_ads_fill_pass_through_columns": {"name": "amazon_ads_fill_pass_through_columns", "resource_type": "macro", "package_name": "amazon_ads_source", "path": "macros/amazon_ads_fill_pass_through_columns.sql", "original_file_path": "macros/amazon_ads_fill_pass_through_columns.sql", "unique_id": "macro.amazon_ads_source.amazon_ads_fill_pass_through_columns", "macro_sql": "{% macro amazon_ads_fill_pass_through_columns(pass_through_fields, except=[]) %}\n\n{% if pass_through_fields %}\n {% for field in pass_through_fields %}\n {% if (field.alias if field.alias else field.name) not in except %}\n {% if field.transform_sql %}\n , coalesce(cast({{ field.transform_sql }} as {{ dbt.type_float() }}), 0) as {{ field.alias if field.alias else field.name }}\n {% else %}\n , coalesce(cast({{ field.alias if field.alias else field.name }} as {{ dbt.type_float() }}), 0) as {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5194979, "supported_languages": null}, "macro.amazon_ads.amazon_ads_persist_pass_through_columns": {"name": "amazon_ads_persist_pass_through_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/amazon_ads_persist_pass_through_columns.sql", "original_file_path": "macros/amazon_ads_persist_pass_through_columns.sql", "unique_id": "macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro_sql": "{% macro amazon_ads_persist_pass_through_columns(pass_through_variable, identifier=none, transform='', coalesce_with=none, exclude_fields=[]) %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n {% set field_name = field.alias|default(field.name)|lower if field is mapping else field %}\n {% if field_name not in exclude_fields %}\n , {{ transform ~ '(' ~ ('coalesce(' if coalesce_with is not none else '') ~ (identifier ~ '.' if identifier else '') ~ field_name ~ ((', ' ~ coalesce_with ~ ')') if coalesce_with is not none else '') ~ ')' }} as {{ field_name }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.52054, "supported_languages": null}, "macro.fivetran_utils.enabled_vars": {"name": "enabled_vars", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars.sql", "original_file_path": "macros/enabled_vars.sql", "unique_id": "macro.fivetran_utils.enabled_vars", "macro_sql": "{% macro enabled_vars(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, True) == False %}\n {{ return(False) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(True) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.52094, "supported_languages": null}, "macro.fivetran_utils.percentile": {"name": "percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.percentile", "macro_sql": "{% macro percentile(percentile_field, partition_field, percent) -%}\n\n{{ adapter.dispatch('percentile', 'fivetran_utils') (percentile_field, partition_field, percent) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.bigquery__percentile"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.521898, "supported_languages": null}, "macro.fivetran_utils.default__percentile": {"name": "default__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.default__percentile", "macro_sql": "{% macro default__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5220668, "supported_languages": null}, "macro.fivetran_utils.redshift__percentile": {"name": "redshift__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.redshift__percentile", "macro_sql": "{% macro redshift__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.522232, "supported_languages": null}, "macro.fivetran_utils.bigquery__percentile": {"name": "bigquery__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.bigquery__percentile", "macro_sql": "{% macro bigquery__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5224, "supported_languages": null}, "macro.fivetran_utils.postgres__percentile": {"name": "postgres__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.postgres__percentile", "macro_sql": "{% macro postgres__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n /* have to group by partition field */\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5225458, "supported_languages": null}, "macro.fivetran_utils.spark__percentile": {"name": "spark__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.spark__percentile", "macro_sql": "{% macro spark__percentile(percentile_field, partition_field, percent) %}\n\n percentile( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.522711, "supported_languages": null}, "macro.fivetran_utils.pivot_json_extract": {"name": "pivot_json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/pivot_json_extract.sql", "original_file_path": "macros/pivot_json_extract.sql", "unique_id": "macro.fivetran_utils.pivot_json_extract", "macro_sql": "{% macro pivot_json_extract(string, list_of_properties) %}\n\n{%- for property in list_of_properties -%}\n{%- if property is mapping -%}\nreplace( {{ fivetran_utils.json_extract(string, property.name) }}, '\"', '') as {{ property.alias if property.alias else property.name | replace(' ', '_') | replace('.', '_') | lower }}\n\n{%- else -%}\nreplace( {{ fivetran_utils.json_extract(string, property) }}, '\"', '') as {{ property | replace(' ', '_') | lower }}\n\n{%- endif -%}\n{%- if not loop.last -%},{%- endif %}\n{% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.523511, "supported_languages": null}, "macro.fivetran_utils.persist_pass_through_columns": {"name": "persist_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/persist_pass_through_columns.sql", "original_file_path": "macros/persist_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.persist_pass_through_columns", "macro_sql": "{% macro persist_pass_through_columns(pass_through_variable, identifier=none, transform='') %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n , {{ transform ~ '(' ~ (identifier ~ '.' if identifier else '') ~ (field.alias if field.alias else field.name) ~ ')' }} as {{ field.alias if field.alias else field.name }}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.524159, "supported_languages": null}, "macro.fivetran_utils.json_parse": {"name": "json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.json_parse", "macro_sql": "{% macro json_parse(string, string_path) -%}\n\n{{ adapter.dispatch('json_parse', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.bigquery__json_parse"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5255191, "supported_languages": null}, "macro.fivetran_utils.default__json_parse": {"name": "default__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.default__json_parse", "macro_sql": "{% macro default__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.525833, "supported_languages": null}, "macro.fivetran_utils.redshift__json_parse": {"name": "redshift__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.redshift__json_parse", "macro_sql": "{% macro redshift__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5260851, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_parse": {"name": "bigquery__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.bigquery__json_parse", "macro_sql": "{% macro bigquery__json_parse(string, string_path) %}\n\n \n json_extract_scalar({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.526326, "supported_languages": null}, "macro.fivetran_utils.postgres__json_parse": {"name": "postgres__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.postgres__json_parse", "macro_sql": "{% macro postgres__json_parse(string, string_path) %}\n\n {{string}}::json #>> '{ {%- for s in string_path -%}{{ s }}{%- if not loop.last -%},{%- endif -%}{%- endfor -%} }'\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5265658, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_parse": {"name": "snowflake__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.snowflake__json_parse", "macro_sql": "{% macro snowflake__json_parse(string, string_path) %}\n\n parse_json( {{string}} ) {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.526829, "supported_languages": null}, "macro.fivetran_utils.spark__json_parse": {"name": "spark__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.spark__json_parse", "macro_sql": "{% macro spark__json_parse(string, string_path) %}\n\n {{string}} : {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5270982, "supported_languages": null}, "macro.fivetran_utils.sqlserver__json_parse": {"name": "sqlserver__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.sqlserver__json_parse", "macro_sql": "{% macro sqlserver__json_parse(string, string_path) %}\n\n json_value({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.527343, "supported_languages": null}, "macro.fivetran_utils.max_bool": {"name": "max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.max_bool", "macro_sql": "{% macro max_bool(boolean_field) -%}\n\n{{ adapter.dispatch('max_bool', 'fivetran_utils') (boolean_field) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.bigquery__max_bool"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5276742, "supported_languages": null}, "macro.fivetran_utils.default__max_bool": {"name": "default__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.default__max_bool", "macro_sql": "{% macro default__max_bool(boolean_field) %}\n\n bool_or( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5277781, "supported_languages": null}, "macro.fivetran_utils.snowflake__max_bool": {"name": "snowflake__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.snowflake__max_bool", "macro_sql": "{% macro snowflake__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.527881, "supported_languages": null}, "macro.fivetran_utils.bigquery__max_bool": {"name": "bigquery__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.bigquery__max_bool", "macro_sql": "{% macro bigquery__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5279832, "supported_languages": null}, "macro.fivetran_utils.calculated_fields": {"name": "calculated_fields", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/calculated_fields.sql", "original_file_path": "macros/calculated_fields.sql", "unique_id": "macro.fivetran_utils.calculated_fields", "macro_sql": "{% macro calculated_fields(variable) -%}\n\n{% if var(variable, none) %}\n {% for field in var(variable) %}\n , {{ field.transform_sql }} as {{ field.name }} \n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.528351, "supported_languages": null}, "macro.fivetran_utils.drop_schemas_automation": {"name": "drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.drop_schemas_automation", "macro_sql": "{% macro drop_schemas_automation(drop_target_schema=true) %}\n {{ return(adapter.dispatch('drop_schemas_automation', 'fivetran_utils')(drop_target_schema)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__drop_schemas_automation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5290408, "supported_languages": null}, "macro.fivetran_utils.default__drop_schemas_automation": {"name": "default__drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.default__drop_schemas_automation", "macro_sql": "{% macro default__drop_schemas_automation(drop_target_schema=true) %}\n\n{% set fetch_list_sql %}\n {% if target.type not in ('databricks', 'spark') %}\n select schema_name\n from \n {{ wrap_in_quotes(target.database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like '{{ target.schema | lower }}{%- if not drop_target_schema -%}_{%- endif -%}%'\n {% else %}\n SHOW SCHEMAS LIKE '{{ target.schema }}{%- if not drop_target_schema -%}_{%- endif -%}*'\n {% endif %}\n{% endset %}\n\n{% set results = run_query(fetch_list_sql) %}\n\n{% if execute %}\n {% set results_list = results.columns[0].values() %}\n{% else %}\n {% set results_list = [] %}\n{% endif %}\n\n{% for schema_to_drop in results_list %}\n {% do adapter.drop_schema(api.Relation.create(database=target.database, schema=schema_to_drop)) %}\n {{ print('Schema ' ~ schema_to_drop ~ ' successfully dropped from the ' ~ target.database ~ ' database.\\n')}}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.wrap_in_quotes", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.53007, "supported_languages": null}, "macro.fivetran_utils.seed_data_helper": {"name": "seed_data_helper", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/seed_data_helper.sql", "original_file_path": "macros/seed_data_helper.sql", "unique_id": "macro.fivetran_utils.seed_data_helper", "macro_sql": "{% macro seed_data_helper(seed_name, warehouses) %}\n\n{% if target.type in warehouses %}\n {% for w in warehouses %}\n {% if target.type == w %}\n {{ return(ref(seed_name ~ \"_\" ~ w ~ \"\")) }}\n {% endif %}\n {% endfor %}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.530655, "supported_languages": null}, "macro.fivetran_utils.fill_pass_through_columns": {"name": "fill_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_pass_through_columns.sql", "original_file_path": "macros/fill_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.fill_pass_through_columns", "macro_sql": "{% macro fill_pass_through_columns(pass_through_variable) %}\n\n{% if var(pass_through_variable) %}\n {% for field in var(pass_through_variable) %}\n {% if field is mapping %}\n {% if field.transform_sql %}\n , {{ field.transform_sql }} as {{ field.alias if field.alias else field.name }}\n {% else %}\n , {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% else %}\n , {{ field }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.531452, "supported_languages": null}, "macro.fivetran_utils.string_agg": {"name": "string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.string_agg", "macro_sql": "{% macro string_agg(field_to_agg, delimiter) -%}\n\n{{ adapter.dispatch('string_agg', 'fivetran_utils') (field_to_agg, delimiter) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__string_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5319319, "supported_languages": null}, "macro.fivetran_utils.default__string_agg": {"name": "default__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.default__string_agg", "macro_sql": "{% macro default__string_agg(field_to_agg, delimiter) %}\n string_agg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.532066, "supported_languages": null}, "macro.fivetran_utils.snowflake__string_agg": {"name": "snowflake__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.snowflake__string_agg", "macro_sql": "{% macro snowflake__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.532202, "supported_languages": null}, "macro.fivetran_utils.redshift__string_agg": {"name": "redshift__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.redshift__string_agg", "macro_sql": "{% macro redshift__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5323389, "supported_languages": null}, "macro.fivetran_utils.spark__string_agg": {"name": "spark__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.spark__string_agg", "macro_sql": "{% macro spark__string_agg(field_to_agg, delimiter) %}\n -- collect set will remove duplicates\n replace(replace(replace(cast( collect_set({{ field_to_agg }}) as string), '[', ''), ']', ''), ', ', {{ delimiter }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.532477, "supported_languages": null}, "macro.fivetran_utils.timestamp_diff": {"name": "timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.timestamp_diff", "macro_sql": "{% macro timestamp_diff(first_date, second_date, datepart) %}\n {{ adapter.dispatch('timestamp_diff', 'fivetran_utils')(first_date, second_date, datepart) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.bigquery__timestamp_diff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.535483, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_diff": {"name": "default__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.default__timestamp_diff", "macro_sql": "{% macro default__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.535716, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_diff": {"name": "redshift__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_diff", "macro_sql": "{% macro redshift__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5358772, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_diff": {"name": "bigquery__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_diff", "macro_sql": "{% macro bigquery__timestamp_diff(first_date, second_date, datepart) %}\n\n timestamp_diff(\n {{second_date}},\n {{first_date}},\n {{datepart}}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.536032, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_diff": {"name": "postgres__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_diff", "macro_sql": "{% macro postgres__timestamp_diff(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 ({{ dbt.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt.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 ({{ dbt.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 ({{ dbt.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt.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 ({{ dbt.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 ({{ dbt.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 %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.537756, "supported_languages": null}, "macro.fivetran_utils.try_cast": {"name": "try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.try_cast", "macro_sql": "{% macro try_cast(field, type) %}\n {{ adapter.dispatch('try_cast', 'fivetran_utils') (field, type) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.bigquery__try_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.538713, "supported_languages": null}, "macro.fivetran_utils.default__try_cast": {"name": "default__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.default__try_cast", "macro_sql": "{% macro default__try_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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.53886, "supported_languages": null}, "macro.fivetran_utils.redshift__try_cast": {"name": "redshift__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.redshift__try_cast", "macro_sql": "{% macro redshift__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when trim({{field}}) ~ '^(0|[1-9][0-9]*)$' then trim({{field}})\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.539139, "supported_languages": null}, "macro.fivetran_utils.postgres__try_cast": {"name": "postgres__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.postgres__try_cast", "macro_sql": "{% macro postgres__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar)) ~ '^(0|[1-9][0-9]*)$' \n then replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar))\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.539433, "supported_languages": null}, "macro.fivetran_utils.snowflake__try_cast": {"name": "snowflake__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.snowflake__try_cast", "macro_sql": "{% macro snowflake__try_cast(field, type) %}\n try_cast(cast({{field}} as varchar) as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.539565, "supported_languages": null}, "macro.fivetran_utils.bigquery__try_cast": {"name": "bigquery__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.bigquery__try_cast", "macro_sql": "{% macro bigquery__try_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.539692, "supported_languages": null}, "macro.fivetran_utils.spark__try_cast": {"name": "spark__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.spark__try_cast", "macro_sql": "{% macro spark__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.539818, "supported_languages": null}, "macro.fivetran_utils.sqlserver__try_cast": {"name": "sqlserver__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.sqlserver__try_cast", "macro_sql": "{% macro sqlserver__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.539947, "supported_languages": null}, "macro.fivetran_utils.source_relation": {"name": "source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.source_relation", "macro_sql": "{% macro source_relation(union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('source_relation', 'fivetran_utils') (union_schema_variable, union_database_variable) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__source_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.540437, "supported_languages": null}, "macro.fivetran_utils.default__source_relation": {"name": "default__source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.default__source_relation", "macro_sql": "{% macro default__source_relation(union_schema_variable, union_database_variable) %}\n\n{% if var(union_schema_variable, none) %}\n, case\n {% for schema in var(union_schema_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%.{{ schema|lower }}.%' then '{{ schema|lower }}'\n {% endfor %}\n end as source_relation\n{% elif var(union_database_variable, none) %}\n, case\n {% for database in var(union_database_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%{{ database|lower }}.%' then '{{ database|lower }}'\n {% endfor %}\n end as source_relation\n{% else %}\n, cast('' as {{ dbt.type_string() }}) as source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.541022, "supported_languages": null}, "macro.fivetran_utils.first_value": {"name": "first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.first_value", "macro_sql": "{% macro first_value(first_value_field, partition_field, order_by_field, order=\"asc\") -%}\n\n{{ adapter.dispatch('first_value', 'fivetran_utils') (first_value_field, partition_field, order_by_field, order) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__first_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.541528, "supported_languages": null}, "macro.fivetran_utils.default__first_value": {"name": "default__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.default__first_value", "macro_sql": "{% macro default__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.541734, "supported_languages": null}, "macro.fivetran_utils.redshift__first_value": {"name": "redshift__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.redshift__first_value", "macro_sql": "{% macro redshift__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} , {{ partition_field }} rows unbounded preceding )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.54196, "supported_languages": null}, "macro.fivetran_utils.add_dbt_source_relation": {"name": "add_dbt_source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_dbt_source_relation.sql", "original_file_path": "macros/add_dbt_source_relation.sql", "unique_id": "macro.fivetran_utils.add_dbt_source_relation", "macro_sql": "{% macro add_dbt_source_relation() %}\n\n{% if var('union_schemas', none) or var('union_databases', none) %}\n, _dbt_source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.542218, "supported_languages": null}, "macro.fivetran_utils.add_pass_through_columns": {"name": "add_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_pass_through_columns.sql", "original_file_path": "macros/add_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.add_pass_through_columns", "macro_sql": "{% macro add_pass_through_columns(base_columns, pass_through_var) %}\n\n {% if pass_through_var %}\n\n {% for column in pass_through_var %}\n\n {% if column is mapping %}\n\n {% if column.alias %}\n\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n \n {% endif %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column, \"datatype\": dbt.type_string()}) %}\n\n {% endif %}\n\n {% endfor %}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.543395, "supported_languages": null}, "macro.fivetran_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, aliases=none, column_override=none, include=[], exclude=[], source_column_name=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n {%- set source_column_name = source_column_name if source_column_name is not none else '_dbt_source_relation' -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ aliases[loop.index0] if aliases else relation }}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5474088, "supported_languages": null}, "macro.fivetran_utils.union_tables": {"name": "union_tables", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_tables", "macro_sql": "{%- macro union_tables(tables, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_table') -%}\n\n {%- do exceptions.warn(\"Warning: the `union_tables` macro is no longer supported and will be deprecated in a future release of dbt-utils. Use the `union_relations` macro instead\") -%}\n\n {{ return(dbt_utils.union_relations(tables, column_override, include, exclude, source_column_name)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.547777, "supported_languages": null}, "macro.fivetran_utils.snowflake_seed_data": {"name": "snowflake_seed_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/snowflake_seed_data.sql", "original_file_path": "macros/snowflake_seed_data.sql", "unique_id": "macro.fivetran_utils.snowflake_seed_data", "macro_sql": "{% macro snowflake_seed_data(seed_name) %}\n\n{% if target.type == 'snowflake' %}\n{{ return(ref(seed_name ~ '_snowflake')) }}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.548152, "supported_languages": null}, "macro.fivetran_utils.fill_staging_columns": {"name": "fill_staging_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.fill_staging_columns", "macro_sql": "{% macro fill_staging_columns(source_columns, staging_columns) -%}\n\n{%- set source_column_names = source_columns|map(attribute='name')|map('lower')|list -%}\n\n{%- for column in staging_columns %}\n {% if column.name|lower in source_column_names -%}\n {{ fivetran_utils.quote_column(column) }} as \n {%- if 'alias' in column %} {{ column.alias }} {% else %} {{ fivetran_utils.quote_column(column) }} {%- endif -%}\n {%- else -%}\n cast(null as {{ column.datatype }})\n {%- if 'alias' in column %} as {{ column.alias }} {% else %} as {{ fivetran_utils.quote_column(column) }} {% endif -%}\n {%- endif -%}\n {%- if not loop.last -%} , {% endif -%}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.quote_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5497549, "supported_languages": null}, "macro.fivetran_utils.quote_column": {"name": "quote_column", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.quote_column", "macro_sql": "{% macro quote_column(column) %}\n {% if 'quote' in column %}\n {% if column.quote %}\n {% if target.type in ('bigquery', 'spark', 'databricks') %}\n `{{ column.name }}`\n {% elif target.type == 'snowflake' %}\n \"{{ column.name | upper }}\"\n {% else %}\n \"{{ column.name }}\"\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.550326, "supported_languages": null}, "macro.fivetran_utils.json_extract": {"name": "json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.json_extract", "macro_sql": "{% macro json_extract(string, string_path) -%}\n\n{{ adapter.dispatch('json_extract', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.bigquery__json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5509062, "supported_languages": null}, "macro.fivetran_utils.default__json_extract": {"name": "default__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.default__json_extract", "macro_sql": "{% macro default__json_extract(string, string_path) %}\n\n json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} )\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.551075, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_extract": {"name": "snowflake__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.snowflake__json_extract", "macro_sql": "{% macro snowflake__json_extract(string, string_path) %}\n\n json_extract_path_text(try_parse_json( {{string}} ), {{ \"'\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.551231, "supported_languages": null}, "macro.fivetran_utils.redshift__json_extract": {"name": "redshift__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.redshift__json_extract", "macro_sql": "{% macro redshift__json_extract(string, string_path) %}\n\n case when is_valid_json( {{string}} ) then json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} ) else null end\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.551413, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_extract": {"name": "bigquery__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.bigquery__json_extract", "macro_sql": "{% macro bigquery__json_extract(string, string_path) %}\n\n json_extract_scalar({{string}}, {{ \"'$.\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5515661, "supported_languages": null}, "macro.fivetran_utils.postgres__json_extract": {"name": "postgres__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.postgres__json_extract", "macro_sql": "{% macro postgres__json_extract(string, string_path) %}\n\n {{string}}::json->>{{\"'\" ~ string_path ~ \"'\" }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.551717, "supported_languages": null}, "macro.fivetran_utils.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.552553, "supported_languages": null}, "macro.fivetran_utils.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n\n {%- set enabled_array = [] -%}\n {% for node in graph.sources.values() %}\n {% if node.identifier == source.identifier %}\n {% if (node.meta['is_enabled'] | default(true)) %}\n {%- do enabled_array.append(1) -%}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% set is_enabled = (enabled_array != []) %}\n\n select\n {% if is_enabled %}\n max({{ loaded_at_field }})\n {% else %} \n {{ current_timestamp() }} {% endif %} as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n\n {% if is_enabled %}\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endif %}\n\n {% endcall %}\n\n {% if dbt_version.split('.') | map('int') | list >= [1, 5, 0] %}\n {{ return(load_result('collect_freshness')) }}\n {% else %}\n {{ return(load_result('collect_freshness').table) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5538409, "supported_languages": null}, "macro.fivetran_utils.timestamp_add": {"name": "timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.timestamp_add", "macro_sql": "{% macro timestamp_add(datepart, interval, from_timestamp) -%}\n\n{{ adapter.dispatch('timestamp_add', 'fivetran_utils') (datepart, interval, from_timestamp) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.bigquery__timestamp_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.55456, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_add": {"name": "default__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.default__timestamp_add", "macro_sql": "{% macro default__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestampadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5547268, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_add": {"name": "bigquery__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_add", "macro_sql": "{% macro bigquery__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestamp_add({{ from_timestamp }}, interval {{ interval }} {{ datepart }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.554894, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_add": {"name": "redshift__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_add", "macro_sql": "{% macro redshift__timestamp_add(datepart, interval, from_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.555062, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_add": {"name": "postgres__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_add", "macro_sql": "{% macro postgres__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ from_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5552242, "supported_languages": null}, "macro.fivetran_utils.spark__timestamp_add": {"name": "spark__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.spark__timestamp_add", "macro_sql": "{% macro spark__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ dbt.dateadd(datepart, interval, from_timestamp) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5554051, "supported_languages": null}, "macro.fivetran_utils.ceiling": {"name": "ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.ceiling", "macro_sql": "{% macro ceiling(num) -%}\n\n{{ adapter.dispatch('ceiling', 'fivetran_utils') (num) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__ceiling"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.555656, "supported_languages": null}, "macro.fivetran_utils.default__ceiling": {"name": "default__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.default__ceiling", "macro_sql": "{% macro default__ceiling(num) %}\n ceiling({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5557601, "supported_languages": null}, "macro.fivetran_utils.snowflake__ceiling": {"name": "snowflake__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.snowflake__ceiling", "macro_sql": "{% macro snowflake__ceiling(num) %}\n ceil({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.555861, "supported_languages": null}, "macro.fivetran_utils.remove_prefix_from_columns": {"name": "remove_prefix_from_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/remove_prefix_from_columns.sql", "original_file_path": "macros/remove_prefix_from_columns.sql", "unique_id": "macro.fivetran_utils.remove_prefix_from_columns", "macro_sql": "{% macro remove_prefix_from_columns(columns, prefix='', exclude=[]) %}\n\n {%- for col in columns if col.name not in exclude -%}\n {%- if col.name[:prefix|length]|lower == prefix -%}\n {{ col.name }} as {{ col.name[prefix|length:] }}\n {%- else -%}\n {{ col.name }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.556499, "supported_languages": null}, "macro.fivetran_utils.fivetran_date_spine": {"name": "fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.fivetran_date_spine", "macro_sql": "{% macro fivetran_date_spine(datepart, start_date, end_date) -%}\n\n{{ return(adapter.dispatch('fivetran_date_spine', 'fivetran_utils') (datepart, start_date, end_date)) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__fivetran_date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.557895, "supported_languages": null}, "macro.fivetran_utils.default__fivetran_date_spine": {"name": "default__fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.default__fivetran_date_spine", "macro_sql": "{% macro default__fivetran_date_spine(datepart, start_date, end_date) %}\n\n {{ dbt_utils.date_spine(datepart, start_date, end_date) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.558073, "supported_languages": null}, "macro.fivetran_utils.sqlserver__fivetran_date_spine": {"name": "sqlserver__fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.sqlserver__fivetran_date_spine", "macro_sql": "{% macro sqlserver__fivetran_date_spine(datepart, start_date, end_date) -%}\n\n {% set date_spine_query %}\n with\n\n l0 as (\n\n select c\n from (select 1 union all select 1) as d(c)\n\n ),\n l1 as (\n\n select\n 1 as c\n from l0 as a\n cross join l0 as b\n\n ),\n\n l2 as (\n\n select 1 as c\n from l1 as a\n cross join l1 as b\n ),\n\n l3 as (\n\n select 1 as c\n from l2 as a\n cross join l2 as b\n ),\n\n l4 as (\n\n select 1 as c\n from l3 as a\n cross join l3 as b\n ),\n\n l5 as (\n\n select 1 as c\n from l4 as a\n cross join l4 as b\n ),\n\n nums as (\n\n select row_number() over (order by (select null)) as rownum\n from l5\n ),\n\n rawdata as (\n\n select top ({{dbt.datediff(start_date, end_date, datepart)}}) rownum -1 as n\n from nums\n order by rownum\n ),\n\n all_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n 'n',\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\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 order by 1\n\n {% endset %}\n\n {% set results = run_query(date_spine_query) %}\n\n {% if execute %}\n\n {% set results_list = results.columns[0].values() %}\n \n {% else %}\n\n {% set results_list = [] %}\n\n {% endif %}\n\n {%- for date_field in results_list %}\n select cast('{{ date_field }}' as date) as date_{{datepart}} {{ 'union all ' if not loop.last else '' }}\n {% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff", "macro.dbt.dateadd", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.558922, "supported_languages": null}, "macro.fivetran_utils.union_data": {"name": "union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.union_data", "macro_sql": "{%- macro union_data(table_identifier, database_variable, schema_variable, default_database, default_schema, default_variable, union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('union_data', 'fivetran_utils') (\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.default__union_data"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.562512, "supported_languages": null}, "macro.fivetran_utils.default__union_data": {"name": "default__union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.default__union_data", "macro_sql": "{%- macro default__union_data(\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) -%}\n\n{%- if var(union_schema_variable, none) -%}\n\n {%- set relations = [] -%}\n \n {%- if var(union_schema_variable) is string -%}\n {%- set trimmed = var(union_schema_variable)|trim('[')|trim(']') -%}\n {%- set schemas = trimmed.split(',')|map('trim',\" \")|map('trim','\"')|map('trim',\"'\") -%}\n {%- else -%}\n {%- set schemas = var(union_schema_variable) -%}\n {%- endif -%}\n\n {%- for schema in var(union_schema_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else var(database_variable, default_database),\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else schema,\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n \n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n \n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- elif var(union_database_variable, none) -%}\n\n {%- set relations = [] -%}\n\n {%- for database in var(union_database_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else database,\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else var(schema_variable, default_schema),\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n\n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n\n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- else -%}\n {% set exception_schemas = {\"linkedin_company_pages\": \"linkedin_pages\", \"instagram_business_pages\": \"instagram_business\"} %}\n {% set relation = namespace(value=\"\") %}\n {% if default_schema in exception_schemas.keys() %}\n {% for corrected_schema_name in exception_schemas.items() %} \n {% if default_schema in corrected_schema_name %}\n {# In order for this macro to effectively work within upstream integration tests (mainly used by the Fivetran dbt package maintainers), this identifier variable selection is required to use the macro with different identifier names. #}\n {% set identifier_var = corrected_schema_name[1] + \"_\" + table_identifier + \"_identifier\" %}\n {%- set relation.value=adapter.get_relation(\n database=source(corrected_schema_name[1], table_identifier).database,\n schema=source(corrected_schema_name[1], table_identifier).schema,\n identifier=var(identifier_var, table_identifier)\n ) -%}\n {% endif %}\n {% endfor %}\n {% else %}\n {# In order for this macro to effectively work within upstream integration tests (mainly used by the Fivetran dbt package maintainers), this identifier variable selection is required to use the macro with different identifier names. #}\n {% set identifier_var = default_schema + \"_\" + table_identifier + \"_identifier\" %}\n {# Unfortunately the Twitter Organic identifiers were misspelled. As such, we will need to account for this in the model. This will be adjusted in the Twitter Organic package, but to ensure backwards compatibility, this needs to be included. #}\n {% if var(identifier_var, none) is none %} \n {% set identifier_var = default_schema + \"_\" + table_identifier + \"_identifer\" %}\n {% endif %}\n {%- set relation.value=adapter.get_relation(\n database=source(default_schema, table_identifier).database,\n schema=source(default_schema, table_identifier).schema,\n identifier=var(identifier_var, table_identifier)\n ) -%}\n {% endif %}\n{%- set table_exists=relation.value is not none -%}\n\n{%- if table_exists -%}\n select * \n from {{ relation.value }}\n{%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n{%- endif -%}\n{%- endif -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5673778, "supported_languages": null}, "macro.fivetran_utils.dummy_coalesce_value": {"name": "dummy_coalesce_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/dummy_coalesce_value.sql", "original_file_path": "macros/dummy_coalesce_value.sql", "unique_id": "macro.fivetran_utils.dummy_coalesce_value", "macro_sql": "{% macro dummy_coalesce_value(column) %}\n\n{% set coalesce_value = {\n 'STRING': \"'DUMMY_STRING'\",\n 'BOOLEAN': 'null',\n 'INT': 999999999,\n 'FLOAT': 999999999.99,\n 'TIMESTAMP': 'cast(\"2099-12-31\" as timestamp)',\n 'DATE': 'cast(\"2099-12-31\" as date)',\n} %}\n\n{% if column.is_float() %}\n{{ return(coalesce_value['FLOAT']) }}\n\n{% elif column.is_numeric() %}\n{{ return(coalesce_value['INT']) }}\n\n{% elif column.is_string() %}\n{{ return(coalesce_value['STRING']) }}\n\n{% elif column.data_type|lower == 'boolean' %}\n{{ return(coalesce_value['BOOLEAN']) }}\n\n{% elif 'timestamp' in column.data_type|lower %}\n{{ return(coalesce_value['TIMESTAMP']) }}\n\n{% elif 'date' in column.data_type|lower %}\n{{ return(coalesce_value['DATE']) }}\n\n{% elif 'int' in column.data_type|lower %}\n{{ return(coalesce_value['INT']) }}\n\n{% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.568832, "supported_languages": null}, "macro.fivetran_utils.extract_url_parameter": {"name": "extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.extract_url_parameter", "macro_sql": "{% macro extract_url_parameter(field, url_parameter) -%}\n\n{{ adapter.dispatch('extract_url_parameter', 'fivetran_utils') (field, url_parameter) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__extract_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.569175, "supported_languages": null}, "macro.fivetran_utils.default__extract_url_parameter": {"name": "default__extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.default__extract_url_parameter", "macro_sql": "{% macro default__extract_url_parameter(field, url_parameter) -%}\n\n{{ dbt_utils.get_url_parameter(field, url_parameter) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5693262, "supported_languages": null}, "macro.fivetran_utils.spark__extract_url_parameter": {"name": "spark__extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.spark__extract_url_parameter", "macro_sql": "{% macro spark__extract_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"=([^&]+)'\" -%}\nnullif(regexp_extract({{ field }}, {{ formatted_url_parameter }}, 1), '')\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5695229, "supported_languages": null}, "macro.fivetran_utils.wrap_in_quotes": {"name": "wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.wrap_in_quotes", "macro_sql": "{%- macro wrap_in_quotes(object_to_quote) -%}\n\n{{ return(adapter.dispatch('wrap_in_quotes', 'fivetran_utils')(object_to_quote)) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.default__wrap_in_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5698612, "supported_languages": null}, "macro.fivetran_utils.default__wrap_in_quotes": {"name": "default__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.default__wrap_in_quotes", "macro_sql": "{%- macro default__wrap_in_quotes(object_to_quote) -%}\n{# bigquery, spark, databricks #}\n `{{ object_to_quote }}`\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.569974, "supported_languages": null}, "macro.fivetran_utils.snowflake__wrap_in_quotes": {"name": "snowflake__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.snowflake__wrap_in_quotes", "macro_sql": "{%- macro snowflake__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote | upper }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5700889, "supported_languages": null}, "macro.fivetran_utils.redshift__wrap_in_quotes": {"name": "redshift__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.redshift__wrap_in_quotes", "macro_sql": "{%- macro redshift__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5701919, "supported_languages": null}, "macro.fivetran_utils.postgres__wrap_in_quotes": {"name": "postgres__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.postgres__wrap_in_quotes", "macro_sql": "{%- macro postgres__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.570293, "supported_languages": null}, "macro.fivetran_utils.array_agg": {"name": "array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.array_agg", "macro_sql": "{% macro array_agg(field_to_agg) -%}\n\n{{ adapter.dispatch('array_agg', 'fivetran_utils') (field_to_agg) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__array_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.570552, "supported_languages": null}, "macro.fivetran_utils.default__array_agg": {"name": "default__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.default__array_agg", "macro_sql": "{% macro default__array_agg(field_to_agg) %}\n array_agg({{ field_to_agg }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.570654, "supported_languages": null}, "macro.fivetran_utils.redshift__array_agg": {"name": "redshift__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.redshift__array_agg", "macro_sql": "{% macro redshift__array_agg(field_to_agg) %}\n listagg({{ field_to_agg }}, ',')\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.5707562, "supported_languages": null}, "macro.fivetran_utils.empty_variable_warning": {"name": "empty_variable_warning", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/empty_variable_warning.sql", "original_file_path": "macros/empty_variable_warning.sql", "unique_id": "macro.fivetran_utils.empty_variable_warning", "macro_sql": "{% macro empty_variable_warning(variable, downstream_model) %}\n\n{% if not var(variable) %}\n{{ log(\n \"\"\"\n Warning: You have passed an empty list to the \"\"\" ~ variable ~ \"\"\".\n As a result, you won't see the history of any columns in the \"\"\" ~ downstream_model ~ \"\"\" model.\n \"\"\",\n info=True\n) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.571156, "supported_languages": null}, "macro.fivetran_utils.enabled_vars_one_true": {"name": "enabled_vars_one_true", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars_one_true.sql", "original_file_path": "macros/enabled_vars_one_true.sql", "unique_id": "macro.fivetran_utils.enabled_vars_one_true", "macro_sql": "{% macro enabled_vars_one_true(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, False) == True %}\n {{ return(True) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(False) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1729891997.571548, "supported_languages": null}}, "docs": {"doc.dbt.__overview__": {"name": "__overview__", "resource_type": "doc", "package_name": "dbt", "path": "overview.md", "original_file_path": "docs/overview.md", "unique_id": "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"}, "doc.amazon_ads_source._fivetran_deleted": {"name": "_fivetran_deleted", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source._fivetran_deleted", "block_contents": "Boolean created by Fivetran to indicate whether the record has been deleted."}, "doc.amazon_ads_source._fivetran_id": {"name": "_fivetran_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source._fivetran_id", "block_contents": "Unique ID used by Fivetran to sync and dedupe data."}, "doc.amazon_ads_source._fivetran_synced": {"name": "_fivetran_synced", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source._fivetran_synced", "block_contents": "Timestamp of when a record was last synced."}, "doc.amazon_ads_source.account_id": {"name": "account_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.account_id", "block_contents": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces."}, "doc.amazon_ads_source.account_name": {"name": "account_name", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.account_name", "block_contents": "Account Name. Not currently populated for sellers."}, "doc.amazon_ads_source.ad_group_id": {"name": "ad_group_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.ad_group_id", "block_contents": "The ID of the AdGroup."}, "doc.amazon_ads_source.ad_group_name": {"name": "ad_group_name", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.ad_group_name", "block_contents": "The name of the AdGroup."}, "doc.amazon_ads_source.ad_id": {"name": "ad_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.ad_id", "block_contents": "The ID of the Ad."}, "doc.amazon_ads_source.ad_keyword_status": {"name": "ad_keyword_status", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.ad_keyword_status", "block_contents": "Current status of a keyword."}, "doc.amazon_ads_source.advertised_asin": {"name": "advertised_asin", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.advertised_asin", "block_contents": "The ASIN associated to an advertised product."}, "doc.amazon_ads_source.advertised_sku": {"name": "advertised_sku", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.advertised_sku", "block_contents": "The SKU being advertised."}, "doc.amazon_ads_source.bid_keyword": {"name": "bid_keyword", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.bid_keyword", "block_contents": "Bid associated with this keyword."}, "doc.amazon_ads_source.campaign_applicable_budget_rule_id": {"name": "campaign_applicable_budget_rule_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_applicable_budget_rule_id", "block_contents": "The ID associated to the active budget rule for a campaign."}, "doc.amazon_ads_source.campaign_applicable_budget_rule_name": {"name": "campaign_applicable_budget_rule_name", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_applicable_budget_rule_name", "block_contents": "The name associated to the active budget rule for a campaign."}, "doc.amazon_ads_source.campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_bidding_strategy", "block_contents": "The bidding strategy associated with a campaign."}, "doc.amazon_ads_source.campaign_budget_amount": {"name": "campaign_budget_amount", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_budget_amount", "block_contents": "Total budget allocated to the campaign."}, "doc.amazon_ads_source.campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_budget_currency_code", "block_contents": "The currency code associated with the campaign."}, "doc.amazon_ads_source.campaign_budget_type": {"name": "campaign_budget_type", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_budget_type", "block_contents": "One of: daily or lifetime."}, "doc.amazon_ads_source.campaign_id": {"name": "campaign_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_id", "block_contents": "The ID of the Campaign."}, "doc.amazon_ads_source.campaign_name": {"name": "campaign_name", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_name", "block_contents": "The name of the Campaign."}, "doc.amazon_ads_source.campaign_rule_based_budget_amount": {"name": "campaign_rule_based_budget_amount", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.campaign_rule_based_budget_amount", "block_contents": "The value of the rule-based budget for a campaign."}, "doc.amazon_ads_source.clicks": {"name": "clicks", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.clicks", "block_contents": "Total number of ad clicks."}, "doc.amazon_ads_source.cost": {"name": "cost", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.cost", "block_contents": "Total cost of ad clicks."}, "doc.amazon_ads_source.country_code": {"name": "country_code", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.country_code", "block_contents": "The code for a given country."}, "doc.amazon_ads_source.creation_date": {"name": "creation_date", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.creation_date", "block_contents": "The date of creation of the record."}, "doc.amazon_ads_source.currency_code": {"name": "currency_code", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.currency_code", "block_contents": "The currency used for all monetary values for entities under this profile."}, "doc.amazon_ads_source.default_bid": {"name": "default_bid", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.default_bid", "block_contents": "The date of creation of the record."}, "doc.amazon_ads_source.impressions": {"name": "impressions", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.impressions", "block_contents": "Total number of ad impressions."}, "doc.amazon_ads_source.is_most_recent_record": {"name": "is_most_recent_record", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.is_most_recent_record", "block_contents": "Boolean indicating whether record was the most recent instance."}, "doc.amazon_ads_source.keyword_bid": {"name": "keyword_bid", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.keyword_bid", "block_contents": "Bid associated with a keyword or targeting expression."}, "doc.amazon_ads_source.keyword_id": {"name": "keyword_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.keyword_id", "block_contents": "The ID of the keyword."}, "doc.amazon_ads_source.keyword_match_type": {"name": "keyword_match_type", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.keyword_match_type", "block_contents": "One of (broad, exact, or phrase.)"}, "doc.amazon_ads_source.keyword_type": {"name": "keyword_type", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.keyword_type", "block_contents": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT."}, "doc.amazon_ads_source.last_updated_date": {"name": "last_updated_date", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.last_updated_date", "block_contents": "Date of last update to record."}, "doc.amazon_ads_source.match_type": {"name": "match_type", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.match_type", "block_contents": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT."}, "doc.amazon_ads_source.negative_keyword_id": {"name": "negative_keyword_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.negative_keyword_id", "block_contents": "The ID of the negative keyword."}, "doc.amazon_ads_source.portfolio_id": {"name": "portfolio_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.portfolio_id", "block_contents": "The ID of the Portfolio."}, "doc.amazon_ads_source.portfolio_name": {"name": "portfolio_name", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.portfolio_name", "block_contents": "The name of the Portfolio."}, "doc.amazon_ads_source.profile_id": {"name": "profile_id", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.profile_id", "block_contents": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace."}, "doc.amazon_ads_source.report_date": {"name": "report_date", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.report_date", "block_contents": "The date of the report."}, "doc.amazon_ads_source.search_term": {"name": "search_term", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.search_term", "block_contents": "The search term used by the customer."}, "doc.amazon_ads_source.serving_status": {"name": "serving_status", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.serving_status", "block_contents": "The current serving status of the record."}, "doc.amazon_ads_source.state": {"name": "state", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.state", "block_contents": "The state of the record (enabled, paused, or archived)."}, "doc.amazon_ads_source.targeting": {"name": "targeting", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.targeting", "block_contents": "A string representation of the expression object used in the targeting clause."}, "doc.amazon_ads_source.source_relation": {"name": "source_relation", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.source_relation", "block_contents": "The source of the record if the unioning functionality is being used. If not this field will be empty."}, "doc.amazon_ads_source.purchases_30_d": {"name": "purchases_30_d", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.purchases_30_d", "block_contents": "Number of attributed conversion events occurring within 30 days of an ad click."}, "doc.amazon_ads_source.sales_30_d": {"name": "sales_30_d", "resource_type": "doc", "package_name": "amazon_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads_source.sales_30_d", "block_contents": "Total value of sales occurring within 30 days of an ad click."}, "doc.amazon_ads._fivetran_deleted": {"name": "_fivetran_deleted", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads._fivetran_deleted", "block_contents": "Boolean created by Fivetran to indicate whether the record has been deleted."}, "doc.amazon_ads._fivetran_id": {"name": "_fivetran_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads._fivetran_id", "block_contents": "Unique ID used by Fivetran to sync and dedupe data."}, "doc.amazon_ads._fivetran_synced": {"name": "_fivetran_synced", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads._fivetran_synced", "block_contents": "Timestamp of when a record was last synced."}, "doc.amazon_ads.account_id": {"name": "account_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.account_id", "block_contents": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces."}, "doc.amazon_ads.account_name": {"name": "account_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.account_name", "block_contents": "Account Name. Not currently populated for sellers."}, "doc.amazon_ads.ad_group_id": {"name": "ad_group_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_group_id", "block_contents": "The ID of the AdGroup."}, "doc.amazon_ads.ad_group_name": {"name": "ad_group_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_group_name", "block_contents": "The name of the AdGroup."}, "doc.amazon_ads.ad_id": {"name": "ad_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_id", "block_contents": "The ID of the Ad."}, "doc.amazon_ads.ad_keyword_status": {"name": "ad_keyword_status", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_keyword_status", "block_contents": "Current status of a keyword."}, "doc.amazon_ads.advertised_asin": {"name": "advertised_asin", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.advertised_asin", "block_contents": "The ASIN associated to an advertised product."}, "doc.amazon_ads.advertised_sku": {"name": "advertised_sku", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.advertised_sku", "block_contents": "The SKU being advertised."}, "doc.amazon_ads.bid_keyword": {"name": "bid_keyword", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.bid_keyword", "block_contents": "Bid associated with this keyword."}, "doc.amazon_ads.campaign_applicable_budget_rule_id": {"name": "campaign_applicable_budget_rule_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_applicable_budget_rule_id", "block_contents": "The ID associated to the active budget rule for a campaign."}, "doc.amazon_ads.campaign_applicable_budget_rule_name": {"name": "campaign_applicable_budget_rule_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_applicable_budget_rule_name", "block_contents": "The name associated to the active budget rule for a campaign."}, "doc.amazon_ads.campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_bidding_strategy", "block_contents": "The bidding strategy associated with a campaign."}, "doc.amazon_ads.campaign_budget_amount": {"name": "campaign_budget_amount", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_budget_amount", "block_contents": "Total budget allocated to the campaign."}, "doc.amazon_ads.campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_budget_currency_code", "block_contents": "The currency code associated with the campaign."}, "doc.amazon_ads.campaign_budget_type": {"name": "campaign_budget_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_budget_type", "block_contents": "One of: daily or lifetime."}, "doc.amazon_ads.campaign_id": {"name": "campaign_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_id", "block_contents": "The ID of the Campaign."}, "doc.amazon_ads.campaign_name": {"name": "campaign_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_name", "block_contents": "The name of the Campaign."}, "doc.amazon_ads.campaign_rule_based_budget_amount": {"name": "campaign_rule_based_budget_amount", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_rule_based_budget_amount", "block_contents": "The value of the rule-based budget for a campaign."}, "doc.amazon_ads.clicks": {"name": "clicks", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.clicks", "block_contents": "Total number of ad clicks."}, "doc.amazon_ads.cost": {"name": "cost", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.cost", "block_contents": "Total cost of ad clicks."}, "doc.amazon_ads.country_code": {"name": "country_code", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.country_code", "block_contents": "The code for a given country."}, "doc.amazon_ads.creation_date": {"name": "creation_date", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.creation_date", "block_contents": "The date of creation of the record."}, "doc.amazon_ads.currency_code": {"name": "currency_code", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.currency_code", "block_contents": "The currency used for all monetary values for entities under this profile."}, "doc.amazon_ads.default_bid": {"name": "default_bid", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.default_bid", "block_contents": "The date of creation of the record."}, "doc.amazon_ads.impressions": {"name": "impressions", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.impressions", "block_contents": "Total number of ad impressions."}, "doc.amazon_ads.is_most_recent_record": {"name": "is_most_recent_record", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.is_most_recent_record", "block_contents": "Boolean indicating whether record was the most recent instance."}, "doc.amazon_ads.keyword_bid": {"name": "keyword_bid", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_bid", "block_contents": "Bid associated with a keyword or targeting expression."}, "doc.amazon_ads.keyword_id": {"name": "keyword_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_id", "block_contents": "The ID of the keyword."}, "doc.amazon_ads.keyword_match_type": {"name": "keyword_match_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_match_type", "block_contents": "One of (broad, exact, or phrase.)"}, "doc.amazon_ads.keyword_text": {"name": "keyword_text", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_text", "block_contents": "The exact text for the keyword."}, "doc.amazon_ads.keyword_type": {"name": "keyword_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_type", "block_contents": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT."}, "doc.amazon_ads.last_updated_date": {"name": "last_updated_date", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.last_updated_date", "block_contents": "Date of last update to record."}, "doc.amazon_ads.match_type": {"name": "match_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.match_type", "block_contents": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT."}, "doc.amazon_ads.negative_keyword_id": {"name": "negative_keyword_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.negative_keyword_id", "block_contents": "The ID of the negative keyword."}, "doc.amazon_ads.portfolio_id": {"name": "portfolio_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.portfolio_id", "block_contents": "The ID of the Portfolio."}, "doc.amazon_ads.portfolio_name": {"name": "portfolio_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.portfolio_name", "block_contents": "The name of the Portfolio."}, "doc.amazon_ads.profile_id": {"name": "profile_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.profile_id", "block_contents": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace."}, "doc.amazon_ads.report_date": {"name": "report_date", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.report_date", "block_contents": "The date of the report."}, "doc.amazon_ads.search_term": {"name": "search_term", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.search_term", "block_contents": "The search term used by the customer."}, "doc.amazon_ads.serving_status": {"name": "serving_status", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.serving_status", "block_contents": "The current serving status of the record."}, "doc.amazon_ads.state": {"name": "state", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.state", "block_contents": "The state of the record (enabled, paused, or archived)."}, "doc.amazon_ads.targeting": {"name": "targeting", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.targeting", "block_contents": "A string representation of the expression object used in the targeting clause."}, "doc.amazon_ads.source_relation": {"name": "source_relation", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.source_relation", "block_contents": "The source of the record if the unioning functionality is being used. If not this field will be empty."}, "doc.amazon_ads.purchases_30_d": {"name": "purchases_30_d", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.purchases_30_d", "block_contents": "Number of attributed conversion events occurring within 30 days of an ad click."}, "doc.amazon_ads.sales_30_d": {"name": "sales_30_d", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.sales_30_d", "block_contents": "Total value of sales occurring within 30 days of an ad click."}}, "exposures": {}, "metrics": {}, "groups": {}, "selectors": {}, "disabled": {"test.amazon_ads_integration_tests.consistency_keyword_report": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "consistency_keyword_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_keyword_report.sql", "original_file_path": "tests/consistency/consistency_keyword_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_keyword_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_keyword_report"], "alias": "consistency_keyword_report", "checksum": {"name": "sha256", "checksum": "e875717bd698fff6ac5c8a36600dcad8376af66ef2fbcc2d96bd9289ccea5468"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.904315, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__keyword_report\n group by 1\n),\n\ndev as (\n select\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__keyword_report\n group by 1\n),\n\nfinal as (\n select \n prod.keyword_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.keyword_id = prod.keyword_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_ad_group_report": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "consistency_ad_group_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_ad_group_report.sql", "original_file_path": "tests/consistency/consistency_ad_group_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_ad_group_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_ad_group_report"], "alias": "consistency_ad_group_report", "checksum": {"name": "sha256", "checksum": "5feb3a728c5bac0a67eaf69493c3435c0821d2e899f421f9b336af4989204ce8"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.9133089, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n ad_group_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__ad_group_report\n group by 1\n),\n\ndev as (\n select\n ad_group_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__ad_group_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_group_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.ad_group_id = prod.ad_group_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_campaign_report": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "consistency_campaign_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_campaign_report.sql", "original_file_path": "tests/consistency/consistency_campaign_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_campaign_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_campaign_report"], "alias": "consistency_campaign_report", "checksum": {"name": "sha256", "checksum": "438b0e6b9f97f88ea67b3cd186f6030260cdc4e13755121a3ddc945d56d83a03"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.916458, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n campaign_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__campaign_report\n group by 1\n),\n\ndev as (\n select\n campaign_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__campaign_report\n group by 1\n),\n\nfinal as (\n select \n prod.campaign_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.campaign_id = prod.campaign_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_portfolio_report": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "consistency_portfolio_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_portfolio_report.sql", "original_file_path": "tests/consistency/consistency_portfolio_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_portfolio_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_portfolio_report"], "alias": "consistency_portfolio_report", "checksum": {"name": "sha256", "checksum": "3e0c666e358f5b4aff3ee4859e3978976cf6500ba610b461d3e87f3d4faf1d54"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.91961, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n portfolio_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__portfolio_report\n group by 1\n),\n\ndev as (\n select\n portfolio_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__portfolio_report\n group by 1\n),\n\nfinal as (\n select \n prod.portfolio_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.portfolio_id = prod.portfolio_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_ad_report": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "consistency_ad_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_ad_report.sql", "original_file_path": "tests/consistency/consistency_ad_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_ad_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_ad_report"], "alias": "consistency_ad_report", "checksum": {"name": "sha256", "checksum": "d9c5b478203b6491f53b85ed9be3c7e2aa38ce227142a7cdf6b6a3160bb683b3"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.9226649, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n ad_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__ad_report\n group by 1\n),\n\ndev as (\n select\n ad_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__ad_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.ad_id = prod.ad_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_account_report": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "consistency_account_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_account_report.sql", "original_file_path": "tests/consistency/consistency_account_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_account_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_account_report"], "alias": "consistency_account_report", "checksum": {"name": "sha256", "checksum": "db2f30dbb810d4f2323b345b8426dafd0de510924496c6ffbcb0a27a51150d48"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.9257998, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n account_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__account_report\n group by 1\n),\n\ndev as (\n select\n account_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__account_report\n group by 1\n),\n\nfinal as (\n select \n prod.account_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.account_id = prod.account_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_search_report": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "consistency_search_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_search_report.sql", "original_file_path": "tests/consistency/consistency_search_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_search_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_search_report"], "alias": "consistency_search_report", "checksum": {"name": "sha256", "checksum": "48a234be8b8cdec29764d34c8cbdd1f94e209f58a56df99e3dc06a9b76a437cb"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.929357, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n search_term,\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__search_report\n group by 1,2\n),\n\ndev as (\n select\n search_term,\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__search_report\n group by 1,2\n),\n\nfinal as (\n select \n prod.search_term,\n prod.keyword_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.search_term = prod.search_term\n and dev.keyword_id = prod.keyword_id\n\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.horizontal_sum_conversions": [{"database": "dbt-package-testing", "schema": "amazon_ads_test_dbt_test__audit", "name": "horizontal_sum_conversions", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "integrity/horizontal_sum_conversions.sql", "original_file_path": "tests/integrity/horizontal_sum_conversions.sql", "unique_id": "test.amazon_ads_integration_tests.horizontal_sum_conversions", "fqn": ["amazon_ads_integration_tests", "integrity", "horizontal_sum_conversions"], "alias": "horizontal_sum_conversions", "checksum": {"name": "sha256", "checksum": "1b1daead41d43b46c788f17714a08b5ee279c3567d6a47029a7f477af39b2782"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "deferred": false, "unrendered_config": {"tags": ["fivetran_validations"], "enabled": false}, "created_at": 1729891997.93239, "config_call_dict": {"tags": ["fivetran_validations"], "enabled": false}, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith ad_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__ad_report') }}\n),\n\naccount_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__account_report') }}\n),\n\nad_group_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__ad_group_report') }}\n),\n\ncampaign_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__campaign_report') }}\n),\n\nkeyword_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__keyword_report') }}\n),\n\nportfolio_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__portfolio_report') }}\n),\n\nsearch_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__search_report') }}\n)\n\nselect \n 'ad vs account' as comparison\nfrom ad_report \njoin account_report on true\nwhere ad_report.total_purchases_30_d != account_report.total_purchases_30_d\n or ad_report.total_sales_30_d != account_report.total_sales_30_d\n\nunion all \n\nselect \n 'campaign vs ad group' as comparison\nfrom campaign_report \njoin ad_group_report on true\nwhere campaign_report.total_purchases_30_d != ad_group_report.total_purchases_30_d\n or campaign_report.total_sales_30_d != ad_group_report.total_sales_30_d\n\nunion all \n\nselect \n 'portfolio vs campaign' as comparison\nfrom portfolio_report \njoin campaign_report on true\nwhere portfolio_report.total_purchases_30_d != campaign_report.total_purchases_30_d\n or portfolio_report.total_sales_30_d != campaign_report.total_sales_30_d\n\n\nunion all \n\nselect \n 'campaign vs keyword' as comparison\nfrom campaign_report \njoin keyword_report on true\nwhere campaign_report.total_purchases_30_d != keyword_report.total_purchases_30_d\n or campaign_report.total_sales_30_d != keyword_report.total_sales_30_d\nunion all \n\nselect \n 'search_term vs keyword' as comparison\nfrom search_report \njoin keyword_report on true\nwhere search_report.total_purchases_30_d != keyword_report.total_purchases_30_d\n or search_report.total_sales_30_d != keyword_report.total_sales_30_d", "language": "sql", "refs": [{"name": "amazon_ads__ad_report", "package": null, "version": null}, {"name": "amazon_ads__account_report", "package": null, "version": null}, {"name": "amazon_ads__ad_group_report", "package": null, "version": null}, {"name": "amazon_ads__campaign_report", "package": null, "version": null}, {"name": "amazon_ads__keyword_report", "package": null, "version": null}, {"name": "amazon_ads__portfolio_report", "package": null, "version": null}, {"name": "amazon_ads__search_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}]}, "parent_map": {"seed.amazon_ads_integration_tests.portfolio_history_data": [], "seed.amazon_ads_integration_tests.profile_data": [], "seed.amazon_ads_integration_tests.product_ad_history_data": [], "seed.amazon_ads_integration_tests.campaign_level_report_data": [], "seed.amazon_ads_integration_tests.ad_group_history_data": [], "seed.amazon_ads_integration_tests.ad_group_level_report_data": [], "seed.amazon_ads_integration_tests.campaign_history_data": [], "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": [], "seed.amazon_ads_integration_tests.keyword_history_data": [], "seed.amazon_ads_integration_tests.targeting_keyword_report_data": [], "seed.amazon_ads_integration_tests.advertised_product_report_data": [], "model.amazon_ads_source.stg_amazon_ads__campaign_level_report": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp"], "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp"], "model.amazon_ads_source.stg_amazon_ads__advertised_product_report": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp"], "model.amazon_ads_source.stg_amazon_ads__portfolio_history": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp"], "model.amazon_ads_source.stg_amazon_ads__campaign_history": ["model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp"], "model.amazon_ads_source.stg_amazon_ads__product_ad_history": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp"], "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp"], "model.amazon_ads_source.stg_amazon_ads__profile": ["model.amazon_ads_source.stg_amazon_ads__profile_tmp"], "model.amazon_ads_source.stg_amazon_ads__keyword_history": ["model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp"], "model.amazon_ads_source.stg_amazon_ads__ad_group_history": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp"], "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp"], "model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp": ["source.amazon_ads_source.amazon_ads.keyword_history"], "model.amazon_ads_source.stg_amazon_ads__profile_tmp": ["source.amazon_ads_source.amazon_ads.profile"], "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp": ["source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report"], "model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp": ["source.amazon_ads_source.amazon_ads.product_ad_history"], "model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp": ["source.amazon_ads_source.amazon_ads.ad_group_history"], "model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp": ["source.amazon_ads_source.amazon_ads.campaign_level_report"], "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp": ["source.amazon_ads_source.amazon_ads.targeting_keyword_report"], "model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp": ["source.amazon_ads_source.amazon_ads.portfolio_history"], "model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp": ["source.amazon_ads_source.amazon_ads.campaign_history"], "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp": ["source.amazon_ads_source.amazon_ads.ad_group_level_report"], "model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp": ["source.amazon_ads_source.amazon_ads.advertised_product_report"], "model.amazon_ads.amazon_ads__portfolio_report": ["model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__campaign_level_report", "model.amazon_ads_source.stg_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__search_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__keyword_history", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"], "model.amazon_ads.amazon_ads__ad_group_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__keyword_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__keyword_history", "model.amazon_ads_source.stg_amazon_ads__profile", "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"], "model.amazon_ads.amazon_ads__campaign_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__campaign_level_report", "model.amazon_ads_source.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__account_report": ["model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__campaign_level_report", "model.amazon_ads_source.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__ad_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads_source.stg_amazon_ads__ad_group_history", "model.amazon_ads_source.stg_amazon_ads__advertised_product_report", "model.amazon_ads_source.stg_amazon_ads__campaign_history", "model.amazon_ads_source.stg_amazon_ads__product_ad_history", "model.amazon_ads_source.stg_amazon_ads__profile"], "model.amazon_ads.int_amazon_ads__portfolio_history": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history"], "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_history_source_relation__ad_group_id__last_updated_date.5873194717": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history"], "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_level_report_source_relation__ad_group_id__date_day.180ec0225e": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"], "test.amazon_ads_source.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__advertised_product_report_source_relation__ad_id__date_day.e170148d6c": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report"], "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c": ["model.amazon_ads_source.stg_amazon_ads__campaign_history"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_history_source_relation__campaign_id__last_updated_date.f58b6293d6": ["model.amazon_ads_source.stg_amazon_ads__campaign_history"], "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_level_report_source_relation__campaign_id__date_day.f6bb472aa5": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report"], "test.amazon_ads_source.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e": ["model.amazon_ads_source.stg_amazon_ads__keyword_history"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__keyword_history_source_relation__keyword_id__last_updated_date.611a8411e0": ["model.amazon_ads_source.stg_amazon_ads__keyword_history"], "test.amazon_ads_source.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__portfolio_history_source_relation__portfolio_id__last_updated_date.e0bb6ee3e0": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history"], "test.amazon_ads_source.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__product_ad_history_source_relation__ad_id__last_updated_date.90fb8d59e6": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history"], "test.amazon_ads_source.not_null_stg_amazon_ads__profile_profile_id.bd192c102b": ["model.amazon_ads_source.stg_amazon_ads__profile"], "test.amazon_ads_source.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__targeting_keyword_report_source_relation__keyword_id__date_day.4190f2a661": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"], "test.amazon_ads_source.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__search_term_ad_keyword_report_source_relation__search_term__keyword_id__date_day.00ccbc3eda": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"], "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66": ["model.amazon_ads.amazon_ads__account_report"], "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061": ["model.amazon_ads.amazon_ads__account_report"], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__account_report_source_relation__date_day__profile_id.5ff488055c": ["model.amazon_ads.amazon_ads__account_report"], "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a": ["model.amazon_ads.amazon_ads__ad_group_report"], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_group_report_source_relation__date_day__ad_group_id.9f5387d4e0": ["model.amazon_ads.amazon_ads__ad_group_report"], "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3": ["model.amazon_ads.amazon_ads__ad_report"], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_report_source_relation__date_day__ad_id.5c0ccedb91": ["model.amazon_ads.amazon_ads__ad_report"], "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c": ["model.amazon_ads.amazon_ads__campaign_report"], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__campaign_report_source_relation__date_day__campaign_id.0fcead4f41": ["model.amazon_ads.amazon_ads__campaign_report"], "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6": ["model.amazon_ads.amazon_ads__portfolio_report"], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__portfolio_report_source_relation__date_day__portfolio_id.b3bfe4fce4": ["model.amazon_ads.amazon_ads__portfolio_report"], "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a": ["model.amazon_ads.amazon_ads__keyword_report"], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__keyword_report_source_relation__date_day__keyword_id.34f042afc1": ["model.amazon_ads.amazon_ads__keyword_report"], "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a": ["model.amazon_ads.amazon_ads__search_report"], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__search_report_source_relation__date_day__search_term__keyword_id.21a027f105": ["model.amazon_ads.amazon_ads__search_report"], "source.amazon_ads_source.amazon_ads.ad_group_history": [], "source.amazon_ads_source.amazon_ads.ad_group_level_report": [], "source.amazon_ads_source.amazon_ads.advertised_product_report": [], "source.amazon_ads_source.amazon_ads.campaign_history": [], "source.amazon_ads_source.amazon_ads.campaign_level_report": [], "source.amazon_ads_source.amazon_ads.keyword_history": [], "source.amazon_ads_source.amazon_ads.portfolio_history": [], "source.amazon_ads_source.amazon_ads.product_ad_history": [], "source.amazon_ads_source.amazon_ads.profile": [], "source.amazon_ads_source.amazon_ads.targeting_keyword_report": [], "source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report": []}, "child_map": {"seed.amazon_ads_integration_tests.portfolio_history_data": [], "seed.amazon_ads_integration_tests.profile_data": [], "seed.amazon_ads_integration_tests.product_ad_history_data": [], "seed.amazon_ads_integration_tests.campaign_level_report_data": [], "seed.amazon_ads_integration_tests.ad_group_history_data": [], "seed.amazon_ads_integration_tests.ad_group_level_report_data": [], "seed.amazon_ads_integration_tests.campaign_history_data": [], "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": [], "seed.amazon_ads_integration_tests.keyword_history_data": [], "seed.amazon_ads_integration_tests.targeting_keyword_report_data": [], "seed.amazon_ads_integration_tests.advertised_product_report_data": [], "model.amazon_ads_source.stg_amazon_ads__campaign_level_report": ["model.amazon_ads.amazon_ads__account_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__portfolio_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_level_report_source_relation__campaign_id__date_day.f6bb472aa5", "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194"], "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report": ["model.amazon_ads.amazon_ads__ad_group_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_level_report_source_relation__ad_group_id__date_day.180ec0225e", "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3"], "model.amazon_ads_source.stg_amazon_ads__advertised_product_report": ["model.amazon_ads.amazon_ads__ad_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__advertised_product_report_source_relation__ad_id__date_day.e170148d6c", "test.amazon_ads_source.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4"], "model.amazon_ads_source.stg_amazon_ads__portfolio_history": ["model.amazon_ads.amazon_ads__portfolio_report", "model.amazon_ads.int_amazon_ads__portfolio_history", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__portfolio_history_source_relation__portfolio_id__last_updated_date.e0bb6ee3e0", "test.amazon_ads_source.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02"], "model.amazon_ads_source.stg_amazon_ads__campaign_history": ["model.amazon_ads.amazon_ads__account_report", "model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__portfolio_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_history_source_relation__campaign_id__last_updated_date.f58b6293d6", "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c"], "model.amazon_ads_source.stg_amazon_ads__product_ad_history": ["model.amazon_ads.amazon_ads__ad_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__product_ad_history_source_relation__ad_id__last_updated_date.90fb8d59e6", "test.amazon_ads_source.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8"], "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report": ["model.amazon_ads.amazon_ads__keyword_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__targeting_keyword_report_source_relation__keyword_id__date_day.4190f2a661", "test.amazon_ads_source.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7"], "model.amazon_ads_source.stg_amazon_ads__profile": ["model.amazon_ads.amazon_ads__account_report", "model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__portfolio_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads_source.not_null_stg_amazon_ads__profile_profile_id.bd192c102b"], "model.amazon_ads_source.stg_amazon_ads__keyword_history": ["model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__keyword_history_source_relation__keyword_id__last_updated_date.611a8411e0", "test.amazon_ads_source.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e"], "model.amazon_ads_source.stg_amazon_ads__ad_group_history": ["model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_history_source_relation__ad_group_id__last_updated_date.5873194717", "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b"], "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report": ["model.amazon_ads.amazon_ads__search_report", "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__search_term_ad_keyword_report_source_relation__search_term__keyword_id__date_day.00ccbc3eda", "test.amazon_ads_source.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06"], "model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp": ["model.amazon_ads_source.stg_amazon_ads__keyword_history"], "model.amazon_ads_source.stg_amazon_ads__profile_tmp": ["model.amazon_ads_source.stg_amazon_ads__profile"], "model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report"], "model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history"], "model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history"], "model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report"], "model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report"], "model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history"], "model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp": ["model.amazon_ads_source.stg_amazon_ads__campaign_history"], "model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report"], "model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report"], "model.amazon_ads.amazon_ads__portfolio_report": ["test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__portfolio_report_source_relation__date_day__portfolio_id.b3bfe4fce4", "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6"], "model.amazon_ads.amazon_ads__search_report": ["test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__search_report_source_relation__date_day__search_term__keyword_id.21a027f105", "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a"], "model.amazon_ads.amazon_ads__ad_group_report": ["test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_group_report_source_relation__date_day__ad_group_id.9f5387d4e0", "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a"], "model.amazon_ads.amazon_ads__keyword_report": ["test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__keyword_report_source_relation__date_day__keyword_id.34f042afc1", "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a"], "model.amazon_ads.amazon_ads__campaign_report": ["test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__campaign_report_source_relation__date_day__campaign_id.0fcead4f41", "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c"], "model.amazon_ads.amazon_ads__account_report": ["test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__account_report_source_relation__date_day__profile_id.5ff488055c", "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061", "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66"], "model.amazon_ads.amazon_ads__ad_report": ["test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_report_source_relation__date_day__ad_id.5c0ccedb91", "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3"], "model.amazon_ads.int_amazon_ads__portfolio_history": ["model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__search_report"], "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_history_source_relation__ad_group_id__last_updated_date.5873194717": [], "test.amazon_ads_source.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__ad_group_level_report_source_relation__ad_group_id__date_day.180ec0225e": [], "test.amazon_ads_source.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__advertised_product_report_source_relation__ad_id__date_day.e170148d6c": [], "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_history_source_relation__campaign_id__last_updated_date.f58b6293d6": [], "test.amazon_ads_source.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__campaign_level_report_source_relation__campaign_id__date_day.f6bb472aa5": [], "test.amazon_ads_source.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__keyword_history_source_relation__keyword_id__last_updated_date.611a8411e0": [], "test.amazon_ads_source.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__portfolio_history_source_relation__portfolio_id__last_updated_date.e0bb6ee3e0": [], "test.amazon_ads_source.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__product_ad_history_source_relation__ad_id__last_updated_date.90fb8d59e6": [], "test.amazon_ads_source.not_null_stg_amazon_ads__profile_profile_id.bd192c102b": [], "test.amazon_ads_source.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__targeting_keyword_report_source_relation__keyword_id__date_day.4190f2a661": [], "test.amazon_ads_source.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06": [], "test.amazon_ads_source.dbt_utils_unique_combination_of_columns_stg_amazon_ads__search_term_ad_keyword_report_source_relation__search_term__keyword_id__date_day.00ccbc3eda": [], "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66": [], "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061": [], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__account_report_source_relation__date_day__profile_id.5ff488055c": [], "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a": [], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_group_report_source_relation__date_day__ad_group_id.9f5387d4e0": [], "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3": [], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__ad_report_source_relation__date_day__ad_id.5c0ccedb91": [], "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c": [], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__campaign_report_source_relation__date_day__campaign_id.0fcead4f41": [], "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6": [], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__portfolio_report_source_relation__date_day__portfolio_id.b3bfe4fce4": [], "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a": [], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__keyword_report_source_relation__date_day__keyword_id.34f042afc1": [], "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a": [], "test.amazon_ads.dbt_utils_unique_combination_of_columns_amazon_ads__search_report_source_relation__date_day__search_term__keyword_id.21a027f105": [], "source.amazon_ads_source.amazon_ads.ad_group_history": ["model.amazon_ads_source.stg_amazon_ads__ad_group_history_tmp"], "source.amazon_ads_source.amazon_ads.ad_group_level_report": ["model.amazon_ads_source.stg_amazon_ads__ad_group_level_report_tmp"], "source.amazon_ads_source.amazon_ads.advertised_product_report": ["model.amazon_ads_source.stg_amazon_ads__advertised_product_report_tmp"], "source.amazon_ads_source.amazon_ads.campaign_history": ["model.amazon_ads_source.stg_amazon_ads__campaign_history_tmp"], "source.amazon_ads_source.amazon_ads.campaign_level_report": ["model.amazon_ads_source.stg_amazon_ads__campaign_level_report_tmp"], "source.amazon_ads_source.amazon_ads.keyword_history": ["model.amazon_ads_source.stg_amazon_ads__keyword_history_tmp"], "source.amazon_ads_source.amazon_ads.portfolio_history": ["model.amazon_ads_source.stg_amazon_ads__portfolio_history_tmp"], "source.amazon_ads_source.amazon_ads.product_ad_history": ["model.amazon_ads_source.stg_amazon_ads__product_ad_history_tmp"], "source.amazon_ads_source.amazon_ads.profile": ["model.amazon_ads_source.stg_amazon_ads__profile_tmp"], "source.amazon_ads_source.amazon_ads.targeting_keyword_report": ["model.amazon_ads_source.stg_amazon_ads__targeting_keyword_report_tmp"], "source.amazon_ads_source.amazon_ads.search_term_ad_keyword_report": ["model.amazon_ads_source.stg_amazon_ads__search_term_ad_keyword_report_tmp"]}, "group_map": {}, "saved_queries": {}, "semantic_models": {}} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", "dbt_version": "1.10.8", "generated_at": "2025-08-13T22:02:56.109552Z", "invocation_id": "6099043f-bde0-4fd9-9c4a-167fc646ae8b", "invocation_started_at": "2025-08-13T22:02:47.615072+00:00", "env": {}, "project_name": "amazon_ads_integration_tests", "project_id": "53f7e8001d217038f082b75f25139880", "user_id": null, "send_anonymous_usage_stats": false, "adapter_type": "postgres", "quoting": {"database": true, "schema": true, "identifier": true, "column": null}}, "nodes": {"seed.amazon_ads_integration_tests.product_ad_history_data": {"database": "postgres", "schema": "public", "name": "product_ad_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "product_ad_history_data.csv", "original_file_path": "seeds/product_ad_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.product_ad_history_data", "fqn": ["amazon_ads_integration_tests", "product_ad_history_data"], "alias": "product_ad_history_data", "checksum": {"name": "sha256", "checksum": "7efed04b5599f1f2a4e8db33b56eb1f43c6ed27a77a504c7f8b7d628aac37749"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.868383, "relation_name": "\"postgres\".\"public\".\"product_ad_history_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": {"database": "postgres", "schema": "public", "name": "search_term_ad_keyword_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "search_term_ad_keyword_report_data.csv", "original_file_path": "seeds/search_term_ad_keyword_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data", "fqn": ["amazon_ads_integration_tests", "search_term_ad_keyword_report_data"], "alias": "search_term_ad_keyword_report_data", "checksum": {"name": "sha256", "checksum": "72e0151237f3fc67bea3d517f7ef50c94ce494d2c0017fced4e1287623639722"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.8757112, "relation_name": "\"postgres\".\"public\".\"search_term_ad_keyword_report_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.advertised_product_report_data": {"database": "postgres", "schema": "public", "name": "advertised_product_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "advertised_product_report_data.csv", "original_file_path": "seeds/advertised_product_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.advertised_product_report_data", "fqn": ["amazon_ads_integration_tests", "advertised_product_report_data"], "alias": "advertised_product_report_data", "checksum": {"name": "sha256", "checksum": "009fa251b9195cc87bbb5e05587165c4121ba87433d392792a42f8d11fe992b5"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.8789694, "relation_name": "\"postgres\".\"public\".\"advertised_product_report_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.portfolio_history_data": {"database": "postgres", "schema": "public", "name": "portfolio_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "portfolio_history_data.csv", "original_file_path": "seeds/portfolio_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.portfolio_history_data", "fqn": ["amazon_ads_integration_tests", "portfolio_history_data"], "alias": "portfolio_history_data", "checksum": {"name": "sha256", "checksum": "f35ce3ea8cd6309e50535134b9375861995eb6cda4e215efc0b170cae03a3eee"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.8821542, "relation_name": "\"postgres\".\"public\".\"portfolio_history_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.targeting_keyword_report_data": {"database": "postgres", "schema": "public", "name": "targeting_keyword_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "targeting_keyword_report_data.csv", "original_file_path": "seeds/targeting_keyword_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.targeting_keyword_report_data", "fqn": ["amazon_ads_integration_tests", "targeting_keyword_report_data"], "alias": "targeting_keyword_report_data", "checksum": {"name": "sha256", "checksum": "465149df01ea42da88e6faab29bc91faaed75d50c2e04cece5c7a4a442e31994"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.8855596, "relation_name": "\"postgres\".\"public\".\"targeting_keyword_report_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.ad_group_level_report_data": {"database": "postgres", "schema": "public", "name": "ad_group_level_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "ad_group_level_report_data.csv", "original_file_path": "seeds/ad_group_level_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.ad_group_level_report_data", "fqn": ["amazon_ads_integration_tests", "ad_group_level_report_data"], "alias": "ad_group_level_report_data", "checksum": {"name": "sha256", "checksum": "b8d7399c22df2187d6518c6db0d9125b6c93172cf23200a8cbc365d43532d2ba"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.888862, "relation_name": "\"postgres\".\"public\".\"ad_group_level_report_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.campaign_history_data": {"database": "postgres", "schema": "public", "name": "campaign_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "campaign_history_data.csv", "original_file_path": "seeds/campaign_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.campaign_history_data", "fqn": ["amazon_ads_integration_tests", "campaign_history_data"], "alias": "campaign_history_data", "checksum": {"name": "sha256", "checksum": "3d38ddc1be2adfacae84317efdae75934a980d07ae96f326be8533c48ca8d559"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.8920536, "relation_name": "\"postgres\".\"public\".\"campaign_history_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.profile_data": {"database": "postgres", "schema": "public", "name": "profile_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "profile_data.csv", "original_file_path": "seeds/profile_data.csv", "unique_id": "seed.amazon_ads_integration_tests.profile_data", "fqn": ["amazon_ads_integration_tests", "profile_data"], "alias": "profile_data", "checksum": {"name": "sha256", "checksum": "bf98315483844e348320dc4d774059cb5229ef48b495aebace17dd04520d160b"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.8952115, "relation_name": "\"postgres\".\"public\".\"profile_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.campaign_level_report_data": {"database": "postgres", "schema": "public", "name": "campaign_level_report_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "campaign_level_report_data.csv", "original_file_path": "seeds/campaign_level_report_data.csv", "unique_id": "seed.amazon_ads_integration_tests.campaign_level_report_data", "fqn": ["amazon_ads_integration_tests", "campaign_level_report_data"], "alias": "campaign_level_report_data", "checksum": {"name": "sha256", "checksum": "12c4efc842123e0085f28a11922eba7cb83bd04770a5657c839a8a7b048a9616"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.8992584, "relation_name": "\"postgres\".\"public\".\"campaign_level_report_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.keyword_history_data": {"database": "postgres", "schema": "public", "name": "keyword_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "keyword_history_data.csv", "original_file_path": "seeds/keyword_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.keyword_history_data", "fqn": ["amazon_ads_integration_tests", "keyword_history_data"], "alias": "keyword_history_data", "checksum": {"name": "sha256", "checksum": "35e901af84f48df213520df34aebcf37dc5bcb701dec9bc639aff95853e53d71"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.902475, "relation_name": "\"postgres\".\"public\".\"keyword_history_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "seed.amazon_ads_integration_tests.ad_group_history_data": {"database": "postgres", "schema": "public", "name": "ad_group_history_data", "resource_type": "seed", "package_name": "amazon_ads_integration_tests", "path": "ad_group_history_data.csv", "original_file_path": "seeds/ad_group_history_data.csv", "unique_id": "seed.amazon_ads_integration_tests.ad_group_history_data", "fqn": ["amazon_ads_integration_tests", "ad_group_history_data"], "alias": "ad_group_history_data", "checksum": {"name": "sha256", "checksum": "45753ff9cf086544b805b76303478c515ead8870e4ad9ae3988de8cae6befdde"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": false, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "delimiter": ",", "quote_columns": false}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": false, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"docs": {"show": false}, "quote_columns": "{{ true if target.type == 'redshift' else false }}", "column_types": {"_fivetran_synced": "timestamp", "campaign_budget_amount": "float", "click_through_rate": "float", "keyword_bid": "float", "clicks": "float", "impressions": "float", "cost": "float"}}, "created_at": 1755122569.9056494, "relation_name": "\"postgres\".\"public\".\"ad_group_history_data\"", "raw_code": "", "doc_blocks": [], "root_path": "/home/runner/work/dbt_amazon_ads/dbt_amazon_ads/integration_tests", "depends_on": {"macros": []}}, "model.amazon_ads.amazon_ads__keyword_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "amazon_ads__keyword_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__keyword_report.sql", "original_file_path": "models/amazon_ads__keyword_report.sql", "unique_id": "model.amazon_ads.amazon_ads__keyword_report", "fqn": ["amazon_ads", "amazon_ads__keyword_report"], "alias": "amazon_ads__keyword_report", "checksum": {"name": "sha256", "checksum": "53370ecd41c5a7917f7f5af699bcdf8725207b0ffd65ba90cbc8e2a823b1592b"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance at the keyword level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_name"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_bid"]}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_text"]}, "keyword_type": {"name": "keyword_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_type"]}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.match_type"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.8278189, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__keyword_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ ref('stg_amazon_ads__targeting_keyword_report') }}\n), \n\naccount_info as (\n select *\n from {{ ref('stg_amazon_ads__profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ ref('stg_amazon_ads__campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ ref('stg_amazon_ads__ad_group_history') }}\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from {{ ref('stg_amazon_ads__keyword_history') }}\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.serving_status,\n keywords.state,\n report.keyword_bid,\n report.keyword_type,\n report.match_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__targeting_keyword_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(19) }}\n)\n\nselect *\nfrom fields", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__targeting_keyword_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}, {"name": "stg_amazon_ads__keyword_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads.stg_amazon_ads__targeting_keyword_report", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__ad_group_history", "model.amazon_ads.stg_amazon_ads__keyword_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__keyword_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__targeting_keyword_report\"\n), \n\naccount_info as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"int_amazon_ads__portfolio_history\"\n), \n\ncampaigns as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history\"\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__keyword_history\"\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.serving_status,\n keywords.state,\n report.keyword_bid,\n report.keyword_type,\n report.match_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n\n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.amazon_ads__ad_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "amazon_ads__ad_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__ad_report.sql", "original_file_path": "models/amazon_ads__ad_report.sql", "unique_id": "model.amazon_ads.amazon_ads__ad_report", "fqn": ["amazon_ads", "amazon_ads__ad_report"], "alias": "amazon_ads__ad_report", "checksum": {"name": "sha256", "checksum": "5cf0c8bdc9ab5aa8e9a2dace8324fe415dcb7aba8a5773fc2e31b89f193e8140"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance at the ad level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "ad_id": {"name": "ad_id", "description": "The ID of the Ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_id"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "advertised_asin": {"name": "advertised_asin", "description": "The ASIN associated to an advertised product.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.advertised_asin"]}, "advertised_sku": {"name": "advertised_sku", "description": "The SKU being advertised.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.advertised_sku"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.8197246, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__ad_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ ref('stg_amazon_ads__advertised_product_report') }}\n), \n\naccount_info as (\n select *\n from {{ ref('stg_amazon_ads__profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ ref('stg_amazon_ads__campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ ref('stg_amazon_ads__ad_group_history') }}\n where is_most_recent_record = True\n), \n\nads as (\n select *\n from {{ ref('stg_amazon_ads__product_ad_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.ad_id,\n ads.serving_status,\n ads.state,\n report.advertised_asin,\n report.advertised_sku,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__advertised_product_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n \n left join ads\n on ads.ad_id = report.ad_id\n and ads.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n {{ dbt_utils.group_by(20) }}\n)\n\nselect *\nfrom fields", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__advertised_product_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}, {"name": "stg_amazon_ads__product_ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads.stg_amazon_ads__advertised_product_report", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__ad_group_history", "model.amazon_ads.stg_amazon_ads__product_ad_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__ad_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__advertised_product_report\"\n), \n\naccount_info as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"int_amazon_ads__portfolio_history\"\n), \n\ncampaigns as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history\"\n where is_most_recent_record = True\n), \n\nads as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__product_ad_history\"\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.ad_id,\n ads.serving_status,\n ads.state,\n report.advertised_asin,\n report.advertised_sku,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n\n\n from report\n \n left join ads\n on ads.ad_id = report.ad_id\n and ads.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.amazon_ads__campaign_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "amazon_ads__campaign_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__campaign_report.sql", "original_file_path": "models/amazon_ads__campaign_report.sql", "unique_id": "model.amazon_ads.amazon_ads__campaign_report", "fqn": ["amazon_ads", "amazon_ads__campaign_report"], "alias": "amazon_ads__campaign_report", "checksum": {"name": "sha256", "checksum": "8cefb303901e71edf27b9931b7ad848e32d449dc97aebb7680f5f188a00028c1"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance at the campaign level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_bidding_strategy"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.821198, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__campaign_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ ref('stg_amazon_ads__campaign_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ ref('stg_amazon_ads__profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ ref('stg_amazon_ads__campaign_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n report.campaign_bidding_strategy,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__campaign_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }} \n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n {{ dbt_utils.group_by(14) }}\n)\n\nselect *\nfrom fields", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads.stg_amazon_ads__campaign_level_report", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__campaign_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_level_report\"\n), \n\naccount_info as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"int_amazon_ads__portfolio_history\"\n), \n\ncampaigns as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n report.campaign_bidding_strategy,\n report.campaign_budget_amount,\n report.campaign_budget_currency_code,\n report.campaign_budget_type,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n \n \n \n , sum(coalesce(report.sales_7_d, 0)) as sales_7_d\n \n \n \n \n , sum(coalesce(report.purchases_alias, 0)) as purchases_alias\n \n \n \n \n , sum(coalesce(report.purchases_14_d, 0)) as purchases_14_d\n \n \n\n\n \n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation \n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation \n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.amazon_ads__portfolio_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "amazon_ads__portfolio_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__portfolio_report.sql", "original_file_path": "models/amazon_ads__portfolio_report.sql", "unique_id": "model.amazon_ads.amazon_ads__portfolio_report", "fqn": ["amazon_ads", "amazon_ads__portfolio_report"], "alias": "amazon_ads__portfolio_report", "checksum": {"name": "sha256", "checksum": "b8c9f790249199a351760b8cf17cc8c9da33684a1b3b62f08e94c2145a6a8dcb"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance at the portfolio level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "budget_amount": {"name": "budget_amount", "description": "The budget amount associated with the portfolio. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_currency_code": {"name": "budget_currency_code", "description": "The currency used for all monetary values for entities under this profile. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_end_date": {"name": "budget_end_date", "description": "The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_start_date": {"name": "budget_start_date", "description": "The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_policy": {"name": "budget_policy", "description": "The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "in_budget": {"name": "in_budget", "description": "Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.824615, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__portfolio_report\"", "raw_code": "{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }}\n\nwith report as (\n select *\n --use campaign report since portfolio report not provided\n from {{ ref('stg_amazon_ads__campaign_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ ref('stg_amazon_ads__profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('stg_amazon_ads__portfolio_history') }}\n where is_most_recent_record = True\n), \n\ncampaigns as (\n select *\n from {{ ref('stg_amazon_ads__campaign_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n portfolios.budget_amount,\n portfolios.budget_currency_code,\n portfolios.budget_start_date,\n portfolios.budget_end_date,\n portfolios.budget_policy,\n portfolios.in_budget,\n portfolios.serving_status,\n portfolios.state,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__campaign_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }} \n\n from portfolios\n\n left join campaigns\n on campaigns.portfolio_id = portfolios.portfolio_id\n and campaigns.source_relation = portfolios.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n left join report\n on report.campaign_id = campaigns.campaign_id\n and report.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(16) }}\n)\n\nselect *\nfrom fields", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "stg_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.enabled_vars", "macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads.stg_amazon_ads__campaign_level_report", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.stg_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__portfolio_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n --use campaign report since portfolio report not provided\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_level_report\"\n), \n\naccount_info as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__portfolio_history\"\n where is_most_recent_record = True\n), \n\ncampaigns as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n portfolios.budget_amount,\n portfolios.budget_currency_code,\n portfolios.budget_start_date,\n portfolios.budget_end_date,\n portfolios.budget_policy,\n portfolios.in_budget,\n portfolios.serving_status,\n portfolios.state,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n \n \n \n , sum(coalesce(report.sales_7_d, 0)) as sales_7_d\n \n \n \n \n , sum(coalesce(report.purchases_alias, 0)) as purchases_alias\n \n \n \n \n , sum(coalesce(report.purchases_14_d, 0)) as purchases_14_d\n \n \n\n\n \n\n from portfolios\n\n left join campaigns\n on campaigns.portfolio_id = portfolios.portfolio_id\n and campaigns.source_relation = portfolios.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n left join report\n on report.campaign_id = campaigns.campaign_id\n and report.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.amazon_ads__search_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "amazon_ads__search_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__search_report.sql", "original_file_path": "models/amazon_ads__search_report.sql", "unique_id": "model.amazon_ads.amazon_ads__search_report", "fqn": ["amazon_ads", "amazon_ads__search_report"], "alias": "amazon_ads__search_report", "checksum": {"name": "sha256", "checksum": "b4171d0945ea0be2cc5c50811fdaaa66f86e47e679d6e7ae6a0cf493535cf572"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance at the search term level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_name"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_text"]}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.match_type"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "search_term": {"name": "search_term", "description": "The search term used by the customer.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.search_term"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.targeting"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.8301277, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__search_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ ref('stg_amazon_ads__search_term_ad_keyword_report') }}\n), \n\naccount_info as (\n select *\n from {{ ref('stg_amazon_ads__profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ ref('stg_amazon_ads__campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ ref('stg_amazon_ads__ad_group_history') }}\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from {{ ref('stg_amazon_ads__keyword_history') }}\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.match_type,\n keywords.serving_status,\n keywords.state,\n report.search_term,\n report.targeting,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__search_term_ad_keyword_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }} \n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(19) }}\n)\n\nselect *\nfrom fields", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__search_term_ad_keyword_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}, {"name": "stg_amazon_ads__keyword_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__ad_group_history", "model.amazon_ads.stg_amazon_ads__keyword_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__search_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__search_term_ad_keyword_report\"\n), \n\naccount_info as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"int_amazon_ads__portfolio_history\"\n), \n\ncampaigns as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history\"\n where is_most_recent_record = True\n), \n\nkeywords as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__keyword_history\"\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n report.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n report.keyword_id,\n keywords.keyword_text,\n keywords.match_type,\n keywords.serving_status,\n keywords.state,\n report.search_term,\n report.targeting,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n \n\n from report\n\n left join keywords\n on keywords.keyword_id = report.keyword_id\n and keywords.source_relation = report.source_relation\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.amazon_ads__ad_group_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "amazon_ads__ad_group_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__ad_group_report.sql", "original_file_path": "models/amazon_ads__ad_group_report.sql", "unique_id": "model.amazon_ads.amazon_ads__ad_group_report", "fqn": ["amazon_ads", "amazon_ads__ad_group_report"], "alias": "amazon_ads__ad_group_report", "checksum": {"name": "sha256", "checksum": "649bd5784a32bba8e64559e8c9f3fc603ad7414e801781ffc2115e24aa84ca8a"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance at the ad group level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_bidding_strategy"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "default_bid": {"name": "default_bid", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.default_bid"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.816082, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__ad_group_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n from {{ ref('stg_amazon_ads__ad_group_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ ref('stg_amazon_ads__profile') }}\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from {{ ref('int_amazon_ads__portfolio_history') }}\n), \n\ncampaigns as (\n select *\n from {{ ref('stg_amazon_ads__campaign_history') }}\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from {{ ref('stg_amazon_ads__ad_group_history') }}\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n campaigns.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n ad_groups.serving_status,\n ad_groups.state,\n ad_groups.default_bid,\n report.campaign_bidding_strategy,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__ad_group_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = ad_groups.campaign_id\n and campaigns.source_relation = ad_groups.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n {{ dbt_utils.group_by(16) }}\n)\n\nselect *\nfrom fields", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "int_amazon_ads__portfolio_history", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads.stg_amazon_ads__ad_group_level_report", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__ad_group_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__ad_group_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_level_report\"\n), \n\naccount_info as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\n where _fivetran_deleted = False\n),\n\nportfolios as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"int_amazon_ads__portfolio_history\"\n), \n\ncampaigns as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\n where is_most_recent_record = True\n),\n\nad_groups as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history\"\n where is_most_recent_record = True\n), \n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n portfolios.portfolio_name,\n portfolios.portfolio_id,\n campaigns.campaign_name,\n campaigns.campaign_id,\n ad_groups.ad_group_name,\n report.ad_group_id,\n ad_groups.serving_status,\n ad_groups.state,\n ad_groups.default_bid,\n report.campaign_bidding_strategy,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n\n\n\n from report\n\n left join ad_groups\n on ad_groups.ad_group_id = report.ad_group_id\n and ad_groups.source_relation = report.source_relation\n left join campaigns\n on campaigns.campaign_id = ad_groups.campaign_id\n and campaigns.source_relation = ad_groups.source_relation\n left join portfolios\n on portfolios.portfolio_id = campaigns.portfolio_id\n and portfolios.source_relation = campaigns.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n\n group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.amazon_ads__account_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "amazon_ads__account_report", "resource_type": "model", "package_name": "amazon_ads", "path": "amazon_ads__account_report.sql", "original_file_path": "models/amazon_ads__account_report.sql", "unique_id": "model.amazon_ads.amazon_ads__account_report", "fqn": ["amazon_ads", "amazon_ads__account_report"], "alias": "amazon_ads__account_report", "checksum": {"name": "sha256", "checksum": "16944b494db996760584a557ee19f44fe4e36519eff8d47eb094534675110baa"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance at the account level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.8110535, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__account_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith report as (\n select *\n --use campaign report since account report not provided\n from {{ ref('stg_amazon_ads__campaign_level_report') }}\n), \n\naccount_info as (\n select *\n from {{ ref('stg_amazon_ads__profile') }}\n where _fivetran_deleted = False\n),\n\ncampaigns as (\n select *\n from {{ ref('stg_amazon_ads__campaign_history') }}\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n {{ amazon_ads_persist_pass_through_columns(pass_through_variable='amazon_ads__campaign_passthrough_metrics', identifier='report', transform='sum', coalesce_with=0, exclude_fields=['purchases_30_d','sales_30_d']) }}\n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n \n\n {{ dbt_utils.group_by(6) }}\n)\n\nselect *\nfrom fields", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}, {"name": "stg_amazon_ads__profile", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.amazon_ads.stg_amazon_ads__campaign_level_report", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads__account_report.sql", "compiled": true, "compiled_code": "\n\nwith report as (\n select *\n --use campaign report since account report not provided\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_level_report\"\n), \n\naccount_info as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\n where _fivetran_deleted = False\n),\n\ncampaigns as (\n select *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\n where is_most_recent_record = True\n),\n\nfields as (\n select\n report.source_relation,\n report.date_day,\n account_info.account_name,\n account_info.account_id,\n account_info.country_code,\n account_info.profile_id,\n sum(report.cost) as cost,\n sum(report.clicks) as clicks,\n sum(report.impressions) as impressions,\n sum(report.purchases_30_d) as purchases_30_d,\n sum(report.sales_30_d) as sales_30_d\n\n \n\n\n \n \n \n , sum(coalesce(report.sales_7_d, 0)) as sales_7_d\n \n \n \n \n , sum(coalesce(report.purchases_alias, 0)) as purchases_alias\n \n \n \n \n , sum(coalesce(report.purchases_14_d, 0)) as purchases_14_d\n \n \n\n\n\n\n from report\n\n left join campaigns\n on campaigns.campaign_id = report.campaign_id\n and campaigns.source_relation = report.source_relation\n left join account_info\n on account_info.profile_id = campaigns.profile_id\n and account_info.source_relation = campaigns.source_relation\n \n\n group by 1,2,3,4,5,6\n)\n\nselect *\nfrom fields", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.int_amazon_ads__portfolio_history": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "int_amazon_ads__portfolio_history", "resource_type": "model", "package_name": "amazon_ads", "path": "intermediate/int_amazon_ads__portfolio_history.sql", "original_file_path": "models/intermediate/int_amazon_ads__portfolio_history.sql", "unique_id": "model.amazon_ads.int_amazon_ads__portfolio_history", "fqn": ["amazon_ads", "intermediate", "int_amazon_ads__portfolio_history"], "alias": "int_amazon_ads__portfolio_history", "checksum": {"name": "sha256", "checksum": "4adc8889e2f5adf01f24c7c5676b17c9dbb7877004cc9f2bcb1770ecf3f41ecf"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.2599018, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"int_amazon_ads__portfolio_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{# This intermediate model creates a dummy portfolio table if the user does not use portfolios. \nIf they are using them, the normal portfolio_history will be used. #}\n\nwith portfolios as (\n select\n {% if var('amazon_ads__portfolio_history_enabled', True) %}\n *\n from {{ ref('stg_amazon_ads__portfolio_history') }}\n where is_most_recent_record = True\n {% else %}\n cast(null as {{ dbt.type_string() }}) as source_relation,\n {# uses the columns macro from the source package to populate column names #}\n {%- set columns = amazon_ads.get_portfolio_history_columns() -%}\n {% for column in columns %}\n {# set null for each column #}\n {%- if column['name'] == 'id' -%}\n cast(null as {{ dbt.type_string() }}) as portfolio_id\n {%- elif column['name'] == 'name' -%}\n cast(null as {{ dbt.type_string() }}) as portfolio_name\n {%- elif column['name'] == 'profile_id' -%}\n cast(null as {{ dbt.type_string() }}) as profile_id\n {%- else -%}\n cast(null as {{ column['datatype'] }}) as {{ column['name'] }}\n {%- endif -%}\n {# add comma if not the last column #}\n {%- if not loop.last -%} , {% endif -%}\n {% endfor %}\n {% endif %}\n)\n\nselect * \nfrom portfolios", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__portfolio_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": ["model.amazon_ads.stg_amazon_ads__portfolio_history"]}, "compiled_path": "target/compiled/amazon_ads/models/intermediate/int_amazon_ads__portfolio_history.sql", "compiled": true, "compiled_code": "\n\n\n\nwith portfolios as (\n select\n \n *\n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__portfolio_history\"\n where is_most_recent_record = True\n \n)\n\nselect * \nfrom portfolios", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__portfolio_history": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__portfolio_history.sql", "original_file_path": "models/staging/stg_amazon_ads__portfolio_history.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__portfolio_history", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__portfolio_history"], "alias": "stg_amazon_ads__portfolio_history", "checksum": {"name": "sha256", "checksum": "7492e34b2032f5ee64914c76852d669aa3cee452d469f9db719aaa40d7901ec9"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record represents a portfolio in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "portfolio_name": {"name": "portfolio_name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "budget_amount": {"name": "budget_amount", "description": "The budget amount associated with the portfolio. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_currency_code": {"name": "budget_currency_code", "description": "The currency used for all monetary values for entities under this profile. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_end_date": {"name": "budget_end_date", "description": "The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_start_date": {"name": "budget_start_date", "description": "The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_policy": {"name": "budget_policy", "description": "The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "in_budget": {"name": "in_budget", "description": "Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.is_most_recent_record"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.936191, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__portfolio_history\"", "raw_code": "{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__portfolio_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__portfolio_history_tmp')),\n staging_columns=get_portfolio_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as portfolio_id,\n budget_amount,\n budget_currency_code,\n budget_end_date,\n budget_policy,\n budget_start_date,\n creation_date,\n in_budget,\n last_updated_date,\n name as portfolio_name,\n cast(profile_id as {{ dbt.type_string() }}) as profile_id,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__portfolio_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__portfolio_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.enabled_vars", "macro.amazon_ads.get_portfolio_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads.stg_amazon_ads__portfolio_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__portfolio_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__portfolio_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n budget_amount\n \n as \n \n budget_amount\n \n, \n \n \n budget_currency_code\n \n as \n \n budget_currency_code\n \n, \n \n \n budget_end_date\n \n as \n \n budget_end_date\n \n, \n \n \n budget_policy\n \n as \n \n budget_policy\n \n, \n \n \n budget_start_date\n \n as \n \n budget_start_date\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n in_budget\n \n as \n \n in_budget\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n profile_id\n \n as \n \n profile_id\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n state\n \n as \n \n state\n \n\n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as TEXT) as portfolio_id,\n budget_amount,\n budget_currency_code,\n budget_end_date,\n budget_policy,\n budget_start_date,\n creation_date,\n in_budget,\n last_updated_date,\n name as portfolio_name,\n cast(profile_id as TEXT) as profile_id,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__profile": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__profile", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__profile.sql", "original_file_path": "models/staging/stg_amazon_ads__profile.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__profile", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__profile"], "alias": "stg_amazon_ads__profile", "checksum": {"name": "sha256", "checksum": "b19222876f75b5b7f2172737e7020be2bd0fe52e2fa55ecfb2eb1c437ac054bf"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record represents a profile. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "_fivetran_deleted": {"name": "_fivetran_deleted", "description": "Boolean created by Fivetran to indicate whether the record has been deleted.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_deleted"]}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_id"]}, "account_marketplace_string_id": {"name": "account_marketplace_string_id", "description": "The identifier of the marketplace to which the account is associated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.account_name"]}, "account_sub_type": {"name": "account_sub_type", "description": "The account subtype.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_type": {"name": "account_type", "description": "One of seller, vendor, or agency.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_valid_payment_method": {"name": "account_valid_payment_method", "description": "For Vendors, this returns if the Advertiser has set up a valid payment method.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.country_code"]}, "currency_code": {"name": "currency_code", "description": "The currency used for all monetary values for entities under this profile.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.currency_code"]}, "daily_budget": {"name": "daily_budget", "description": "Daily budget for Sponsored Product campaigns for seller type accounts.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "timezone": {"name": "timezone", "description": "The time zone used for all date-based campaign management and reporting.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.94169, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__profile_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__profile_tmp')),\n staging_columns=get_profile_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as profile_id,\n cast(account_id as {{ dbt.type_string() }}) as account_id,\n account_marketplace_string_id,\n account_name,\n account_sub_type,\n account_type,\n account_valid_payment_method,\n country_code,\n currency_code,\n daily_budget,\n timezone,\n _fivetran_deleted\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__profile_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__profile_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_profile_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads.stg_amazon_ads__profile_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__profile.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n id\n \n as \n \n id\n \n, \n \n \n account_id\n \n as \n \n account_id\n \n, \n \n \n account_marketplace_string_id\n \n as \n \n account_marketplace_string_id\n \n, \n \n \n account_name\n \n as \n \n account_name\n \n, \n \n \n account_sub_type\n \n as \n \n account_sub_type\n \n, \n \n \n account_type\n \n as \n \n account_type\n \n, \n \n \n account_valid_payment_method\n \n as \n \n account_valid_payment_method\n \n, \n \n \n country_code\n \n as \n \n country_code\n \n, \n \n \n currency_code\n \n as \n \n currency_code\n \n, \n \n \n daily_budget\n \n as \n \n daily_budget\n \n, \n \n \n timezone\n \n as \n \n timezone\n \n, \n \n \n _fivetran_deleted\n \n as \n \n _fivetran_deleted\n \n\n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as TEXT) as profile_id,\n cast(account_id as TEXT) as account_id,\n account_marketplace_string_id,\n account_name,\n account_sub_type,\n account_type,\n account_valid_payment_method,\n country_code,\n currency_code,\n daily_budget,\n timezone,\n _fivetran_deleted\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__search_term_ad_keyword_report.sql", "original_file_path": "models/staging/stg_amazon_ads__search_term_ad_keyword_report.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__search_term_ad_keyword_report"], "alias": "stg_amazon_ads__search_term_ad_keyword_report", "checksum": {"name": "sha256", "checksum": "43ad5dca44d474500e342be039a6942d725816f1006303d496722f8931f00410"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Search term reports contain search term performance metrics broken down by targeting expressions and keywords.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_keyword_status": {"name": "ad_keyword_status", "description": "Current status of a keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_keyword_status"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_bid"]}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "search_term": {"name": "search_term", "description": "The search term used by the customer.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.search_term"]}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.targeting"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.944725, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__search_term_ad_keyword_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__search_term_ad_keyword_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__search_term_ad_keyword_report_tmp')),\n staging_columns=get_search_term_ad_keyword_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as {{ dbt.type_string() }}) as keyword_id,\n search_term,\n targeting,\n purchases_30_d,\n sales_30_d\n\n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__search_term_ad_keyword_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_search_term_ad_keyword_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__search_term_ad_keyword_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__search_term_ad_keyword_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n cast(null as TEXT) as \n \n ad_keyword_status\n \n , \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n keyword_bid\n \n as \n \n keyword_bid\n \n, \n \n \n keyword_id\n \n as \n \n keyword_id\n \n, \n \n \n search_term\n \n as \n \n search_term\n \n, \n \n \n targeting\n \n as \n \n targeting\n \n, \n cast(null as integer) as \n \n purchases_30_d\n \n , \n cast(null as float) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as TEXT) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as TEXT) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as TEXT) as keyword_id,\n search_term,\n targeting,\n purchases_30_d,\n sales_30_d\n\n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__targeting_keyword_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__targeting_keyword_report.sql", "original_file_path": "models/staging/stg_amazon_ads__targeting_keyword_report.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__targeting_keyword_report", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__targeting_keyword_report"], "alias": "stg_amazon_ads__targeting_keyword_report", "checksum": {"name": "sha256", "checksum": "70565b72db3435e73426ccce95715ecb48b66aa5e390ea51ff0b19c60eb2d6f1"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Targeting reports contain performance metrics broken down by both targeting expressions and keywords.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_keyword_status": {"name": "ad_keyword_status", "description": "Current status of a keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_keyword_status"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_bid"]}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "keyword_type": {"name": "keyword_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_type"]}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.match_type"]}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.targeting"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.9433835, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__targeting_keyword_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__targeting_keyword_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__targeting_keyword_report_tmp')),\n staging_columns=get_targeting_keyword_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as {{ dbt.type_string() }}) as keyword_id,\n keyword_type,\n match_type,\n targeting,\n purchases_30_d,\n sales_30_d\n\n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__targeting_keyword_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__targeting_keyword_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__targeting_keyword_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_targeting_keyword_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__targeting_keyword_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__targeting_keyword_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n ad_keyword_status\n \n as \n \n ad_keyword_status\n \n, \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n keyword_bid\n \n as \n \n keyword_bid\n \n, \n \n \n keyword_id\n \n as \n \n keyword_id\n \n, \n \n \n keyword_type\n \n as \n \n keyword_type\n \n, \n \n \n match_type\n \n as \n \n match_type\n \n, \n \n \n targeting\n \n as \n \n targeting\n \n, \n cast(null as integer) as \n \n purchases_30_d\n \n , \n cast(null as float) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as TEXT) as ad_group_id,\n ad_keyword_status,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as TEXT) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n keyword_bid,\n cast(keyword_id as TEXT) as keyword_id,\n keyword_type,\n match_type,\n targeting,\n purchases_30_d,\n sales_30_d\n\n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__campaign_level_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__campaign_level_report.sql", "original_file_path": "models/staging/stg_amazon_ads__campaign_level_report.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_level_report", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__campaign_level_report"], "alias": "stg_amazon_ads__campaign_level_report", "checksum": {"name": "sha256", "checksum": "faff85e0a0f4e67a8a53f8de1035e545336154fc516d4fc1dd0b994c0228ec01"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Campaign reports contain performance data broken down at the campaign level.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "campaign_applicable_budget_rule_id": {"name": "campaign_applicable_budget_rule_id", "description": "The ID associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_applicable_budget_rule_id"]}, "campaign_applicable_budget_rule_name": {"name": "campaign_applicable_budget_rule_name", "description": "The name associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_applicable_budget_rule_name"]}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_bidding_strategy"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_rule_based_budget_amount": {"name": "campaign_rule_based_budget_amount", "description": "The value of the rule-based budget for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_rule_based_budget_amount"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.932786, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_level_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__campaign_level_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__campaign_level_report_tmp')),\n staging_columns=get_campaign_level_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n campaign_applicable_budget_rule_id,\n campaign_applicable_budget_rule_name,\n campaign_bidding_strategy,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n campaign_rule_based_budget_amount,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n\n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__campaign_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_level_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_campaign_level_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__campaign_level_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_level_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n campaign_applicable_budget_rule_id\n \n as \n \n campaign_applicable_budget_rule_id\n \n, \n \n \n campaign_applicable_budget_rule_name\n \n as \n \n campaign_applicable_budget_rule_name\n \n, \n \n \n campaign_bidding_strategy\n \n as \n \n campaign_bidding_strategy\n \n, \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n campaign_rule_based_budget_amount\n \n as \n \n campaign_rule_based_budget_amount\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n \n \n purchases_30_d\n \n as \n \n purchases_30_d\n \n, \n \n \n sales_30_d\n \n as \n \n sales_30_d\n \n, \n \n \n sales_7_d\n \n as \n \n sales_7_d\n \n, \n \n \n purchases_30_d\n \n as purchases_alias , \n cast(null as TEXT) as \n \n purchases_14_d\n \n \n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n campaign_applicable_budget_rule_id,\n campaign_applicable_budget_rule_name,\n campaign_bidding_strategy,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as TEXT) as campaign_id,\n campaign_rule_based_budget_amount,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n\n \n\n\n \n \n \n , coalesce(cast(sales_7_d as float), 0) as sales_7_d\n \n \n \n \n \n , coalesce(cast(purchases_alias as float), 0) as purchases_alias\n \n \n \n \n \n , coalesce(cast(purchases_14_d as float), 0) as purchases_14_d\n \n \n \n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__ad_group_history": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__ad_group_history.sql", "original_file_path": "models/staging/stg_amazon_ads__ad_group_history.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_history", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__ad_group_history"], "alias": "stg_amazon_ads__ad_group_history", "checksum": {"name": "sha256", "checksum": "ad915eee0f9060ec6076a785633fb14e6a4197f55b4a2f5dfe8e523b3428d7fe"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record represents an ad group in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_group_name": {"name": "ad_group_name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_name"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "default_bid": {"name": "default_bid", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.default_bid"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.is_most_recent_record"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.9246519, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__ad_group_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__ad_group_history_tmp')),\n staging_columns=get_ad_group_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as ad_group_id,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n creation_date,\n default_bid,\n last_updated_date,\n name as ad_group_name,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_ad_group_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads.stg_amazon_ads__ad_group_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__ad_group_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n default_bid\n \n as \n \n default_bid\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n state\n \n as \n \n state\n \n\n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as TEXT) as ad_group_id,\n cast(campaign_id as TEXT) as campaign_id,\n creation_date,\n default_bid,\n last_updated_date,\n name as ad_group_name,\n serving_status,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__product_ad_history": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__product_ad_history.sql", "original_file_path": "models/staging/stg_amazon_ads__product_ad_history.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__product_ad_history", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__product_ad_history"], "alias": "stg_amazon_ads__product_ad_history", "checksum": {"name": "sha256", "checksum": "a561e039270a2906c3b2c4612600325afadd04e43ede1e59146f94f89a09e86c"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record represents a product in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "ad_id": {"name": "ad_id", "description": "The ID of the Ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_id"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "asin": {"name": "asin", "description": "The ASIN associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "sku": {"name": "sku", "description": "The product SKU associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.is_most_recent_record"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.9379516, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__product_ad_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__product_ad_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__product_ad_history_tmp')),\n staging_columns=get_product_ad_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as ad_id,\n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n asin,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n creation_date,\n last_updated_date,\n serving_status,\n sku,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__product_ad_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__product_ad_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_product_ad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads.stg_amazon_ads__product_ad_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__product_ad_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__product_ad_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n asin\n \n as \n \n asin\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n sku\n \n as \n \n sku\n \n, \n \n \n state\n \n as \n \n state\n \n\n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as TEXT) as ad_id,\n cast(ad_group_id as TEXT) as ad_group_id,\n asin,\n cast(campaign_id as TEXT) as campaign_id,\n creation_date,\n last_updated_date,\n serving_status,\n sku,\n state,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__keyword_history": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__keyword_history.sql", "original_file_path": "models/staging/stg_amazon_ads__keyword_history.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__keyword_history", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__keyword_history"], "alias": "stg_amazon_ads__keyword_history", "checksum": {"name": "sha256", "checksum": "8fef1df7058e8d7f41b82c40ee263ed0969637aafc90670ab3c2068f3be788fd"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record represents a keyword in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "bid": {"name": "bid", "description": "Bid associated with this keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.bid_keyword"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "match_type": {"name": "match_type", "description": "One of (broad, exact, or phrase.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_match_type"]}, "native_language_keyword": {"name": "native_language_keyword", "description": "The unlocalized keyword text in the preferred locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "native_language_locale": {"name": "native_language_locale", "description": "The preferred language locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.is_most_recent_record"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.934989, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__keyword_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__keyword_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__keyword_history_tmp')),\n staging_columns=get_keyword_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as keyword_id,\n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n bid,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n creation_date,\n keyword_text,\n last_updated_date,\n match_type,\n native_language_keyword,\n serving_status,\n state,\n native_language_locale,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__keyword_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__keyword_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_keyword_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads.stg_amazon_ads__keyword_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__keyword_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__keyword_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n bid\n \n as \n \n bid\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n keyword_text\n \n as \n \n keyword_text\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n match_type\n \n as \n \n match_type\n \n, \n \n \n native_language_keyword\n \n as \n \n native_language_keyword\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n state\n \n as \n \n state\n \n, \n \n \n native_language_locale\n \n as \n \n native_language_locale\n \n\n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as TEXT) as keyword_id,\n cast(ad_group_id as TEXT) as ad_group_id,\n bid,\n cast(campaign_id as TEXT) as campaign_id,\n creation_date,\n keyword_text,\n last_updated_date,\n match_type,\n native_language_keyword,\n serving_status,\n state,\n native_language_locale,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__ad_group_level_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__ad_group_level_report.sql", "original_file_path": "models/staging/stg_amazon_ads__ad_group_level_report.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_level_report", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__ad_group_level_report"], "alias": "stg_amazon_ads__ad_group_level_report", "checksum": {"name": "sha256", "checksum": "e9a02b686f84b5e0bfaff8e878e8f3459f669cb340f7344e3b61994b7be15d6d"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record in this table represents the daily performance by Amazon ad group.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_bidding_strategy"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.9256315, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_level_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__ad_group_level_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__ad_group_level_report_tmp')),\n staging_columns=get_ad_group_level_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n campaign_bidding_strategy,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__ad_group_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_level_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__ad_group_level_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_ad_group_level_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__ad_group_level_report.sql", "compiled": true, "compiled_code": "\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_level_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n campaign_bidding_strategy\n \n as \n \n campaign_bidding_strategy\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n cast(null as integer) as \n \n purchases_30_d\n \n , \n cast(null as float) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_group_id as TEXT) as ad_group_id,\n campaign_bidding_strategy,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__campaign_history": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__campaign_history.sql", "original_file_path": "models/staging/stg_amazon_ads__campaign_history.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_history", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__campaign_history"], "alias": "stg_amazon_ads__campaign_history", "checksum": {"name": "sha256", "checksum": "2d4efd6602d2d8e18cacbb116dd66d4ca8969a8b7623902fd7084a4572325aca"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Each record represents a campaign in Amazon Ads.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "campaign_name": {"name": "campaign_name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "bidding_strategy": {"name": "bidding_strategy", "description": "The bidding strategy associated with a campaign (legacyForSales, autoForSales, or manual.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget": {"name": "budget", "description": "The budget for the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_type": {"name": "budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "effective_budget": {"name": "effective_budget", "description": "Adjusted budget for the campaign that has been impacted by a budget rule.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "end_date": {"name": "end_date", "description": "The end date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "start_date": {"name": "start_date", "description": "The start date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "targeting_type": {"name": "targeting_type", "description": "The type of targeting used for the campaign, either manual or auto.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean indicating whether record was the most recent instance.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.is_most_recent_record"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.9306202, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__campaign_history_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__campaign_history_tmp')),\n staging_columns=get_campaign_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as {{ dbt.type_string() }}) as campaign_id,\n last_updated_date,\n bidding_strategy,\n creation_date,\n end_date,\n name as campaign_name,\n cast(portfolio_id as {{ dbt.type_string() }}) as portfolio_id,\n cast(profile_id as {{ dbt.type_string() }}) as profile_id,\n serving_status,\n start_date,\n state,\n targeting_type,\n budget,\n budget_type,\n effective_budget,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_history_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__campaign_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_campaign_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string"], "nodes": ["model.amazon_ads.stg_amazon_ads__campaign_history_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__campaign_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n bidding_strategy\n \n as \n \n bidding_strategy\n \n, \n \n \n creation_date\n \n as \n \n creation_date\n \n, \n \n \n end_date\n \n as \n \n end_date\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n last_updated_date\n \n as \n \n last_updated_date\n \n, \n \n \n name\n \n as \n \n name\n \n, \n \n \n portfolio_id\n \n as \n \n portfolio_id\n \n, \n \n \n profile_id\n \n as \n \n profile_id\n \n, \n \n \n serving_status\n \n as \n \n serving_status\n \n, \n \n \n start_date\n \n as \n \n start_date\n \n, \n \n \n state\n \n as \n \n state\n \n, \n \n \n targeting_type\n \n as \n \n targeting_type\n \n, \n \n \n budget\n \n as \n \n budget\n \n, \n \n \n budget_type\n \n as \n \n budget_type\n \n, \n \n \n effective_budget\n \n as \n \n effective_budget\n \n\n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(id as TEXT) as campaign_id,\n last_updated_date,\n bidding_strategy,\n creation_date,\n end_date,\n name as campaign_name,\n cast(portfolio_id as TEXT) as portfolio_id,\n cast(profile_id as TEXT) as profile_id,\n serving_status,\n start_date,\n state,\n targeting_type,\n budget,\n budget_type,\n effective_budget,\n row_number() over (partition by source_relation, id order by last_updated_date desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__advertised_product_report": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/stg_amazon_ads__advertised_product_report.sql", "original_file_path": "models/staging/stg_amazon_ads__advertised_product_report.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__advertised_product_report", "fqn": ["amazon_ads", "staging", "stg_amazon_ads__advertised_product_report"], "alias": "stg_amazon_ads__advertised_product_report", "checksum": {"name": "sha256", "checksum": "d68ba58014d1c07153a6527dfd801e0b7472e9c4c80704c9b591659154ed6553"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "Advertised product reports contain performance data for products that are advertised as part of your campaigns.", "columns": {"source_relation": {"name": "source_relation", "description": "The source of the record if the unioning functionality is being used. If not this field will be empty.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.source_relation"]}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_id": {"name": "ad_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "advertised_asin": {"name": "advertised_asin", "description": "The ASIN associated to an advertised product.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.advertised_asin"]}, "advertised_sku": {"name": "advertised_sku", "description": "The SKU being advertised.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.advertised_sku"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "amazon_ads://models/staging/stg_amazon_ads.yml", "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1755122570.9270136, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__advertised_product_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_amazon_ads__advertised_product_report_tmp') }}\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_amazon_ads__advertised_product_report_tmp')),\n staging_columns=get_advertised_product_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='amazon_ads_union_schemas', \n union_database_variable='amazon_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_id as {{ dbt.type_string() }}) as ad_id,\n cast(ad_group_id as {{ dbt.type_string() }}) as ad_group_id,\n advertised_asin,\n advertised_sku,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as {{ dbt.type_string() }}) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n {{ amazon_ads_fill_pass_through_columns(pass_through_fields=var('amazon_ads__advertised_product_passthrough_metrics'), except=['purchases_30_d', 'sales_30_d']) }}\n\n from fields\n)\n\nselect *\nfrom final", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__advertised_product_report_tmp", "package": null, "version": null}, {"name": "stg_amazon_ads__advertised_product_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.amazon_ads.get_advertised_product_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_string", "macro.amazon_ads.amazon_ads_fill_pass_through_columns"], "nodes": ["model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads__advertised_product_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__advertised_product_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_group_id\n \n as \n \n ad_group_id\n \n, \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n \n \n advertised_asin\n \n as \n \n advertised_asin\n \n, \n \n \n advertised_sku\n \n as \n \n advertised_sku\n \n, \n \n \n campaign_budget_amount\n \n as \n \n campaign_budget_amount\n \n, \n \n \n campaign_budget_currency_code\n \n as \n \n campaign_budget_currency_code\n \n, \n \n \n campaign_budget_type\n \n as \n \n campaign_budget_type\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n \n \n clicks\n \n as \n \n clicks\n \n, \n \n \n cost\n \n as \n \n cost\n \n, \n \n \n date\n \n as \n \n date\n \n, \n \n \n impressions\n \n as \n \n impressions\n \n, \n cast(null as integer) as \n \n purchases_30_d\n \n , \n cast(null as float) as \n \n sales_30_d\n \n \n\n\n \n \n\n\n, cast('' as TEXT) as source_relation\n\n\n\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n cast(ad_id as TEXT) as ad_id,\n cast(ad_group_id as TEXT) as ad_group_id,\n advertised_asin,\n advertised_sku,\n campaign_budget_amount,\n campaign_budget_currency_code,\n campaign_budget_type,\n cast(campaign_id as TEXT) as campaign_id,\n clicks,\n cost,\n date as date_day,\n impressions,\n purchases_30_d,\n sales_30_d\n \n \n\n\n\n\n\n from fields\n)\n\nselect *\nfrom final", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__ad_group_history_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_history_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__ad_group_history_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__ad_group_history_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_history_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__ad_group_history_tmp"], "alias": "stg_amazon_ads__ad_group_history_tmp", "checksum": {"name": "sha256", "checksum": "a4a15e75690b1457f5e0f40d7dccd135bf8ac2c8598152a159fdac4e7df9c110"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.527892, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_group_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='ad_group_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "ad_group_history"], ["amazon_ads", "ad_group_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.ad_group_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__ad_group_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"ad_group_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__campaign_history_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_history_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__campaign_history_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__campaign_history_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_history_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__campaign_history_tmp"], "alias": "stg_amazon_ads__campaign_history_tmp", "checksum": {"name": "sha256", "checksum": "0187c7725896fbcdf1bbcbae9d300353ed94df3ec8b0d90e8e63f4bf0d266a15"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.5636, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='campaign_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "campaign_history"], ["amazon_ads", "campaign_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__campaign_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"campaign_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__search_term_ad_keyword_report_tmp"], "alias": "stg_amazon_ads__search_term_ad_keyword_report_tmp", "checksum": {"name": "sha256", "checksum": "ae1c9bf47b0cc22b217eaf505173ce06e0b1861722b9415ab54d4a8f13eac3cc"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.5715673, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__search_term_ad_keyword_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='search_term_ad_keyword_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='search_term_ad_keyword_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "search_term_ad_keyword_report"], ["amazon_ads", "search_term_ad_keyword_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.search_term_ad_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__search_term_ad_keyword_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"search_term_ad_keyword_report_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__advertised_product_report_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__advertised_product_report_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__advertised_product_report_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__advertised_product_report_tmp"], "alias": "stg_amazon_ads__advertised_product_report_tmp", "checksum": {"name": "sha256", "checksum": "630c5233213d1ccc88fe253f8eeac5b8e4bc415443891fff3687dbdb50ee8ca0"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.580501, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__advertised_product_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='advertised_product_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='advertised_product_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "advertised_product_report"], ["amazon_ads", "advertised_product_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.advertised_product_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__advertised_product_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"advertised_product_report_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__keyword_history_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__keyword_history_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__keyword_history_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__keyword_history_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__keyword_history_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__keyword_history_tmp"], "alias": "stg_amazon_ads__keyword_history_tmp", "checksum": {"name": "sha256", "checksum": "c142330a3f12a74e80ec0f0645c51afe68190e156f8e55913f9653d58bade07d"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.5884624, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__keyword_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='keyword_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='keyword_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "keyword_history"], ["amazon_ads", "keyword_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.keyword_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__keyword_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"keyword_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__product_ad_history_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__product_ad_history_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__product_ad_history_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__product_ad_history_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__product_ad_history_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__product_ad_history_tmp"], "alias": "stg_amazon_ads__product_ad_history_tmp", "checksum": {"name": "sha256", "checksum": "5cf7d1f7a9db1fc2e083a4c66e20630efb5268b83337f2b51e9134fb74c91062"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.596497, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__product_ad_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='product_ad_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='product_ad_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "product_ad_history"], ["amazon_ads", "product_ad_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.product_ad_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__product_ad_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"product_ad_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__ad_group_level_report_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__ad_group_level_report_tmp"], "alias": "stg_amazon_ads__ad_group_level_report_tmp", "checksum": {"name": "sha256", "checksum": "8482674eabaf3fd22e7f482b0baa19f8289a10598455aebc81d56fe90b63f60f"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.604445, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_level_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_group_level_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='ad_group_level_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "ad_group_level_report"], ["amazon_ads", "ad_group_level_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.ad_group_level_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__ad_group_level_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"ad_group_level_report_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__portfolio_history_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__portfolio_history_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__portfolio_history_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__portfolio_history_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__portfolio_history_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__portfolio_history_tmp"], "alias": "stg_amazon_ads__portfolio_history_tmp", "checksum": {"name": "sha256", "checksum": "e3d32e4c31e5335c6eb282ec238bcedbcbe559a9f08e0e3daf3ac682f965b806"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.613322, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__portfolio_history_tmp\"", "raw_code": "{{ config(enabled=fivetran_utils.enabled_vars(['ad_reporting__amazon_ads_enabled','amazon_ads__portfolio_history_enabled'])) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='portfolio_history', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='portfolio_history',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "portfolio_history"], ["amazon_ads", "portfolio_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.enabled_vars", "macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.portfolio_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__portfolio_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"portfolio_history_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__profile_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__profile_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__profile_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__profile_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__profile_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__profile_tmp"], "alias": "stg_amazon_ads__profile_tmp", "checksum": {"name": "sha256", "checksum": "3b418e24c0a6ea40bf9d5a6855a3aeb96c4548339c127142014b61602b62da35"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.6214783, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='profile', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='profile',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "profile"], ["amazon_ads", "profile"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.profile"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__profile_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"profile_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__campaign_level_report_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__campaign_level_report_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__campaign_level_report_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__campaign_level_report_tmp"], "alias": "stg_amazon_ads__campaign_level_report_tmp", "checksum": {"name": "sha256", "checksum": "34b2a26051b11d48d8a3c29349032a928ecd80207c1d2e9222407fa6b3cdd835"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.6295247, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_level_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_level_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='campaign_level_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "campaign_level_report"], ["amazon_ads", "campaign_level_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.campaign_level_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__campaign_level_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"campaign_level_report_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp": {"database": "postgres", "schema": "public_amazon_ads_dev", "name": "stg_amazon_ads__targeting_keyword_report_tmp", "resource_type": "model", "package_name": "amazon_ads", "path": "staging/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql", "original_file_path": "models/staging/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql", "unique_id": "model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp", "fqn": ["amazon_ads", "staging", "tmp", "stg_amazon_ads__targeting_keyword_report_tmp"], "alias": "stg_amazon_ads__targeting_keyword_report_tmp", "checksum": {"name": "sha256", "checksum": "b4171c02c2583338e3767f969b5799359e262da90821bebe28da24bf0db030ce"}, "config": {"enabled": true, "alias": null, "schema": "amazon_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 1, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {}, "full_refresh": null, "unique_key": null, "on_schema_change": "ignore", "on_configuration_change": "apply", "grants": {}, "packages": [], "docs": {"show": true, "node_color": null}, "contract": {"enforced": false, "alias_types": true}, "event_time": null, "concurrent_batches": null, "access": "protected", "freshness": null}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "amazon_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1755122570.6376066, "relation_name": "\"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__targeting_keyword_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__amazon_ads_enabled', True)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='targeting_keyword_report', \n database_variable='amazon_ads_database', \n schema_variable='amazon_ads_schema', \n default_database=target.database,\n default_schema='amazon_ads',\n default_variable='targeting_keyword_report',\n union_schema_variable='amazon_ads_union_schemas',\n union_database_variable='amazon_ads_union_databases'\n )\n}}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [["amazon_ads", "targeting_keyword_report"], ["amazon_ads", "targeting_keyword_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.amazon_ads.amazon_ads.targeting_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/tmp/stg_amazon_ads__targeting_keyword_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"public\".\"targeting_keyword_report_data\"", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": [], "time_spine": null}, "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__account_report_profile_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__account_report_profile_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66", "fqn": ["amazon_ads", "not_null_amazon_ads__account_report_profile_id"], "alias": "not_null_amazon_ads__account_report_profile_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9022033, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__account_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__account_report_profile_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect profile_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__account_report\"\nwhere profile_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "profile_id", "file_key_name": "models.amazon_ads__account_report", "attached_node": "model.amazon_ads.amazon_ads__account_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "profile_id", "model": "{{ get_where_subquery(ref('amazon_ads__account_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__account_report_account_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__account_report_account_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061", "fqn": ["amazon_ads", "not_null_amazon_ads__account_report_account_id"], "alias": "not_null_amazon_ads__account_report_account_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9063292, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__account_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__account_report_account_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect account_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__account_report\"\nwhere account_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "account_id", "file_key_name": "models.amazon_ads__account_report", "attached_node": "model.amazon_ads.amazon_ads__account_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "account_id", "model": "{{ get_where_subquery(ref('amazon_ads__account_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__ad_group_report_ad_group_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__ad_group_report_ad_group_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a", "fqn": ["amazon_ads", "not_null_amazon_ads__ad_group_report_ad_group_id"], "alias": "not_null_amazon_ads__ad_group_report_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9088407, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__ad_group_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__ad_group_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__ad_group_report_ad_group_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_group_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__ad_group_report\"\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_group_id", "file_key_name": "models.amazon_ads__ad_group_report", "attached_node": "model.amazon_ads.amazon_ads__ad_group_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('amazon_ads__ad_group_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__ad_report_ad_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__ad_report_ad_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3", "fqn": ["amazon_ads", "not_null_amazon_ads__ad_report_ad_id"], "alias": "not_null_amazon_ads__ad_report_ad_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9112027, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__ad_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__ad_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__ad_report\"\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_id", "file_key_name": "models.amazon_ads__ad_report", "attached_node": "model.amazon_ads.amazon_ads__ad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('amazon_ads__ad_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__campaign_report_campaign_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__campaign_report_campaign_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c", "fqn": ["amazon_ads", "not_null_amazon_ads__campaign_report_campaign_id"], "alias": "not_null_amazon_ads__campaign_report_campaign_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9135652, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__campaign_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__campaign_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__campaign_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__campaign_report\"\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "campaign_id", "file_key_name": "models.amazon_ads__campaign_report", "attached_node": "model.amazon_ads.amazon_ads__campaign_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('amazon_ads__campaign_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__portfolio_report_profile_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__portfolio_report_profile_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6", "fqn": ["amazon_ads", "not_null_amazon_ads__portfolio_report_profile_id"], "alias": "not_null_amazon_ads__portfolio_report_profile_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9160886, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__portfolio_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__portfolio_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__portfolio_report_profile_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect profile_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__portfolio_report\"\nwhere profile_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "profile_id", "file_key_name": "models.amazon_ads__portfolio_report", "attached_node": "model.amazon_ads.amazon_ads__portfolio_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "profile_id", "model": "{{ get_where_subquery(ref('amazon_ads__portfolio_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__keyword_report_keyword_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__keyword_report_keyword_id.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a", "fqn": ["amazon_ads", "not_null_amazon_ads__keyword_report_keyword_id"], "alias": "not_null_amazon_ads__keyword_report_keyword_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9185705, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__keyword_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__keyword_report_keyword_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect keyword_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__keyword_report\"\nwhere keyword_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "keyword_id", "file_key_name": "models.amazon_ads__keyword_report", "attached_node": "model.amazon_ads.amazon_ads__keyword_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "keyword_id", "model": "{{ get_where_subquery(ref('amazon_ads__keyword_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_amazon_ads__search_report_search_term", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_amazon_ads__search_report_search_term.sql", "original_file_path": "models/amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a", "fqn": ["amazon_ads", "not_null_amazon_ads__search_report_search_term"], "alias": "not_null_amazon_ads__search_report_search_term", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9209008, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__search_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.amazon_ads__search_report"]}, "compiled_path": "target/compiled/amazon_ads/models/amazon_ads.yml/not_null_amazon_ads__search_report_search_term.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect search_term\nfrom \"postgres\".\"public_amazon_ads_dev\".\"amazon_ads__search_report\"\nwhere search_term is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "search_term", "file_key_name": "models.amazon_ads__search_report", "attached_node": "model.amazon_ads.amazon_ads__search_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "search_term", "model": "{{ get_where_subquery(ref('amazon_ads__search_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__ad_group_history_ad_group_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__ad_group_history_ad_group_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__ad_group_history_ad_group_id"], "alias": "not_null_stg_amazon_ads__ad_group_history_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9457562, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__ad_group_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__ad_group_history_ad_group_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_group_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_history\"\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_group_id", "file_key_name": "models.stg_amazon_ads__ad_group_history", "attached_node": "model.amazon_ads.stg_amazon_ads__ad_group_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__ad_group_history')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id"], "alias": "not_null_stg_amazon_ads__ad_group_level_report_ad_group_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.948184, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__ad_group_level_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__ad_group_level_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_group_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__ad_group_level_report\"\nwhere ad_group_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_group_id", "file_key_name": "models.stg_amazon_ads__ad_group_level_report", "attached_node": "model.amazon_ads.stg_amazon_ads__ad_group_level_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_group_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__ad_group_level_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__advertised_product_report_ad_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__advertised_product_report_ad_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__advertised_product_report_ad_id"], "alias": "not_null_stg_amazon_ads__advertised_product_report_ad_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9505587, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__advertised_product_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__advertised_product_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__advertised_product_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__advertised_product_report\"\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_id", "file_key_name": "models.stg_amazon_ads__advertised_product_report", "attached_node": "model.amazon_ads.stg_amazon_ads__advertised_product_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__advertised_product_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__campaign_history_campaign_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__campaign_history_campaign_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__campaign_history_campaign_id"], "alias": "not_null_stg_amazon_ads__campaign_history_campaign_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9529707, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__campaign_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__campaign_history_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_history\"\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "campaign_id", "file_key_name": "models.stg_amazon_ads__campaign_history", "attached_node": "model.amazon_ads.stg_amazon_ads__campaign_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__campaign_history')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__campaign_level_report_campaign_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__campaign_level_report_campaign_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__campaign_level_report_campaign_id"], "alias": "not_null_stg_amazon_ads__campaign_level_report_campaign_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9553058, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__campaign_level_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__campaign_level_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__campaign_level_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__campaign_level_report\"\nwhere campaign_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "campaign_id", "file_key_name": "models.stg_amazon_ads__campaign_level_report", "attached_node": "model.amazon_ads.stg_amazon_ads__campaign_level_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__campaign_level_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__keyword_history_keyword_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__keyword_history_keyword_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__keyword_history_keyword_id"], "alias": "not_null_stg_amazon_ads__keyword_history_keyword_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9576638, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__keyword_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__keyword_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__keyword_history_keyword_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect keyword_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__keyword_history\"\nwhere keyword_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "keyword_id", "file_key_name": "models.stg_amazon_ads__keyword_history", "attached_node": "model.amazon_ads.stg_amazon_ads__keyword_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "keyword_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__keyword_history')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__portfolio_history_portfolio_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__portfolio_history_portfolio_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__portfolio_history_portfolio_id"], "alias": "not_null_stg_amazon_ads__portfolio_history_portfolio_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9599845, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__portfolio_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__portfolio_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__portfolio_history_portfolio_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect portfolio_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__portfolio_history\"\nwhere portfolio_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "portfolio_id", "file_key_name": "models.stg_amazon_ads__portfolio_history", "attached_node": "model.amazon_ads.stg_amazon_ads__portfolio_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "portfolio_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__portfolio_history')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__product_ad_history_ad_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__product_ad_history_ad_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__product_ad_history_ad_id"], "alias": "not_null_stg_amazon_ads__product_ad_history_ad_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9622798, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__product_ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__product_ad_history"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__product_ad_history_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__product_ad_history\"\nwhere ad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_id", "file_key_name": "models.stg_amazon_ads__product_ad_history", "attached_node": "model.amazon_ads.stg_amazon_ads__product_ad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__product_ad_history')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__profile_profile_id.bd192c102b": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__profile_profile_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__profile_profile_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__profile_profile_id.bd192c102b", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__profile_profile_id"], "alias": "not_null_stg_amazon_ads__profile_profile_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9654655, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__profile", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__profile"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__profile_profile_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect profile_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__profile\"\nwhere profile_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "profile_id", "file_key_name": "models.stg_amazon_ads__profile", "attached_node": "model.amazon_ads.stg_amazon_ads__profile", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "profile_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__profile')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id"], "alias": "not_null_stg_amazon_ads__targeting_keyword_report_keyword_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {}, "created_at": 1755122570.9678736, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__targeting_keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__targeting_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect keyword_id\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__targeting_keyword_report\"\nwhere keyword_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "keyword_id", "file_key_name": "models.stg_amazon_ads__targeting_keyword_report", "attached_node": "model.amazon_ads.stg_amazon_ads__targeting_keyword_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "keyword_id", "model": "{{ get_where_subquery(ref('stg_amazon_ads__targeting_keyword_report')) }}"}, "namespace": null}}, "test.amazon_ads.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06": {"database": "postgres", "schema": "public_dbt_test__audit", "name": "not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term", "resource_type": "test", "package_name": "amazon_ads", "path": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe.sql", "original_file_path": "models/staging/stg_amazon_ads.yml", "unique_id": "test.amazon_ads.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06", "fqn": ["amazon_ads", "staging", "not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term"], "alias": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe", "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"alias": "not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe"}, "created_at": 1755122570.970222, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(alias=\"not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe\") }}", "doc_blocks": [], "language": "sql", "refs": [{"name": "stg_amazon_ads__search_term_ad_keyword_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report"]}, "compiled_path": "target/compiled/amazon_ads/models/staging/stg_amazon_ads.yml/not_null_stg_amazon_ads__searc_f003e4b73838d347c57dd6506254bcfe.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect search_term\nfrom \"postgres\".\"public_amazon_ads_dev\".\"stg_amazon_ads__search_term_ad_keyword_report\"\nwhere search_term is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "search_term", "file_key_name": "models.stg_amazon_ads__search_term_ad_keyword_report", "attached_node": "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "search_term", "model": "{{ get_where_subquery(ref('stg_amazon_ads__search_term_ad_keyword_report')) }}"}, "namespace": null}}}, "sources": {"source.amazon_ads.amazon_ads.ad_group_history": {"database": "postgres", "schema": "public", "name": "ad_group_history", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.ad_group_history", "fqn": ["amazon_ads", "staging", "amazon_ads", "ad_group_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "ad_group_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents an ad group in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "id": {"name": "id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "name": {"name": "name", "description": "The name of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_name"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "default_bid": {"name": "default_bid", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.default_bid"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"ad_group_history_data\"", "created_at": 1755122571.1153853, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.ad_group_level_report": {"database": "postgres", "schema": "public", "name": "ad_group_level_report", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.ad_group_level_report", "fqn": ["amazon_ads", "staging", "amazon_ads", "ad_group_level_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "ad_group_level_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record in this table represents the daily performance by Amazon ad group.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_bidding_strategy"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"ad_group_level_report_data\"", "created_at": 1755122571.1185017, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.advertised_product_report": {"database": "postgres", "schema": "public", "name": "advertised_product_report", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.advertised_product_report", "fqn": ["amazon_ads", "staging", "amazon_ads", "advertised_product_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "advertised_product_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Advertised product reports contain performance data for products that are advertised as part of your campaigns.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_id": {"name": "ad_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "advertised_asin": {"name": "advertised_asin", "description": "The ASIN associated to an advertised product.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.advertised_asin"]}, "advertised_sku": {"name": "advertised_sku", "description": "The SKU being advertised.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.advertised_sku"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"advertised_product_report_data\"", "created_at": 1755122571.1191783, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.campaign_history": {"database": "postgres", "schema": "public", "name": "campaign_history", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.campaign_history", "fqn": ["amazon_ads", "staging", "amazon_ads", "campaign_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "campaign_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a campaign in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "id": {"name": "id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "name": {"name": "name", "description": "The name of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_name"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "portfolio_id": {"name": "portfolio_id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "bidding_strategy": {"name": "bidding_strategy", "description": "The bidding strategy associated with a campaign (legacyForSales, autoForSales, or manual.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget": {"name": "budget", "description": "The budget for the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_type": {"name": "budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "effective_budget": {"name": "effective_budget", "description": "Adjusted budget for the campaign that has been impacted by a budget rule.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "end_date": {"name": "end_date", "description": "The end date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "start_date": {"name": "start_date", "description": "The start date of the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}, "targeting_type": {"name": "targeting_type", "description": "The type of targeting used for the campaign, either manual or auto.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"campaign_history_data\"", "created_at": 1755122571.1198704, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.campaign_level_report": {"database": "postgres", "schema": "public", "name": "campaign_level_report", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.campaign_level_report", "fqn": ["amazon_ads", "staging", "amazon_ads", "campaign_level_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "campaign_level_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record in this table represents the daily performance by Amazon campaign.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "campaign_applicable_budget_rule_id": {"name": "campaign_applicable_budget_rule_id", "description": "The ID associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_applicable_budget_rule_id"]}, "campaign_applicable_budget_rule_name": {"name": "campaign_applicable_budget_rule_name", "description": "The name associated to the active budget rule for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_applicable_budget_rule_name"]}, "campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "description": "The bidding strategy associated with a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_bidding_strategy"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_rule_based_budget_amount": {"name": "campaign_rule_based_budget_amount", "description": "The value of the rule-based budget for a campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_rule_based_budget_amount"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"campaign_level_report_data\"", "created_at": 1755122571.1205487, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.keyword_history": {"database": "postgres", "schema": "public", "name": "keyword_history", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.keyword_history", "fqn": ["amazon_ads", "staging", "amazon_ads", "keyword_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "keyword_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a keyword in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "id": {"name": "id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "bid": {"name": "bid", "description": "Bid associated with this keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.bid_keyword"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "keyword_text": {"name": "keyword_text", "description": "The exact text for the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "match_type": {"name": "match_type", "description": "One of (broad, exact, or phrase.)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_match_type"]}, "native_language_keyword": {"name": "native_language_keyword", "description": "The unlocalized keyword text in the preferred locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "native_language_locale": {"name": "native_language_locale", "description": "The preferred language locale of the advertiser.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"keyword_history_data\"", "created_at": 1755122571.1212366, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.portfolio_history": {"database": "postgres", "schema": "public", "name": "portfolio_history", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.portfolio_history", "fqn": ["amazon_ads", "staging", "amazon_ads", "portfolio_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "portfolio_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a portfolio in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "id": {"name": "id", "description": "The ID of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_id"]}, "name": {"name": "name", "description": "The name of the Portfolio.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.portfolio_name"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "budget_amount": {"name": "budget_amount", "description": "The budget amount associated with the portfolio. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_currency_code": {"name": "budget_currency_code", "description": "The currency used for all monetary values for entities under this profile. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_end_date": {"name": "budget_end_date", "description": "The end date after which the budget is no longer applied. Optional if policy is set to dateRange or monthlyRecurring.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_start_date": {"name": "budget_start_date", "description": "The starting date in YYYYMMDD format to which the budget is applied. Required if policy is set to dateRange. Not specified if policy is set to monthlyRecurring. Note that the starting date for monthlyRecurring is the date when the policy is set.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "budget_policy": {"name": "budget_policy", "description": "The budget policy. Set to dateRange to specify a budget for a specific period of time. Set to monthlyRecurring to specify a budget that is automatically renewed at the beginning of each month. Cannot be null.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "in_budget": {"name": "in_budget", "description": "Indicates the current budget status of the portfolio. Set to true if the portfolio is in budget, set to false if the portfolio is out of budget.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "profile_id": {"name": "profile_id", "description": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.profile_id"]}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"portfolio_history_data\"", "created_at": 1755122571.1219099, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.product_ad_history": {"database": "postgres", "schema": "public", "name": "product_ad_history", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.product_ad_history", "fqn": ["amazon_ads", "staging", "amazon_ads", "product_ad_history"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "product_ad_history_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a product in Amazon Ads.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "id": {"name": "id", "description": "The ID of the Ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_id"]}, "last_updated_date": {"name": "last_updated_date", "description": "Date of last update to record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.last_updated_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "asin": {"name": "asin", "description": "The Amazon Standard Identification Number (ASIN) associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "creation_date": {"name": "creation_date", "description": "The date of creation of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.creation_date"]}, "sku": {"name": "sku", "description": "The product SKU associated with the ad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "serving_status": {"name": "serving_status", "description": "The current serving status of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.serving_status"]}, "state": {"name": "state", "description": "The state of the record (enabled, paused, or archived).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.state"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"product_ad_history_data\"", "created_at": 1755122571.1225595, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.profile": {"database": "postgres", "schema": "public", "name": "profile", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.profile", "fqn": ["amazon_ads", "staging", "amazon_ads", "profile"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "profile_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Each record represents a profile. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace.", "columns": {"_fivetran_deleted": {"name": "_fivetran_deleted", "description": "Boolean created by Fivetran to indicate whether the record has been deleted.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_deleted"]}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "id": {"name": "id", "description": "ID of the profile.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_id": {"name": "account_id", "description": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplace.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_marketplace_string_id": {"name": "account_marketplace_string_id", "description": "The identifier of the marketplace to which the account is associated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_name": {"name": "account_name", "description": "Account Name. Not currently populated for sellers.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_sub_type": {"name": "account_sub_type", "description": "The account subtype.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_type": {"name": "account_type", "description": "One of seller, vendor, or agency.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "account_valid_payment_method": {"name": "account_valid_payment_method", "description": "For Vendors, this returns if the Advertiser has set up a valid payment method.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "country_code": {"name": "country_code", "description": "The code for a given country.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "currency_code": {"name": "currency_code", "description": "The currency used for all monetary values for entities under this profile.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "daily_budget": {"name": "daily_budget", "description": "Daily budget for Sponsored Product campaigns for seller type accounts.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}, "timezone": {"name": "timezone", "description": "The time zone used for all date-based campaign management and reporting.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": []}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"profile_data\"", "created_at": 1755122571.123178, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.targeting_keyword_report": {"database": "postgres", "schema": "public", "name": "targeting_keyword_report", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.targeting_keyword_report", "fqn": ["amazon_ads", "staging", "amazon_ads", "targeting_keyword_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "targeting_keyword_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Targeting reports contain performance metrics broken down by both targeting expressions and keywords.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "ad_keyword_status": {"name": "ad_keyword_status", "description": "Current status of a keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_keyword_status"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_bid"]}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "keyword_type": {"name": "keyword_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_type"]}, "match_type": {"name": "match_type", "description": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.match_type"]}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.targeting"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"targeting_keyword_report_data\"", "created_at": 1755122571.123829, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}, "source.amazon_ads.amazon_ads.search_term_ad_keyword_report": {"database": "postgres", "schema": "public", "name": "search_term_ad_keyword_report", "resource_type": "source", "package_name": "amazon_ads", "path": "models/staging/src_amazon_ads.yml", "original_file_path": "models/staging/src_amazon_ads.yml", "unique_id": "source.amazon_ads.amazon_ads.search_term_ad_keyword_report", "fqn": ["amazon_ads", "staging", "amazon_ads", "search_term_ad_keyword_report"], "source_name": "amazon_ads", "source_description": "", "loader": "Fivetran", "identifier": "search_term_ad_keyword_report_data", "quoting": {"database": null, "schema": null, "identifier": null, "column": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "external": null, "description": "Search term reports contain search term performance metrics broken down by targeting expressions and keywords.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "Timestamp of when a record was last synced.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads._fivetran_synced"]}, "date": {"name": "date", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.report_date"]}, "ad_group_id": {"name": "ad_group_id", "description": "The ID of the AdGroup.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.ad_group_id"]}, "campaign_id": {"name": "campaign_id", "description": "The ID of the Campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_id"]}, "keyword_id": {"name": "keyword_id", "description": "The ID of the keyword.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_id"]}, "clicks": {"name": "clicks", "description": "Total number of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.clicks"]}, "impressions": {"name": "impressions", "description": "Total number of ad impressions.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.impressions"]}, "cost": {"name": "cost", "description": "Total cost of ad clicks.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.cost"]}, "campaign_budget_amount": {"name": "campaign_budget_amount", "description": "Total budget allocated to the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_amount"]}, "campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "description": "The currency code associated with the campaign.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_currency_code"]}, "campaign_budget_type": {"name": "campaign_budget_type", "description": "One of: daily or lifetime.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.campaign_budget_type"]}, "keyword_bid": {"name": "keyword_bid", "description": "Bid associated with a keyword or targeting expression.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.keyword_bid"]}, "search_term": {"name": "search_term", "description": "The search term used by the customer.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.search_term"]}, "targeting": {"name": "targeting", "description": "A string representation of the expression object used in the targeting clause.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.targeting"]}, "purchases_30_d": {"name": "purchases_30_d", "description": "Number of attributed conversion events occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.purchases_30_d"]}, "sales_30_d": {"name": "sales_30_d", "description": "Total value of sales occurring within 30 days of an ad click.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "config": {"meta": {}, "tags": []}, "tags": [], "granularity": null, "doc_blocks": ["doc.amazon_ads.sales_30_d"]}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_field": "_fivetran_synced", "loaded_at_query": null, "meta": {}, "tags": []}, "patch_path": null, "unrendered_config": {"loaded_at_field": "_fivetran_synced", "enabled": true, "freshness": {"warn_after": {"count": 48, "period": "hour"}, "error_after": {"count": 168, "period": "hour"}, "filter": null}, "loaded_at_query": null, "meta": {}, "tags": []}, "relation_name": "\"postgres\".\"public\".\"search_term_ad_keyword_report_data\"", "created_at": 1755122571.124509, "unrendered_database": "{% if target.type != 'spark'%}{{ var('amazon_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('amazon_ads_schema', 'amazon_ads') }}", "doc_blocks": []}}, "macros": {"macro.dbt_postgres.postgres__get_relations": {"name": "postgres__get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres__get_relations", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3324604, "supported_languages": null}, "macro.dbt_postgres.postgres_get_relations": {"name": "postgres_get_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations.sql", "original_file_path": "macros/relations.sql", "unique_id": "macro.dbt_postgres.postgres_get_relations", "macro_sql": "{% macro postgres_get_relations() %}\n {{ return(postgres__get_relations()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3327525, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog_relations": {"name": "postgres__get_catalog_relations", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog_relations", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3347988, "supported_languages": null}, "macro.dbt_postgres.postgres__get_catalog": {"name": "postgres__get_catalog", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/catalog.sql", "original_file_path": "macros/catalog.sql", "unique_id": "macro.dbt_postgres.postgres__get_catalog", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3355317, "supported_languages": null}, "macro.dbt_postgres.postgres__create_table_as": {"name": "postgres__create_table_as", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_table_as", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3399625, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_index_sql": {"name": "postgres__get_create_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_index_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3409839, "supported_languages": null}, "macro.dbt_postgres.postgres__create_schema": {"name": "postgres__create_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__create_schema", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.341628, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_schema": {"name": "postgres__drop_schema", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__drop_schema", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.342245, "supported_languages": null}, "macro.dbt_postgres.postgres__get_columns_in_relation": {"name": "postgres__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_columns_in_relation", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.sql_convert_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3432176, "supported_languages": null}, "macro.dbt_postgres.postgres__list_relations_without_caching": {"name": "postgres__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_relations_without_caching", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.344091, "supported_languages": null}, "macro.dbt_postgres.postgres__information_schema_name": {"name": "postgres__information_schema_name", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__information_schema_name", "macro_sql": "{% macro postgres__information_schema_name(database) -%}\n {% if database_name -%}\n {{ adapter.verify_database(database_name) }}\n {%- endif -%}\n information_schema\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.344461, "supported_languages": null}, "macro.dbt_postgres.postgres__list_schemas": {"name": "postgres__list_schemas", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__list_schemas", "macro_sql": "{% macro postgres__list_schemas(database) %}\n {% if database -%}\n {{ adapter.verify_database(database) }}\n {%- endif -%}\n {% call statement('list_schemas', fetch_result=True, auto_begin=False) %}\n select distinct nspname from pg_namespace\n {% endcall %}\n {{ return(load_result('list_schemas').table) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3451412, "supported_languages": null}, "macro.dbt_postgres.postgres__check_schema_exists": {"name": "postgres__check_schema_exists", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__check_schema_exists", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3459163, "supported_languages": null}, "macro.dbt_postgres.postgres__make_relation_with_suffix": {"name": "postgres__make_relation_with_suffix", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_relation_with_suffix", "macro_sql": "{% macro postgres__make_relation_with_suffix(base_relation, suffix, dstring) %}\n {% if dstring %}\n {% set dt = modules.datetime.datetime.now() %}\n {% set dtstring = dt.strftime(\"%H%M%S%f\") %}\n {% set suffix = suffix ~ dtstring %}\n {% endif %}\n {% set suffix_length = suffix|length %}\n {% set relation_max_name_length = base_relation.relation_max_name_length() %}\n {% if suffix_length > relation_max_name_length %}\n {% do exceptions.raise_compiler_error('Relation suffix is too long (' ~ suffix_length ~ ' characters). Maximum length is ' ~ relation_max_name_length ~ ' characters.') %}\n {% endif %}\n {% set identifier = base_relation.identifier[:relation_max_name_length - suffix_length] ~ suffix %}\n\n {{ return(base_relation.incorporate(path={\"identifier\": identifier })) }}\n\n {% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3475378, "supported_languages": null}, "macro.dbt_postgres.postgres__make_intermediate_relation": {"name": "postgres__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_intermediate_relation", "macro_sql": "{% macro postgres__make_intermediate_relation(base_relation, suffix) %}\n {{ return(postgres__make_relation_with_suffix(base_relation, suffix, dstring=False)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.347922, "supported_languages": null}, "macro.dbt_postgres.postgres__make_temp_relation": {"name": "postgres__make_temp_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_temp_relation", "macro_sql": "{% macro postgres__make_temp_relation(base_relation, suffix) %}\n {% set temp_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=True) %}\n {{ return(temp_relation.incorporate(path={\"schema\": none,\n \"database\": none})) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3485508, "supported_languages": null}, "macro.dbt_postgres.postgres__make_backup_relation": {"name": "postgres__make_backup_relation", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__make_backup_relation", "macro_sql": "{% macro postgres__make_backup_relation(base_relation, backup_relation_type, suffix) %}\n {% set backup_relation = postgres__make_relation_with_suffix(base_relation, suffix, dstring=False) %}\n {{ return(backup_relation.incorporate(type=backup_relation_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_relation_with_suffix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3491225, "supported_languages": null}, "macro.dbt_postgres.postgres_escape_comment": {"name": "postgres_escape_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres_escape_comment", "macro_sql": "{% macro postgres_escape_comment(comment) -%}\n {% if comment is not string %}\n {% do exceptions.raise_compiler_error('cannot escape a non-string: ' ~ comment) %}\n {% endif %}\n {%- set magic = '$dbt_comment_literal_block$' -%}\n {%- if magic in comment -%}\n {%- do exceptions.raise_compiler_error('The string ' ~ magic ~ ' is not allowed in comments.') -%}\n {%- endif -%}\n {{ magic }}{{ comment }}{{ magic }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3499942, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_relation_comment": {"name": "postgres__alter_relation_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_relation_comment", "macro_sql": "{% macro postgres__alter_relation_comment(relation, comment) %}\n {% set escaped_comment = postgres_escape_comment(comment) %}\n {% if relation.type == 'materialized_view' -%}\n {% set relation_type = \"materialized view\" %}\n {%- else -%}\n {%- set relation_type = relation.type -%}\n {%- endif -%}\n comment on {{ relation_type }} {{ relation }} is {{ escaped_comment }};\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3508627, "supported_languages": null}, "macro.dbt_postgres.postgres__alter_column_comment": {"name": "postgres__alter_column_comment", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__alter_column_comment", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres_escape_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3520303, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_grant_sql": {"name": "postgres__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_grant_sql", "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", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3524582, "supported_languages": null}, "macro.dbt_postgres.postgres__copy_grants": {"name": "postgres__copy_grants", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__copy_grants", "macro_sql": "{% macro postgres__copy_grants() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.352699, "supported_languages": null}, "macro.dbt_postgres.postgres__get_show_indexes_sql": {"name": "postgres__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_show_indexes_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3530395, "supported_languages": null}, "macro.dbt_postgres.postgres__get_drop_index_sql": {"name": "postgres__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/adapters.sql", "original_file_path": "macros/adapters.sql", "unique_id": "macro.dbt_postgres.postgres__get_drop_index_sql", "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 -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3533325, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp": {"name": "postgres__current_timestamp", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp", "macro_sql": "{% macro postgres__current_timestamp() -%}\n now()\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.353763, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_string_as_time": {"name": "postgres__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_string_as_time", "macro_sql": "{% macro postgres__snapshot_string_as_time(timestamp) -%}\n {%- set result = \"'\" ~ timestamp ~ \"'::timestamp without time zone\" -%}\n {{ return(result) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3541255, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_get_time": {"name": "postgres__snapshot_get_time", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_get_time", "macro_sql": "{% macro postgres__snapshot_get_time() -%}\n {{ current_timestamp() }}::timestamp without time zone\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3543537, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_backcompat": {"name": "postgres__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_backcompat", "macro_sql": "{% macro postgres__current_timestamp_backcompat() %}\n current_timestamp::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3545756, "supported_languages": null}, "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat": {"name": "postgres__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/timestamps.sql", "original_file_path": "macros/timestamps.sql", "unique_id": "macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro postgres__current_timestamp_in_utc_backcompat() %}\n (current_timestamp at time zone 'utc')::{{ type_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3547935, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_default_sql": {"name": "postgres__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_default_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_incremental_delete_insert_sql", "macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3556623, "supported_languages": null}, "macro.dbt_postgres.postgres__get_incremental_microbatch_sql": {"name": "postgres__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/incremental_strategies.sql", "original_file_path": "macros/materializations/incremental_strategies.sql", "unique_id": "macro.dbt_postgres.postgres__get_incremental_microbatch_sql", "macro_sql": "{% macro postgres__get_incremental_microbatch_sql(arg_dict) %}\n\n {% if arg_dict[\"unique_key\"] %}\n {% do return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) %}\n {% else %}\n {{ exceptions.raise_compiler_error(\"dbt-postgres 'microbatch' requires a `unique_key` config\") }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_merge_sql", "macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3563032, "supported_languages": null}, "macro.dbt_postgres.postgres__snapshot_merge_sql": {"name": "postgres__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/materializations/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshot_merge.sql", "unique_id": "macro.dbt_postgres.postgres__snapshot_merge_sql", "macro_sql": "{% macro postgres__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n update {{ target }}\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }}::text = {{ target }}.{{ columns.dbt_scd_id }}::text\n and DBT_INTERNAL_SOURCE.dbt_change_type::text in ('update'::text, 'delete'::text)\n {% if config.get(\"dbt_valid_to_current\") %}\n and ({{ target }}.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }} or {{ target }}.{{ columns.dbt_valid_to }} is null);\n {% else %}\n and {{ target }}.{{ columns.dbt_valid_to }} is null;\n {% endif %}\n\n\n insert into {{ target }} ({{ insert_cols_csv }})\n select {% for column in insert_cols -%}\n DBT_INTERNAL_SOURCE.{{ column }} {%- if not loop.last %}, {%- endif %}\n {%- endfor %}\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_change_type::text = 'insert'::text;\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3585567, "supported_languages": null}, "macro.dbt_postgres.postgres__last_day": {"name": "postgres__last_day", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt_postgres.postgres__last_day", "macro_sql": "{% macro postgres__last_day(date, datepart) -%}\n\n {%- if datepart == 'quarter' -%}\n -- postgres dateadd does not support quarter interval.\n cast(\n {{dbt.dateadd('day', '-1',\n dbt.dateadd('month', '3', dbt.date_trunc(datepart, date))\n )}}\n as date)\n {%- else -%}\n {{dbt.default_last_day(date, datepart)}}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc", "macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3595135, "supported_languages": null}, "macro.dbt_postgres.postgres__datediff": {"name": "postgres__datediff", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt_postgres.postgres__datediff", "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 %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3635604, "supported_languages": null}, "macro.dbt_postgres.postgres__listagg": {"name": "postgres__listagg", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt_postgres.postgres__listagg", "macro_sql": "{% macro postgres__listagg(measure, delimiter_text, order_by_clause, limit_num) -%}\n\n {% if limit_num -%}\n array_to_string(\n (array_agg(\n {{ measure }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n ))[1:{{ limit_num }}],\n {{ delimiter_text }}\n )\n {%- else %}\n string_agg(\n {{ measure }},\n {{ delimiter_text }}\n {% if order_by_clause -%}\n {{ order_by_clause }}\n {%- endif %}\n )\n {%- endif %}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.364628, "supported_languages": null}, "macro.dbt_postgres.postgres__split_part": {"name": "postgres__split_part", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt_postgres.postgres__split_part", "macro_sql": "{% macro postgres__split_part(string_text, delimiter_text, part_number) %}\n\n {% if part_number >= 0 %}\n {{ dbt.default__split_part(string_text, delimiter_text, part_number) }}\n {% else %}\n {{ dbt._split_part_negative(string_text, delimiter_text, part_number) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__split_part", "macro.dbt._split_part_negative"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3654163, "supported_languages": null}, "macro.dbt_postgres.postgres__any_value": {"name": "postgres__any_value", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt_postgres.postgres__any_value", "macro_sql": "{% macro postgres__any_value(expression) -%}\n\n min({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3657184, "supported_languages": null}, "macro.dbt_postgres.postgres__dateadd": {"name": "postgres__dateadd", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt_postgres.postgres__dateadd", "macro_sql": "{% macro postgres__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {{ from_date_or_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3661292, "supported_languages": null}, "macro.dbt_postgres.postgres__describe_materialized_view": {"name": "postgres__describe_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/describe.sql", "original_file_path": "macros/relations/materialized_view/describe.sql", "unique_id": "macro.dbt_postgres.postgres__describe_materialized_view", "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 %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3667195, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_materialized_view_sql": {"name": "postgres__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_materialized_view_sql", "macro_sql": "{% macro postgres__get_rename_materialized_view_sql(relation, new_name) %}\n alter materialized view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3670678, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_materialized_view": {"name": "postgres__drop_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_materialized_view", "macro_sql": "{% macro postgres__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3673582, "supported_languages": null}, "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql": {"name": "postgres__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_replace_sql", "macro.dbt_postgres.postgres__update_indexes_on_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3684096, "supported_languages": null}, "macro.dbt_postgres.postgres__update_indexes_on_materialized_view": {"name": "postgres__update_indexes_on_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__update_indexes_on_materialized_view", "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\t{{ ';' if not loop.last else \"\" }}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql", "macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.369467, "supported_languages": null}, "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes": {"name": "postgres__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt_postgres.postgres__get_materialized_view_configuration_changes", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__describe_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3700485, "supported_languages": null}, "macro.dbt_postgres.postgres__refresh_materialized_view": {"name": "postgres__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt_postgres.postgres__refresh_materialized_view", "macro_sql": "{% macro postgres__refresh_materialized_view(relation) %}\n refresh materialized view {{ relation }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3703356, "supported_languages": null}, "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql": {"name": "postgres__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt_postgres.postgres__get_create_materialized_view_as_sql", "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) -}}{{ ';' if not loop.last else \"\" }}\n {%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3711777, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_table_sql": {"name": "postgres__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_table_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.372415, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_table_sql": {"name": "postgres__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_table_sql", "macro_sql": "{% macro postgres__get_rename_table_sql(relation, new_name) %}\n alter table {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.372776, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_table": {"name": "postgres__drop_table", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_table", "macro_sql": "{% macro postgres__drop_table(relation) -%}\n drop table if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3730552, "supported_languages": null}, "macro.dbt_postgres.postgres__get_replace_view_sql": {"name": "postgres__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt_postgres.postgres__get_replace_view_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.374056, "supported_languages": null}, "macro.dbt_postgres.postgres__get_rename_view_sql": {"name": "postgres__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt_postgres.postgres__get_rename_view_sql", "macro_sql": "{% macro postgres__get_rename_view_sql(relation, new_name) %}\n alter view {{ relation }} rename to {{ new_name }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3744328, "supported_languages": null}, "macro.dbt_postgres.postgres__drop_view": {"name": "postgres__drop_view", "resource_type": "macro", "package_name": "dbt_postgres", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt_postgres.postgres__drop_view", "macro_sql": "{% macro postgres__drop_view(relation) -%}\n drop view if exists {{ relation }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3747103, "supported_languages": null}, "macro.dbt.copy_grants": {"name": "copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.copy_grants", "macro_sql": "{% macro copy_grants() %}\n {{ return(adapter.dispatch('copy_grants', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.376817, "supported_languages": null}, "macro.dbt.default__copy_grants": {"name": "default__copy_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__copy_grants", "macro_sql": "{% macro default__copy_grants() %}\n {{ return(True) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3770587, "supported_languages": null}, "macro.dbt.support_multiple_grantees_per_dcl_statement": {"name": "support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.support_multiple_grantees_per_dcl_statement", "macro_sql": "{% macro support_multiple_grantees_per_dcl_statement() %}\n {{ return(adapter.dispatch('support_multiple_grantees_per_dcl_statement', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3774064, "supported_languages": null}, "macro.dbt.default__support_multiple_grantees_per_dcl_statement": {"name": "default__support_multiple_grantees_per_dcl_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__support_multiple_grantees_per_dcl_statement", "macro_sql": "\n\n{%- macro default__support_multiple_grantees_per_dcl_statement() -%}\n {{ return(True) }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3776367, "supported_languages": null}, "macro.dbt.should_revoke": {"name": "should_revoke", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.should_revoke", "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 %}", "depends_on": {"macros": ["macro.dbt.copy_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3783085, "supported_languages": null}, "macro.dbt.get_show_grant_sql": {"name": "get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_show_grant_sql", "macro_sql": "{% macro get_show_grant_sql(relation) %}\n {{ return(adapter.dispatch(\"get_show_grant_sql\", \"dbt\")(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3786948, "supported_languages": null}, "macro.dbt.default__get_show_grant_sql": {"name": "default__get_show_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_show_grant_sql", "macro_sql": "{% macro default__get_show_grant_sql(relation) %}\n show grants on {{ relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3789394, "supported_languages": null}, "macro.dbt.get_grant_sql": {"name": "get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_grant_sql", "macro_sql": "{% macro get_grant_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_grant_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_grant_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3793936, "supported_languages": null}, "macro.dbt.default__get_grant_sql": {"name": "default__get_grant_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_grant_sql", "macro_sql": "\n\n{%- macro default__get_grant_sql(relation, privilege, grantees) -%}\n grant {{ privilege }} on {{ relation.render() }} to {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.379812, "supported_languages": null}, "macro.dbt.get_revoke_sql": {"name": "get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_revoke_sql", "macro_sql": "{% macro get_revoke_sql(relation, privilege, grantees) %}\n {{ return(adapter.dispatch('get_revoke_sql', 'dbt')(relation, privilege, grantees)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_revoke_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3802536, "supported_languages": null}, "macro.dbt.default__get_revoke_sql": {"name": "default__get_revoke_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_revoke_sql", "macro_sql": "\n\n{%- macro default__get_revoke_sql(relation, privilege, grantees) -%}\n revoke {{ privilege }} on {{ relation.render() }} from {{ grantees | join(', ') }}\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.380681, "supported_languages": null}, "macro.dbt.get_dcl_statement_list": {"name": "get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.get_dcl_statement_list", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_dcl_statement_list"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3811255, "supported_languages": null}, "macro.dbt.default__get_dcl_statement_list": {"name": "default__get_dcl_statement_list", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__get_dcl_statement_list", "macro_sql": "\n\n{%- macro default__get_dcl_statement_list(relation, grant_config, get_dcl_macro) -%}\n {#\n -- Unpack grant_config into specific privileges and the set of users who need them granted/revoked.\n -- Depending on whether this database supports multiple grantees per statement, pass in the list of\n -- all grantees per privilege, or (if not) template one statement per privilege-grantee pair.\n -- `get_dcl_macro` will be either `get_grant_sql` or `get_revoke_sql`\n #}\n {%- set dcl_statements = [] -%}\n {%- for privilege, grantees in grant_config.items() %}\n {%- if support_multiple_grantees_per_dcl_statement() and grantees -%}\n {%- set dcl = get_dcl_macro(relation, privilege, grantees) -%}\n {%- do dcl_statements.append(dcl) -%}\n {%- else -%}\n {%- for grantee in grantees -%}\n {% set dcl = get_dcl_macro(relation, privilege, [grantee]) %}\n {%- do dcl_statements.append(dcl) -%}\n {% endfor -%}\n {%- endif -%}\n {%- endfor -%}\n {{ return(dcl_statements) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.support_multiple_grantees_per_dcl_statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3824472, "supported_languages": null}, "macro.dbt.call_dcl_statements": {"name": "call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.call_dcl_statements", "macro_sql": "{% macro call_dcl_statements(dcl_statement_list) %}\n {{ return(adapter.dispatch(\"call_dcl_statements\", \"dbt\")(dcl_statement_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.382816, "supported_languages": null}, "macro.dbt.default__call_dcl_statements": {"name": "default__call_dcl_statements", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__call_dcl_statements", "macro_sql": "{% macro default__call_dcl_statements(dcl_statement_list) %}\n {#\n -- By default, supply all grant + revoke statements in a single semicolon-separated block,\n -- so that they're all processed together.\n\n -- Some databases do not support this. Those adapters will need to override this macro\n -- to run each statement individually.\n #}\n {% call statement('grants') %}\n {% for dcl_statement in dcl_statement_list %}\n {{ dcl_statement }};\n {% endfor %}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.383302, "supported_languages": null}, "macro.dbt.apply_grants": {"name": "apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.apply_grants", "macro_sql": "{% macro apply_grants(relation, grant_config, should_revoke) %}\n {{ return(adapter.dispatch(\"apply_grants\", \"dbt\")(relation, grant_config, should_revoke)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.383759, "supported_languages": null}, "macro.dbt.default__apply_grants": {"name": "default__apply_grants", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/apply_grants.sql", "original_file_path": "macros/adapters/apply_grants.sql", "unique_id": "macro.dbt.default__apply_grants", "macro_sql": "{% macro default__apply_grants(relation, grant_config, should_revoke=True) %}\n {#-- If grant_config is {} or None, this is a no-op --#}\n {% if grant_config %}\n {% if should_revoke %}\n {#-- We think previous grants may have carried over --#}\n {#-- Show current grants and calculate diffs --#}\n {% set current_grants_table = run_query(get_show_grant_sql(relation)) %}\n {% set current_grants_dict = adapter.standardize_grants_dict(current_grants_table) %}\n {% set needs_granting = diff_of_two_dicts(grant_config, current_grants_dict) %}\n {% set needs_revoking = diff_of_two_dicts(current_grants_dict, grant_config) %}\n {% if not (needs_granting or needs_revoking) %}\n {{ log('On ' ~ relation.render() ~': All grants are in place, no revocation or granting needed.')}}\n {% endif %}\n {% else %}\n {#-- We don't think there's any chance of previous grants having carried over. --#}\n {#-- Jump straight to granting what the user has configured. --#}\n {% set needs_revoking = {} %}\n {% set needs_granting = grant_config %}\n {% endif %}\n {% if needs_granting or needs_revoking %}\n {% set revoke_statement_list = get_dcl_statement_list(relation, needs_revoking, get_revoke_sql) %}\n {% set grant_statement_list = get_dcl_statement_list(relation, needs_granting, get_grant_sql) %}\n {% set dcl_statement_list = revoke_statement_list + grant_statement_list %}\n {% if dcl_statement_list %}\n {{ call_dcl_statements(dcl_statement_list) }}\n {% endif %}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.get_show_grant_sql", "macro.dbt.get_dcl_statement_list", "macro.dbt.call_dcl_statements"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3861258, "supported_languages": null}, "macro.dbt.validate_sql": {"name": "validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.validate_sql", "macro_sql": "{% macro validate_sql(sql) -%}\n {{ return(adapter.dispatch('validate_sql', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__validate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3866994, "supported_languages": null}, "macro.dbt.default__validate_sql": {"name": "default__validate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/validate_sql.sql", "original_file_path": "macros/adapters/validate_sql.sql", "unique_id": "macro.dbt.default__validate_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3871427, "supported_languages": null}, "macro.dbt.alter_column_comment": {"name": "alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_column_comment", "macro_sql": "{% macro alter_column_comment(relation, column_dict) -%}\n {{ return(adapter.dispatch('alter_column_comment', 'dbt')(relation, column_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.387948, "supported_languages": null}, "macro.dbt.default__alter_column_comment": {"name": "default__alter_column_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_column_comment", "macro_sql": "{% macro default__alter_column_comment(relation, column_dict) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_column_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3882787, "supported_languages": null}, "macro.dbt.alter_relation_comment": {"name": "alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.alter_relation_comment", "macro_sql": "{% macro alter_relation_comment(relation, relation_comment) -%}\n {{ return(adapter.dispatch('alter_relation_comment', 'dbt')(relation, relation_comment)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__alter_relation_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3887038, "supported_languages": null}, "macro.dbt.default__alter_relation_comment": {"name": "default__alter_relation_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__alter_relation_comment", "macro_sql": "{% macro default__alter_relation_comment(relation, relation_comment) -%}\n {{ exceptions.raise_not_implemented(\n 'alter_relation_comment macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.389028, "supported_languages": null}, "macro.dbt.persist_docs": {"name": "persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.persist_docs", "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 %}", "depends_on": {"macros": ["macro.dbt.default__persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3895662, "supported_languages": null}, "macro.dbt.default__persist_docs": {"name": "default__persist_docs", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/persist_docs.sql", "original_file_path": "macros/adapters/persist_docs.sql", "unique_id": "macro.dbt.default__persist_docs", "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 %}", "depends_on": {"macros": ["macro.dbt.run_query", "macro.dbt.alter_relation_comment", "macro.dbt.alter_column_comment"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3904803, "supported_languages": null}, "macro.dbt.get_catalog_relations": {"name": "get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_relations", "macro_sql": "{% macro get_catalog_relations(information_schema, relations) -%}\n {{ return(adapter.dispatch('get_catalog_relations', 'dbt')(information_schema, relations)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3920016, "supported_languages": null}, "macro.dbt.default__get_catalog_relations": {"name": "default__get_catalog_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_relations", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3925242, "supported_languages": null}, "macro.dbt.get_catalog": {"name": "get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog", "macro_sql": "{% macro get_catalog(information_schema, schemas) -%}\n {{ return(adapter.dispatch('get_catalog', 'dbt')(information_schema, schemas)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_catalog"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.392913, "supported_languages": null}, "macro.dbt.default__get_catalog": {"name": "default__get_catalog", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog", "macro_sql": "{% macro default__get_catalog(information_schema, schemas) -%}\n\n {% set typename = adapter.type() %}\n {% set msg -%}\n get_catalog not implemented for {{ typename }}\n {%- endset %}\n\n {{ exceptions.raise_compiler_error(msg) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3934288, "supported_languages": null}, "macro.dbt.information_schema_name": {"name": "information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.information_schema_name", "macro_sql": "{% macro information_schema_name(database) %}\n {{ return(adapter.dispatch('information_schema_name', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__information_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3937836, "supported_languages": null}, "macro.dbt.default__information_schema_name": {"name": "default__information_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__information_schema_name", "macro_sql": "{% macro default__information_schema_name(database) -%}\n {%- if database -%}\n {{ database }}.INFORMATION_SCHEMA\n {%- else -%}\n INFORMATION_SCHEMA\n {%- endif -%}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.394094, "supported_languages": null}, "macro.dbt.list_schemas": {"name": "list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_schemas", "macro_sql": "{% macro list_schemas(database) -%}\n {{ return(adapter.dispatch('list_schemas', 'dbt')(database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3944623, "supported_languages": null}, "macro.dbt.default__list_schemas": {"name": "default__list_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_schemas", "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 %}", "depends_on": {"macros": ["macro.dbt.information_schema_name", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.39494, "supported_languages": null}, "macro.dbt.check_schema_exists": {"name": "check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.check_schema_exists", "macro_sql": "{% macro check_schema_exists(information_schema, schema) -%}\n {{ return(adapter.dispatch('check_schema_exists', 'dbt')(information_schema, schema)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__check_schema_exists"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3954566, "supported_languages": null}, "macro.dbt.default__check_schema_exists": {"name": "default__check_schema_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__check_schema_exists", "macro_sql": "{% macro default__check_schema_exists(information_schema, schema) -%}\n {% set sql -%}\n select count(*)\n from {{ information_schema.replace(information_schema_view='SCHEMATA') }}\n where catalog_name='{{ information_schema.database }}'\n and schema_name='{{ schema }}'\n {%- endset %}\n {{ return(run_query(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3960443, "supported_languages": null}, "macro.dbt.list_relations_without_caching": {"name": "list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.list_relations_without_caching", "macro_sql": "{% macro list_relations_without_caching(schema_relation) %}\n {{ return(adapter.dispatch('list_relations_without_caching', 'dbt')(schema_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__list_relations_without_caching"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.396423, "supported_languages": null}, "macro.dbt.default__list_relations_without_caching": {"name": "default__list_relations_without_caching", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__list_relations_without_caching", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3967454, "supported_languages": null}, "macro.dbt.get_catalog_for_single_relation": {"name": "get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_catalog_for_single_relation", "macro_sql": "{% macro get_catalog_for_single_relation(relation) %}\n {{ return(adapter.dispatch('get_catalog_for_single_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_catalog_for_single_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.397098, "supported_languages": null}, "macro.dbt.default__get_catalog_for_single_relation": {"name": "default__get_catalog_for_single_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_catalog_for_single_relation", "macro_sql": "{% macro default__get_catalog_for_single_relation(relation) %}\n {{ exceptions.raise_not_implemented(\n 'get_catalog_for_single_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3974278, "supported_languages": null}, "macro.dbt.get_relations": {"name": "get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relations", "macro_sql": "{% macro get_relations() %}\n {{ return(adapter.dispatch('get_relations', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3977523, "supported_languages": null}, "macro.dbt.default__get_relations": {"name": "default__get_relations", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relations", "macro_sql": "{% macro default__get_relations() %}\n {{ exceptions.raise_not_implemented(\n 'get_relations macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.398048, "supported_languages": null}, "macro.dbt.get_relation_last_modified": {"name": "get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.get_relation_last_modified", "macro_sql": "{% macro get_relation_last_modified(information_schema, relations) %}\n {{ return(adapter.dispatch('get_relation_last_modified', 'dbt')(information_schema, relations)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_relation_last_modified"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.398459, "supported_languages": null}, "macro.dbt.default__get_relation_last_modified": {"name": "default__get_relation_last_modified", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/metadata.sql", "original_file_path": "macros/adapters/metadata.sql", "unique_id": "macro.dbt.default__get_relation_last_modified", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3987935, "supported_languages": null}, "macro.dbt.create_schema": {"name": "create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.create_schema", "macro_sql": "{% macro create_schema(relation) -%}\n {{ adapter.dispatch('create_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3994117, "supported_languages": null}, "macro.dbt.default__create_schema": {"name": "default__create_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__create_schema", "macro_sql": "{% macro default__create_schema(relation) -%}\n {%- call statement('create_schema') -%}\n create schema if not exists {{ relation.without_identifier() }}\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.3997767, "supported_languages": null}, "macro.dbt.drop_schema": {"name": "drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.drop_schema", "macro_sql": "{% macro drop_schema(relation) -%}\n {{ adapter.dispatch('drop_schema', 'dbt')(relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_schema"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4000943, "supported_languages": null}, "macro.dbt.default__drop_schema": {"name": "default__drop_schema", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/schema.sql", "original_file_path": "macros/adapters/schema.sql", "unique_id": "macro.dbt.default__drop_schema", "macro_sql": "{% macro default__drop_schema(relation) -%}\n {%- call statement('drop_schema') -%}\n drop schema if exists {{ relation.without_identifier() }} cascade\n {% endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4004748, "supported_languages": null}, "macro.dbt.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness', 'dbt')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4013116, "supported_languages": null}, "macro.dbt.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4024858, "supported_languages": null}, "macro.dbt.collect_freshness_custom_sql": {"name": "collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.collect_freshness_custom_sql", "macro_sql": "{% macro collect_freshness_custom_sql(source, loaded_at_query) %}\n {{ return(adapter.dispatch('collect_freshness_custom_sql', 'dbt')(source, loaded_at_query))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__collect_freshness_custom_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4032714, "supported_languages": null}, "macro.dbt.default__collect_freshness_custom_sql": {"name": "default__collect_freshness_custom_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/freshness.sql", "original_file_path": "macros/adapters/freshness.sql", "unique_id": "macro.dbt.default__collect_freshness_custom_sql", "macro_sql": "{% macro default__collect_freshness_custom_sql(source, loaded_at_query) %}\n {% call statement('collect_freshness_custom_sql', fetch_result=True, auto_begin=False) -%}\n with source_query as (\n {{ loaded_at_query }}\n )\n select\n (select * from source_query) as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n {% endcall %}\n {{ return(load_result('collect_freshness_custom_sql')) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4043949, "supported_languages": null}, "macro.dbt.get_columns_in_relation": {"name": "get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_relation", "macro_sql": "{% macro get_columns_in_relation(relation) -%}\n {{ return(adapter.dispatch('get_columns_in_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4070184, "supported_languages": null}, "macro.dbt.default__get_columns_in_relation": {"name": "default__get_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_relation", "macro_sql": "{% macro default__get_columns_in_relation(relation) -%}\n {{ exceptions.raise_not_implemented(\n 'get_columns_in_relation macro not implemented for adapter '+adapter.type()) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4076455, "supported_languages": null}, "macro.dbt.sql_convert_columns_in_relation": {"name": "sql_convert_columns_in_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.sql_convert_columns_in_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.408627, "supported_languages": null}, "macro.dbt.get_list_of_column_names": {"name": "get_list_of_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_list_of_column_names", "macro_sql": "\n\n{%- macro get_list_of_column_names(columns) -%}\n {% set col_names = [] %}\n {% for col in columns %}\n {% do col_names.append(col.name) %}\n {% endfor %}\n {{ return(col_names) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4092152, "supported_languages": null}, "macro.dbt.get_empty_subquery_sql": {"name": "get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_subquery_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4096742, "supported_languages": null}, "macro.dbt.default__get_empty_subquery_sql": {"name": "default__get_empty_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_subquery_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4100857, "supported_languages": null}, "macro.dbt.get_empty_schema_sql": {"name": "get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_empty_schema_sql", "macro_sql": "{% macro get_empty_schema_sql(columns) -%}\n {{ return(adapter.dispatch('get_empty_schema_sql', 'dbt')(columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_empty_schema_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4104826, "supported_languages": null}, "macro.dbt.default__get_empty_schema_sql": {"name": "default__get_empty_schema_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_empty_schema_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4128182, "supported_languages": null}, "macro.dbt.get_column_schema_from_query": {"name": "get_column_schema_from_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_column_schema_from_query", "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 %}", "depends_on": {"macros": ["macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4135342, "supported_languages": null}, "macro.dbt.get_columns_in_query": {"name": "get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.get_columns_in_query", "macro_sql": "{% macro get_columns_in_query(select_sql) -%}\n {{ return(adapter.dispatch('get_columns_in_query', 'dbt')(select_sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4138978, "supported_languages": null}, "macro.dbt.default__get_columns_in_query": {"name": "default__get_columns_in_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__get_columns_in_query", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_empty_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4145908, "supported_languages": null}, "macro.dbt.alter_column_type": {"name": "alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_column_type", "macro_sql": "{% macro alter_column_type(relation, column_name, new_column_type) -%}\n {{ return(adapter.dispatch('alter_column_type', 'dbt')(relation, column_name, new_column_type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4150727, "supported_languages": null}, "macro.dbt.default__alter_column_type": {"name": "default__alter_column_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_column_type", "macro_sql": "{% macro default__alter_column_type(relation, column_name, new_column_type) -%}\n {#\n 1. Create a new column (w/ temp name and correct type)\n 2. Copy data over to it\n 3. Drop the existing column (cascade!)\n 4. Rename the new column to existing column\n #}\n {%- set tmp_column = column_name + \"__dbt_alter\" -%}\n\n {% call statement('alter_column_type') %}\n alter table {{ relation.render() }} add column {{ adapter.quote(tmp_column) }} {{ new_column_type }};\n update {{ relation.render() }} set {{ adapter.quote(tmp_column) }} = {{ adapter.quote(column_name) }};\n alter table {{ relation.render() }} drop column {{ adapter.quote(column_name) }} cascade;\n alter table {{ relation.render() }} rename column {{ adapter.quote(tmp_column) }} to {{ adapter.quote(column_name) }}\n {% endcall %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.416635, "supported_languages": null}, "macro.dbt.alter_relation_add_remove_columns": {"name": "alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.alter_relation_add_remove_columns", "macro_sql": "{% macro alter_relation_add_remove_columns(relation, add_columns = none, remove_columns = none) -%}\n {{ return(adapter.dispatch('alter_relation_add_remove_columns', 'dbt')(relation, add_columns, remove_columns)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__alter_relation_add_remove_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4171424, "supported_languages": null}, "macro.dbt.default__alter_relation_add_remove_columns": {"name": "default__alter_relation_add_remove_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/columns.sql", "original_file_path": "macros/adapters/columns.sql", "unique_id": "macro.dbt.default__alter_relation_add_remove_columns", "macro_sql": "{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n\n {% if add_columns is none %}\n {% set add_columns = [] %}\n {% endif %}\n {% if remove_columns is none %}\n {% set remove_columns = [] %}\n {% endif %}\n\n {% set sql -%}\n\n alter {{ relation.type }} {{ relation.render() }}\n\n {% for column in add_columns %}\n add column {{ column.quoted }} {{ column.data_type }}{{ ',' if not loop.last }}\n {% endfor %}{{ ',' if add_columns and remove_columns }}\n\n {% for column in remove_columns %}\n drop column {{ column.quoted }}{{ ',' if not loop.last }}\n {% endfor %}\n\n {%- endset -%}\n\n {% do run_query(sql) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.418805, "supported_languages": null}, "macro.dbt.get_show_sql": {"name": "get_show_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_show_sql", "macro_sql": "{% macro get_show_sql(compiled_code, sql_header, limit) -%}\n {%- if sql_header is not none -%}\n {{ sql_header }}\n {%- endif %}\n {{ get_limit_subquery_sql(compiled_code, limit) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4195821, "supported_languages": null}, "macro.dbt.get_limit_subquery_sql": {"name": "get_limit_subquery_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.get_limit_subquery_sql", "macro_sql": "\n{%- macro get_limit_subquery_sql(sql, limit) -%}\n {{ adapter.dispatch('get_limit_sql', 'dbt')(sql, limit) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_limit_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4199538, "supported_languages": null}, "macro.dbt.default__get_limit_sql": {"name": "default__get_limit_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/show.sql", "original_file_path": "macros/adapters/show.sql", "unique_id": "macro.dbt.default__get_limit_sql", "macro_sql": "{% macro default__get_limit_sql(sql, limit) %}\n {{ sql }}\n {% if limit is not none %}\n limit {{ limit }}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.420335, "supported_languages": null}, "macro.dbt.make_intermediate_relation": {"name": "make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_intermediate_relation", "macro_sql": "{% macro make_intermediate_relation(base_relation, suffix='__dbt_tmp') %}\n {{ return(adapter.dispatch('make_intermediate_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_intermediate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4216394, "supported_languages": null}, "macro.dbt.default__make_intermediate_relation": {"name": "default__make_intermediate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_intermediate_relation", "macro_sql": "{% macro default__make_intermediate_relation(base_relation, suffix) %}\n {{ return(default__make_temp_relation(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4219706, "supported_languages": null}, "macro.dbt.make_temp_relation": {"name": "make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_temp_relation", "macro_sql": "{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n {#-- This ensures microbatch batches get unique temp relations to avoid clobbering --#}\n {% if suffix == '__dbt_tmp' and model.batch %}\n {% set suffix = suffix ~ '_' ~ model.batch.id %}\n {% endif %}\n\n {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4228504, "supported_languages": null}, "macro.dbt.default__make_temp_relation": {"name": "default__make_temp_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_temp_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4234357, "supported_languages": null}, "macro.dbt.make_backup_relation": {"name": "make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.make_backup_relation", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__make_backup_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4239235, "supported_languages": null}, "macro.dbt.default__make_backup_relation": {"name": "default__make_backup_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__make_backup_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4245584, "supported_languages": null}, "macro.dbt.truncate_relation": {"name": "truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.truncate_relation", "macro_sql": "{% macro truncate_relation(relation) -%}\n {{ return(adapter.dispatch('truncate_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__truncate_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4249353, "supported_languages": null}, "macro.dbt.default__truncate_relation": {"name": "default__truncate_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__truncate_relation", "macro_sql": "{% macro default__truncate_relation(relation) -%}\n {% call statement('truncate_relation') -%}\n truncate table {{ relation.render() }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4253078, "supported_languages": null}, "macro.dbt.get_or_create_relation": {"name": "get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.get_or_create_relation", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_or_create_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4257998, "supported_languages": null}, "macro.dbt.default__get_or_create_relation": {"name": "default__get_or_create_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.default__get_or_create_relation", "macro_sql": "{% macro default__get_or_create_relation(database, schema, identifier, type) %}\n {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n {% if target_relation %}\n {% do return([true, target_relation]) %}\n {% endif %}\n\n {%- set new_relation = api.Relation.create(\n database=database,\n schema=schema,\n identifier=identifier,\n type=type\n ) -%}\n {% do return([false, new_relation]) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4268727, "supported_languages": null}, "macro.dbt.load_cached_relation": {"name": "load_cached_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_cached_relation", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.427313, "supported_languages": null}, "macro.dbt.load_relation": {"name": "load_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/relation.sql", "original_file_path": "macros/adapters/relation.sql", "unique_id": "macro.dbt.load_relation", "macro_sql": "{% macro load_relation(relation) %}\n {{ return(load_cached_relation(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4276128, "supported_languages": null}, "macro.dbt.get_create_index_sql": {"name": "get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_create_index_sql", "macro_sql": "{% macro get_create_index_sql(relation, index_dict) -%}\n {{ return(adapter.dispatch('get_create_index_sql', 'dbt')(relation, index_dict)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4285483, "supported_languages": null}, "macro.dbt.default__get_create_index_sql": {"name": "default__get_create_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_create_index_sql", "macro_sql": "{% macro default__get_create_index_sql(relation, index_dict) -%}\n {% do return(None) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.428827, "supported_languages": null}, "macro.dbt.create_indexes": {"name": "create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.create_indexes", "macro_sql": "{% macro create_indexes(relation) -%}\n {{ adapter.dispatch('create_indexes', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_indexes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4291453, "supported_languages": null}, "macro.dbt.default__create_indexes": {"name": "default__create_indexes", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__create_indexes", "macro_sql": "{% macro default__create_indexes(relation) -%}\n {%- set _indexes = config.get('indexes', default=[]) -%}\n\n {% for _index_dict in _indexes %}\n {% set create_index_sql = get_create_index_sql(relation, _index_dict) %}\n {% if create_index_sql %}\n {% do run_query(create_index_sql) %}\n {% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_create_index_sql", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4299402, "supported_languages": null}, "macro.dbt.get_drop_index_sql": {"name": "get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_drop_index_sql", "macro_sql": "{% macro get_drop_index_sql(relation, index_name) -%}\n {{ adapter.dispatch('get_drop_index_sql', 'dbt')(relation, index_name) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_drop_index_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4303112, "supported_languages": null}, "macro.dbt.default__get_drop_index_sql": {"name": "default__get_drop_index_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_drop_index_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4306068, "supported_languages": null}, "macro.dbt.get_show_indexes_sql": {"name": "get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.get_show_indexes_sql", "macro_sql": "{% macro get_show_indexes_sql(relation) -%}\n {{ adapter.dispatch('get_show_indexes_sql', 'dbt')(relation) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_show_indexes_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.430921, "supported_languages": null}, "macro.dbt.default__get_show_indexes_sql": {"name": "default__get_show_indexes_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/indexes.sql", "original_file_path": "macros/adapters/indexes.sql", "unique_id": "macro.dbt.default__get_show_indexes_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4311888, "supported_languages": null}, "macro.dbt.current_timestamp": {"name": "current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp", "macro_sql": "{%- macro current_timestamp() -%}\n {{ adapter.dispatch('current_timestamp', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4320672, "supported_languages": null}, "macro.dbt.default__current_timestamp": {"name": "default__current_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp", "macro_sql": "{% macro default__current_timestamp() -%}\n {{ exceptions.raise_not_implemented(\n 'current_timestamp macro not implemented for adapter ' + adapter.type()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4323828, "supported_languages": null}, "macro.dbt.snapshot_get_time": {"name": "snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.snapshot_get_time", "macro_sql": "\n\n{%- macro snapshot_get_time() -%}\n {{ adapter.dispatch('snapshot_get_time', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.432675, "supported_languages": null}, "macro.dbt.default__snapshot_get_time": {"name": "default__snapshot_get_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__snapshot_get_time", "macro_sql": "{% macro default__snapshot_get_time() %}\n {{ current_timestamp() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.432891, "supported_languages": null}, "macro.dbt.get_snapshot_get_time_data_type": {"name": "get_snapshot_get_time_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.get_snapshot_get_time_data_type", "macro_sql": "{% macro get_snapshot_get_time_data_type() %}\n {% set snapshot_time = adapter.dispatch('snapshot_get_time', 'dbt')() %}\n {% set time_data_type_sql = 'select ' ~ snapshot_time ~ ' as dbt_snapshot_time' %}\n {% set snapshot_time_column_schema = get_column_schema_from_query(time_data_type_sql) %}\n {% set time_data_type = snapshot_time_column_schema[0].dtype %}\n {{ return(time_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.snapshot_get_time", "macro.dbt_postgres.postgres__snapshot_get_time", "macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4338386, "supported_languages": null}, "macro.dbt.current_timestamp_backcompat": {"name": "current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_backcompat", "macro_sql": "{% macro current_timestamp_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4341688, "supported_languages": null}, "macro.dbt.default__current_timestamp_backcompat": {"name": "default__current_timestamp_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_backcompat", "macro_sql": "{% macro default__current_timestamp_backcompat() %}\n current_timestamp::timestamp\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4343297, "supported_languages": null}, "macro.dbt.current_timestamp_in_utc_backcompat": {"name": "current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.current_timestamp_in_utc_backcompat", "macro_sql": "{% macro current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_in_utc_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__current_timestamp_in_utc_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4346716, "supported_languages": null}, "macro.dbt.default__current_timestamp_in_utc_backcompat": {"name": "default__current_timestamp_in_utc_backcompat", "resource_type": "macro", "package_name": "dbt", "path": "macros/adapters/timestamps.sql", "original_file_path": "macros/adapters/timestamps.sql", "unique_id": "macro.dbt.default__current_timestamp_in_utc_backcompat", "macro_sql": "{% macro default__current_timestamp_in_utc_backcompat() %}\n {{ return(adapter.dispatch('current_timestamp_backcompat', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.current_timestamp_backcompat", "macro.dbt_postgres.postgres__current_timestamp_backcompat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4350066, "supported_languages": null}, "macro.dbt.set_sql_header": {"name": "set_sql_header", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.set_sql_header", "macro_sql": "{% macro set_sql_header(config) -%}\n {{ config.set('sql_header', caller()) }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.435596, "supported_languages": null}, "macro.dbt.should_full_refresh": {"name": "should_full_refresh", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_full_refresh", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4361987, "supported_languages": null}, "macro.dbt.should_store_failures": {"name": "should_store_failures", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/configs.sql", "original_file_path": "macros/materializations/configs.sql", "unique_id": "macro.dbt.should_store_failures", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.436813, "supported_languages": null}, "macro.dbt.run_hooks": {"name": "run_hooks", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.run_hooks", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4384856, "supported_languages": null}, "macro.dbt.make_hook_config": {"name": "make_hook_config", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.make_hook_config", "macro_sql": "{% macro make_hook_config(sql, inside_transaction) %}\n {{ tojson({\"sql\": sql, \"transaction\": inside_transaction}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4388733, "supported_languages": null}, "macro.dbt.before_begin": {"name": "before_begin", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.before_begin", "macro_sql": "{% macro before_begin(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4391603, "supported_languages": null}, "macro.dbt.in_transaction": {"name": "in_transaction", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.in_transaction", "macro_sql": "{% macro in_transaction(sql) %}\n {{ make_hook_config(sql, inside_transaction=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4394603, "supported_languages": null}, "macro.dbt.after_commit": {"name": "after_commit", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/hooks.sql", "original_file_path": "macros/materializations/hooks.sql", "unique_id": "macro.dbt.after_commit", "macro_sql": "{% macro after_commit(sql) %}\n {{ make_hook_config(sql, inside_transaction=False) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_hook_config"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.43974, "supported_languages": null}, "macro.dbt.materialization_test_default": {"name": "materialization_test_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/test.sql", "original_file_path": "macros/materializations/tests/test.sql", "unique_id": "macro.dbt.materialization_test_default", "macro_sql": "{%- materialization test, default -%}\n\n {% set relations = [] %}\n {% set limit = config.get('limit') %}\n\n {% set sql_with_limit %}\n {{ get_limit_subquery_sql(sql, limit) }}\n {% endset %}\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_with_limit) }}\n {% endcall %}\n\n {% do relations.append(target_relation) %}\n\n {# Since the test failures have already been saved to the database, reuse that result rather than querying again #}\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_with_limit %}\n\n {% endif %}\n\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 {# The limit has already been included above, and we do not want to duplicate it again. We also want to be safe for macro overrides treating `limit` as a required parameter. #}\n {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit=none)}}\n\n {%- endcall %}\n\n {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}", "depends_on": {"macros": ["macro.dbt.get_limit_subquery_sql", "macro.dbt.should_store_failures", "macro.dbt.statement", "macro.dbt.get_create_sql", "macro.dbt.get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4444513, "supported_languages": ["sql"]}, "macro.dbt.materialization_unit_default": {"name": "materialization_unit_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/unit.sql", "original_file_path": "macros/materializations/tests/unit.sql", "unique_id": "macro.dbt.materialization_unit_default", "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 -%}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4474509, "supported_languages": ["sql"]}, "macro.dbt.get_test_sql": {"name": "get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_test_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4484813, "supported_languages": null}, "macro.dbt.default__get_test_sql": {"name": "default__get_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_test_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4490855, "supported_languages": null}, "macro.dbt.get_unit_test_sql": {"name": "get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.get_unit_test_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_unit_test_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4495091, "supported_languages": null}, "macro.dbt.default__get_unit_test_sql": {"name": "default__get_unit_test_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/helpers.sql", "original_file_path": "macros/materializations/tests/helpers.sql", "unique_id": "macro.dbt.default__get_unit_test_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4507113, "supported_languages": null}, "macro.dbt.get_where_subquery": {"name": "get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.get_where_subquery", "macro_sql": "{% macro get_where_subquery(relation) -%}\n {% do return(adapter.dispatch('get_where_subquery', 'dbt')(relation)) %}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_where_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.451319, "supported_languages": null}, "macro.dbt.default__get_where_subquery": {"name": "default__get_where_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/tests/where_subquery.sql", "original_file_path": "macros/materializations/tests/where_subquery.sql", "unique_id": "macro.dbt.default__get_where_subquery", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.452095, "supported_languages": null}, "macro.dbt.materialization_snapshot_default": {"name": "materialization_snapshot_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot.sql", "original_file_path": "macros/materializations/snapshots/snapshot.sql", "unique_id": "macro.dbt.materialization_snapshot_default", "macro_sql": "{% materialization snapshot, default %}\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 {# The model['config'] parameter below is no longer used, but passing anyway for compatibility #}\n {# It was a dictionary of config, instead of the config object from the context #}\n {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", model['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 build_or_select_sql = build_sql %}\n {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n {% else %}\n\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n {{ adapter.assert_valid_snapshot_target_given_strategy(target_relation, columns, strategy) }}\n\n {% set build_or_select_sql = snapshot_staging_table(strategy, sql, target_relation) %}\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 remove_columns = ['dbt_change_type', 'DBT_CHANGE_TYPE', 'dbt_unique_key', 'DBT_UNIQUE_KEY'] %}\n {% if unique_key | is_list %}\n {% for key in strategy.unique_key %}\n {{ remove_columns.append('dbt_unique_key_' + loop.index|string) }}\n {{ remove_columns.append('DBT_UNIQUE_KEY_' + loop.index|string) }}\n {% endfor %}\n {% endif %}\n\n {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n | rejectattr('name', 'in', remove_columns)\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', 'in', remove_columns)\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\n {{ check_time_data_types(build_or_select_sql) }}\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 %}", "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.get_snapshot_table_column_names", "macro.dbt.snapshot_staging_table", "macro.dbt.build_snapshot_staging_table", "macro.dbt.create_columns", "macro.dbt.snapshot_merge_sql", "macro.dbt.check_time_data_types", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs", "macro.dbt.create_indexes", "macro.dbt.post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.459909, "supported_languages": ["sql"]}, "macro.dbt.strategy_dispatch": {"name": "strategy_dispatch", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.strategy_dispatch", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4638767, "supported_languages": null}, "macro.dbt.snapshot_hash_arguments": {"name": "snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_hash_arguments", "macro_sql": "{% macro snapshot_hash_arguments(args) -%}\n {{ adapter.dispatch('snapshot_hash_arguments', 'dbt')(args) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.464211, "supported_languages": null}, "macro.dbt.default__snapshot_hash_arguments": {"name": "default__snapshot_hash_arguments", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_hash_arguments", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4646702, "supported_languages": null}, "macro.dbt.snapshot_timestamp_strategy": {"name": "snapshot_timestamp_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_timestamp_strategy", "macro_sql": "{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set primary_key = config.get('unique_key') %}\n {% set updated_at = config.get('updated_at') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\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 }}.{{ columns.dbt_valid_from }} < {{ current_rel }}.{{ updated_at }})\n {%- endset %}\n\n {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\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 \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4665687, "supported_languages": null}, "macro.dbt.snapshot_string_as_time": {"name": "snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_string_as_time", "macro_sql": "{% macro snapshot_string_as_time(timestamp) -%}\n {{ adapter.dispatch('snapshot_string_as_time', 'dbt')(timestamp) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_string_as_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4668999, "supported_languages": null}, "macro.dbt.default__snapshot_string_as_time": {"name": "default__snapshot_string_as_time", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.default__snapshot_string_as_time", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4672291, "supported_languages": null}, "macro.dbt.snapshot_check_all_get_existing_columns": {"name": "snapshot_check_all_get_existing_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_all_get_existing_columns", "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 %}", "depends_on": {"macros": ["macro.dbt.get_columns_in_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4698806, "supported_languages": null}, "macro.dbt.snapshot_check_strategy": {"name": "snapshot_check_strategy", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/strategies.sql", "original_file_path": "macros/materializations/snapshots/strategies.sql", "unique_id": "macro.dbt.snapshot_check_strategy", "macro_sql": "{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n {% set check_cols_config = config.get('check_cols') %}\n {% set primary_key = config.get('unique_key') %}\n {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n {% set updated_at = config.get('updated_at') or 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_args = api.Relation.scd_args(primary_key, updated_at) %}\n {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\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 \"hard_deletes\": hard_deletes\n }) %}\n{% endmacro %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4727626, "supported_languages": null}, "macro.dbt.create_columns": {"name": "create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.create_columns", "macro_sql": "{% macro create_columns(relation, columns) %}\n {{ adapter.dispatch('create_columns', 'dbt')(relation, columns) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4765277, "supported_languages": null}, "macro.dbt.default__create_columns": {"name": "default__create_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__create_columns", "macro_sql": "{% macro default__create_columns(relation, columns) %}\n {% for column in columns %}\n {% call statement() %}\n alter table {{ relation.render() }} add column {{ adapter.quote(column.name) }} {{ column.data_type }};\n {% endcall %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4771643, "supported_languages": null}, "macro.dbt.post_snapshot": {"name": "post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.post_snapshot", "macro_sql": "{% macro post_snapshot(staging_relation) %}\n {{ adapter.dispatch('post_snapshot', 'dbt')(staging_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__post_snapshot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.477511, "supported_languages": null}, "macro.dbt.default__post_snapshot": {"name": "default__post_snapshot", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__post_snapshot", "macro_sql": "{% macro default__post_snapshot(staging_relation) %}\n {# no-op #}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.477698, "supported_languages": null}, "macro.dbt.get_true_sql": {"name": "get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_true_sql", "macro_sql": "{% macro get_true_sql() %}\n {{ adapter.dispatch('get_true_sql', 'dbt')() }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_true_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4779809, "supported_languages": null}, "macro.dbt.default__get_true_sql": {"name": "default__get_true_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__get_true_sql", "macro_sql": "{% macro default__get_true_sql() %}\n {{ return('TRUE') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.478217, "supported_languages": null}, "macro.dbt.snapshot_staging_table": {"name": "snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.snapshot_staging_table", "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 %}", "depends_on": {"macros": ["macro.dbt.default__snapshot_staging_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.478632, "supported_languages": null}, "macro.dbt.get_snapshot_table_column_names": {"name": "get_snapshot_table_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_snapshot_table_column_names", "macro_sql": "{% macro get_snapshot_table_column_names() %}\n {{ return({'dbt_valid_to': 'dbt_valid_to', 'dbt_valid_from': 'dbt_valid_from', 'dbt_scd_id': 'dbt_scd_id', 'dbt_updated_at': 'dbt_updated_at', 'dbt_is_deleted': 'dbt_is_deleted'}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4791076, "supported_languages": null}, "macro.dbt.default__snapshot_staging_table": {"name": "default__snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__snapshot_staging_table", "macro_sql": "{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n {% if strategy.hard_deletes == 'new_record' %}\n {% set new_scd_id = snapshot_hash_arguments([columns.dbt_scd_id, snapshot_get_time()]) %}\n {% endif %}\n with snapshot_query as (\n\n {{ source_sql }}\n\n ),\n\n snapshotted_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }}\n from {{ target_relation }}\n where\n {% if config.get('dbt_valid_to_current') %}\n\t\t{% set source_unique_key = columns.dbt_valid_to | trim %}\n\t\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\n\t\t{# The exact equals semantics between NULL values depends on the current behavior flag set. Also, update records if the source field is null #}\n ( {{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null )\n {% else %}\n {{ columns.dbt_valid_to }} is null\n {% endif %}\n\n ),\n\n insertions_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }},\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }}\n\n from snapshot_query\n ),\n\n updates_source_data as (\n\n select *, {{ unique_key_fields(strategy.unique_key) }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_to }}\n\n from snapshot_query\n ),\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n\n deletes_source_data as (\n\n select *, {{ unique_key_fields(strategy.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 {%- if strategy.hard_deletes == 'new_record' -%}\n ,'False' as {{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from insertions_source_data as source_data\n left outer join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"snapshotted_data\") }}\n or ({{ unique_key_is_not_null(strategy.unique_key, \"snapshotted_data\") }} and (\n {{ strategy.row_changed }} {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n )\n\n )\n\n ),\n\n updates as (\n\n select\n 'update' as dbt_change_type,\n source_data.*,\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n\n from updates_source_data as source_data\n join snapshotted_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where (\n {{ strategy.row_changed }} {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n )\n )\n\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n ,\n deletes as (\n\n select\n 'delete' as dbt_change_type,\n source_data.*,\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_to }},\n snapshotted_data.{{ columns.dbt_scd_id }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , snapshotted_data.{{ columns.dbt_is_deleted }}\n {%- endif %}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n\n {%- if strategy.hard_deletes == 'new_record' %}\n and not (\n --avoid updating the record's valid_to if the latest entry is marked as deleted\n snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n and snapshotted_data.{{ columns.dbt_valid_to }} is null\n )\n {%- endif %}\n )\n {%- endif %}\n\n {%- if strategy.hard_deletes == 'new_record' %}\n {% set snapshotted_cols = get_list_of_column_names(get_columns_in_relation(target_relation)) %}\n {% set source_sql_cols = get_column_schema_from_query(source_sql) %}\n ,\n deletion_records as (\n\n select\n 'insert' as dbt_change_type,\n {#\n If a column has been added to the source it won't yet exist in the\n snapshotted table so we insert a null value as a placeholder for the column.\n #}\n {%- for col in source_sql_cols -%}\n {%- if col.name in snapshotted_cols -%}\n snapshotted_data.{{ adapter.quote(col.column) }},\n {%- else -%}\n NULL as {{ adapter.quote(col.column) }},\n {%- endif -%}\n {% endfor -%}\n {%- if strategy.unique_key | is_list -%}\n {%- for key in strategy.unique_key -%}\n snapshotted_data.{{ key }} as dbt_unique_key_{{ loop.index }},\n {% endfor -%}\n {%- else -%}\n snapshotted_data.dbt_unique_key as dbt_unique_key,\n {% endif -%}\n {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n snapshotted_data.{{ columns.dbt_valid_to }} as {{ columns.dbt_valid_to }},\n {{ new_scd_id }} as {{ columns.dbt_scd_id }},\n 'True' as {{ columns.dbt_is_deleted }}\n from snapshotted_data\n left join deletes_source_data as source_data\n on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n and not (\n --avoid inserting a new record if the latest one is marked as deleted\n snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n and snapshotted_data.{{ columns.dbt_valid_to }} is null\n )\n\n )\n {%- endif %}\n\n select * from insertions\n union all\n select * from updates\n {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletes\n {%- endif %}\n {%- if strategy.hard_deletes == 'new_record' %}\n union all\n select * from deletion_records\n {%- endif %}\n\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments", "macro.dbt.snapshot_get_time", "macro.dbt.unique_key_fields", "macro.dbt.equals", "macro.dbt.get_dbt_valid_to_current", "macro.dbt.unique_key_join_on", "macro.dbt.unique_key_is_null", "macro.dbt.unique_key_is_not_null", "macro.dbt.get_list_of_column_names", "macro.dbt.get_columns_in_relation", "macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4870565, "supported_languages": null}, "macro.dbt.build_snapshot_table": {"name": "build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_table", "macro_sql": "{% macro build_snapshot_table(strategy, sql) -%}\n {{ adapter.dispatch('build_snapshot_table', 'dbt')(strategy, sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__build_snapshot_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4874835, "supported_languages": null}, "macro.dbt.default__build_snapshot_table": {"name": "default__build_snapshot_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.default__build_snapshot_table", "macro_sql": "{% macro default__build_snapshot_table(strategy, sql) %}\n {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n\n select *,\n {{ strategy.scd_id }} as {{ columns.dbt_scd_id }},\n {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n {{ get_dbt_valid_to_current(strategy, columns) }}\n {%- if strategy.hard_deletes == 'new_record' -%}\n , 'False' as {{ columns.dbt_is_deleted }}\n {% endif -%}\n from (\n {{ sql }}\n ) sbq\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.get_dbt_valid_to_current"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.488484, "supported_languages": null}, "macro.dbt.build_snapshot_staging_table": {"name": "build_snapshot_staging_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.build_snapshot_staging_table", "macro_sql": "{% macro build_snapshot_staging_table(strategy, sql, target_relation) %}\n {% set temp_relation = make_temp_relation(target_relation) %}\n\n {% set select = snapshot_staging_table(strategy, sql, target_relation) %}\n\n {% call statement('build_snapshot_staging_relation') %}\n {{ create_table_as(True, temp_relation, select) }}\n {% endcall %}\n\n {% do return(temp_relation) %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.make_temp_relation", "macro.dbt.snapshot_staging_table", "macro.dbt.statement", "macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4892952, "supported_languages": null}, "macro.dbt.get_updated_at_column_data_type": {"name": "get_updated_at_column_data_type", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_updated_at_column_data_type", "macro_sql": "{% macro get_updated_at_column_data_type(snapshot_sql) %}\n {% set snapshot_sql_column_schema = get_column_schema_from_query(snapshot_sql) %}\n {% set dbt_updated_at_data_type = null %}\n {% set ns = namespace() -%} {#-- handle for-loop scoping with a namespace --#}\n {% set ns.dbt_updated_at_data_type = null -%}\n {% for column in snapshot_sql_column_schema %}\n {% if ((column.column == 'dbt_updated_at') or (column.column == 'DBT_UPDATED_AT')) %}\n {% set ns.dbt_updated_at_data_type = column.dtype %}\n {% endif %}\n {% endfor %}\n {{ return(ns.dbt_updated_at_data_type or none) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.490483, "supported_languages": null}, "macro.dbt.check_time_data_types": {"name": "check_time_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.check_time_data_types", "macro_sql": "{% macro check_time_data_types(sql) %}\n {% set dbt_updated_at_data_type = get_updated_at_column_data_type(sql) %}\n {% set snapshot_get_time_data_type = get_snapshot_get_time_data_type() %}\n {% if snapshot_get_time_data_type is not none and dbt_updated_at_data_type is not none and snapshot_get_time_data_type != dbt_updated_at_data_type %}\n {% if exceptions.warn_snapshot_timestamp_data_types %}\n {{ exceptions.warn_snapshot_timestamp_data_types(snapshot_get_time_data_type, dbt_updated_at_data_type) }}\n {% endif %}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_updated_at_column_data_type", "macro.dbt.get_snapshot_get_time_data_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4913034, "supported_languages": null}, "macro.dbt.get_dbt_valid_to_current": {"name": "get_dbt_valid_to_current", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.get_dbt_valid_to_current", "macro_sql": "{% macro get_dbt_valid_to_current(strategy, columns) %}\n {% set dbt_valid_to_current = config.get('dbt_valid_to_current') or \"null\" %}\n coalesce(nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}), {{dbt_valid_to_current}})\n as {{ columns.dbt_valid_to }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.491868, "supported_languages": null}, "macro.dbt.unique_key_fields": {"name": "unique_key_fields", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_fields", "macro_sql": "{% macro unique_key_fields(unique_key) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n {{ key }} as dbt_unique_key_{{ loop.index }}\n {%- if not loop.last %} , {%- endif %}\n {% endfor %}\n {% else %}\n {{ unique_key }} as dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4925642, "supported_languages": null}, "macro.dbt.unique_key_join_on": {"name": "unique_key_join_on", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_join_on", "macro_sql": "{% macro unique_key_join_on(unique_key, identifier, from_identifier) %}\n {% if unique_key | is_list %}\n {% for key in unique_key %}\n\t {% set source_unique_key = (identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {% set target_unique_key = (from_identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t {{ equals(source_unique_key, target_unique_key) }}\n {%- if not loop.last %} and {%- endif %}\n {% endfor %}\n {% else %}\n {{ identifier }}.dbt_unique_key = {{ from_identifier }}.dbt_unique_key\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4937124, "supported_languages": null}, "macro.dbt.unique_key_is_null": {"name": "unique_key_is_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_null", "macro_sql": "{% macro unique_key_is_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is null\n {% else %}\n {{ identifier }}.dbt_unique_key is null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.494128, "supported_languages": null}, "macro.dbt.unique_key_is_not_null": {"name": "unique_key_is_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/helpers.sql", "original_file_path": "macros/materializations/snapshots/helpers.sql", "unique_id": "macro.dbt.unique_key_is_not_null", "macro_sql": "{% macro unique_key_is_not_null(unique_key, identifier) %}\n {% if unique_key | is_list %}\n {{ identifier }}.dbt_unique_key_1 is not null\n {% else %}\n {{ identifier }}.dbt_unique_key is not null\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.494733, "supported_languages": null}, "macro.dbt.snapshot_merge_sql": {"name": "snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.snapshot_merge_sql", "macro_sql": "{% macro snapshot_merge_sql(target, source, insert_cols) -%}\n {{ adapter.dispatch('snapshot_merge_sql', 'dbt')(target, source, insert_cols) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__snapshot_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4955707, "supported_languages": null}, "macro.dbt.default__snapshot_merge_sql": {"name": "default__snapshot_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/snapshots/snapshot_merge.sql", "original_file_path": "macros/materializations/snapshots/snapshot_merge.sql", "unique_id": "macro.dbt.default__snapshot_merge_sql", "macro_sql": "{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n merge into {{ target.render() }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }} = DBT_INTERNAL_DEST.{{ columns.dbt_scd_id }}\n\n when matched\n {% if config.get(\"dbt_valid_to_current\") %}\n\t{% set source_unique_key = (\"DBT_INTERNAL_DEST.\" ~ columns.dbt_valid_to) | trim %}\n\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\tand ({{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null)\n\n {% else %}\n and DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} is null\n {% endif %}\n and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n then update\n set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.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 %}", "depends_on": {"macros": ["macro.dbt.get_snapshot_table_column_names", "macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.4971826, "supported_languages": null}, "macro.dbt.materialization_seed_default": {"name": "materialization_seed_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/seed.sql", "original_file_path": "macros/materializations/seeds/seed.sql", "unique_id": "macro.dbt.materialization_seed_default", "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.render())) }}\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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5024958, "supported_languages": ["sql"]}, "macro.dbt.create_csv_table": {"name": "create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.create_csv_table", "macro_sql": "{% macro create_csv_table(model, agate_table) -%}\n {{ adapter.dispatch('create_csv_table', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5056171, "supported_languages": null}, "macro.dbt.default__create_csv_table": {"name": "default__create_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__create_csv_table", "macro_sql": "{% macro default__create_csv_table(model, agate_table) %}\n {%- set column_override = model['config'].get('column_types', {}) -%}\n {%- set quote_seed_column = model['config'].get('quote_columns', None) -%}\n\n {% set sql %}\n create table {{ this.render() }} (\n {%- for col_name in agate_table.column_names -%}\n {%- set inferred_type = adapter.convert_type(agate_table, loop.index0) -%}\n {%- set type = column_override.get(col_name, inferred_type) -%}\n {%- set column_name = (col_name | string) -%}\n {{ adapter.quote_seed_column(column_name, quote_seed_column) }} {{ type }} {%- if not loop.last -%}, {%- endif -%}\n {%- endfor -%}\n )\n {% endset %}\n\n {% call statement('_') -%}\n {{ sql }}\n {%- endcall %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5075717, "supported_languages": null}, "macro.dbt.reset_csv_table": {"name": "reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.reset_csv_table", "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 %}", "depends_on": {"macros": ["macro.dbt.default__reset_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5084972, "supported_languages": null}, "macro.dbt.default__reset_csv_table": {"name": "default__reset_csv_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__reset_csv_table", "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.render() %}\n {% endif %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_csv_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.509747, "supported_languages": null}, "macro.dbt.get_csv_sql": {"name": "get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_csv_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_csv_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5101373, "supported_languages": null}, "macro.dbt.default__get_csv_sql": {"name": "default__get_csv_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_csv_sql", "macro_sql": "{% macro default__get_csv_sql(create_or_truncate_sql, insert_sql) %}\n {{ create_or_truncate_sql }};\n -- dbt seed --\n {{ insert_sql }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.510445, "supported_languages": null}, "macro.dbt.get_binding_char": {"name": "get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_binding_char", "macro_sql": "{% macro get_binding_char() -%}\n {{ adapter.dispatch('get_binding_char', 'dbt')() }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.510731, "supported_languages": null}, "macro.dbt.default__get_binding_char": {"name": "default__get_binding_char", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_binding_char", "macro_sql": "{% macro default__get_binding_char() %}\n {{ return('%s') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5109658, "supported_languages": null}, "macro.dbt.get_batch_size": {"name": "get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_batch_size", "macro_sql": "{% macro get_batch_size() -%}\n {{ return(adapter.dispatch('get_batch_size', 'dbt')()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_batch_size"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5112786, "supported_languages": null}, "macro.dbt.default__get_batch_size": {"name": "default__get_batch_size", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__get_batch_size", "macro_sql": "{% macro default__get_batch_size() %}\n {{ return(10000) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5115416, "supported_languages": null}, "macro.dbt.get_seed_column_quoted_csv": {"name": "get_seed_column_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.get_seed_column_quoted_csv", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5124886, "supported_languages": null}, "macro.dbt.load_csv_rows": {"name": "load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.load_csv_rows", "macro_sql": "{% macro load_csv_rows(model, agate_table) -%}\n {{ adapter.dispatch('load_csv_rows', 'dbt')(model, agate_table) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__load_csv_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5128527, "supported_languages": null}, "macro.dbt.default__load_csv_rows": {"name": "default__load_csv_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/seeds/helpers.sql", "original_file_path": "macros/materializations/seeds/helpers.sql", "unique_id": "macro.dbt.default__load_csv_rows", "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 %}", "depends_on": {"macros": ["macro.dbt.get_batch_size", "macro.dbt.get_seed_column_quoted_csv", "macro.dbt.get_binding_char"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5153785, "supported_languages": null}, "macro.dbt.materialization_view_default": {"name": "materialization_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/view.sql", "original_file_path": "macros/materializations/models/view.sql", "unique_id": "macro.dbt.materialization_view_default", "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 -%}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5193307, "supported_languages": ["sql"]}, "macro.dbt.materialization_materialized_view_default": {"name": "materialization_materialized_view_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialization_materialized_view_default", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5222578, "supported_languages": ["sql"]}, "macro.dbt.materialized_view_setup": {"name": "materialized_view_setup", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_setup", "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 %}", "depends_on": {"macros": ["macro.dbt.load_cached_relation", "macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5230317, "supported_languages": null}, "macro.dbt.materialized_view_teardown": {"name": "materialized_view_teardown", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_teardown", "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 %}", "depends_on": {"macros": ["macro.dbt.drop_relation_if_exists", "macro.dbt.run_hooks"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.523552, "supported_languages": null}, "macro.dbt.materialized_view_get_build_sql": {"name": "materialized_view_get_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_get_build_sql", "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.render() ~ \"`\") }}\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.render() ~ \"`\") }}\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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5260642, "supported_languages": null}, "macro.dbt.materialized_view_execute_no_op": {"name": "materialized_view_execute_no_op", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_no_op", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5265434, "supported_languages": null}, "macro.dbt.materialized_view_execute_build_sql": {"name": "materialized_view_execute_build_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/materialized_view.sql", "original_file_path": "macros/materializations/models/materialized_view.sql", "unique_id": "macro.dbt.materialized_view_execute_build_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.statement", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5278196, "supported_languages": null}, "macro.dbt.materialization_table_default": {"name": "materialization_table_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/table.sql", "original_file_path": "macros/materializations/models/table.sql", "unique_id": "macro.dbt.materialization_table_default", "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 {% do create_indexes(intermediate_relation) %}\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 {{ 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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5318356, "supported_languages": ["sql"]}, "macro.dbt.is_incremental": {"name": "is_incremental", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/is_incremental.sql", "original_file_path": "macros/materializations/models/incremental/is_incremental.sql", "unique_id": "macro.dbt.is_incremental", "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 %}", "depends_on": {"macros": ["macro.dbt.should_full_refresh"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5329638, "supported_languages": null}, "macro.dbt.get_merge_sql": {"name": "get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.534951, "supported_languages": null}, "macro.dbt.default__get_merge_sql": {"name": "default__get_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_merge_sql", "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 source_unique_key = (\"DBT_INTERNAL_SOURCE.\" ~ unique_key) | trim %}\n\t {% set target_unique_key = (\"DBT_INTERNAL_DEST.\" ~ unique_key) | trim %}\n\t {% set unique_key_match = equals(source_unique_key, target_unique_key) | trim %}\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 %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv", "macro.dbt.get_merge_update_columns", "macro.dbt.equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.538437, "supported_languages": null}, "macro.dbt.get_delete_insert_merge_sql": {"name": "get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_delete_insert_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5389428, "supported_languages": null}, "macro.dbt.default__get_delete_insert_merge_sql": {"name": "default__get_delete_insert_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_delete_insert_merge_sql", "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 string %}\n {% set unique_key = [unique_key] %}\n {% endif %}\n\n {%- set unique_key_str = unique_key|join(', ') -%}\n\n delete from {{ target }} as DBT_INTERNAL_DEST\n where ({{ unique_key_str }}) in (\n select distinct {{ unique_key_str }}\n from {{ source }} as DBT_INTERNAL_SOURCE\n )\n {%- if incremental_predicates %}\n {% for predicate in incremental_predicates %}\n and {{ predicate }}\n {% endfor %}\n {%- endif -%};\n\n {% endif %}\n\n insert into {{ target }} ({{ dest_cols_csv }})\n (\n select {{ dest_cols_csv }}\n from {{ source }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5403326, "supported_languages": null}, "macro.dbt.get_insert_overwrite_merge_sql": {"name": "get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.get_insert_overwrite_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5408573, "supported_languages": null}, "macro.dbt.default__get_insert_overwrite_merge_sql": {"name": "default__get_insert_overwrite_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/merge.sql", "original_file_path": "macros/materializations/models/incremental/merge.sql", "unique_id": "macro.dbt.default__get_insert_overwrite_merge_sql", "macro_sql": "{% macro default__get_insert_overwrite_merge_sql(target, source, dest_columns, predicates, include_sql_header) -%}\n {#-- The only time include_sql_header is True: --#}\n {#-- BigQuery + insert_overwrite strategy + \"static\" partitions config --#}\n {#-- We should consider including the sql header at the materialization level instead --#}\n\n {%- set predicates = [] if predicates is none else [] + predicates -%}\n {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n {%- set sql_header = config.get('sql_header', none) -%}\n\n {{ sql_header if sql_header is not none and include_sql_header }}\n\n merge into {{ target }} as DBT_INTERNAL_DEST\n using {{ source }} as DBT_INTERNAL_SOURCE\n on FALSE\n\n when not matched by source\n {% if predicates %} and {{ predicates | join(' and ') }} {% endif %}\n then delete\n\n when not matched then insert\n ({{ dest_cols_csv }})\n values\n ({{ dest_cols_csv }})\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5421064, "supported_languages": null}, "macro.dbt.get_quoted_csv": {"name": "get_quoted_csv", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_quoted_csv", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5437057, "supported_languages": null}, "macro.dbt.diff_columns": {"name": "diff_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_columns", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5447943, "supported_languages": null}, "macro.dbt.diff_column_data_types": {"name": "diff_column_data_types", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.diff_column_data_types", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5460775, "supported_languages": null}, "macro.dbt.get_merge_update_columns": {"name": "get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.get_merge_update_columns", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_merge_update_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5465598, "supported_languages": null}, "macro.dbt.default__get_merge_update_columns": {"name": "default__get_merge_update_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/column_helpers.sql", "original_file_path": "macros/materializations/models/incremental/column_helpers.sql", "unique_id": "macro.dbt.default__get_merge_update_columns", "macro_sql": "{% macro default__get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) %}\n {%- set default_cols = dest_columns | map(attribute=\"quoted\") | list -%}\n\n {%- if merge_update_columns and merge_exclude_columns -%}\n {{ exceptions.raise_compiler_error(\n 'Model cannot specify merge_update_columns and merge_exclude_columns. Please update model to use only one config'\n )}}\n {%- elif merge_update_columns -%}\n {%- set update_columns = merge_update_columns -%}\n {%- elif merge_exclude_columns -%}\n {%- set update_columns = [] -%}\n {%- for column in dest_columns -%}\n {% if column.column | lower not in merge_exclude_columns | map(\"lower\") | list %}\n {%- do update_columns.append(column.quoted) -%}\n {% endif %}\n {%- endfor -%}\n {%- else -%}\n {%- set update_columns = default_cols -%}\n {%- endif -%}\n\n {{ return(update_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.54797, "supported_languages": null}, "macro.dbt.get_incremental_append_sql": {"name": "get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_append_sql", "macro_sql": "{% macro get_incremental_append_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_append_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5492055, "supported_languages": null}, "macro.dbt.default__get_incremental_append_sql": {"name": "default__get_incremental_append_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_append_sql", "macro_sql": "{% macro default__get_incremental_append_sql(arg_dict) %}\n\n {% do return(get_insert_into_sql(arg_dict[\"target_relation\"], arg_dict[\"temp_relation\"], arg_dict[\"dest_columns\"])) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_insert_into_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5496812, "supported_languages": null}, "macro.dbt.get_incremental_delete_insert_sql": {"name": "get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_delete_insert_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_delete_insert_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.550059, "supported_languages": null}, "macro.dbt.default__get_incremental_delete_insert_sql": {"name": "default__get_incremental_delete_insert_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_delete_insert_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_delete_insert_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.550635, "supported_languages": null}, "macro.dbt.get_incremental_merge_sql": {"name": "get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_merge_sql", "macro_sql": "{% macro get_incremental_merge_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_merge_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5509949, "supported_languages": null}, "macro.dbt.default__get_incremental_merge_sql": {"name": "default__get_incremental_merge_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_merge_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.551569, "supported_languages": null}, "macro.dbt.get_incremental_insert_overwrite_sql": {"name": "get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_insert_overwrite_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_incremental_insert_overwrite_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5519264, "supported_languages": null}, "macro.dbt.default__get_incremental_insert_overwrite_sql": {"name": "default__get_incremental_insert_overwrite_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_insert_overwrite_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_insert_overwrite_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5524411, "supported_languages": null}, "macro.dbt.get_incremental_default_sql": {"name": "get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_default_sql", "macro_sql": "{% macro get_incremental_default_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_default_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_default_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.552803, "supported_languages": null}, "macro.dbt.default__get_incremental_default_sql": {"name": "default__get_incremental_default_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_default_sql", "macro_sql": "{% macro default__get_incremental_default_sql(arg_dict) %}\n\n {% do return(get_incremental_append_sql(arg_dict)) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.get_incremental_append_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5531204, "supported_languages": null}, "macro.dbt.get_incremental_microbatch_sql": {"name": "get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_incremental_microbatch_sql", "macro_sql": "{% macro get_incremental_microbatch_sql(arg_dict) %}\n\n {{ return(adapter.dispatch('get_incremental_microbatch_sql', 'dbt')(arg_dict)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_incremental_microbatch_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5534968, "supported_languages": null}, "macro.dbt.default__get_incremental_microbatch_sql": {"name": "default__get_incremental_microbatch_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.default__get_incremental_microbatch_sql", "macro_sql": "{% macro default__get_incremental_microbatch_sql(arg_dict) %}\n\n {{ exceptions.raise_not_implemented('microbatch materialization strategy not implemented for adapter ' + adapter.type()) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5539432, "supported_languages": null}, "macro.dbt.get_insert_into_sql": {"name": "get_insert_into_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/strategies.sql", "original_file_path": "macros/materializations/models/incremental/strategies.sql", "unique_id": "macro.dbt.get_insert_into_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.get_quoted_csv"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.554544, "supported_languages": null}, "macro.dbt.incremental_validate_on_schema_change": {"name": "incremental_validate_on_schema_change", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.incremental_validate_on_schema_change", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5567598, "supported_languages": null}, "macro.dbt.check_for_schema_changes": {"name": "check_for_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.check_for_schema_changes", "macro_sql": "{% macro check_for_schema_changes(source_relation, target_relation) %}\n\n {% set schema_changed = False %}\n\n {%- set source_columns = adapter.get_columns_in_relation(source_relation) -%}\n {%- set target_columns = adapter.get_columns_in_relation(target_relation) -%}\n {%- set source_not_in_target = diff_columns(source_columns, target_columns) -%}\n {%- set target_not_in_source = diff_columns(target_columns, source_columns) -%}\n\n {% set new_target_types = diff_column_data_types(source_columns, target_columns) %}\n\n {% if source_not_in_target != [] %}\n {% set schema_changed = True %}\n {% elif target_not_in_source != [] or new_target_types != [] %}\n {% set schema_changed = True %}\n {% elif new_target_types != [] %}\n {% set schema_changed = True %}\n {% endif %}\n\n {% set changes_dict = {\n 'schema_changed': schema_changed,\n 'source_not_in_target': source_not_in_target,\n 'target_not_in_source': target_not_in_source,\n 'source_columns': source_columns,\n 'target_columns': target_columns,\n 'new_target_types': new_target_types\n } %}\n\n {% set msg %}\n In {{ target_relation }}:\n Schema changed: {{ schema_changed }}\n Source columns not in target: {{ source_not_in_target }}\n Target columns not in source: {{ target_not_in_source }}\n New column types: {{ new_target_types }}\n {% endset %}\n\n {% do log(msg) %}\n\n {{ return(changes_dict) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.diff_columns", "macro.dbt.diff_column_data_types"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5590816, "supported_languages": null}, "macro.dbt.sync_column_schemas": {"name": "sync_column_schemas", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.sync_column_schemas", "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 %}", "depends_on": {"macros": ["macro.dbt.alter_relation_add_remove_columns", "macro.dbt.alter_column_type"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.561389, "supported_languages": null}, "macro.dbt.process_schema_changes": {"name": "process_schema_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/on_schema_change.sql", "original_file_path": "macros/materializations/models/incremental/on_schema_change.sql", "unique_id": "macro.dbt.process_schema_changes", "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 %}", "depends_on": {"macros": ["macro.dbt.check_for_schema_changes", "macro.dbt.sync_column_schemas"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5629964, "supported_languages": null}, "macro.dbt.materialization_incremental_default": {"name": "materialization_incremental_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/incremental/incremental.sql", "original_file_path": "macros/materializations/models/incremental/incremental.sql", "unique_id": "macro.dbt.materialization_incremental_default", "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 {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n\n {% if existing_relation is none %}\n {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n {% set relation_for_indexes = target_relation %}\n {% elif full_refresh_mode %}\n {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n {% set relation_for_indexes = intermediate_relation %}\n {% set need_swap = true %}\n {% else %}\n {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n {% set relation_for_indexes = temp_relation %}\n {% set contract_config = config.get('contract') %}\n {% if not contract_config or not contract_config.enforced %}\n {% do adapter.expand_target_column_types(\n from_relation=temp_relation,\n to_relation=target_relation) %}\n {% endif %}\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_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\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 existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n {% do create_indexes(relation_for_indexes) %}\n {% endif %}\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 {{ 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 %}", "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.create_indexes", "macro.dbt.should_revoke", "macro.dbt.apply_grants", "macro.dbt.persist_docs"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5711846, "supported_languages": ["sql"]}, "macro.dbt.can_clone_table": {"name": "can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.can_clone_table", "macro_sql": "{% macro can_clone_table() %}\n {{ return(adapter.dispatch('can_clone_table', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__can_clone_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5717359, "supported_languages": null}, "macro.dbt.default__can_clone_table": {"name": "default__can_clone_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/can_clone_table.sql", "original_file_path": "macros/materializations/models/clone/can_clone_table.sql", "unique_id": "macro.dbt.default__can_clone_table", "macro_sql": "{% macro default__can_clone_table() %}\n {{ return(False) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5719855, "supported_languages": null}, "macro.dbt.materialization_clone_default": {"name": "materialization_clone_default", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/clone.sql", "original_file_path": "macros/materializations/models/clone/clone.sql", "unique_id": "macro.dbt.materialization_clone_default", "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.render() ~ \" 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 {% if target_relation.database == defer_relation.database and\n target_relation.schema == defer_relation.schema and\n target_relation.identifier == defer_relation.identifier %}\n {{ log(\"Target relation and defer relation are the same, skipping clone for relation: \" ~ target_relation.render()) }}\n {% else %}\n {% call statement('main') %}\n {{ create_or_replace_clone(target_relation, defer_relation) }}\n {% endcall %}\n {% endif %}\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 -%}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.57676, "supported_languages": ["sql"]}, "macro.dbt.create_or_replace_clone": {"name": "create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.create_or_replace_clone", "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 %}", "depends_on": {"macros": ["macro.dbt.default__create_or_replace_clone"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5773525, "supported_languages": null}, "macro.dbt.default__create_or_replace_clone": {"name": "default__create_or_replace_clone", "resource_type": "macro", "package_name": "dbt", "path": "macros/materializations/models/clone/create_or_replace_clone.sql", "original_file_path": "macros/materializations/models/clone/create_or_replace_clone.sql", "unique_id": "macro.dbt.default__create_or_replace_clone", "macro_sql": "{% macro default__create_or_replace_clone(this_relation, defer_relation) %}\n create or replace table {{ this_relation.render() }} clone {{ defer_relation.render() }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.577691, "supported_languages": null}, "macro.dbt.get_fixture_sql": {"name": "get_fixture_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_fixture_sql", "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{{ validate_fixture_rows(rows, row_number) }}\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 %}", "depends_on": {"macros": ["macro.dbt.load_relation", "macro.dbt.safe_cast", "macro.dbt.validate_fixture_rows", "macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.58217, "supported_languages": null}, "macro.dbt.get_expected_sql": {"name": "get_expected_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.get_expected_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.format_row"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.583357, "supported_languages": null}, "macro.dbt.format_row": {"name": "format_row", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.format_row", "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 -%}\n\n", "depends_on": {"macros": ["macro.dbt.string_literal", "macro.dbt.escape_single_quotes", "macro.dbt.safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5854833, "supported_languages": null}, "macro.dbt.validate_fixture_rows": {"name": "validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.validate_fixture_rows", "macro_sql": "{%- macro validate_fixture_rows(rows, row_number) -%}\n {{ return(adapter.dispatch('validate_fixture_rows', 'dbt')(rows, row_number)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__validate_fixture_rows"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5859053, "supported_languages": null}, "macro.dbt.default__validate_fixture_rows": {"name": "default__validate_fixture_rows", "resource_type": "macro", "package_name": "dbt", "path": "macros/unit_test_sql/get_fixture_sql.sql", "original_file_path": "macros/unit_test_sql/get_fixture_sql.sql", "unique_id": "macro.dbt.default__validate_fixture_rows", "macro_sql": "{%- macro default__validate_fixture_rows(rows, row_number) -%}\n {# This is an abstract method for adapter overrides as needed #}\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5860977, "supported_languages": null}, "macro.dbt.generate_database_name": {"name": "generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.generate_database_name", "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 %}", "depends_on": {"macros": ["macro.dbt.default__generate_database_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5867956, "supported_languages": null}, "macro.dbt.default__generate_database_name": {"name": "default__generate_database_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_database.sql", "original_file_path": "macros/get_custom_name/get_custom_database.sql", "unique_id": "macro.dbt.default__generate_database_name", "macro_sql": "{% macro default__generate_database_name(custom_database_name=none, node=none) -%}\n {%- set default_database = target.database -%}\n {%- if custom_database_name is none -%}\n\n {{ default_database }}\n\n {%- else -%}\n\n {{ custom_database_name }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.587294, "supported_languages": null}, "macro.dbt.generate_alias_name": {"name": "generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.generate_alias_name", "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 %}", "depends_on": {"macros": ["macro.dbt.default__generate_alias_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5879993, "supported_languages": null}, "macro.dbt.default__generate_alias_name": {"name": "default__generate_alias_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_alias.sql", "original_file_path": "macros/get_custom_name/get_custom_alias.sql", "unique_id": "macro.dbt.default__generate_alias_name", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5887606, "supported_languages": null}, "macro.dbt.generate_schema_name": {"name": "generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name", "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 %}", "depends_on": {"macros": ["macro.dbt.default__generate_schema_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5895917, "supported_languages": null}, "macro.dbt.default__generate_schema_name": {"name": "default__generate_schema_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.default__generate_schema_name", "macro_sql": "{% macro default__generate_schema_name(custom_schema_name, node) -%}\n\n {%- set default_schema = target.schema -%}\n {%- if custom_schema_name is none -%}\n\n {{ default_schema }}\n\n {%- else -%}\n\n {{ default_schema }}_{{ custom_schema_name | trim }}\n\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5901146, "supported_languages": null}, "macro.dbt.generate_schema_name_for_env": {"name": "generate_schema_name_for_env", "resource_type": "macro", "package_name": "dbt", "path": "macros/get_custom_name/get_custom_schema.sql", "original_file_path": "macros/get_custom_name/get_custom_schema.sql", "unique_id": "macro.dbt.generate_schema_name_for_env", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5906801, "supported_languages": null}, "macro.dbt.default__test_relationships": {"name": "default__test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/relationships.sql", "original_file_path": "macros/generic_test_sql/relationships.sql", "unique_id": "macro.dbt.default__test_relationships", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5912433, "supported_languages": null}, "macro.dbt.default__test_unique": {"name": "default__test_unique", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/unique.sql", "original_file_path": "macros/generic_test_sql/unique.sql", "unique_id": "macro.dbt.default__test_unique", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5917122, "supported_languages": null}, "macro.dbt.default__test_not_null": {"name": "default__test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/not_null.sql", "original_file_path": "macros/generic_test_sql/not_null.sql", "unique_id": "macro.dbt.default__test_not_null", "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 %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5922728, "supported_languages": null}, "macro.dbt.default__test_accepted_values": {"name": "default__test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "macros/generic_test_sql/accepted_values.sql", "original_file_path": "macros/generic_test_sql/accepted_values.sql", "unique_id": "macro.dbt.default__test_accepted_values", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5932631, "supported_languages": null}, "macro.dbt.resolve_model_name": {"name": "resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.resolve_model_name", "macro_sql": "{% macro resolve_model_name(input_model_name) %}\n {{ return(adapter.dispatch('resolve_model_name', 'dbt')(input_model_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5945957, "supported_languages": null}, "macro.dbt.default__resolve_model_name": {"name": "default__resolve_model_name", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.default__resolve_model_name", "macro_sql": "\n\n{%- macro default__resolve_model_name(input_model_name) -%}\n {{ input_model_name | string | replace('\"', '\\\"') }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5949101, "supported_languages": null}, "macro.dbt.build_ref_function": {"name": "build_ref_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_ref_function", "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\n {#\n We want to get the string of the returned relation by calling .render() in order to skip sample/empty\n mode rendering logic. However, people override the default ref macro, and often return a string instead\n of a relation (like the ref macro does by default). Thus, to make sure we dont blow things up, we have\n to ensure the resolved relation has a .render() method.\n #}\n {%- if resolved.render is defined and resolved.render is callable -%}\n {%- set resolved = resolved.render() -%}\n {%- endif -%}\n\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 %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5967746, "supported_languages": null}, "macro.dbt.build_source_function": {"name": "build_source_function", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_source_function", "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 %}", "depends_on": {"macros": ["macro.dbt.resolve_model_name"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.597701, "supported_languages": null}, "macro.dbt.build_config_dict": {"name": "build_config_dict", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.build_config_dict", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5988524, "supported_languages": null}, "macro.dbt.py_script_postfix": {"name": "py_script_postfix", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_postfix", "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 %}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5998125, "supported_languages": null}, "macro.dbt.py_script_comment": {"name": "py_script_comment", "resource_type": "macro", "package_name": "dbt", "path": "macros/python_model/python.sql", "original_file_path": "macros/python_model/python.sql", "unique_id": "macro.dbt.py_script_comment", "macro_sql": "{%macro py_script_comment()%}\n{%endmacro%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.5999746, "supported_languages": null}, "macro.dbt.cast_bool_to_text": {"name": "cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.cast_bool_to_text", "macro_sql": "{% macro cast_bool_to_text(field) %}\n {{ adapter.dispatch('cast_bool_to_text', 'dbt') (field) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.600479, "supported_languages": null}, "macro.dbt.default__cast_bool_to_text": {"name": "default__cast_bool_to_text", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast_bool_to_text.sql", "original_file_path": "macros/utils/cast_bool_to_text.sql", "unique_id": "macro.dbt.default__cast_bool_to_text", "macro_sql": "{% macro default__cast_bool_to_text(field) %}\n cast({{ field }} as {{ api.Column.translate_type('string') }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6008086, "supported_languages": null}, "macro.dbt.equals": {"name": "equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.equals", "macro_sql": "{% macro equals(expr1, expr2) %}\n {{ return(adapter.dispatch('equals', 'dbt') (expr1, expr2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__equals"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6014245, "supported_languages": null}, "macro.dbt.default__equals": {"name": "default__equals", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/equals.sql", "original_file_path": "macros/utils/equals.sql", "unique_id": "macro.dbt.default__equals", "macro_sql": "{% macro default__equals(expr1, expr2) -%}\n{%- if adapter.behavior.enable_truthy_nulls_equals_macro.no_warn %}\n case when (({{ expr1 }} = {{ expr2 }}) or ({{ expr1 }} is null and {{ expr2 }} is null))\n then 0\n else 1\n end = 0\n{%- else -%}\n ({{ expr1 }} = {{ expr2 }})\n{%- endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6020768, "supported_languages": null}, "macro.dbt.replace": {"name": "replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.replace", "macro_sql": "{% macro replace(field, old_chars, new_chars) -%}\n {{ return(adapter.dispatch('replace', 'dbt') (field, old_chars, new_chars)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__replace"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6027038, "supported_languages": null}, "macro.dbt.default__replace": {"name": "default__replace", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/replace.sql", "original_file_path": "macros/utils/replace.sql", "unique_id": "macro.dbt.default__replace", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6030374, "supported_languages": null}, "macro.dbt.right": {"name": "right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.right", "macro_sql": "{% macro right(string_text, length_expression) -%}\n {{ return(adapter.dispatch('right', 'dbt') (string_text, length_expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__right"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.603589, "supported_languages": null}, "macro.dbt.default__right": {"name": "default__right", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/right.sql", "original_file_path": "macros/utils/right.sql", "unique_id": "macro.dbt.default__right", "macro_sql": "{% macro default__right(string_text, length_expression) %}\n\n right(\n {{ string_text }},\n {{ length_expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6038682, "supported_languages": null}, "macro.dbt.last_day": {"name": "last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.last_day", "macro_sql": "{% macro last_day(date, datepart) %}\n {{ return(adapter.dispatch('last_day', 'dbt') (date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6044724, "supported_languages": null}, "macro.dbt.default_last_day": {"name": "default_last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default_last_day", "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", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.604979, "supported_languages": null}, "macro.dbt.default__last_day": {"name": "default__last_day", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/last_day.sql", "original_file_path": "macros/utils/last_day.sql", "unique_id": "macro.dbt.default__last_day", "macro_sql": "{% macro default__last_day(date, datepart) -%}\n {{dbt.default_last_day(date, datepart)}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default_last_day"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6052678, "supported_languages": null}, "macro.dbt.datediff": {"name": "datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.datediff", "macro_sql": "{% macro datediff(first_date, second_date, datepart) %}\n {{ return(adapter.dispatch('datediff', 'dbt')(first_date, second_date, datepart)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6058714, "supported_languages": null}, "macro.dbt.default__datediff": {"name": "default__datediff", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/datediff.sql", "original_file_path": "macros/utils/datediff.sql", "unique_id": "macro.dbt.default__datediff", "macro_sql": "{% macro default__datediff(first_date, second_date, datepart) -%}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6062002, "supported_languages": null}, "macro.dbt.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.get_intervals_between", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.607125, "supported_languages": null}, "macro.dbt.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__get_intervals_between", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6084437, "supported_languages": null}, "macro.dbt.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6089005, "supported_languages": null}, "macro.dbt.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_spine.sql", "original_file_path": "macros/utils/date_spine.sql", "unique_id": "macro.dbt.default__date_spine", "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 %}", "depends_on": {"macros": ["macro.dbt.generate_series", "macro.dbt.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6096115, "supported_languages": null}, "macro.dbt.hash": {"name": "hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.hash", "macro_sql": "{% macro hash(field) -%}\n {{ return(adapter.dispatch('hash', 'dbt') (field)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__hash"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6101024, "supported_languages": null}, "macro.dbt.default__hash": {"name": "default__hash", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/hash.sql", "original_file_path": "macros/utils/hash.sql", "unique_id": "macro.dbt.default__hash", "macro_sql": "{% macro default__hash(field) -%}\n md5(cast({{ field }} as {{ api.Column.translate_type('string') }}))\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.61045, "supported_languages": null}, "macro.dbt.intersect": {"name": "intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.intersect", "macro_sql": "{% macro intersect() %}\n {{ return(adapter.dispatch('intersect', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__intersect"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.610876, "supported_languages": null}, "macro.dbt.default__intersect": {"name": "default__intersect", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/intersect.sql", "original_file_path": "macros/utils/intersect.sql", "unique_id": "macro.dbt.default__intersect", "macro_sql": "{% macro default__intersect() %}\n\n intersect\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6110342, "supported_languages": null}, "macro.dbt.date_trunc": {"name": "date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.date_trunc", "macro_sql": "{% macro date_trunc(datepart, date) -%}\n {{ return(adapter.dispatch('date_trunc', 'dbt') (datepart, date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date_trunc"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6115675, "supported_languages": null}, "macro.dbt.default__date_trunc": {"name": "default__date_trunc", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date_trunc.sql", "original_file_path": "macros/utils/date_trunc.sql", "unique_id": "macro.dbt.default__date_trunc", "macro_sql": "{% macro default__date_trunc(datepart, date) -%}\n date_trunc('{{datepart}}', {{date}})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6118312, "supported_languages": null}, "macro.dbt.array_construct": {"name": "array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.array_construct", "macro_sql": "{% macro array_construct(inputs=[], data_type=api.Column.translate_type('integer')) -%}\n {{ return(adapter.dispatch('array_construct', 'dbt')(inputs, data_type)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_construct"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6127877, "supported_languages": null}, "macro.dbt.default__array_construct": {"name": "default__array_construct", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_construct.sql", "original_file_path": "macros/utils/array_construct.sql", "unique_id": "macro.dbt.default__array_construct", "macro_sql": "{% macro default__array_construct(inputs, data_type) -%}\n {% if inputs|length > 0 %}\n array[ {{ inputs|join(' , ') }} ]\n {% else %}\n array[]::{{data_type}}[]\n {% endif %}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6134496, "supported_languages": null}, "macro.dbt.listagg": {"name": "listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.listagg", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__listagg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6145751, "supported_languages": null}, "macro.dbt.default__listagg": {"name": "default__listagg", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/listagg.sql", "original_file_path": "macros/utils/listagg.sql", "unique_id": "macro.dbt.default__listagg", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6154187, "supported_languages": null}, "macro.dbt.split_part": {"name": "split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.split_part", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6164074, "supported_languages": null}, "macro.dbt.default__split_part": {"name": "default__split_part", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt.default__split_part", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.617083, "supported_languages": null}, "macro.dbt._split_part_negative": {"name": "_split_part_negative", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/split_part.sql", "original_file_path": "macros/utils/split_part.sql", "unique_id": "macro.dbt._split_part_negative", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6176975, "supported_languages": null}, "macro.dbt.safe_cast": {"name": "safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.safe_cast", "macro_sql": "{% macro safe_cast(field, type) %}\n {{ return(adapter.dispatch('safe_cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__safe_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6182866, "supported_languages": null}, "macro.dbt.default__safe_cast": {"name": "default__safe_cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/safe_cast.sql", "original_file_path": "macros/utils/safe_cast.sql", "unique_id": "macro.dbt.default__safe_cast", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6186132, "supported_languages": null}, "macro.dbt.bool_or": {"name": "bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.bool_or", "macro_sql": "{% macro bool_or(expression) -%}\n {{ return(adapter.dispatch('bool_or', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__bool_or"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.619099, "supported_languages": null}, "macro.dbt.default__bool_or": {"name": "default__bool_or", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/bool_or.sql", "original_file_path": "macros/utils/bool_or.sql", "unique_id": "macro.dbt.default__bool_or", "macro_sql": "{% macro default__bool_or(expression) -%}\n\n bool_or({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6193178, "supported_languages": null}, "macro.dbt.any_value": {"name": "any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.any_value", "macro_sql": "{% macro any_value(expression) -%}\n {{ return(adapter.dispatch('any_value', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__any_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6198184, "supported_languages": null}, "macro.dbt.default__any_value": {"name": "default__any_value", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/any_value.sql", "original_file_path": "macros/utils/any_value.sql", "unique_id": "macro.dbt.default__any_value", "macro_sql": "{% macro default__any_value(expression) -%}\n\n any_value({{ expression }})\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6203256, "supported_languages": null}, "macro.dbt.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.621161, "supported_languages": null}, "macro.dbt.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__get_powers_of_two", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6219707, "supported_languages": null}, "macro.dbt.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6223314, "supported_languages": null}, "macro.dbt.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/generate_series.sql", "original_file_path": "macros/utils/generate_series.sql", "unique_id": "macro.dbt.default__generate_series", "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 %}", "depends_on": {"macros": ["macro.dbt.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.62333, "supported_languages": null}, "macro.dbt.string_literal": {"name": "string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.string_literal", "macro_sql": "{%- macro string_literal(value) -%}\n {{ return(adapter.dispatch('string_literal', 'dbt') (value)) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6238368, "supported_languages": null}, "macro.dbt.default__string_literal": {"name": "default__string_literal", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/literal.sql", "original_file_path": "macros/utils/literal.sql", "unique_id": "macro.dbt.default__string_literal", "macro_sql": "{% macro default__string_literal(value) -%}\n '{{ value }}'\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6240463, "supported_languages": null}, "macro.dbt.escape_single_quotes": {"name": "escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.escape_single_quotes", "macro_sql": "{% macro escape_single_quotes(expression) %}\n {{ return(adapter.dispatch('escape_single_quotes', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__escape_single_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6245823, "supported_languages": null}, "macro.dbt.default__escape_single_quotes": {"name": "default__escape_single_quotes", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/escape_single_quotes.sql", "original_file_path": "macros/utils/escape_single_quotes.sql", "unique_id": "macro.dbt.default__escape_single_quotes", "macro_sql": "{% macro default__escape_single_quotes(expression) -%}\n{{ expression | replace(\"'\",\"''\") }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.624867, "supported_languages": null}, "macro.dbt.concat": {"name": "concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.concat", "macro_sql": "{% macro concat(fields) -%}\n {{ return(adapter.dispatch('concat', 'dbt')(fields)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6253371, "supported_languages": null}, "macro.dbt.default__concat": {"name": "default__concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/concat.sql", "original_file_path": "macros/utils/concat.sql", "unique_id": "macro.dbt.default__concat", "macro_sql": "{% macro default__concat(fields) -%}\n {{ fields|join(' || ') }}\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6256235, "supported_languages": null}, "macro.dbt.position": {"name": "position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.position", "macro_sql": "{% macro position(substring_text, string_text) -%}\n {{ return(adapter.dispatch('position', 'dbt') (substring_text, string_text)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__position"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6261494, "supported_languages": null}, "macro.dbt.default__position": {"name": "default__position", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/position.sql", "original_file_path": "macros/utils/position.sql", "unique_id": "macro.dbt.default__position", "macro_sql": "{% macro default__position(substring_text, string_text) %}\n\n position(\n {{ substring_text }} in {{ string_text }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.626449, "supported_languages": null}, "macro.dbt.date": {"name": "date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.date", "macro_sql": "{% macro date(year, month, day) %}\n {{ return(adapter.dispatch('date', 'dbt') (year, month, day)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__date"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.62707, "supported_languages": null}, "macro.dbt.default__date": {"name": "default__date", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/date.sql", "original_file_path": "macros/utils/date.sql", "unique_id": "macro.dbt.default__date", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6276765, "supported_languages": null}, "macro.dbt.dateadd": {"name": "dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.dateadd", "macro_sql": "{% macro dateadd(datepart, interval, from_date_or_timestamp) %}\n {{ return(adapter.dispatch('dateadd', 'dbt')(datepart, interval, from_date_or_timestamp)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.628271, "supported_languages": null}, "macro.dbt.default__dateadd": {"name": "default__dateadd", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/dateadd.sql", "original_file_path": "macros/utils/dateadd.sql", "unique_id": "macro.dbt.default__dateadd", "macro_sql": "{% macro default__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_date_or_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6286333, "supported_languages": null}, "macro.dbt.cast": {"name": "cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.cast", "macro_sql": "{% macro cast(field, type) %}\n {{ return(adapter.dispatch('cast', 'dbt') (field, type)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6291578, "supported_languages": null}, "macro.dbt.default__cast": {"name": "default__cast", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/cast.sql", "original_file_path": "macros/utils/cast.sql", "unique_id": "macro.dbt.default__cast", "macro_sql": "{% macro default__cast(field, type) %}\n cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6294522, "supported_languages": null}, "macro.dbt.length": {"name": "length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.length", "macro_sql": "{% macro length(expression) -%}\n {{ return(adapter.dispatch('length', 'dbt') (expression)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__length"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6300373, "supported_languages": null}, "macro.dbt.default__length": {"name": "default__length", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/length.sql", "original_file_path": "macros/utils/length.sql", "unique_id": "macro.dbt.default__length", "macro_sql": "{% macro default__length(expression) %}\n\n length(\n {{ expression }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6302528, "supported_languages": null}, "macro.dbt.array_concat": {"name": "array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.array_concat", "macro_sql": "{% macro array_concat(array_1, array_2) -%}\n {{ return(adapter.dispatch('array_concat', 'dbt')(array_1, array_2)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6307943, "supported_languages": null}, "macro.dbt.default__array_concat": {"name": "default__array_concat", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_concat.sql", "original_file_path": "macros/utils/array_concat.sql", "unique_id": "macro.dbt.default__array_concat", "macro_sql": "{% macro default__array_concat(array_1, array_2) -%}\n array_cat({{ array_1 }}, {{ array_2 }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.631061, "supported_languages": null}, "macro.dbt.type_string": {"name": "type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_string", "macro_sql": "\n\n{%- macro type_string() -%}\n {{ return(adapter.dispatch('type_string', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6323085, "supported_languages": null}, "macro.dbt.default__type_string": {"name": "default__type_string", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_string", "macro_sql": "{% macro default__type_string() %}\n {{ return(api.Column.translate_type(\"string\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.63265, "supported_languages": null}, "macro.dbt.type_timestamp": {"name": "type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_timestamp", "macro_sql": "\n\n{%- macro type_timestamp() -%}\n {{ return(adapter.dispatch('type_timestamp', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.632967, "supported_languages": null}, "macro.dbt.default__type_timestamp": {"name": "default__type_timestamp", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_timestamp", "macro_sql": "{% macro default__type_timestamp() %}\n {{ return(api.Column.translate_type(\"timestamp\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6332576, "supported_languages": null}, "macro.dbt.type_float": {"name": "type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_float", "macro_sql": "\n\n{%- macro type_float() -%}\n {{ return(adapter.dispatch('type_float', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6335993, "supported_languages": null}, "macro.dbt.default__type_float": {"name": "default__type_float", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_float", "macro_sql": "{% macro default__type_float() %}\n {{ return(api.Column.translate_type(\"float\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6338952, "supported_languages": null}, "macro.dbt.type_numeric": {"name": "type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_numeric", "macro_sql": "\n\n{%- macro type_numeric() -%}\n {{ return(adapter.dispatch('type_numeric', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6342094, "supported_languages": null}, "macro.dbt.default__type_numeric": {"name": "default__type_numeric", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_numeric", "macro_sql": "{% macro default__type_numeric() %}\n {{ return(api.Column.numeric_type(\"numeric\", 28, 6)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6345809, "supported_languages": null}, "macro.dbt.type_bigint": {"name": "type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_bigint", "macro_sql": "\n\n{%- macro type_bigint() -%}\n {{ return(adapter.dispatch('type_bigint', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_bigint"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6349068, "supported_languages": null}, "macro.dbt.default__type_bigint": {"name": "default__type_bigint", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_bigint", "macro_sql": "{% macro default__type_bigint() %}\n {{ return(api.Column.translate_type(\"bigint\")) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6352131, "supported_languages": null}, "macro.dbt.type_int": {"name": "type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_int", "macro_sql": "\n\n{%- macro type_int() -%}\n {{ return(adapter.dispatch('type_int', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.63556, "supported_languages": null}, "macro.dbt.default__type_int": {"name": "default__type_int", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_int", "macro_sql": "{%- macro default__type_int() -%}\n {{ return(api.Column.translate_type(\"integer\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6358485, "supported_languages": null}, "macro.dbt.type_boolean": {"name": "type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.type_boolean", "macro_sql": "\n\n{%- macro type_boolean() -%}\n {{ return(adapter.dispatch('type_boolean', 'dbt')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6361587, "supported_languages": null}, "macro.dbt.default__type_boolean": {"name": "default__type_boolean", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/data_types.sql", "original_file_path": "macros/utils/data_types.sql", "unique_id": "macro.dbt.default__type_boolean", "macro_sql": "{%- macro default__type_boolean() -%}\n {{ return(api.Column.translate_type(\"boolean\")) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6364653, "supported_languages": null}, "macro.dbt.array_append": {"name": "array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.array_append", "macro_sql": "{% macro array_append(array, new_element) -%}\n {{ return(adapter.dispatch('array_append', 'dbt')(array, new_element)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__array_append"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6370122, "supported_languages": null}, "macro.dbt.default__array_append": {"name": "default__array_append", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/array_append.sql", "original_file_path": "macros/utils/array_append.sql", "unique_id": "macro.dbt.default__array_append", "macro_sql": "{% macro default__array_append(array, new_element) -%}\n array_append({{ array }}, {{ new_element }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6372807, "supported_languages": null}, "macro.dbt.except": {"name": "except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.except", "macro_sql": "{% macro except() %}\n {{ return(adapter.dispatch('except', 'dbt')()) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6378584, "supported_languages": null}, "macro.dbt.default__except": {"name": "default__except", "resource_type": "macro", "package_name": "dbt", "path": "macros/utils/except.sql", "original_file_path": "macros/utils/except.sql", "unique_id": "macro.dbt.default__except", "macro_sql": "{% macro default__except() %}\n\n except\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.638023, "supported_languages": null}, "macro.dbt.get_replace_sql": {"name": "get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.get_replace_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6390424, "supported_languages": null}, "macro.dbt.default__get_replace_sql": {"name": "default__get_replace_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/replace.sql", "original_file_path": "macros/relations/replace.sql", "unique_id": "macro.dbt.default__get_replace_sql", "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 %}", "depends_on": {"macros": ["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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6413605, "supported_languages": null}, "macro.dbt.drop_schema_named": {"name": "drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.drop_schema_named", "macro_sql": "{% macro drop_schema_named(schema_name) %}\n {{ return(adapter.dispatch('drop_schema_named', 'dbt') (schema_name)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_schema_named"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6418886, "supported_languages": null}, "macro.dbt.default__drop_schema_named": {"name": "default__drop_schema_named", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/schema.sql", "original_file_path": "macros/relations/schema.sql", "unique_id": "macro.dbt.default__drop_schema_named", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6423078, "supported_languages": null}, "macro.dbt.get_rename_sql": {"name": "get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.get_rename_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6431835, "supported_languages": null}, "macro.dbt.default__get_rename_sql": {"name": "default__get_rename_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__get_rename_sql", "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", "depends_on": {"macros": ["macro.dbt.get_rename_view_sql", "macro.dbt.get_rename_table_sql", "macro.dbt.get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.644038, "supported_languages": null}, "macro.dbt.rename_relation": {"name": "rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.rename_relation", "macro_sql": "{% macro rename_relation(from_relation, to_relation) -%}\n {{ return(adapter.dispatch('rename_relation', 'dbt')(from_relation, to_relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__rename_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6444635, "supported_languages": null}, "macro.dbt.default__rename_relation": {"name": "default__rename_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename.sql", "original_file_path": "macros/relations/rename.sql", "unique_id": "macro.dbt.default__rename_relation", "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.render() }} rename to {{ target_name }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.645043, "supported_languages": null}, "macro.dbt.get_drop_sql": {"name": "get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.get_drop_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6458962, "supported_languages": null}, "macro.dbt.default__get_drop_sql": {"name": "default__get_drop_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__get_drop_sql", "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.render() }} cascade\n\n {%- endif -%}\n\n{%- endmacro -%}\n\n\n", "depends_on": {"macros": ["macro.dbt.drop_view", "macro.dbt.drop_table", "macro.dbt.drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6466565, "supported_languages": null}, "macro.dbt.drop_relation": {"name": "drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation", "macro_sql": "{% macro drop_relation(relation) -%}\n {{ return(adapter.dispatch('drop_relation', 'dbt')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__drop_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.647005, "supported_languages": null}, "macro.dbt.default__drop_relation": {"name": "default__drop_relation", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.default__drop_relation", "macro_sql": "{% macro default__drop_relation(relation) -%}\n {% call statement('drop_relation', auto_begin=False) -%}\n {{ get_drop_sql(relation) }}\n {%- endcall %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.647409, "supported_languages": null}, "macro.dbt.drop_relation_if_exists": {"name": "drop_relation_if_exists", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop.sql", "original_file_path": "macros/relations/drop.sql", "unique_id": "macro.dbt.drop_relation_if_exists", "macro_sql": "{% macro drop_relation_if_exists(relation) %}\n {% if relation is not none %}\n {{ adapter.drop_relation(relation) }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6477857, "supported_languages": null}, "macro.dbt.get_create_intermediate_sql": {"name": "get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.get_create_intermediate_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_create_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6484344, "supported_languages": null}, "macro.dbt.default__get_create_intermediate_sql": {"name": "default__get_create_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_intermediate.sql", "original_file_path": "macros/relations/create_intermediate.sql", "unique_id": "macro.dbt.default__get_create_intermediate_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6489313, "supported_languages": null}, "macro.dbt.get_rename_intermediate_sql": {"name": "get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.get_rename_intermediate_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_rename_intermediate_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6495152, "supported_languages": null}, "macro.dbt.default__get_rename_intermediate_sql": {"name": "default__get_rename_intermediate_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/rename_intermediate.sql", "original_file_path": "macros/relations/rename_intermediate.sql", "unique_id": "macro.dbt.default__get_rename_intermediate_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_intermediate_relation", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.650092, "supported_languages": null}, "macro.dbt.get_drop_backup_sql": {"name": "get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.get_drop_backup_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_drop_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6506917, "supported_languages": null}, "macro.dbt.default__get_drop_backup_sql": {"name": "default__get_drop_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/drop_backup.sql", "original_file_path": "macros/relations/drop_backup.sql", "unique_id": "macro.dbt.default__get_drop_backup_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6510997, "supported_languages": null}, "macro.dbt.get_create_sql": {"name": "get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.get_create_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_create_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.651818, "supported_languages": null}, "macro.dbt.default__get_create_sql": {"name": "default__get_create_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create.sql", "original_file_path": "macros/relations/create.sql", "unique_id": "macro.dbt.default__get_create_sql", "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 -%}", "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": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.652713, "supported_languages": null}, "macro.dbt.get_create_backup_sql": {"name": "get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.get_create_backup_sql", "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", "depends_on": {"macros": ["macro.dbt.default__get_create_backup_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6533031, "supported_languages": null}, "macro.dbt.default__get_create_backup_sql": {"name": "default__get_create_backup_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/create_backup.sql", "original_file_path": "macros/relations/create_backup.sql", "unique_id": "macro.dbt.default__get_create_backup_sql", "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 -%}", "depends_on": {"macros": ["macro.dbt.make_backup_relation", "macro.dbt.get_drop_sql", "macro.dbt.get_rename_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6538322, "supported_languages": null}, "macro.dbt.get_replace_materialized_view_sql": {"name": "get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.get_replace_materialized_view_sql", "macro_sql": "{% macro get_replace_materialized_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_materialized_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_replace_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6543329, "supported_languages": null}, "macro.dbt.default__get_replace_materialized_view_sql": {"name": "default__get_replace_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/replace.sql", "original_file_path": "macros/relations/materialized_view/replace.sql", "unique_id": "macro.dbt.default__get_replace_materialized_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6546454, "supported_languages": null}, "macro.dbt.get_rename_materialized_view_sql": {"name": "get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.get_rename_materialized_view_sql", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_materialized_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6551416, "supported_languages": null}, "macro.dbt.default__get_rename_materialized_view_sql": {"name": "default__get_rename_materialized_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/rename.sql", "original_file_path": "macros/relations/materialized_view/rename.sql", "unique_id": "macro.dbt.default__get_rename_materialized_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6554487, "supported_languages": null}, "macro.dbt.drop_materialized_view": {"name": "drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.drop_materialized_view", "macro_sql": "{% macro drop_materialized_view(relation) -%}\n {{- adapter.dispatch('drop_materialized_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.655908, "supported_languages": null}, "macro.dbt.default__drop_materialized_view": {"name": "default__drop_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/drop.sql", "original_file_path": "macros/relations/materialized_view/drop.sql", "unique_id": "macro.dbt.default__drop_materialized_view", "macro_sql": "{% macro default__drop_materialized_view(relation) -%}\n drop materialized view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6561513, "supported_languages": null}, "macro.dbt.get_alter_materialized_view_as_sql": {"name": "get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_alter_materialized_view_as_sql", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_alter_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6571312, "supported_languages": null}, "macro.dbt.default__get_alter_materialized_view_as_sql": {"name": "default__get_alter_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_alter_materialized_view_as_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6575134, "supported_languages": null}, "macro.dbt.get_materialized_view_configuration_changes": {"name": "get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.get_materialized_view_configuration_changes", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_materialized_view_configuration_changes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6580436, "supported_languages": null}, "macro.dbt.default__get_materialized_view_configuration_changes": {"name": "default__get_materialized_view_configuration_changes", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/alter.sql", "original_file_path": "macros/relations/materialized_view/alter.sql", "unique_id": "macro.dbt.default__get_materialized_view_configuration_changes", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.658329, "supported_languages": null}, "macro.dbt.refresh_materialized_view": {"name": "refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.refresh_materialized_view", "macro_sql": "{% macro refresh_materialized_view(relation) %}\n {{- log('Applying REFRESH to: ' ~ relation) -}}\n {{- adapter.dispatch('refresh_materialized_view', 'dbt')(relation) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__refresh_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.658902, "supported_languages": null}, "macro.dbt.default__refresh_materialized_view": {"name": "default__refresh_materialized_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/refresh.sql", "original_file_path": "macros/relations/materialized_view/refresh.sql", "unique_id": "macro.dbt.default__refresh_materialized_view", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6591682, "supported_languages": null}, "macro.dbt.get_create_materialized_view_as_sql": {"name": "get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.get_create_materialized_view_as_sql", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_create_materialized_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.659814, "supported_languages": null}, "macro.dbt.default__get_create_materialized_view_as_sql": {"name": "default__get_create_materialized_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/materialized_view/create.sql", "original_file_path": "macros/relations/materialized_view/create.sql", "unique_id": "macro.dbt.default__get_create_materialized_view_as_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6601043, "supported_languages": null}, "macro.dbt.get_replace_table_sql": {"name": "get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.get_replace_table_sql", "macro_sql": "{% macro get_replace_table_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_table_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6606479, "supported_languages": null}, "macro.dbt.default__get_replace_table_sql": {"name": "default__get_replace_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/replace.sql", "original_file_path": "macros/relations/table/replace.sql", "unique_id": "macro.dbt.default__get_replace_table_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6609435, "supported_languages": null}, "macro.dbt.get_rename_table_sql": {"name": "get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.get_rename_table_sql", "macro_sql": "{% macro get_rename_table_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_table_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_table_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6615, "supported_languages": null}, "macro.dbt.default__get_rename_table_sql": {"name": "default__get_rename_table_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/rename.sql", "original_file_path": "macros/relations/table/rename.sql", "unique_id": "macro.dbt.default__get_rename_table_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.661813, "supported_languages": null}, "macro.dbt.drop_table": {"name": "drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.drop_table", "macro_sql": "{% macro drop_table(relation) -%}\n {{- adapter.dispatch('drop_table', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6622727, "supported_languages": null}, "macro.dbt.default__drop_table": {"name": "default__drop_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/drop.sql", "original_file_path": "macros/relations/table/drop.sql", "unique_id": "macro.dbt.default__drop_table", "macro_sql": "{% macro default__drop_table(relation) -%}\n drop table if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6625478, "supported_languages": null}, "macro.dbt.get_create_table_as_sql": {"name": "get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_create_table_as_sql", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_create_table_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6636918, "supported_languages": null}, "macro.dbt.default__get_create_table_as_sql": {"name": "default__get_create_table_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_create_table_as_sql", "macro_sql": "{% macro default__get_create_table_as_sql(temporary, relation, sql) -%}\n {{ return(create_table_as(temporary, relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6640499, "supported_languages": null}, "macro.dbt.create_table_as": {"name": "create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.create_table_as", "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 %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__create_table_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6648846, "supported_languages": null}, "macro.dbt.default__create_table_as": {"name": "default__create_table_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__create_table_as", "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 %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent", "macro.dbt.get_table_columns_and_constraints", "macro.dbt.get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6661975, "supported_languages": null}, "macro.dbt.default__get_column_names": {"name": "default__get_column_names", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_column_names", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6671844, "supported_languages": null}, "macro.dbt.get_select_subquery": {"name": "get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.get_select_subquery", "macro_sql": "{% macro get_select_subquery(sql) %}\n {{ return(adapter.dispatch('get_select_subquery', 'dbt')(sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_select_subquery"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6675806, "supported_languages": null}, "macro.dbt.default__get_select_subquery": {"name": "default__get_select_subquery", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/table/create.sql", "original_file_path": "macros/relations/table/create.sql", "unique_id": "macro.dbt.default__get_select_subquery", "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 %}", "depends_on": {"macros": ["macro.dbt.default__get_column_names"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.667928, "supported_languages": null}, "macro.dbt.get_table_columns_and_constraints": {"name": "get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_table_columns_and_constraints", "macro_sql": "{%- macro get_table_columns_and_constraints() -%}\n {{ adapter.dispatch('get_table_columns_and_constraints', 'dbt')() }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6693113, "supported_languages": null}, "macro.dbt.default__get_table_columns_and_constraints": {"name": "default__get_table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_table_columns_and_constraints", "macro_sql": "{% macro default__get_table_columns_and_constraints() -%}\n {{ return(table_columns_and_constraints()) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.table_columns_and_constraints"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6695673, "supported_languages": null}, "macro.dbt.table_columns_and_constraints": {"name": "table_columns_and_constraints", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.table_columns_and_constraints", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6707084, "supported_languages": null}, "macro.dbt.get_assert_columns_equivalent": {"name": "get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.get_assert_columns_equivalent", "macro_sql": "\n\n{%- macro get_assert_columns_equivalent(sql) -%}\n {{ adapter.dispatch('get_assert_columns_equivalent', 'dbt')(sql) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt.default__get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6710331, "supported_languages": null}, "macro.dbt.default__get_assert_columns_equivalent": {"name": "default__get_assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__get_assert_columns_equivalent", "macro_sql": "{% macro default__get_assert_columns_equivalent(sql) -%}\n {{ return(assert_columns_equivalent(sql)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6713076, "supported_languages": null}, "macro.dbt.assert_columns_equivalent": {"name": "assert_columns_equivalent", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.assert_columns_equivalent", "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 %}", "depends_on": {"macros": ["macro.dbt.get_column_schema_from_query", "macro.dbt.get_empty_schema_sql", "macro.dbt.format_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6737494, "supported_languages": null}, "macro.dbt.format_columns": {"name": "format_columns", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.format_columns", "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 %}", "depends_on": {"macros": ["macro.dbt.default__format_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6744914, "supported_languages": null}, "macro.dbt.default__format_column": {"name": "default__format_column", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/column/columns_spec_ddl.sql", "original_file_path": "macros/relations/column/columns_spec_ddl.sql", "unique_id": "macro.dbt.default__format_column", "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 -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.675151, "supported_languages": null}, "macro.dbt.get_replace_view_sql": {"name": "get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.get_replace_view_sql", "macro_sql": "{% macro get_replace_view_sql(relation, sql) %}\n {{- adapter.dispatch('get_replace_view_sql', 'dbt')(relation, sql) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_replace_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.676115, "supported_languages": null}, "macro.dbt.default__get_replace_view_sql": {"name": "default__get_replace_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__get_replace_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6764226, "supported_languages": null}, "macro.dbt.create_or_replace_view": {"name": "create_or_replace_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.create_or_replace_view", "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 %}", "depends_on": {"macros": ["macro.dbt.run_hooks", "macro.dbt.handle_existing_table", "macro.dbt.should_full_refresh", "macro.dbt.statement", "macro.dbt.get_create_view_as_sql", "macro.dbt.should_revoke", "macro.dbt.apply_grants"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6785502, "supported_languages": null}, "macro.dbt.handle_existing_table": {"name": "handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.handle_existing_table", "macro_sql": "{% macro handle_existing_table(full_refresh, old_relation) %}\n {{ adapter.dispatch('handle_existing_table', 'dbt')(full_refresh, old_relation) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.default__handle_existing_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6789312, "supported_languages": null}, "macro.dbt.default__handle_existing_table": {"name": "default__handle_existing_table", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/replace.sql", "original_file_path": "macros/relations/view/replace.sql", "unique_id": "macro.dbt.default__handle_existing_table", "macro_sql": "{% macro default__handle_existing_table(full_refresh, old_relation) %}\n {{ log(\"Dropping relation \" ~ old_relation.render() ~ \" because it is of type \" ~ old_relation.type) }}\n {{ adapter.drop_relation(old_relation) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6794024, "supported_languages": null}, "macro.dbt.get_rename_view_sql": {"name": "get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.get_rename_view_sql", "macro_sql": "{% macro get_rename_view_sql(relation, new_name) %}\n {{- adapter.dispatch('get_rename_view_sql', 'dbt')(relation, new_name) -}}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__get_rename_view_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6799068, "supported_languages": null}, "macro.dbt.default__get_rename_view_sql": {"name": "default__get_rename_view_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/rename.sql", "original_file_path": "macros/relations/view/rename.sql", "unique_id": "macro.dbt.default__get_rename_view_sql", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6801946, "supported_languages": null}, "macro.dbt.drop_view": {"name": "drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.drop_view", "macro_sql": "{% macro drop_view(relation) -%}\n {{- adapter.dispatch('drop_view', 'dbt')(relation) -}}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_postgres.postgres__drop_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.680681, "supported_languages": null}, "macro.dbt.default__drop_view": {"name": "default__drop_view", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/drop.sql", "original_file_path": "macros/relations/view/drop.sql", "unique_id": "macro.dbt.default__drop_view", "macro_sql": "{% macro default__drop_view(relation) -%}\n drop view if exists {{ relation.render() }} cascade\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6809242, "supported_languages": null}, "macro.dbt.get_create_view_as_sql": {"name": "get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.get_create_view_as_sql", "macro_sql": "{% macro get_create_view_as_sql(relation, sql) -%}\n {{ adapter.dispatch('get_create_view_as_sql', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__get_create_view_as_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6816142, "supported_languages": null}, "macro.dbt.default__get_create_view_as_sql": {"name": "default__get_create_view_as_sql", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__get_create_view_as_sql", "macro_sql": "{% macro default__get_create_view_as_sql(relation, sql) -%}\n {{ return(create_view_as(relation, sql)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.68193, "supported_languages": null}, "macro.dbt.create_view_as": {"name": "create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.create_view_as", "macro_sql": "{% macro create_view_as(relation, sql) -%}\n {{ adapter.dispatch('create_view_as', 'dbt')(relation, sql) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.default__create_view_as"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.682288, "supported_languages": null}, "macro.dbt.default__create_view_as": {"name": "default__create_view_as", "resource_type": "macro", "package_name": "dbt", "path": "macros/relations/view/create.sql", "original_file_path": "macros/relations/view/create.sql", "unique_id": "macro.dbt.default__create_view_as", "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.render() }}\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 %}", "depends_on": {"macros": ["macro.dbt.get_assert_columns_equivalent"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6832561, "supported_languages": null}, "macro.dbt.statement": {"name": "statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.statement", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6857212, "supported_languages": null}, "macro.dbt.noop_statement": {"name": "noop_statement", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.noop_statement", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.686838, "supported_languages": null}, "macro.dbt.run_query": {"name": "run_query", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/statement.sql", "original_file_path": "macros/etc/statement.sql", "unique_id": "macro.dbt.run_query", "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 %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.687576, "supported_languages": null}, "macro.dbt.convert_datetime": {"name": "convert_datetime", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.convert_datetime", "macro_sql": "{% macro convert_datetime(date_str, date_fmt) %}\n\n {% set error_msg -%}\n The provided partition date '{{ date_str }}' does not match the expected format '{{ date_fmt }}'\n {%- endset %}\n\n {% set res = try_or_compiler_error(error_msg, modules.datetime.datetime.strptime, date_str.strip(), date_fmt) %}\n {{ return(res) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6895611, "supported_languages": null}, "macro.dbt.dates_in_range": {"name": "dates_in_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.dates_in_range", "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 %}", "depends_on": {"macros": ["macro.dbt.convert_datetime"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6927388, "supported_languages": null}, "macro.dbt.partition_range": {"name": "partition_range", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.partition_range", "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 %}", "depends_on": {"macros": ["macro.dbt.dates_in_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.69438, "supported_languages": null}, "macro.dbt.py_current_timestring": {"name": "py_current_timestring", "resource_type": "macro", "package_name": "dbt", "path": "macros/etc/datetime.sql", "original_file_path": "macros/etc/datetime.sql", "unique_id": "macro.dbt.py_current_timestring", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.694864, "supported_languages": null}, "macro.dbt.test_unique": {"name": "test_unique", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_unique", "macro_sql": "{% test unique(model, column_name) %}\n {% set macro = adapter.dispatch('test_unique', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_unique"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6962235, "supported_languages": null}, "macro.dbt.test_not_null": {"name": "test_not_null", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_not_null", "macro_sql": "{% test not_null(model, column_name) %}\n {% set macro = adapter.dispatch('test_not_null', 'dbt') %}\n {{ macro(model, column_name) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt.default__test_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6971056, "supported_languages": null}, "macro.dbt.test_accepted_values": {"name": "test_accepted_values", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_accepted_values", "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 %}", "depends_on": {"macros": ["macro.dbt.default__test_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6981385, "supported_languages": null}, "macro.dbt.test_relationships": {"name": "test_relationships", "resource_type": "macro", "package_name": "dbt", "path": "tests/generic/builtin.sql", "original_file_path": "tests/generic/builtin.sql", "unique_id": "macro.dbt.test_relationships", "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 %}", "depends_on": {"macros": ["macro.dbt.default__test_relationships"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6987858, "supported_languages": null}, "macro.fivetran_utils.extract_url_parameter": {"name": "extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.extract_url_parameter", "macro_sql": "{% macro extract_url_parameter(field, url_parameter) -%}\n\n{{ adapter.dispatch('extract_url_parameter', 'fivetran_utils') (field, url_parameter) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__extract_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6994152, "supported_languages": null}, "macro.fivetran_utils.default__extract_url_parameter": {"name": "default__extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.default__extract_url_parameter", "macro_sql": "{% macro default__extract_url_parameter(field, url_parameter) -%}\n\n{{ dbt_utils.get_url_parameter(field, url_parameter) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.6998546, "supported_languages": null}, "macro.fivetran_utils.spark__extract_url_parameter": {"name": "spark__extract_url_parameter", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/extract_url_parameter.sql", "original_file_path": "macros/extract_url_parameter.sql", "unique_id": "macro.fivetran_utils.spark__extract_url_parameter", "macro_sql": "{% macro spark__extract_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"=([^&]+)'\" -%}\nnullif(regexp_extract({{ field }}, {{ formatted_url_parameter }}, 1), '')\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.700317, "supported_languages": null}, "macro.fivetran_utils.add_pass_through_columns": {"name": "add_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_pass_through_columns.sql", "original_file_path": "macros/add_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.add_pass_through_columns", "macro_sql": "{% macro add_pass_through_columns(base_columns, pass_through_var) %}\n\n {% if pass_through_var %}\n\n {% for column in pass_through_var %}\n\n {% if column is mapping %}\n\n {% if column.alias %}\n\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n \n {% endif %}\n\n {% else %}\n\n {% do base_columns.append({ \"name\": column, \"datatype\": dbt.type_string()}) %}\n\n {% endif %}\n\n {% endfor %}\n\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7031002, "supported_languages": null}, "macro.fivetran_utils.fill_pass_through_columns": {"name": "fill_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_pass_through_columns.sql", "original_file_path": "macros/fill_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.fill_pass_through_columns", "macro_sql": "{% macro fill_pass_through_columns(pass_through_variable) %}\n\n{% if var(pass_through_variable) %}\n {% for field in var(pass_through_variable) %}\n {% if field is mapping %}\n {% if field.transform_sql %}\n , {{ field.transform_sql }} as {{ field.alias if field.alias else field.name }}\n {% else %}\n , {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% else %}\n , {{ field }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7055657, "supported_languages": null}, "macro.fivetran_utils.seed_data_helper": {"name": "seed_data_helper", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/seed_data_helper.sql", "original_file_path": "macros/seed_data_helper.sql", "unique_id": "macro.fivetran_utils.seed_data_helper", "macro_sql": "{% macro seed_data_helper(seed_name, warehouses) %}\n\n{% if target.type in warehouses %}\n {% for w in warehouses %}\n {% if target.type == w %}\n {{ return(ref(seed_name ~ \"_\" ~ w ~ \"\")) }}\n {% endif %}\n {% endfor %}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.706836, "supported_languages": null}, "macro.fivetran_utils.string_agg": {"name": "string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.string_agg", "macro_sql": "{% macro string_agg(field_to_agg, delimiter) -%}\n\n{{ adapter.dispatch('string_agg', 'fivetran_utils') (field_to_agg, delimiter) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__string_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7075734, "supported_languages": null}, "macro.fivetran_utils.default__string_agg": {"name": "default__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.default__string_agg", "macro_sql": "{% macro default__string_agg(field_to_agg, delimiter) %}\n string_agg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7078648, "supported_languages": null}, "macro.fivetran_utils.snowflake__string_agg": {"name": "snowflake__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.snowflake__string_agg", "macro_sql": "{% macro snowflake__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7081335, "supported_languages": null}, "macro.fivetran_utils.redshift__string_agg": {"name": "redshift__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.redshift__string_agg", "macro_sql": "{% macro redshift__string_agg(field_to_agg, delimiter) %}\n listagg({{ field_to_agg }}, {{ delimiter }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7084208, "supported_languages": null}, "macro.fivetran_utils.spark__string_agg": {"name": "spark__string_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/string_agg.sql", "original_file_path": "macros/string_agg.sql", "unique_id": "macro.fivetran_utils.spark__string_agg", "macro_sql": "{% macro spark__string_agg(field_to_agg, delimiter) %}\n -- collect set will remove duplicates\n replace(replace(replace(cast( collect_set({{ field_to_agg }}) as string), '[', ''), ']', ''), ', ', {{ delimiter }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7086945, "supported_languages": null}, "macro.fivetran_utils.json_parse": {"name": "json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.json_parse", "macro_sql": "{% macro json_parse(string, string_path) -%}\n\n{{ adapter.dispatch('json_parse', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_parse"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7098455, "supported_languages": null}, "macro.fivetran_utils.default__json_parse": {"name": "default__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.default__json_parse", "macro_sql": "{% macro default__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7103612, "supported_languages": null}, "macro.fivetran_utils.redshift__json_parse": {"name": "redshift__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.redshift__json_parse", "macro_sql": "{% macro redshift__json_parse(string, string_path) %}\n\n json_extract_path_text({{string}}, {%- for s in string_path -%}'{{ s }}'{%- if not loop.last -%},{%- endif -%}{%- endfor -%} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7108755, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_parse": {"name": "bigquery__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.bigquery__json_parse", "macro_sql": "{% macro bigquery__json_parse(string, string_path) %}\n\n \n json_extract_scalar({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7113707, "supported_languages": null}, "macro.fivetran_utils.postgres__json_parse": {"name": "postgres__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.postgres__json_parse", "macro_sql": "{% macro postgres__json_parse(string, string_path) %}\n\n {{string}}::json #>> '{ {%- for s in string_path -%}{{ s }}{%- if not loop.last -%},{%- endif -%}{%- endfor -%} }'\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7118945, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_parse": {"name": "snowflake__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.snowflake__json_parse", "macro_sql": "{% macro snowflake__json_parse(string, string_path) %}\n\n parse_json( {{string}} ) {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.71244, "supported_languages": null}, "macro.fivetran_utils.spark__json_parse": {"name": "spark__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.spark__json_parse", "macro_sql": "{% macro spark__json_parse(string, string_path) %}\n\n {{string}} : {%- for s in string_path -%}{% if s is number %}[{{ s }}]{% else %}['{{ s }}']{% endif %}{%- endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.712959, "supported_languages": null}, "macro.fivetran_utils.sqlserver__json_parse": {"name": "sqlserver__json_parse", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_parse.sql", "original_file_path": "macros/json_parse.sql", "unique_id": "macro.fivetran_utils.sqlserver__json_parse", "macro_sql": "{% macro sqlserver__json_parse(string, string_path) %}\n\n json_value({{string}}, '$.{%- for s in string_path -%}{{ s }}{%- if not loop.last -%}.{%- endif -%}{%- endfor -%} ')\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.713448, "supported_languages": null}, "macro.fivetran_utils.drop_schemas_automation": {"name": "drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.drop_schemas_automation", "macro_sql": "{% macro drop_schemas_automation(drop_target_schema=true) %}\n {{ return(adapter.dispatch('drop_schemas_automation', 'fivetran_utils')(drop_target_schema)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__drop_schemas_automation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7142687, "supported_languages": null}, "macro.fivetran_utils.default__drop_schemas_automation": {"name": "default__drop_schemas_automation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/drop_schemas_automation.sql", "original_file_path": "macros/drop_schemas_automation.sql", "unique_id": "macro.fivetran_utils.default__drop_schemas_automation", "macro_sql": "{% macro default__drop_schemas_automation(drop_target_schema=true) %}\n\n{% set fetch_list_sql %}\n {% if target.type not in ('databricks', 'spark') %}\n select schema_name\n from \n {{ wrap_in_quotes(target.database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like '{{ target.schema | lower }}{%- if not drop_target_schema -%}_{%- endif -%}%'\n {% else %}\n SHOW SCHEMAS LIKE '{{ target.schema }}{%- if not drop_target_schema -%}_{%- endif -%}*'\n {% endif %}\n{% endset %}\n\n{% set results = run_query(fetch_list_sql) %}\n\n{% if execute %}\n {% set results_list = results.columns[0].values() %}\n{% else %}\n {% set results_list = [] %}\n{% endif %}\n\n{% for schema_to_drop in results_list %}\n {% do adapter.drop_schema(api.Relation.create(database=target.database, schema=schema_to_drop)) %}\n {{ print('Schema ' ~ schema_to_drop ~ ' successfully dropped from the ' ~ target.database ~ ' database.\\n')}}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.wrap_in_quotes", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.716338, "supported_languages": null}, "macro.fivetran_utils.fivetran_date_spine": {"name": "fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.fivetran_date_spine", "macro_sql": "{% macro fivetran_date_spine(datepart, start_date, end_date) -%}\n\n{{ return(adapter.dispatch('fivetran_date_spine', 'fivetran_utils') (datepart, start_date, end_date)) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__fivetran_date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7173588, "supported_languages": null}, "macro.fivetran_utils.default__fivetran_date_spine": {"name": "default__fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.default__fivetran_date_spine", "macro_sql": "{% macro default__fivetran_date_spine(datepart, start_date, end_date) %}\n\n {{ dbt_utils.date_spine(datepart, start_date, end_date) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7177184, "supported_languages": null}, "macro.fivetran_utils.sqlserver__fivetran_date_spine": {"name": "sqlserver__fivetran_date_spine", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fivetran_date_spine.sql", "original_file_path": "macros/fivetran_date_spine.sql", "unique_id": "macro.fivetran_utils.sqlserver__fivetran_date_spine", "macro_sql": "{% macro sqlserver__fivetran_date_spine(datepart, start_date, end_date) -%}\n\n {% set date_spine_query %}\n with\n\n l0 as (\n\n select c\n from (select 1 union all select 1) as d(c)\n\n ),\n l1 as (\n\n select\n 1 as c\n from l0 as a\n cross join l0 as b\n\n ),\n\n l2 as (\n\n select 1 as c\n from l1 as a\n cross join l1 as b\n ),\n\n l3 as (\n\n select 1 as c\n from l2 as a\n cross join l2 as b\n ),\n\n l4 as (\n\n select 1 as c\n from l3 as a\n cross join l3 as b\n ),\n\n l5 as (\n\n select 1 as c\n from l4 as a\n cross join l4 as b\n ),\n\n nums as (\n\n select row_number() over (order by (select null)) as rownum\n from l5\n ),\n\n rawdata as (\n\n select top ({{dbt.datediff(start_date, end_date, datepart)}}) rownum -1 as n\n from nums\n order by rownum\n ),\n\n all_periods as (\n\n select (\n {{\n dbt.dateadd(\n datepart,\n 'n',\n start_date\n )\n }}\n ) as date_{{datepart}}\n from rawdata\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 order by 1\n\n {% endset %}\n\n {% set results = run_query(date_spine_query) %}\n\n {% if execute %}\n\n {% set results_list = results.columns[0].values() %}\n \n {% else %}\n\n {% set results_list = [] %}\n\n {% endif %}\n\n {%- for date_field in results_list %}\n select cast('{{ date_field }}' as date) as date_{{datepart}} {{ 'union all ' if not loop.last else '' }}\n {% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.datediff", "macro.dbt.dateadd", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7192812, "supported_languages": null}, "macro.fivetran_utils.source_relation": {"name": "source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.source_relation", "macro_sql": "{% macro source_relation(union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('source_relation', 'fivetran_utils') (union_schema_variable, union_database_variable) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__source_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.72002, "supported_languages": null}, "macro.fivetran_utils.default__source_relation": {"name": "default__source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/source_relation.sql", "original_file_path": "macros/source_relation.sql", "unique_id": "macro.fivetran_utils.default__source_relation", "macro_sql": "{% macro default__source_relation(union_schema_variable, union_database_variable) %}\n\n{% if var(union_schema_variable, none) %}\n, case\n {% for schema in var(union_schema_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%.{{ schema|lower }}.%' then '{{ schema|lower }}'\n {% endfor %}\n end as source_relation\n{% elif var(union_database_variable, none) %}\n, case\n {% for database in var(union_database_variable) %}\n when lower(replace(replace(_dbt_source_relation,'\"',''),'`','')) like '%{{ database|lower }}.%' then '{{ database|lower }}'\n {% endfor %}\n end as source_relation\n{% else %}\n, cast('' as {{ dbt.type_string() }}) as source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.721132, "supported_languages": null}, "macro.fivetran_utils.snowflake_seed_data": {"name": "snowflake_seed_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/snowflake_seed_data.sql", "original_file_path": "macros/snowflake_seed_data.sql", "unique_id": "macro.fivetran_utils.snowflake_seed_data", "macro_sql": "{% macro snowflake_seed_data(seed_name) %}\n\n{% if target.type == 'snowflake' %}\n{{ return(ref(seed_name ~ '_snowflake')) }}\n{% else %}\n{{ return(ref(seed_name)) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7219598, "supported_languages": null}, "macro.fivetran_utils.enabled_vars": {"name": "enabled_vars", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars.sql", "original_file_path": "macros/enabled_vars.sql", "unique_id": "macro.fivetran_utils.enabled_vars", "macro_sql": "{% macro enabled_vars(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, True) == False %}\n {{ return(False) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(True) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7227466, "supported_languages": null}, "macro.fivetran_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, aliases=none, column_override=none, include=[], exclude=[], source_column_name=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n {%- set source_column_name = source_column_name if source_column_name is not none else '_dbt_source_relation' -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column in exclude -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column not in include -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ aliases[loop.index0] if aliases else relation }}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7296205, "supported_languages": null}, "macro.fivetran_utils.union_tables": {"name": "union_tables", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_relations.sql", "original_file_path": "macros/union_relations.sql", "unique_id": "macro.fivetran_utils.union_tables", "macro_sql": "{%- macro union_tables(tables, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_table') -%}\n\n {%- do exceptions.warn(\"Warning: the `union_tables` macro is no longer supported and will be deprecated in a future release of dbt-utils. Use the `union_relations` macro instead\") -%}\n\n {{ return(dbt_utils.union_relations(tables, column_override, include, exclude, source_column_name)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7303178, "supported_languages": null}, "macro.fivetran_utils.array_agg": {"name": "array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.array_agg", "macro_sql": "{% macro array_agg(field_to_agg) -%}\n\n{{ adapter.dispatch('array_agg', 'fivetran_utils') (field_to_agg) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__array_agg"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7308545, "supported_languages": null}, "macro.fivetran_utils.default__array_agg": {"name": "default__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.default__array_agg", "macro_sql": "{% macro default__array_agg(field_to_agg) %}\n array_agg({{ field_to_agg }})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7310848, "supported_languages": null}, "macro.fivetran_utils.redshift__array_agg": {"name": "redshift__array_agg", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/array_agg.sql", "original_file_path": "macros/array_agg.sql", "unique_id": "macro.fivetran_utils.redshift__array_agg", "macro_sql": "{% macro redshift__array_agg(field_to_agg) %}\n listagg({{ field_to_agg }}, ',')\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7312934, "supported_languages": null}, "macro.fivetran_utils.add_dbt_source_relation": {"name": "add_dbt_source_relation", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/add_dbt_source_relation.sql", "original_file_path": "macros/add_dbt_source_relation.sql", "unique_id": "macro.fivetran_utils.add_dbt_source_relation", "macro_sql": "{% macro add_dbt_source_relation() %}\n\n{% if var('union_schemas', none) or var('union_databases', none) %}\n, _dbt_source_relation\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7318513, "supported_languages": null}, "macro.fivetran_utils.timestamp_diff": {"name": "timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.timestamp_diff", "macro_sql": "{% macro timestamp_diff(first_date, second_date, datepart) %}\n {{ adapter.dispatch('timestamp_diff', 'fivetran_utils')(first_date, second_date, datepart) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_diff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7332146, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_diff": {"name": "default__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.default__timestamp_diff", "macro_sql": "{% macro default__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7335715, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_diff": {"name": "redshift__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_diff", "macro_sql": "{% macro redshift__timestamp_diff(first_date, second_date, datepart) %}\n\n datediff(\n {{ datepart }},\n {{ first_date }},\n {{ second_date }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7338998, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_diff": {"name": "bigquery__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_diff", "macro_sql": "{% macro bigquery__timestamp_diff(first_date, second_date, datepart) %}\n\n timestamp_diff(\n {{second_date}},\n {{first_date}},\n {{datepart}}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7342088, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_diff": {"name": "postgres__timestamp_diff", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_diff.sql", "original_file_path": "macros/timestamp_diff.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_diff", "macro_sql": "{% macro postgres__timestamp_diff(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 ({{ dbt.datediff(first_date, second_date, 'year') }} * 4 + date_part('quarter', ({{second_date}})::date) - date_part('quarter', ({{first_date}})::date))\n {% elif datepart == 'month' %}\n ({{ dbt.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 ({{ dbt.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 ({{ dbt.datediff(first_date, second_date, 'day') }} * 24 + date_part('hour', ({{second_date}})::timestamp) - date_part('hour', ({{first_date}})::timestamp))\n {% elif datepart == 'minute' %}\n ({{ dbt.datediff(first_date, second_date, 'hour') }} * 60 + date_part('minute', ({{second_date}})::timestamp) - date_part('minute', ({{first_date}})::timestamp))\n {% elif datepart == 'second' %}\n ({{ dbt.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 ({{ dbt.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 ({{ dbt.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 %}", "depends_on": {"macros": ["macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7375548, "supported_languages": null}, "macro.fivetran_utils.empty_variable_warning": {"name": "empty_variable_warning", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/empty_variable_warning.sql", "original_file_path": "macros/empty_variable_warning.sql", "unique_id": "macro.fivetran_utils.empty_variable_warning", "macro_sql": "{% macro empty_variable_warning(variable, downstream_model) %}\n\n{% if not var(variable) %}\n{{ log(\n \"\"\"\n Warning: You have passed an empty list to the \"\"\" ~ variable ~ \"\"\".\n As a result, you won't see the history of any columns in the \"\"\" ~ downstream_model ~ \"\"\" model.\n \"\"\",\n info=True\n) }}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.73831, "supported_languages": null}, "macro.fivetran_utils.first_value": {"name": "first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.first_value", "macro_sql": "{% macro first_value(first_value_field, partition_field, order_by_field, order=\"asc\") -%}\n\n{{ adapter.dispatch('first_value', 'fivetran_utils') (first_value_field, partition_field, order_by_field, order) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__first_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.739081, "supported_languages": null}, "macro.fivetran_utils.default__first_value": {"name": "default__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.default__first_value", "macro_sql": "{% macro default__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7395337, "supported_languages": null}, "macro.fivetran_utils.redshift__first_value": {"name": "redshift__first_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/first_value.sql", "original_file_path": "macros/first_value.sql", "unique_id": "macro.fivetran_utils.redshift__first_value", "macro_sql": "{% macro redshift__first_value(first_value_field, partition_field, order_by_field, order=\"asc\") %}\n\n first_value( {{ first_value_field }} ignore nulls ) over (partition by {{ partition_field }} order by {{ order_by_field }} {{ order }} , {{ partition_field }} rows unbounded preceding )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7399778, "supported_languages": null}, "macro.fivetran_utils.fill_staging_columns": {"name": "fill_staging_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.fill_staging_columns", "macro_sql": "{% macro fill_staging_columns(source_columns, staging_columns) -%}\n\n{%- set source_column_names = source_columns|map(attribute='name')|map('lower')|list -%}\n\n{%- for column in staging_columns %}\n {% if column.name|lower in source_column_names -%}\n {{ fivetran_utils.quote_column(column) }} as \n {%- if 'alias' in column %} {{ column.alias }} {% else %} {{ fivetran_utils.quote_column(column) }} {%- endif -%}\n {%- else -%}\n cast(null as {{ column.datatype }})\n {%- if 'alias' in column %} as {{ column.alias }} {% else %} as {{ fivetran_utils.quote_column(column) }} {% endif -%}\n {%- endif -%}\n {%- if not loop.last -%} , {% endif -%}\n{% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.quote_column"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.742002, "supported_languages": null}, "macro.fivetran_utils.quote_column": {"name": "quote_column", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/fill_staging_columns.sql", "original_file_path": "macros/fill_staging_columns.sql", "unique_id": "macro.fivetran_utils.quote_column", "macro_sql": "{% macro quote_column(column) %}\n {% if 'quote' in column %}\n {% if column.quote %}\n {% if target.type in ('bigquery', 'spark', 'databricks') %}\n `{{ column.name }}`\n {% elif target.type == 'snowflake' %}\n \"{{ column.name | upper }}\"\n {% else %}\n \"{{ column.name }}\"\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n {% else %}\n {{ column.name }}\n {% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7430902, "supported_languages": null}, "macro.fivetran_utils.pivot_json_extract": {"name": "pivot_json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/pivot_json_extract.sql", "original_file_path": "macros/pivot_json_extract.sql", "unique_id": "macro.fivetran_utils.pivot_json_extract", "macro_sql": "{% macro pivot_json_extract(string, list_of_properties) %}\n\n{%- for property in list_of_properties -%}\n{%- if property is mapping -%}\nreplace( {{ fivetran_utils.json_extract(string, property.name) }}, '\"', '') as {{ property.alias if property.alias else property.name | replace(' ', '_') | replace('.', '_') | lower }}\n\n{%- else -%}\nreplace( {{ fivetran_utils.json_extract(string, property) }}, '\"', '') as {{ property | replace(' ', '_') | lower }}\n\n{%- endif -%}\n{%- if not loop.last -%},{%- endif %}\n{% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7445488, "supported_languages": null}, "macro.fivetran_utils.collect_freshness": {"name": "collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.collect_freshness", "macro_sql": "{% macro collect_freshness(source, loaded_at_field, filter) %}\n {{ return(adapter.dispatch('collect_freshness')(source, loaded_at_field, filter))}}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__collect_freshness"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7454603, "supported_languages": null}, "macro.fivetran_utils.default__collect_freshness": {"name": "default__collect_freshness", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/collect_freshness.sql", "original_file_path": "macros/collect_freshness.sql", "unique_id": "macro.fivetran_utils.default__collect_freshness", "macro_sql": "{% macro default__collect_freshness(source, loaded_at_field, filter) %}\n {% call statement('collect_freshness', fetch_result=True, auto_begin=False) -%}\n\n {%- set enabled_array = [] -%}\n {% for node in graph.sources.values() %}\n {% if node.identifier == source.identifier %}\n {% if (node.meta['is_enabled'] | default(true)) %}\n {%- do enabled_array.append(1) -%}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% set is_enabled = (enabled_array != []) %}\n\n select\n {% if is_enabled %}\n max({{ loaded_at_field }})\n {% else %} \n {{ current_timestamp() }} {% endif %} as max_loaded_at,\n {{ current_timestamp() }} as snapshotted_at\n\n {% if is_enabled %}\n from {{ source }}\n {% if filter %}\n where {{ filter }}\n {% endif %}\n {% endif %}\n\n {% endcall %}\n\n {% if dbt_version.split('.') | map('int') | list >= [1, 5, 0] %}\n {{ return(load_result('collect_freshness')) }}\n {% else %}\n {{ return(load_result('collect_freshness').table) }}\n {% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.current_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7477672, "supported_languages": null}, "macro.fivetran_utils.json_extract": {"name": "json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.json_extract", "macro_sql": "{% macro json_extract(string, string_path) -%}\n\n{{ adapter.dispatch('json_extract', 'fivetran_utils') (string, string_path) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__json_extract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7485723, "supported_languages": null}, "macro.fivetran_utils.default__json_extract": {"name": "default__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.default__json_extract", "macro_sql": "{% macro default__json_extract(string, string_path) %}\n\n json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} )\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.748886, "supported_languages": null}, "macro.fivetran_utils.snowflake__json_extract": {"name": "snowflake__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.snowflake__json_extract", "macro_sql": "{% macro snowflake__json_extract(string, string_path) %}\n\n json_extract_path_text(try_parse_json( {{string}} ), {{ \"'\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7492003, "supported_languages": null}, "macro.fivetran_utils.redshift__json_extract": {"name": "redshift__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.redshift__json_extract", "macro_sql": "{% macro redshift__json_extract(string, string_path) %}\n\n case when is_valid_json( {{string}} ) then json_extract_path_text({{string}}, {{ \"'\" ~ string_path ~ \"'\" }} ) else null end\n \n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7495685, "supported_languages": null}, "macro.fivetran_utils.bigquery__json_extract": {"name": "bigquery__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.bigquery__json_extract", "macro_sql": "{% macro bigquery__json_extract(string, string_path) %}\n\n json_extract_scalar({{string}}, {{ \"'$.\" ~ string_path ~ \"'\" }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.749872, "supported_languages": null}, "macro.fivetran_utils.postgres__json_extract": {"name": "postgres__json_extract", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/json_extract.sql", "original_file_path": "macros/json_extract.sql", "unique_id": "macro.fivetran_utils.postgres__json_extract", "macro_sql": "{% macro postgres__json_extract(string, string_path) %}\n\n {{string}}::json->>{{\"'\" ~ string_path ~ \"'\" }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7501695, "supported_languages": null}, "macro.fivetran_utils.timestamp_add": {"name": "timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.timestamp_add", "macro_sql": "{% macro timestamp_add(datepart, interval, from_timestamp) -%}\n\n{{ adapter.dispatch('timestamp_add', 'fivetran_utils') (datepart, interval, from_timestamp) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__timestamp_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.750946, "supported_languages": null}, "macro.fivetran_utils.default__timestamp_add": {"name": "default__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.default__timestamp_add", "macro_sql": "{% macro default__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestampadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.751267, "supported_languages": null}, "macro.fivetran_utils.bigquery__timestamp_add": {"name": "bigquery__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.bigquery__timestamp_add", "macro_sql": "{% macro bigquery__timestamp_add(datepart, interval, from_timestamp) %}\n\n timestamp_add({{ from_timestamp }}, interval {{ interval }} {{ datepart }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.751724, "supported_languages": null}, "macro.fivetran_utils.redshift__timestamp_add": {"name": "redshift__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.redshift__timestamp_add", "macro_sql": "{% macro redshift__timestamp_add(datepart, interval, from_timestamp) %}\n\n dateadd(\n {{ datepart }},\n {{ interval }},\n {{ from_timestamp }}\n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.752442, "supported_languages": null}, "macro.fivetran_utils.postgres__timestamp_add": {"name": "postgres__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.postgres__timestamp_add", "macro_sql": "{% macro postgres__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ from_timestamp }} + ((interval '1 {{ datepart }}') * ({{ interval }}))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.753027, "supported_languages": null}, "macro.fivetran_utils.spark__timestamp_add": {"name": "spark__timestamp_add", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/timestamp_add.sql", "original_file_path": "macros/timestamp_add.sql", "unique_id": "macro.fivetran_utils.spark__timestamp_add", "macro_sql": "{% macro spark__timestamp_add(datepart, interval, from_timestamp) %}\n\n {{ dbt.dateadd(datepart, interval, from_timestamp) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7536721, "supported_languages": null}, "macro.fivetran_utils.dummy_coalesce_value": {"name": "dummy_coalesce_value", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/dummy_coalesce_value.sql", "original_file_path": "macros/dummy_coalesce_value.sql", "unique_id": "macro.fivetran_utils.dummy_coalesce_value", "macro_sql": "{% macro dummy_coalesce_value(column) %}\n\n{% set coalesce_value = {\n 'STRING': \"'DUMMY_STRING'\",\n 'BOOLEAN': 'null',\n 'INT': 999999999,\n 'FLOAT': 999999999.99,\n 'TIMESTAMP': 'cast(\"2099-12-31\" as timestamp)',\n 'DATE': 'cast(\"2099-12-31\" as date)',\n} %}\n\n{% if column.is_float() %}\n{{ return(coalesce_value['FLOAT']) }}\n\n{% elif column.is_numeric() %}\n{{ return(coalesce_value['INT']) }}\n\n{% elif column.is_string() %}\n{{ return(coalesce_value['STRING']) }}\n\n{% elif column.data_type|lower == 'boolean' %}\n{{ return(coalesce_value['BOOLEAN']) }}\n\n{% elif 'timestamp' in column.data_type|lower %}\n{{ return(coalesce_value['TIMESTAMP']) }}\n\n{% elif 'date' in column.data_type|lower %}\n{{ return(coalesce_value['DATE']) }}\n\n{% elif 'int' in column.data_type|lower %}\n{{ return(coalesce_value['INT']) }}\n\n{% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7566524, "supported_languages": null}, "macro.fivetran_utils.calculated_fields": {"name": "calculated_fields", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/calculated_fields.sql", "original_file_path": "macros/calculated_fields.sql", "unique_id": "macro.fivetran_utils.calculated_fields", "macro_sql": "{% macro calculated_fields(variable) -%}\n\n{% if var(variable, none) %}\n {% for field in var(variable) %}\n , {{ field.transform_sql }} as {{ field.name }} \n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.757447, "supported_languages": null}, "macro.fivetran_utils.max_bool": {"name": "max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.max_bool", "macro_sql": "{% macro max_bool(boolean_field) -%}\n\n{{ adapter.dispatch('max_bool', 'fivetran_utils') (boolean_field) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__max_bool"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7579896, "supported_languages": null}, "macro.fivetran_utils.default__max_bool": {"name": "default__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.default__max_bool", "macro_sql": "{% macro default__max_bool(boolean_field) %}\n\n bool_or( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.758209, "supported_languages": null}, "macro.fivetran_utils.snowflake__max_bool": {"name": "snowflake__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.snowflake__max_bool", "macro_sql": "{% macro snowflake__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7584617, "supported_languages": null}, "macro.fivetran_utils.bigquery__max_bool": {"name": "bigquery__max_bool", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/max_bool.sql", "original_file_path": "macros/max_bool.sql", "unique_id": "macro.fivetran_utils.bigquery__max_bool", "macro_sql": "{% macro bigquery__max_bool(boolean_field) %}\n\n max( {{ boolean_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7586765, "supported_languages": null}, "macro.fivetran_utils.union_data": {"name": "union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.union_data", "macro_sql": "{%- macro union_data(table_identifier, database_variable, schema_variable, default_database, default_schema, default_variable, union_schema_variable='union_schemas', union_database_variable='union_databases') -%}\n\n{{ adapter.dispatch('union_data', 'fivetran_utils') (\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.default__union_data"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7608519, "supported_languages": null}, "macro.fivetran_utils.default__union_data": {"name": "default__union_data", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/union_data.sql", "original_file_path": "macros/union_data.sql", "unique_id": "macro.fivetran_utils.default__union_data", "macro_sql": "{%- macro default__union_data(\n table_identifier, \n database_variable, \n schema_variable, \n default_database, \n default_schema, \n default_variable,\n union_schema_variable,\n union_database_variable\n ) -%}\n\n{%- if var(union_schema_variable, none) -%}\n\n {%- set relations = [] -%}\n \n {%- if var(union_schema_variable) is string -%}\n {%- set trimmed = var(union_schema_variable)|trim('[')|trim(']') -%}\n {%- set schemas = trimmed.split(',')|map('trim',\" \")|map('trim','\"')|map('trim',\"'\") -%}\n {%- else -%}\n {%- set schemas = var(union_schema_variable) -%}\n {%- endif -%}\n\n {%- for schema in var(union_schema_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else var(database_variable, default_database),\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else schema,\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n \n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n \n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- elif var(union_database_variable, none) -%}\n\n {%- set relations = [] -%}\n\n {%- for database in var(union_database_variable) -%}\n {%- set relation=adapter.get_relation(\n database=source(schema, table_identifier).database if var('has_defined_sources', false) else database,\n schema=source(schema, table_identifier).schema if var('has_defined_sources', false) else var(schema_variable, default_schema),\n identifier=source(schema, table_identifier).identifier if var('has_defined_sources', false) else table_identifier\n ) -%}\n\n {%- set relation_exists=relation is not none -%}\n\n {%- if relation_exists -%}\n {%- do relations.append(relation) -%}\n {%- endif -%}\n\n {%- endfor -%}\n\n {%- if relations != [] -%}\n {{ dbt_utils.union_relations(relations) }}\n {%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n {%- endif -%}\n\n{%- else -%}\n {% set exception_schemas = {\"linkedin_company_pages\": \"linkedin_pages\", \"instagram_business_pages\": \"instagram_business\"} %}\n {% set relation = namespace(value=\"\") %}\n {% if default_schema in exception_schemas.keys() %}\n {% for corrected_schema_name in exception_schemas.items() %} \n {% if default_schema in corrected_schema_name %}\n {# In order for this macro to effectively work within upstream integration tests (mainly used by the Fivetran dbt package maintainers), this identifier variable selection is required to use the macro with different identifier names. #}\n {% set identifier_var = corrected_schema_name[1] + \"_\" + table_identifier + \"_identifier\" %}\n {%- set relation.value=adapter.get_relation(\n database=source(corrected_schema_name[1], table_identifier).database,\n schema=source(corrected_schema_name[1], table_identifier).schema,\n identifier=var(identifier_var, table_identifier)\n ) -%}\n {% endif %}\n {% endfor %}\n {% else %}\n {# In order for this macro to effectively work within upstream integration tests (mainly used by the Fivetran dbt package maintainers), this identifier variable selection is required to use the macro with different identifier names. #}\n {% set identifier_var = default_schema + \"_\" + table_identifier + \"_identifier\" %}\n {# Unfortunately the Twitter Organic identifiers were misspelled. As such, we will need to account for this in the model. This will be adjusted in the Twitter Organic package, but to ensure backwards compatibility, this needs to be included. #}\n {% if var(identifier_var, none) is none %} \n {% set identifier_var = default_schema + \"_\" + table_identifier + \"_identifer\" %}\n {% endif %}\n {%- set relation.value=adapter.get_relation(\n database=source(default_schema, table_identifier).database,\n schema=source(default_schema, table_identifier).schema,\n identifier=var(identifier_var, table_identifier)\n ) -%}\n {% endif %}\n{%- set table_exists=relation.value is not none -%}\n\n{%- if table_exists -%}\n select * \n from {{ relation.value }}\n{%- else -%}\n {% if execute and not var('fivetran__remove_empty_table_warnings', false) -%}\n {{ exceptions.warn(\"\\n\\nPlease be aware: The \" ~ table_identifier|upper ~ \" table was not found in your \" ~ default_schema|upper ~ \" schema(s). The Fivetran dbt package will create a completely empty \" ~ table_identifier|upper ~ \" staging model as to not break downstream transformations. To turn off these warnings, set the `fivetran__remove_empty_table_warnings` variable to TRUE (see https://github.com/fivetran/dbt_fivetran_utils/tree/releases/v0.4.latest#union_data-source for details).\\n\") }}\n {% endif -%}\n select \n cast(null as {{ dbt.type_string() }}) as _dbt_source_relation\n limit 0\n{%- endif -%}\n{%- endif -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils.union_relations", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.769717, "supported_languages": null}, "macro.fivetran_utils.percentile": {"name": "percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.percentile", "macro_sql": "{% macro percentile(percentile_field, partition_field, percent) -%}\n\n{{ adapter.dispatch('percentile', 'fivetran_utils') (percentile_field, partition_field, percent) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__percentile"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.770606, "supported_languages": null}, "macro.fivetran_utils.default__percentile": {"name": "default__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.default__percentile", "macro_sql": "{% macro default__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7709434, "supported_languages": null}, "macro.fivetran_utils.redshift__percentile": {"name": "redshift__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.redshift__percentile", "macro_sql": "{% macro redshift__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n over ( partition by {{ partition_field }} )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7712722, "supported_languages": null}, "macro.fivetran_utils.bigquery__percentile": {"name": "bigquery__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.bigquery__percentile", "macro_sql": "{% macro bigquery__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7716293, "supported_languages": null}, "macro.fivetran_utils.postgres__percentile": {"name": "postgres__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.postgres__percentile", "macro_sql": "{% macro postgres__percentile(percentile_field, partition_field, percent) %}\n\n percentile_cont( \n {{ percent }} )\n within group ( order by {{ percentile_field }} )\n /* have to group by partition field */\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.771921, "supported_languages": null}, "macro.fivetran_utils.spark__percentile": {"name": "spark__percentile", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/percentile.sql", "original_file_path": "macros/percentile.sql", "unique_id": "macro.fivetran_utils.spark__percentile", "macro_sql": "{% macro spark__percentile(percentile_field, partition_field, percent) %}\n\n percentile( \n {{ percentile_field }}, \n {{ percent }}) \n over (partition by {{ partition_field }} \n )\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7722352, "supported_languages": null}, "macro.fivetran_utils.try_cast": {"name": "try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.try_cast", "macro_sql": "{% macro try_cast(field, type) %}\n {{ adapter.dispatch('try_cast', 'fivetran_utils') (field, type) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.postgres__try_cast"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7732043, "supported_languages": null}, "macro.fivetran_utils.default__try_cast": {"name": "default__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.default__try_cast", "macro_sql": "{% macro default__try_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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7735155, "supported_languages": null}, "macro.fivetran_utils.redshift__try_cast": {"name": "redshift__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.redshift__try_cast", "macro_sql": "{% macro redshift__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when trim({{field}}) ~ '^(0|[1-9][0-9]*)$' then trim({{field}})\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.774054, "supported_languages": null}, "macro.fivetran_utils.postgres__try_cast": {"name": "postgres__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.postgres__try_cast", "macro_sql": "{% macro postgres__try_cast(field, type) %}\n{%- if type == 'numeric' -%}\n\n case\n when replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar)) ~ '^(0|[1-9][0-9]*)$' \n then replace(cast({{field}} as varchar),cast(' ' as varchar),cast('' as varchar))\n else null\n end::{{type}}\n\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"non-numeric datatypes are not currently supported\") }}\n\n{% endif %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7746408, "supported_languages": null}, "macro.fivetran_utils.snowflake__try_cast": {"name": "snowflake__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.snowflake__try_cast", "macro_sql": "{% macro snowflake__try_cast(field, type) %}\n try_cast(cast({{field}} as varchar) as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7749052, "supported_languages": null}, "macro.fivetran_utils.bigquery__try_cast": {"name": "bigquery__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.bigquery__try_cast", "macro_sql": "{% macro bigquery__try_cast(field, type) %}\n safe_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.775163, "supported_languages": null}, "macro.fivetran_utils.spark__try_cast": {"name": "spark__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.spark__try_cast", "macro_sql": "{% macro spark__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.775453, "supported_languages": null}, "macro.fivetran_utils.sqlserver__try_cast": {"name": "sqlserver__try_cast", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/try_cast.sql", "original_file_path": "macros/try_cast.sql", "unique_id": "macro.fivetran_utils.sqlserver__try_cast", "macro_sql": "{% macro sqlserver__try_cast(field, type) %}\n try_cast({{field}} as {{type}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7757165, "supported_languages": null}, "macro.fivetran_utils.persist_pass_through_columns": {"name": "persist_pass_through_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/persist_pass_through_columns.sql", "original_file_path": "macros/persist_pass_through_columns.sql", "unique_id": "macro.fivetran_utils.persist_pass_through_columns", "macro_sql": "{% macro persist_pass_through_columns(pass_through_variable, identifier=none, transform='') %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n , {{ transform ~ '(' ~ (identifier ~ '.' if identifier else '') ~ (field.alias if field.alias else field.name) ~ ')' }} as {{ field.alias if field.alias else field.name }}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7769217, "supported_languages": null}, "macro.fivetran_utils.wrap_in_quotes": {"name": "wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.wrap_in_quotes", "macro_sql": "{%- macro wrap_in_quotes(object_to_quote) -%}\n\n{{ return(adapter.dispatch('wrap_in_quotes', 'fivetran_utils')(object_to_quote)) }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.fivetran_utils.postgres__wrap_in_quotes"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.77758, "supported_languages": null}, "macro.fivetran_utils.default__wrap_in_quotes": {"name": "default__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.default__wrap_in_quotes", "macro_sql": "{%- macro default__wrap_in_quotes(object_to_quote) -%}\n{# bigquery, spark, databricks #}\n `{{ object_to_quote }}`\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7778146, "supported_languages": null}, "macro.fivetran_utils.snowflake__wrap_in_quotes": {"name": "snowflake__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.snowflake__wrap_in_quotes", "macro_sql": "{%- macro snowflake__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote | upper }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7780488, "supported_languages": null}, "macro.fivetran_utils.redshift__wrap_in_quotes": {"name": "redshift__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.redshift__wrap_in_quotes", "macro_sql": "{%- macro redshift__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.778402, "supported_languages": null}, "macro.fivetran_utils.postgres__wrap_in_quotes": {"name": "postgres__wrap_in_quotes", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/wrap_in_quotes.sql", "original_file_path": "macros/wrap_in_quotes.sql", "unique_id": "macro.fivetran_utils.postgres__wrap_in_quotes", "macro_sql": "{%- macro postgres__wrap_in_quotes(object_to_quote) -%}\n \"{{ object_to_quote }}\"\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7786229, "supported_languages": null}, "macro.fivetran_utils.enabled_vars_one_true": {"name": "enabled_vars_one_true", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/enabled_vars_one_true.sql", "original_file_path": "macros/enabled_vars_one_true.sql", "unique_id": "macro.fivetran_utils.enabled_vars_one_true", "macro_sql": "{% macro enabled_vars_one_true(vars) %}\n\n{% for v in vars %}\n \n {% if var(v, False) == True %}\n {{ return(True) }}\n {% endif %}\n\n{% endfor %}\n\n{{ return(False) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7793746, "supported_languages": null}, "macro.fivetran_utils.remove_prefix_from_columns": {"name": "remove_prefix_from_columns", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/remove_prefix_from_columns.sql", "original_file_path": "macros/remove_prefix_from_columns.sql", "unique_id": "macro.fivetran_utils.remove_prefix_from_columns", "macro_sql": "{% macro remove_prefix_from_columns(columns, prefix='', exclude=[]) %}\n\n {%- for col in columns if col.name not in exclude -%}\n {%- if col.name[:prefix|length]|lower == prefix -%}\n {{ col.name }} as {{ col.name[prefix|length:] }}\n {%- else -%}\n {{ col.name }}\n {%- endif -%}\n {%- if not loop.last -%},{%- endif %}\n {% endfor -%}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.78053, "supported_languages": null}, "macro.fivetran_utils.ceiling": {"name": "ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.ceiling", "macro_sql": "{% macro ceiling(num) -%}\n\n{{ adapter.dispatch('ceiling', 'fivetran_utils') (num) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.fivetran_utils.default__ceiling"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7810035, "supported_languages": null}, "macro.fivetran_utils.default__ceiling": {"name": "default__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.default__ceiling", "macro_sql": "{% macro default__ceiling(num) %}\n ceiling({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7812157, "supported_languages": null}, "macro.fivetran_utils.snowflake__ceiling": {"name": "snowflake__ceiling", "resource_type": "macro", "package_name": "fivetran_utils", "path": "macros/ceiling.sql", "original_file_path": "macros/ceiling.sql", "unique_id": "macro.fivetran_utils.snowflake__ceiling", "macro_sql": "{% macro snowflake__ceiling(num) %}\n ceil({{ num }})\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7814422, "supported_languages": null}, "macro.amazon_ads.amazon_ads_persist_pass_through_columns": {"name": "amazon_ads_persist_pass_through_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/amazon_ads_persist_pass_through_columns.sql", "original_file_path": "macros/amazon_ads_persist_pass_through_columns.sql", "unique_id": "macro.amazon_ads.amazon_ads_persist_pass_through_columns", "macro_sql": "{% macro amazon_ads_persist_pass_through_columns(pass_through_variable, identifier=none, transform='', coalesce_with=none, exclude_fields=[]) %}\n\n{% if var(pass_through_variable, none) %}\n {% for field in var(pass_through_variable) %}\n {% set field_name = field.alias|default(field.name)|lower if field is mapping else field %}\n {% if field_name not in exclude_fields %}\n , {{ transform ~ '(' ~ ('coalesce(' if coalesce_with is not none else '') ~ (identifier ~ '.' if identifier else '') ~ field_name ~ ((', ' ~ coalesce_with ~ ')') if coalesce_with is not none else '') ~ ')' }} as {{ field_name }}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7832491, "supported_languages": null}, "macro.amazon_ads.get_search_term_ad_keyword_report_columns": {"name": "get_search_term_ad_keyword_report_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_search_term_ad_keyword_report_columns.sql", "original_file_path": "macros/staging/get_search_term_ad_keyword_report_columns.sql", "unique_id": "macro.amazon_ads.get_search_term_ad_keyword_report_columns", "macro_sql": "{% macro get_search_term_ad_keyword_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"ad_keyword_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"keyword_bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"keyword_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"search_term\", \"datatype\": dbt.type_string()},\n {\"name\": \"targeting\", \"datatype\": dbt.type_string()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__search_term_ad_keyword_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7865474, "supported_languages": null}, "macro.amazon_ads.get_portfolio_history_columns": {"name": "get_portfolio_history_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_portfolio_history_columns.sql", "original_file_path": "macros/staging/get_portfolio_history_columns.sql", "unique_id": "macro.amazon_ads.get_portfolio_history_columns", "macro_sql": "{% macro get_portfolio_history_columns() %}\n\n{% set columns = [\n {\"name\": \"budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"budget_end_date\", \"datatype\": \"date\"},\n {\"name\": \"budget_policy\", \"datatype\": dbt.type_string()},\n {\"name\": \"budget_start_date\", \"datatype\": \"date\"},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_int()},\n {\"name\": \"in_budget\", \"datatype\": \"boolean\"},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"profile_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_float", "macro.dbt.type_string", "macro.dbt.type_timestamp", "macro.dbt.type_int"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.789033, "supported_languages": null}, "macro.amazon_ads.get_campaign_history_columns": {"name": "get_campaign_history_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_campaign_history_columns.sql", "original_file_path": "macros/staging/get_campaign_history_columns.sql", "unique_id": "macro.amazon_ads.get_campaign_history_columns", "macro_sql": "{% macro get_campaign_history_columns() %}\n\n{% set columns = [\n {\"name\": \"bidding_strategy\", \"datatype\": dbt.type_string()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"end_date\", \"datatype\": \"date\"},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"portfolio_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"profile_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"start_date\", \"datatype\": \"date\"},\n {\"name\": \"state\", \"datatype\": dbt.type_string()},\n {\"name\": \"targeting_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"budget\", \"datatype\": dbt.type_float()},\n {\"name\": \"budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"effective_budget\", \"datatype\": dbt.type_float()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_timestamp", "macro.dbt.type_int", "macro.dbt.type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7919307, "supported_languages": null}, "macro.amazon_ads.get_ad_group_level_report_columns": {"name": "get_ad_group_level_report_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_ad_group_level_report_columns.sql", "original_file_path": "macros/staging/get_ad_group_level_report_columns.sql", "unique_id": "macro.amazon_ads.get_ad_group_level_report_columns", "macro_sql": "{% macro get_ad_group_level_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"campaign_bidding_strategy\", \"datatype\": dbt.type_string()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__ad_group_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.793983, "supported_languages": null}, "macro.amazon_ads.amazon_ads_fill_pass_through_columns": {"name": "amazon_ads_fill_pass_through_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/amazon_ads_fill_pass_through_columns.sql", "original_file_path": "macros/staging/amazon_ads_fill_pass_through_columns.sql", "unique_id": "macro.amazon_ads.amazon_ads_fill_pass_through_columns", "macro_sql": "{% macro amazon_ads_fill_pass_through_columns(pass_through_fields, except=[]) %}\n\n{% if pass_through_fields %}\n {% for field in pass_through_fields %}\n {% if (field.alias if field.alias else field.name) not in except %}\n {% if field.transform_sql %}\n , coalesce(cast({{ field.transform_sql }} as {{ dbt.type_float() }}), 0) as {{ field.alias if field.alias else field.name }}\n {% else %}\n , coalesce(cast({{ field.alias if field.alias else field.name }} as {{ dbt.type_float() }}), 0) as {{ field.alias if field.alias else field.name }}\n {% endif %}\n {% endif %}\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_float"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.795614, "supported_languages": null}, "macro.amazon_ads.get_ad_group_history_columns": {"name": "get_ad_group_history_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_ad_group_history_columns.sql", "original_file_path": "macros/staging/get_ad_group_history_columns.sql", "unique_id": "macro.amazon_ads.get_ad_group_history_columns", "macro_sql": "{% macro get_ad_group_history_columns() %}\n\n{% set columns = [\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"default_bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.7973979, "supported_languages": null}, "macro.amazon_ads.get_campaign_level_report_columns": {"name": "get_campaign_level_report_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_campaign_level_report_columns.sql", "original_file_path": "macros/staging/get_campaign_level_report_columns.sql", "unique_id": "macro.amazon_ads.get_campaign_level_report_columns", "macro_sql": "{% macro get_campaign_level_report_columns() %}\n\n{% set columns = [\n {\"name\": \"campaign_applicable_budget_rule_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_applicable_budget_rule_name\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_bidding_strategy\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"campaign_rule_based_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__campaign_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_float", "macro.dbt.type_int", "macro.amazon_ads.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8005486, "supported_languages": null}, "macro.amazon_ads.get_advertised_product_report_columns": {"name": "get_advertised_product_report_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_advertised_product_report_columns.sql", "original_file_path": "macros/staging/get_advertised_product_report_columns.sql", "unique_id": "macro.amazon_ads.get_advertised_product_report_columns", "macro_sql": "{% macro get_advertised_product_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"ad_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"advertised_asin\", \"datatype\": dbt.type_string()},\n {\"name\": \"advertised_sku\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__advertised_product_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8040278, "supported_languages": null}, "macro.amazon_ads.get_profile_columns": {"name": "get_profile_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_profile_columns.sql", "original_file_path": "macros/staging/get_profile_columns.sql", "unique_id": "macro.amazon_ads.get_profile_columns", "macro_sql": "{% macro get_profile_columns() %}\n\n{% set columns = [\n {\"name\": \"id\", \"datatype\": dbt.type_int()},\n {\"name\": \"account_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_marketplace_string_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_name\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_sub_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"account_valid_payment_method\", \"datatype\": dbt.type_boolean()},\n {\"name\": \"country_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"daily_budget\", \"datatype\": dbt.type_int()},\n {\"name\": \"timezone\", \"datatype\": dbt.type_string()},\n {\"name\": \"_fivetran_deleted\", \"datatype\": dbt.type_boolean()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_boolean"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8064606, "supported_languages": null}, "macro.amazon_ads.get_product_ad_history_columns": {"name": "get_product_ad_history_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_product_ad_history_columns.sql", "original_file_path": "macros/staging/get_product_ad_history_columns.sql", "unique_id": "macro.amazon_ads.get_product_ad_history_columns", "macro_sql": "{% macro get_product_ad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"asin\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"sku\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8083694, "supported_languages": null}, "macro.amazon_ads.get_targeting_keyword_report_columns": {"name": "get_targeting_keyword_report_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_targeting_keyword_report_columns.sql", "original_file_path": "macros/staging/get_targeting_keyword_report_columns.sql", "unique_id": "macro.amazon_ads.get_targeting_keyword_report_columns", "macro_sql": "{% macro get_targeting_keyword_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"ad_keyword_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_amount\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_budget_currency_code\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_budget_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"clicks\", \"datatype\": dbt.type_int()},\n {\"name\": \"cost\", \"datatype\": dbt.type_float()},\n {\"name\": \"date\", \"datatype\": \"date\"},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"keyword_bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"keyword_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"keyword_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"match_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"targeting\", \"datatype\": dbt.type_string()},\n {\"name\": \"purchases_30_d\", \"datatype\": dbt.type_int()},\n {\"name\": \"sales_30_d\", \"datatype\": dbt.type_float()}\n] %}\n\n{# Add backwards compatibility if conversion metrics were added via passthrough columns prior to them being brought in by default #}\n{{ amazon_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('amazon_ads__targeting_keyword_passthrough_metrics'), except_fields=['purchases_30_d', 'sales_30_d']) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_float", "macro.amazon_ads.amazon_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8118618, "supported_languages": null}, "macro.amazon_ads.get_keyword_history_columns": {"name": "get_keyword_history_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/get_keyword_history_columns.sql", "original_file_path": "macros/staging/get_keyword_history_columns.sql", "unique_id": "macro.amazon_ads.get_keyword_history_columns", "macro_sql": "{% macro get_keyword_history_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_group_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"bid\", \"datatype\": dbt.type_float()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_int()},\n {\"name\": \"creation_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"keyword_text\", \"datatype\": dbt.type_string()},\n {\"name\": \"last_updated_date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"match_type\", \"datatype\": dbt.type_string()},\n {\"name\": \"native_language_keyword\", \"datatype\": dbt.type_string()},\n {\"name\": \"serving_status\", \"datatype\": dbt.type_string()},\n {\"name\": \"state\", \"datatype\": dbt.type_string()},\n {\"name\": \"native_language_locale\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_float", "macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8142037, "supported_languages": null}, "macro.amazon_ads.amazon_ads_add_pass_through_columns": {"name": "amazon_ads_add_pass_through_columns", "resource_type": "macro", "package_name": "amazon_ads", "path": "macros/staging/amazon_ads_add_pass_though_columns.sql", "original_file_path": "macros/staging/amazon_ads_add_pass_though_columns.sql", "unique_id": "macro.amazon_ads.amazon_ads_add_pass_through_columns", "macro_sql": "{% macro amazon_ads_add_pass_through_columns(base_columns, pass_through_fields, except_fields=[]) %}\n\n{% if pass_through_fields %}\n {% for column in pass_through_fields %}\n \n {% if column is mapping %}\n {% set col_name = column.alias|default(column.name)|lower %}\n\n {% if col_name not in except_fields %}\n {% if column.alias %}\n {% do base_columns.append({ \"name\": column.name, \"alias\": column.alias, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n {% else %}\n {% do base_columns.append({ \"name\": column.name, \"datatype\": column.datatype if column.datatype else dbt.type_string()}) %}\n {% endif %}\n {% endif %}\n\n {% else %}\n {% if column|lower not in except_fields %}\n {% do base_columns.append({ \"name\": column, \"datatype\": dbt.type_string()}) %}\n {% endif %}\n {% endif %}\n\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8166554, "supported_languages": null}, "macro.dbt_utils.safe_divide": {"name": "safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.safe_divide", "macro_sql": "{% macro safe_divide(numerator, denominator) -%}\n {{ return(adapter.dispatch('safe_divide', 'dbt_utils')(numerator, denominator)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_divide"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8172262, "supported_languages": null}, "macro.dbt_utils.default__safe_divide": {"name": "default__safe_divide", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_divide.sql", "original_file_path": "macros/sql/safe_divide.sql", "unique_id": "macro.dbt_utils.default__safe_divide", "macro_sql": "{% macro default__safe_divide(numerator, denominator) %}\n ( {{ numerator }} ) / nullif( ( {{ denominator }} ), 0)\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8175235, "supported_languages": null}, "macro.dbt_utils.deduplicate": {"name": "deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.deduplicate", "macro_sql": "{%- macro deduplicate(relation, partition_by, order_by) -%}\n {{ return(adapter.dispatch('deduplicate', 'dbt_utils')(relation, partition_by, order_by)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.postgres__deduplicate"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8185818, "supported_languages": null}, "macro.dbt_utils.default__deduplicate": {"name": "default__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.default__deduplicate", "macro_sql": "\n\n{%- macro default__deduplicate(relation, partition_by, order_by) -%}\n\n with row_numbered as (\n select\n _inner.*,\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) as rn\n from {{ relation }} as _inner\n )\n\n select\n distinct data.*\n from {{ relation }} as data\n {#\n -- Not all DBs will support natural joins but the ones that do include:\n -- Oracle, MySQL, SQLite, Redshift, Teradata, Materialize, Databricks\n -- Apache Spark, SingleStore, Vertica\n -- Those that do not appear to support natural joins include:\n -- SQLServer, Trino, Presto, Rockset, Athena\n #}\n natural join row_numbered\n where row_numbered.rn = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.818999, "supported_languages": null}, "macro.dbt_utils.redshift__deduplicate": {"name": "redshift__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.redshift__deduplicate", "macro_sql": "{% macro redshift__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }} as tt\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8193321, "supported_languages": null}, "macro.dbt_utils.postgres__deduplicate": {"name": "postgres__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.postgres__deduplicate", "macro_sql": "\n{%- macro postgres__deduplicate(relation, partition_by, order_by) -%}\n\n select\n distinct on ({{ partition_by }}) *\n from {{ relation }}\n order by {{ partition_by }}{{ ',' ~ order_by }}\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8197365, "supported_languages": null}, "macro.dbt_utils.snowflake__deduplicate": {"name": "snowflake__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.snowflake__deduplicate", "macro_sql": "\n{%- macro snowflake__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8200686, "supported_languages": null}, "macro.dbt_utils.databricks__deduplicate": {"name": "databricks__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.databricks__deduplicate", "macro_sql": "\n{%- macro databricks__deduplicate(relation, partition_by, order_by) -%}\n\n select *\n from {{ relation }}\n qualify\n row_number() over (\n partition by {{ partition_by }}\n order by {{ order_by }}\n ) = 1\n\n{%- endmacro -%}\n\n", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8204153, "supported_languages": null}, "macro.dbt_utils.bigquery__deduplicate": {"name": "bigquery__deduplicate", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/deduplicate.sql", "original_file_path": "macros/sql/deduplicate.sql", "unique_id": "macro.dbt_utils.bigquery__deduplicate", "macro_sql": "\n{%- macro bigquery__deduplicate(relation, partition_by, order_by) -%}\n\n select unique.*\n from (\n select\n array_agg (\n original\n order by {{ order_by }}\n limit 1\n )[offset(0)] unique\n from {{ relation }} original\n group by {{ partition_by }}\n )\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8207593, "supported_languages": null}, "macro.dbt_utils.get_query_results_as_dict": {"name": "get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.get_query_results_as_dict", "macro_sql": "{% macro get_query_results_as_dict(query) %}\n {{ return(adapter.dispatch('get_query_results_as_dict', 'dbt_utils')(query)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_query_results_as_dict"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8214183, "supported_languages": null}, "macro.dbt_utils.default__get_query_results_as_dict": {"name": "default__get_query_results_as_dict", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_query_results_as_dict.sql", "original_file_path": "macros/sql/get_query_results_as_dict.sql", "unique_id": "macro.dbt_utils.default__get_query_results_as_dict", "macro_sql": "{% macro default__get_query_results_as_dict(query) %}\n\n{# This macro returns a dictionary of the form {column_name: (tuple_of_results)} #}\n\n {%- call statement('get_query_results', fetch_result=True,auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {% set sql_results={} %}\n\n {%- if execute -%}\n {% set sql_results_table = load_result('get_query_results').table.columns %}\n {% for column_name, column in sql_results_table.items() %}\n {% do sql_results.update({column_name: column.values()}) %}\n {% endfor %}\n {%- endif -%}\n\n {{ return(sql_results) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8226767, "supported_languages": null}, "macro.dbt_utils.get_single_value": {"name": "get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.get_single_value", "macro_sql": "{% macro get_single_value(query, default=none) %}\n {{ return(adapter.dispatch('get_single_value', 'dbt_utils')(query, default)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_single_value"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8234665, "supported_languages": null}, "macro.dbt_utils.default__get_single_value": {"name": "default__get_single_value", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_single_value.sql", "original_file_path": "macros/sql/get_single_value.sql", "unique_id": "macro.dbt_utils.default__get_single_value", "macro_sql": "{% macro default__get_single_value(query, default) %}\n\n{# This macro returns the (0, 0) record in a query, i.e. the first row of the first column #}\n\n {%- call statement('get_query_result', fetch_result=True, auto_begin=false) -%}\n\n {{ query }}\n\n {%- endcall -%}\n\n {%- if execute -%}\n\n {% set r = load_result('get_query_result').table.columns[0].values() %}\n {% if r | length == 0 %}\n {% do print('Query `' ~ query ~ '` returned no rows. Using the default value: ' ~ default) %}\n {% set sql_result = default %}\n {% else %}\n {% set sql_result = r[0] %}\n {% endif %}\n \n {%- else -%}\n \n {% set sql_result = default %}\n \n {%- endif -%}\n\n {% do return(sql_result) %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8248563, "supported_languages": null}, "macro.dbt_utils.unpivot": {"name": "unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.unpivot", "macro_sql": "{% macro unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', quote_identifiers=False) -%}\n {{ return(adapter.dispatch('unpivot', 'dbt_utils')(relation, cast_to, exclude, remove, field_name, value_name, quote_identifiers)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__unpivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8262894, "supported_languages": null}, "macro.dbt_utils.default__unpivot": {"name": "default__unpivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/unpivot.sql", "original_file_path": "macros/sql/unpivot.sql", "unique_id": "macro.dbt_utils.default__unpivot", "macro_sql": "{% macro default__unpivot(relation=none, cast_to='varchar', exclude=none, remove=none, field_name='field_name', value_name='value', quote_identifiers=False) -%}\n\n {% if not relation %}\n {{ exceptions.raise_compiler_error(\"Error: argument `relation` is required for `unpivot` macro.\") }}\n {% endif %}\n\n {%- set exclude = exclude if exclude is not none else [] %}\n {%- set remove = remove if remove is not none else [] %}\n\n {%- set include_cols = [] %}\n\n {%- set table_columns = {} %}\n\n {%- do table_columns.update({relation: []}) %}\n\n {%- do dbt_utils._is_relation(relation, 'unpivot') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'unpivot') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) %}\n\n {%- for col in cols -%}\n {%- if col.column.lower() not in remove|map('lower') and col.column.lower() not in exclude|map('lower') -%}\n {% do include_cols.append(col) %}\n {%- endif %}\n {%- endfor %}\n\n\n {%- for col in include_cols -%}\n {%- set current_col_name = adapter.quote(col.column) if quote_identifiers else col.column -%}\n select\n {%- for exclude_col in exclude %}\n {{ adapter.quote(exclude_col) if quote_identifiers else exclude_col }},\n {%- endfor %}\n\n cast('{{ col.column }}' as {{ dbt.type_string() }}) as {{ adapter.quote(field_name) if quote_identifiers else field_name }},\n cast( {% if col.data_type == 'boolean' %}\n {{ dbt.cast_bool_to_text(current_col_name) }}\n {% else %}\n {{ current_col_name }}\n {% endif %}\n as {{ cast_to }}) as {{ adapter.quote(value_name) if quote_identifiers else value_name }}\n\n from {{ relation }}\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n {%- endfor -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.type_string", "macro.dbt.cast_bool_to_text"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8297756, "supported_languages": null}, "macro.dbt_utils.get_intervals_between": {"name": "get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.get_intervals_between", "macro_sql": "{% macro get_intervals_between(start_date, end_date, datepart) -%}\n {{ return(adapter.dispatch('get_intervals_between', 'dbt_utils')(start_date, end_date, datepart)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_intervals_between"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8307436, "supported_languages": null}, "macro.dbt_utils.default__get_intervals_between": {"name": "default__get_intervals_between", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__get_intervals_between", "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 %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt.datediff"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8318872, "supported_languages": null}, "macro.dbt_utils.date_spine": {"name": "date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.date_spine", "macro_sql": "{% macro date_spine(datepart, start_date, end_date) %}\n {{ return(adapter.dispatch('date_spine', 'dbt_utils')(datepart, start_date, end_date)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__date_spine"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8323305, "supported_languages": null}, "macro.dbt_utils.default__date_spine": {"name": "default__date_spine", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/date_spine.sql", "original_file_path": "macros/sql/date_spine.sql", "unique_id": "macro.dbt_utils.default__date_spine", "macro_sql": "{% macro default__date_spine(datepart, start_date, end_date) %}\n\n\n{# call as follows:\n\ndate_spine(\n \"day\",\n \"to_date('01/01/2016', 'mm/dd/yyyy')\",\n \"dbt.dateadd(week, 1, current_date)\"\n) #}\n\n\nwith rawdata as (\n\n {{dbt_utils.generate_series(\n dbt_utils.get_intervals_between(start_date, end_date, datepart)\n )}}\n\n),\n\nall_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\nfiltered as (\n\n select *\n from all_periods\n where date_{{datepart}} <= {{ end_date }}\n\n)\n\nselect * from filtered\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.generate_series", "macro.dbt_utils.get_intervals_between", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8330212, "supported_languages": null}, "macro.dbt_utils.get_table_types_sql": {"name": "get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.get_table_types_sql", "macro_sql": "{%- macro get_table_types_sql() -%}\n {{ return(adapter.dispatch('get_table_types_sql', 'dbt_utils')()) }}\n{%- endmacro -%}\n\n", "depends_on": {"macros": ["macro.dbt_utils.postgres__get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.83364, "supported_languages": null}, "macro.dbt_utils.default__get_table_types_sql": {"name": "default__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.default__get_table_types_sql", "macro_sql": "{% macro default__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'EXTERNAL TABLE' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8339145, "supported_languages": null}, "macro.dbt_utils.postgres__get_table_types_sql": {"name": "postgres__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.postgres__get_table_types_sql", "macro_sql": "{% macro postgres__get_table_types_sql() %}\n case table_type\n when 'BASE TABLE' then 'table'\n when 'FOREIGN' then 'external'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.834184, "supported_languages": null}, "macro.dbt_utils.databricks__get_table_types_sql": {"name": "databricks__get_table_types_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_table_types_sql.sql", "original_file_path": "macros/sql/get_table_types_sql.sql", "unique_id": "macro.dbt_utils.databricks__get_table_types_sql", "macro_sql": "{% macro databricks__get_table_types_sql() %}\n case table_type\n when 'MANAGED' then 'table'\n when 'BASE TABLE' then 'table'\n when 'MATERIALIZED VIEW' then 'materializedview'\n else lower(table_type)\n end as {{ adapter.quote('table_type') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.83447, "supported_languages": null}, "macro.dbt_utils.surrogate_key": {"name": "surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.surrogate_key", "macro_sql": "{%- macro surrogate_key(field_list) -%}\n {% set frustrating_jinja_feature = varargs %}\n {{ return(adapter.dispatch('surrogate_key', 'dbt_utils')(field_list, *varargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8351862, "supported_languages": null}, "macro.dbt_utils.default__surrogate_key": {"name": "default__surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/surrogate_key.sql", "original_file_path": "macros/sql/surrogate_key.sql", "unique_id": "macro.dbt_utils.default__surrogate_key", "macro_sql": "\n\n{%- macro default__surrogate_key(field_list) -%}\n\n{%- set error_message = '\nWarning: `dbt_utils.surrogate_key` has been replaced by \\\n`dbt_utils.generate_surrogate_key`. The new macro treats null values \\\ndifferently to empty strings. To restore the behaviour of the original \\\nmacro, add a global variable in dbt_project.yml called \\\n`surrogate_key_treat_nulls_as_empty_strings` to your \\\ndbt_project.yml file with a value of True. \\\nThe {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.835666, "supported_languages": null}, "macro.dbt_utils.nullcheck": {"name": "nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.nullcheck", "macro_sql": "{% macro nullcheck(cols) %}\n {{ return(adapter.dispatch('nullcheck', 'dbt_utils')(cols)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.836243, "supported_languages": null}, "macro.dbt_utils.default__nullcheck": {"name": "default__nullcheck", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck.sql", "original_file_path": "macros/sql/nullcheck.sql", "unique_id": "macro.dbt_utils.default__nullcheck", "macro_sql": "{% macro default__nullcheck(cols) %}\n{%- for col in cols %}\n\n {% if col.is_string() -%}\n\n nullif({{col.name}},'') as {{col.name}}\n\n {%- else -%}\n\n {{col.name}}\n\n {%- endif -%}\n\n{%- if not loop.last -%} , {%- endif -%}\n\n{%- endfor -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8369071, "supported_languages": null}, "macro.dbt_utils.group_by": {"name": "group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.group_by", "macro_sql": "{%- macro group_by(n) -%}\n {{ return(adapter.dispatch('group_by', 'dbt_utils')(n)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__group_by"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8374376, "supported_languages": null}, "macro.dbt_utils.default__group_by": {"name": "default__group_by", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/groupby.sql", "original_file_path": "macros/sql/groupby.sql", "unique_id": "macro.dbt_utils.default__group_by", "macro_sql": "\n\n{%- macro default__group_by(n) -%}\n\n group by {% for i in range(1, n + 1) -%}\n {{ i }}{{ ',' if not loop.last }} \n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.838031, "supported_languages": null}, "macro.dbt_utils.star": {"name": "star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.star", "macro_sql": "{% macro star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {{ return(adapter.dispatch('star', 'dbt_utils')(from, relation_alias, except, prefix, suffix, quote_identifiers)) }}\r\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__star"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8393772, "supported_languages": null}, "macro.dbt_utils.default__star": {"name": "default__star", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/star.sql", "original_file_path": "macros/sql/star.sql", "unique_id": "macro.dbt_utils.default__star", "macro_sql": "{% macro default__star(from, relation_alias=False, except=[], prefix='', suffix='', quote_identifiers=True) -%}\r\n {%- do dbt_utils._is_relation(from, 'star') -%}\r\n {%- do dbt_utils._is_ephemeral(from, 'star') -%}\r\n\r\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\r\n {%- if not execute -%}\r\n {% do return('*') %}\r\n {%- endif -%}\r\n\r\n {% set cols = dbt_utils.get_filtered_columns_in_relation(from, except) %}\r\n\r\n {%- if cols|length <= 0 -%}\r\n {% if flags.WHICH == 'compile' %}\r\n {% set response %}\r\n*\r\n/* No columns were returned. Maybe the relation doesn't exist yet \r\nor all columns were excluded. This star is only output during \r\ndbt compile, and exists to keep SQLFluff happy. */\r\n {% endset %}\r\n {% do return(response) %}\r\n {% else %}\r\n {% do return(\"/* no columns returned from star() macro */\") %}\r\n {% endif %}\r\n {%- else -%}\r\n {%- for col in cols %}\r\n {%- if relation_alias %}{{ relation_alias }}.{% else %}{%- endif -%}\r\n {%- if quote_identifiers -%}\r\n {{ adapter.quote(col)|trim }} {%- if prefix!='' or suffix!='' %} as {{ adapter.quote(prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {%- else -%}\r\n {{ col|trim }} {%- if prefix!='' or suffix!='' %} as {{ (prefix ~ col ~ suffix)|trim }} {%- endif -%}\r\n {% endif %}\r\n {%- if not loop.last %},{{ '\\n ' }}{%- endif -%}\r\n {%- endfor -%}\r\n {% endif %}\r\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8420217, "supported_languages": null}, "macro.dbt_utils.width_bucket": {"name": "width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.width_bucket", "macro_sql": "{% macro width_bucket(expr, min_value, max_value, num_buckets) %}\n {{ return(adapter.dispatch('width_bucket', 'dbt_utils') (expr, min_value, max_value, num_buckets)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__width_bucket"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8428516, "supported_languages": null}, "macro.dbt_utils.default__width_bucket": {"name": "default__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.default__width_bucket", "macro_sql": "{% macro default__width_bucket(expr, min_value, max_value, num_buckets) -%}\n\n {% set bin_size -%}\n (( {{ max_value }} - {{ min_value }} ) / {{ num_buckets }} )\n {%- endset %}\n (\n -- to break ties when the amount is eaxtly at the bucket egde\n case\n when\n mod(\n {{ dbt.safe_cast(expr, dbt.type_numeric() ) }},\n {{ dbt.safe_cast(bin_size, dbt.type_numeric() ) }}\n ) = 0\n then 1\n else 0\n end\n ) +\n -- Anything over max_value goes the N+1 bucket\n least(\n ceil(\n ({{ expr }} - {{ min_value }})/{{ bin_size }}\n ),\n {{ num_buckets }} + 1\n )\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.safe_cast", "macro.dbt.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8437366, "supported_languages": null}, "macro.dbt_utils.snowflake__width_bucket": {"name": "snowflake__width_bucket", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/width_bucket.sql", "original_file_path": "macros/sql/width_bucket.sql", "unique_id": "macro.dbt_utils.snowflake__width_bucket", "macro_sql": "{% macro snowflake__width_bucket(expr, min_value, max_value, num_buckets) %}\n width_bucket({{ expr }}, {{ min_value }}, {{ max_value }}, {{ num_buckets }} )\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8441136, "supported_languages": null}, "macro.dbt_utils.get_tables_by_prefix_sql": {"name": "get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_prefix_sql", "macro_sql": "{% macro get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_prefix_sql', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.84483, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_prefix_sql": {"name": "default__get_tables_by_prefix_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_prefix_sql.sql", "original_file_path": "macros/sql/get_tables_by_prefix_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_prefix_sql", "macro_sql": "{% macro default__get_tables_by_prefix_sql(schema, prefix, exclude='', database=target.database) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(\n schema_pattern = schema,\n table_pattern = prefix ~ '%',\n exclude = exclude,\n database = database\n ) }}\n \n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8453777, "supported_languages": null}, "macro.dbt_utils.get_tables_by_pattern_sql": {"name": "get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.get_tables_by_pattern_sql", "macro_sql": "{% macro get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_tables_by_pattern_sql', 'dbt_utils')\n (schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.846853, "supported_languages": null}, "macro.dbt_utils.default__get_tables_by_pattern_sql": {"name": "default__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.default__get_tables_by_pattern_sql", "macro_sql": "{% macro default__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n select distinct\n table_schema as {{ adapter.quote('table_schema') }},\n table_name as {{ adapter.quote('table_name') }},\n {{ dbt_utils.get_table_types_sql() }}\n from {{ database }}.information_schema.tables\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8475652, "supported_languages": null}, "macro.dbt_utils.redshift__get_tables_by_pattern_sql": {"name": "redshift__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.redshift__get_tables_by_pattern_sql", "macro_sql": "{% macro redshift__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% set sql %}\n select distinct\n table_schema as {{ adapter.quote('table_schema') }},\n table_name as {{ adapter.quote('table_name') }},\n {{ dbt_utils.get_table_types_sql() }}\n from \"{{ database }}\".\"information_schema\".\"tables\"\n where table_schema ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n union all\n select distinct\n schemaname as {{ adapter.quote('table_schema') }},\n tablename as {{ adapter.quote('table_name') }},\n 'external' as {{ adapter.quote('table_type') }}\n from svv_external_tables\n where redshift_database_name = '{{ database }}'\n and schemaname ilike '{{ schema_pattern }}'\n and table_name ilike '{{ table_pattern }}'\n and table_name not ilike '{{ exclude }}'\n {% endset %}\n\n {{ return(sql) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8488607, "supported_languages": null}, "macro.dbt_utils.bigquery__get_tables_by_pattern_sql": {"name": "bigquery__get_tables_by_pattern_sql", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils.bigquery__get_tables_by_pattern_sql", "macro_sql": "{% macro bigquery__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {% if '%' in schema_pattern %}\n {% set schemata=dbt_utils._bigquery__get_matching_schemata(schema_pattern, database) %}\n {% else %}\n {% set schemata=[schema_pattern] %}\n {% endif %}\n\n {% set sql %}\n {% for schema in schemata %}\n select distinct\n table_schema,\n table_name,\n {{ dbt_utils.get_table_types_sql() }}\n\n from {{ adapter.quote(database) }}.{{ schema }}.INFORMATION_SCHEMA.TABLES\n where lower(table_name) like lower ('{{ table_pattern }}')\n and lower(table_name) not like lower ('{{ exclude }}')\n\n {% if not loop.last %} union all {% endif %}\n\n {% endfor %}\n {% endset %}\n\n {{ return(sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._bigquery__get_matching_schemata", "macro.dbt_utils.get_table_types_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8502872, "supported_languages": null}, "macro.dbt_utils._bigquery__get_matching_schemata": {"name": "_bigquery__get_matching_schemata", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_tables_by_pattern_sql.sql", "original_file_path": "macros/sql/get_tables_by_pattern_sql.sql", "unique_id": "macro.dbt_utils._bigquery__get_matching_schemata", "macro_sql": "{% macro _bigquery__get_matching_schemata(schema_pattern, database) %}\n {% if execute %}\n\n {% set sql %}\n select schema_name from {{ adapter.quote(database) }}.INFORMATION_SCHEMA.SCHEMATA\n where lower(schema_name) like lower('{{ schema_pattern }}')\n {% endset %}\n\n {% set results=run_query(sql) %}\n\n {% set schemata=results.columns['schema_name'].values() %}\n\n {{ return(schemata) }}\n\n {% else %}\n\n {{ return([]) }}\n\n {% endif %}\n\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.851258, "supported_languages": null}, "macro.dbt_utils.safe_add": {"name": "safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.safe_add", "macro_sql": "{%- macro safe_add(field_list) -%}\n {{ return(adapter.dispatch('safe_add', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_add"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8518934, "supported_languages": null}, "macro.dbt_utils.default__safe_add": {"name": "default__safe_add", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_add.sql", "original_file_path": "macros/sql/safe_add.sql", "unique_id": "macro.dbt_utils.default__safe_add", "macro_sql": "\n\n{%- macro default__safe_add(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_add` macro now takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.warn(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' +\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8529253, "supported_languages": null}, "macro.dbt_utils.get_filtered_columns_in_relation": {"name": "get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.get_filtered_columns_in_relation", "macro_sql": "{% macro get_filtered_columns_in_relation(from, except=[]) -%}\n {{ return(adapter.dispatch('get_filtered_columns_in_relation', 'dbt_utils')(from, except)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_filtered_columns_in_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8536925, "supported_languages": null}, "macro.dbt_utils.default__get_filtered_columns_in_relation": {"name": "default__get_filtered_columns_in_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_filtered_columns_in_relation.sql", "original_file_path": "macros/sql/get_filtered_columns_in_relation.sql", "unique_id": "macro.dbt_utils.default__get_filtered_columns_in_relation", "macro_sql": "{% macro default__get_filtered_columns_in_relation(from, except=[]) -%}\n {%- do dbt_utils._is_relation(from, 'get_filtered_columns_in_relation') -%}\n {%- do dbt_utils._is_ephemeral(from, 'get_filtered_columns_in_relation') -%}\n\n {# -- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {{ return('') }}\n {% endif %}\n\n {%- set include_cols = [] %}\n {%- set cols = adapter.get_columns_in_relation(from) -%}\n {%- set except = except | map(\"lower\") | list %}\n {%- for col in cols -%}\n {%- if col.column|lower not in except -%}\n {% do include_cols.append(col.column) %}\n {%- endif %}\n {%- endfor %}\n\n {{ return(include_cols) }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8552032, "supported_languages": null}, "macro.dbt_utils.safe_subtract": {"name": "safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.safe_subtract", "macro_sql": "{%- macro safe_subtract(field_list) -%}\n {{ return(adapter.dispatch('safe_subtract', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__safe_subtract"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.855841, "supported_languages": null}, "macro.dbt_utils.default__safe_subtract": {"name": "default__safe_subtract", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/safe_subtract.sql", "original_file_path": "macros/sql/safe_subtract.sql", "unique_id": "macro.dbt_utils.default__safe_subtract", "macro_sql": "\n\n{%- macro default__safe_subtract(field_list) -%}\n\n{%- if field_list is not iterable or field_list is string or field_list is mapping -%}\n\n{%- set error_message = '\nWarning: the `safe_subtract` macro takes a single list argument instead of \\\nstring arguments. The {}.{} model triggered this warning. \\\n'.format(model.package_name, model.name) -%}\n\n{%- do exceptions.raise_compiler_error(error_message) -%}\n\n{%- endif -%}\n\n{% set fields = [] %}\n\n{%- for field in field_list -%}\n\n {% do fields.append(\"coalesce(\" ~ field ~ \", 0)\") %}\n\n{%- endfor -%}\n\n{{ fields|join(' -\\n ') }}\n\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8568726, "supported_languages": null}, "macro.dbt_utils.get_column_values": {"name": "get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.get_column_values", "macro_sql": "{% macro get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {{ return(adapter.dispatch('get_column_values', 'dbt_utils')(table, column, order_by, max_records, default, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_column_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.858163, "supported_languages": null}, "macro.dbt_utils.default__get_column_values": {"name": "default__get_column_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_column_values.sql", "original_file_path": "macros/sql/get_column_values.sql", "unique_id": "macro.dbt_utils.default__get_column_values", "macro_sql": "{% macro default__get_column_values(table, column, order_by='count(*) desc', max_records=none, default=none, where=none) -%}\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n {%- if not execute -%}\n {% set default = [] if not default %}\n {{ return(default) }}\n {% endif %}\n\n {%- do dbt_utils._is_ephemeral(table, 'get_column_values') -%}\n\n {# Not all relations are tables. Renaming for internal clarity without breaking functionality for anyone using named arguments #}\n {# TODO: Change the method signature in a future 0.x.0 release #}\n {%- set target_relation = table -%}\n\n {# adapter.load_relation is a convenience wrapper to avoid building a Relation when we already have one #}\n {% set relation_exists = (load_relation(target_relation)) is not none %}\n\n {%- call statement('get_column_values', fetch_result=true) %}\n\n {%- if not relation_exists and default is none -%}\n\n {{ exceptions.raise_compiler_error(\"In get_column_values(): relation \" ~ target_relation ~ \" does not exist and no default value was provided.\") }}\n\n {%- elif not relation_exists and default is not none -%}\n\n {{ log(\"Relation \" ~ target_relation ~ \" does not exist. Returning the default value: \" ~ default) }}\n\n {{ return(default) }}\n\n {%- else -%}\n\n\n select\n {{ column }} as value\n\n from {{ target_relation }}\n\n {% if where is not none %}\n where {{ where }}\n {% endif %}\n\n group by {{ column }}\n order by {{ order_by }}\n\n {% if max_records is not none %}\n limit {{ max_records }}\n {% endif %}\n\n {% endif %}\n\n {%- endcall -%}\n\n {%- set value_list = load_result('get_column_values') -%}\n\n {%- if value_list and value_list['data'] -%}\n {%- set values = value_list['data'] | map(attribute=0) | list %}\n {{ return(values) }}\n {%- else -%}\n {{ return(default) }}\n {%- endif -%}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_ephemeral", "macro.dbt.load_relation", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8610249, "supported_languages": null}, "macro.dbt_utils.get_powers_of_two": {"name": "get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.get_powers_of_two", "macro_sql": "{% macro get_powers_of_two(upper_bound) %}\n {{ return(adapter.dispatch('get_powers_of_two', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8618655, "supported_languages": null}, "macro.dbt_utils.default__get_powers_of_two": {"name": "default__get_powers_of_two", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__get_powers_of_two", "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 %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8626626, "supported_languages": null}, "macro.dbt_utils.generate_series": {"name": "generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.generate_series", "macro_sql": "{% macro generate_series(upper_bound) %}\n {{ return(adapter.dispatch('generate_series', 'dbt_utils')(upper_bound)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_series"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.86302, "supported_languages": null}, "macro.dbt_utils.default__generate_series": {"name": "default__generate_series", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_series.sql", "original_file_path": "macros/sql/generate_series.sql", "unique_id": "macro.dbt_utils.default__generate_series", "macro_sql": "{% macro default__generate_series(upper_bound) %}\n\n {% set n = dbt_utils.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 %}", "depends_on": {"macros": ["macro.dbt_utils.get_powers_of_two"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8640218, "supported_languages": null}, "macro.dbt_utils.nullcheck_table": {"name": "nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.nullcheck_table", "macro_sql": "{% macro nullcheck_table(relation) %}\n {{ return(adapter.dispatch('nullcheck_table', 'dbt_utils')(relation)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__nullcheck_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8645906, "supported_languages": null}, "macro.dbt_utils.default__nullcheck_table": {"name": "default__nullcheck_table", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/nullcheck_table.sql", "original_file_path": "macros/sql/nullcheck_table.sql", "unique_id": "macro.dbt_utils.default__nullcheck_table", "macro_sql": "{% macro default__nullcheck_table(relation) %}\n\n {%- do dbt_utils._is_relation(relation, 'nullcheck_table') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'nullcheck_table') -%}\n {% set cols = adapter.get_columns_in_relation(relation) %}\n\n select {{ dbt_utils.nullcheck(cols) }}\n from {{relation}}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt_utils.nullcheck"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8652394, "supported_languages": null}, "macro.dbt_utils.union_relations": {"name": "union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.union_relations", "macro_sql": "{%- macro union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n {{ return(adapter.dispatch('union_relations', 'dbt_utils')(relations, column_override, include, exclude, source_column_name, where)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__union_relations"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8671746, "supported_languages": null}, "macro.dbt_utils.default__union_relations": {"name": "default__union_relations", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/union.sql", "original_file_path": "macros/sql/union.sql", "unique_id": "macro.dbt_utils.default__union_relations", "macro_sql": "\n\n{%- macro default__union_relations(relations, column_override=none, include=[], exclude=[], source_column_name='_dbt_source_relation', where=none) -%}\n\n {%- if exclude and include -%}\n {{ exceptions.raise_compiler_error(\"Both an exclude and include list were provided to the `union` macro. Only one is allowed\") }}\n {%- endif -%}\n\n {#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. -#}\n {%- if not execute %}\n {{ return('') }}\n {% endif -%}\n\n {%- set column_override = column_override if column_override is not none else {} -%}\n\n {%- set relation_columns = {} -%}\n {%- set column_superset = {} -%}\n {%- set all_excludes = [] -%}\n {%- set all_includes = [] -%}\n\n {%- if exclude -%}\n {%- for exc in exclude -%}\n {%- do all_excludes.append(exc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- if include -%}\n {%- for inc in include -%}\n {%- do all_includes.append(inc | lower) -%}\n {%- endfor -%}\n {%- endif -%}\n\n {%- for relation in relations -%}\n\n {%- do relation_columns.update({relation: []}) -%}\n\n {%- do dbt_utils._is_relation(relation, 'union_relations') -%}\n {%- do dbt_utils._is_ephemeral(relation, 'union_relations') -%}\n {%- set cols = adapter.get_columns_in_relation(relation) -%}\n {%- for col in cols -%}\n\n {#- If an exclude list was provided and the column is in the list, do nothing -#}\n {%- if exclude and col.column | lower in all_excludes -%}\n\n {#- If an include list was provided and the column is not in the list, do nothing -#}\n {%- elif include and col.column | lower not in all_includes -%}\n\n {#- Otherwise add the column to the column superset -#}\n {%- else -%}\n\n {#- update the list of columns in this relation -#}\n {%- do relation_columns[relation].append(col.column) -%}\n\n {%- if col.column in column_superset -%}\n\n {%- set stored = column_superset[col.column] -%}\n {%- if col.is_string() and stored.is_string() and col.string_size() > stored.string_size() -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif %}\n\n {%- else -%}\n\n {%- do column_superset.update({col.column: col}) -%}\n\n {%- endif -%}\n\n {%- endif -%}\n\n {%- endfor -%}\n {%- endfor -%}\n\n {%- set ordered_column_names = column_superset.keys() -%}\n {%- set dbt_command = flags.WHICH -%}\n\n\n {% if dbt_command in ['run', 'build'] %}\n {% if (include | length > 0 or exclude | length > 0) and not column_superset.keys() %}\n {%- set relations_string -%}\n {%- for relation in relations -%}\n {{ relation.name }}\n {%- if not loop.last %}, {% endif -%}\n {%- endfor -%}\n {%- endset -%}\n\n {%- set error_message -%}\n There were no columns found to union for relations {{ relations_string }}\n {%- endset -%}\n\n {{ exceptions.raise_compiler_error(error_message) }}\n {%- endif -%}\n {%- endif -%}\n\n {%- for relation in relations %}\n\n (\n select\n\n {%- if source_column_name is not none %}\n cast({{ dbt.string_literal(relation) }} as {{ dbt.type_string() }}) as {{ source_column_name }},\n {%- endif %}\n\n {% for col_name in ordered_column_names -%}\n\n {%- set col = column_superset[col_name] %}\n {%- set col_type = column_override.get(col.column, col.data_type) %}\n {%- set col_name = adapter.quote(col_name) if col_name in relation_columns[relation] else 'null' %}\n cast({{ col_name }} as {{ col_type }}) as {{ col.quoted }} {% if not loop.last %},{% endif -%}\n\n {%- endfor %}\n\n from {{ relation }}\n\n {% if where -%}\n where {{ where }}\n {%- endif %}\n )\n\n {% if not loop.last -%}\n union all\n {% endif -%}\n\n {%- endfor -%}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.string_literal", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8736637, "supported_languages": null}, "macro.dbt_utils.get_relations_by_pattern": {"name": "get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.get_relations_by_pattern", "macro_sql": "{% macro get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_pattern', 'dbt_utils')(schema_pattern, table_pattern, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8746, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_pattern": {"name": "default__get_relations_by_pattern", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_pattern.sql", "original_file_path": "macros/sql/get_relations_by_pattern.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_pattern", "macro_sql": "{% macro default__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_pattern_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.876179, "supported_languages": null}, "macro.dbt_utils.degrees_to_radians": {"name": "degrees_to_radians", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.degrees_to_radians", "macro_sql": "{% macro degrees_to_radians(degrees) -%}\n acos(-1) * {{degrees}} / 180\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8770154, "supported_languages": null}, "macro.dbt_utils.haversine_distance": {"name": "haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.haversine_distance", "macro_sql": "{% macro haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n {{ return(adapter.dispatch('haversine_distance', 'dbt_utils')(lat1,lon1,lat2,lon2,unit)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__haversine_distance"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8775487, "supported_languages": null}, "macro.dbt_utils.default__haversine_distance": {"name": "default__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.default__haversine_distance", "macro_sql": "{% macro default__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n\n 2 * 3961 * asin(sqrt(power((sin(radians(({{ lat2 }} - {{ lat1 }}) / 2))), 2) +\n cos(radians({{lat1}})) * cos(radians({{lat2}})) *\n power((sin(radians(({{ lon2 }} - {{ lon1 }}) / 2))), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8786042, "supported_languages": null}, "macro.dbt_utils.bigquery__haversine_distance": {"name": "bigquery__haversine_distance", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/haversine_distance.sql", "original_file_path": "macros/sql/haversine_distance.sql", "unique_id": "macro.dbt_utils.bigquery__haversine_distance", "macro_sql": "{% macro bigquery__haversine_distance(lat1, lon1, lat2, lon2, unit='mi') -%}\n{% set radians_lat1 = dbt_utils.degrees_to_radians(lat1) %}\n{% set radians_lat2 = dbt_utils.degrees_to_radians(lat2) %}\n{% set radians_lon1 = dbt_utils.degrees_to_radians(lon1) %}\n{% set radians_lon2 = dbt_utils.degrees_to_radians(lon2) %}\n{%- if unit == 'mi' %}\n {% set conversion_rate = 1 %}\n{% elif unit == 'km' %}\n {% set conversion_rate = 1.60934 %}\n{% else %}\n {{ exceptions.raise_compiler_error(\"unit input must be one of 'mi' or 'km'. Got \" ~ unit) }}\n{% endif %}\n 2 * 3961 * asin(sqrt(power(sin(({{ radians_lat2 }} - {{ radians_lat1 }}) / 2), 2) +\n cos({{ radians_lat1 }}) * cos({{ radians_lat2 }}) *\n power(sin(({{ radians_lon2 }} - {{ radians_lon1 }}) / 2), 2))) * {{ conversion_rate }}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.degrees_to_radians"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8801267, "supported_languages": null}, "macro.dbt_utils.generate_surrogate_key": {"name": "generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.generate_surrogate_key", "macro_sql": "{%- macro generate_surrogate_key(field_list) -%}\n {{ return(adapter.dispatch('generate_surrogate_key', 'dbt_utils')(field_list)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__generate_surrogate_key"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.880828, "supported_languages": null}, "macro.dbt_utils.default__generate_surrogate_key": {"name": "default__generate_surrogate_key", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/generate_surrogate_key.sql", "original_file_path": "macros/sql/generate_surrogate_key.sql", "unique_id": "macro.dbt_utils.default__generate_surrogate_key", "macro_sql": "\n\n{%- macro default__generate_surrogate_key(field_list) -%}\n\n{%- if var('surrogate_key_treat_nulls_as_empty_strings', False) -%}\n {%- set default_null_value = \"\" -%}\n{%- else -%}\n {%- set default_null_value = '_dbt_utils_surrogate_key_null_' -%}\n{%- endif -%}\n\n{%- set fields = [] -%}\n\n{%- for field in field_list -%}\n\n {%- do fields.append(\n \"coalesce(cast(\" ~ field ~ \" as \" ~ dbt.type_string() ~ \"), '\" ~ default_null_value ~\"')\"\n ) -%}\n\n {%- if not loop.last %}\n {%- do fields.append(\"'-'\") -%}\n {%- endif -%}\n\n{%- endfor -%}\n\n{{ dbt.hash(dbt.concat(fields)) }}\n\n{%- endmacro -%}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.hash", "macro.dbt.concat"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8820567, "supported_languages": null}, "macro.dbt_utils.pivot": {"name": "pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.pivot", "macro_sql": "{% macro pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {{ return(adapter.dispatch('pivot', 'dbt_utils')(column, values, alias, agg, cmp, prefix, suffix, then_value, else_value, quote_identifiers, distinct)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pivot"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8835552, "supported_languages": null}, "macro.dbt_utils.default__pivot": {"name": "default__pivot", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/pivot.sql", "original_file_path": "macros/sql/pivot.sql", "unique_id": "macro.dbt_utils.default__pivot", "macro_sql": "{% macro default__pivot(column,\n values,\n alias=True,\n agg='sum',\n cmp='=',\n prefix='',\n suffix='',\n then_value=1,\n else_value=0,\n quote_identifiers=True,\n distinct=False) %}\n {% for value in values %}\n {{ agg }}(\n {% if distinct %} distinct {% endif %}\n case\n when {{ column }} {{ cmp }} '{{ dbt.escape_single_quotes(value) }}'\n then {{ then_value }}\n else {{ else_value }}\n end\n )\n {% if alias %}\n {% if quote_identifiers %}\n as {{ adapter.quote(prefix ~ value ~ suffix) }}\n {% else %}\n as {{ dbt_utils.slugify(prefix ~ value ~ suffix) }}\n {% endif %}\n {% endif %}\n {% if not loop.last %},{% endif %}\n {% endfor %}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.escape_single_quotes", "macro.dbt_utils.slugify"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8851593, "supported_languages": null}, "macro.dbt_utils.get_relations_by_prefix": {"name": "get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.get_relations_by_prefix", "macro_sql": "{% macro get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n {{ return(adapter.dispatch('get_relations_by_prefix', 'dbt_utils')(schema, prefix, exclude, database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.886058, "supported_languages": null}, "macro.dbt_utils.default__get_relations_by_prefix": {"name": "default__get_relations_by_prefix", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/sql/get_relations_by_prefix.sql", "original_file_path": "macros/sql/get_relations_by_prefix.sql", "unique_id": "macro.dbt_utils.default__get_relations_by_prefix", "macro_sql": "{% macro default__get_relations_by_prefix(schema, prefix, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n {{ dbt_utils.get_tables_by_prefix_sql(schema, prefix, exclude, database) }}\n\n {%- endcall -%}\n\n {%- set table_list = load_result('get_tables') -%}\n\n {%- if table_list and table_list['table'] -%}\n {%- set tbl_relations = [] -%}\n {%- for row in table_list['table'] -%}\n {%- set tbl_relation = api.Relation.create(\n database=database,\n schema=row.table_schema,\n identifier=row.table_name,\n type=row.table_type\n ) -%}\n {%- do tbl_relations.append(tbl_relation) -%}\n {%- endfor -%}\n\n {{ return(tbl_relations) }}\n {%- else -%}\n {{ return([]) }}\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement", "macro.dbt_utils.get_tables_by_prefix_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.887692, "supported_languages": null}, "macro.dbt_utils.get_url_parameter": {"name": "get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.get_url_parameter", "macro_sql": "{% macro get_url_parameter(field, url_parameter) -%}\n {{ return(adapter.dispatch('get_url_parameter', 'dbt_utils')(field, url_parameter)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.888275, "supported_languages": null}, "macro.dbt_utils.default__get_url_parameter": {"name": "default__get_url_parameter", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_parameter.sql", "original_file_path": "macros/web/get_url_parameter.sql", "unique_id": "macro.dbt_utils.default__get_url_parameter", "macro_sql": "{% macro default__get_url_parameter(field, url_parameter) -%}\n\n{%- set formatted_url_parameter = \"'\" + url_parameter + \"='\" -%}\n\n{%- set split = dbt.split_part(dbt.split_part(field, formatted_url_parameter, 2), \"'&'\", 1) -%}\n\nnullif({{ split }},'')\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8889015, "supported_languages": null}, "macro.dbt_utils.get_url_path": {"name": "get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.get_url_path", "macro_sql": "{% macro get_url_path(field) -%}\n {{ return(adapter.dispatch('get_url_path', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_path"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8895423, "supported_languages": null}, "macro.dbt_utils.default__get_url_path": {"name": "default__get_url_path", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_path.sql", "original_file_path": "macros/web/get_url_path.sql", "unique_id": "macro.dbt_utils.default__get_url_path", "macro_sql": "{% macro default__get_url_path(field) -%}\n\n {%- set stripped_url =\n dbt.replace(\n dbt.replace(field, \"'http://'\", \"''\"), \"'https://'\", \"''\")\n -%}\n\n {%- set first_slash_pos -%}\n coalesce(\n nullif({{ dbt.position(\"'/'\", stripped_url) }}, 0),\n {{ dbt.position(\"'?'\", stripped_url) }} - 1\n )\n {%- endset -%}\n\n {%- set parsed_path =\n dbt.split_part(\n dbt.right(\n stripped_url,\n dbt.length(stripped_url) ~ \"-\" ~ first_slash_pos\n ),\n \"'?'\", 1\n )\n -%}\n\n {{ dbt.safe_cast(\n parsed_path,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.replace", "macro.dbt.position", "macro.dbt.split_part", "macro.dbt.right", "macro.dbt.length", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8908715, "supported_languages": null}, "macro.dbt_utils.get_url_host": {"name": "get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.get_url_host", "macro_sql": "{% macro get_url_host(field) -%}\n {{ return(adapter.dispatch('get_url_host', 'dbt_utils')(field)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__get_url_host"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8914468, "supported_languages": null}, "macro.dbt_utils.default__get_url_host": {"name": "default__get_url_host", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/web/get_url_host.sql", "original_file_path": "macros/web/get_url_host.sql", "unique_id": "macro.dbt_utils.default__get_url_host", "macro_sql": "{% macro default__get_url_host(field) -%}\n\n{%- set parsed =\n dbt.split_part(\n dbt.split_part(\n dbt.replace(\n dbt.replace(\n dbt.replace(field, \"'android-app://'\", \"''\"\n ), \"'http://'\", \"''\"\n ), \"'https://'\", \"''\"\n ), \"'/'\", 1\n ), \"'?'\", 1\n )\n\n-%}\n\n\n {{ dbt.safe_cast(\n parsed,\n dbt.type_string()\n )}}\n\n{%- endmacro %}", "depends_on": {"macros": ["macro.dbt.split_part", "macro.dbt.replace", "macro.dbt.safe_cast", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.892284, "supported_languages": null}, "macro.dbt_utils.test_accepted_range": {"name": "test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.test_accepted_range", "macro_sql": "{% test accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n {{ return(adapter.dispatch('test_accepted_range', 'dbt_utils')(model, column_name, min_value, max_value, inclusive)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_accepted_range"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.893156, "supported_languages": null}, "macro.dbt_utils.default__test_accepted_range": {"name": "default__test_accepted_range", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/accepted_range.sql", "original_file_path": "macros/generic_tests/accepted_range.sql", "unique_id": "macro.dbt_utils.default__test_accepted_range", "macro_sql": "{% macro default__test_accepted_range(model, column_name, min_value=none, max_value=none, inclusive=true) %}\n\nwith meet_condition as(\n select *\n from {{ model }}\n),\n\nvalidation_errors as (\n select *\n from meet_condition\n where\n -- never true, defaults to an empty result set. Exists to ensure any combo of the `or` clauses below succeeds\n 1 = 2\n\n {%- if min_value is not none %}\n -- records with a value >= min_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} > {{- \"=\" if inclusive }} {{ min_value }}\n {%- endif %}\n\n {%- if max_value is not none %}\n -- records with a value <= max_value are permitted. The `not` flips this to find records that don't meet the rule.\n or not {{ column_name }} < {{- \"=\" if inclusive }} {{ max_value }}\n {%- endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.894064, "supported_languages": null}, "macro.dbt_utils.test_not_constant": {"name": "test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.test_not_constant", "macro_sql": "{% test not_constant(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_constant', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_constant"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8948226, "supported_languages": null}, "macro.dbt_utils.default__test_not_constant": {"name": "default__test_not_constant", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_constant.sql", "original_file_path": "macros/generic_tests/not_constant.sql", "unique_id": "macro.dbt_utils.default__test_not_constant", "macro_sql": "{% macro default__test_not_constant(model, column_name, group_by_columns) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nselect\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count(distinct {{ column_name }}) as filler_column\n\nfrom {{ model }}\n\n {{groupby_gb_cols}}\n\nhaving count(distinct {{ column_name }}) = 1\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8957236, "supported_languages": null}, "macro.dbt_utils.test_cardinality_equality": {"name": "test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.test_cardinality_equality", "macro_sql": "{% test cardinality_equality(model, column_name, to, field) %}\n {{ return(adapter.dispatch('test_cardinality_equality', 'dbt_utils')(model, column_name, to, field)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_cardinality_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8964515, "supported_languages": null}, "macro.dbt_utils.default__test_cardinality_equality": {"name": "default__test_cardinality_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/cardinality_equality.sql", "original_file_path": "macros/generic_tests/cardinality_equality.sql", "unique_id": "macro.dbt_utils.default__test_cardinality_equality", "macro_sql": "{% macro default__test_cardinality_equality(model, column_name, to, field) %}\n\n{# T-SQL does not let you use numbers as aliases for columns #}\n{# Thus, no \"GROUP BY 1\" #}\n\nwith table_a as (\nselect\n {{ column_name }},\n count(*) as num_rows\nfrom {{ model }}\ngroup by {{ column_name }}\n),\n\ntable_b as (\nselect\n {{ field }},\n count(*) as num_rows\nfrom {{ to }}\ngroup by {{ field }}\n),\n\nexcept_a as (\n select *\n from table_a\n {{ dbt.except() }}\n select *\n from table_b\n),\n\nexcept_b as (\n select *\n from table_b\n {{ dbt.except() }}\n select *\n from table_a\n),\n\nunioned as (\n select *\n from except_a\n union all\n select *\n from except_b\n)\n\nselect *\nfrom unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8971088, "supported_languages": null}, "macro.dbt_utils.test_at_least_one": {"name": "test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.test_at_least_one", "macro_sql": "{% test at_least_one(model, column_name, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_at_least_one', 'dbt_utils')(model, column_name, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_at_least_one"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8980005, "supported_languages": null}, "macro.dbt_utils.default__test_at_least_one": {"name": "default__test_at_least_one", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/at_least_one.sql", "original_file_path": "macros/generic_tests/at_least_one.sql", "unique_id": "macro.dbt_utils.default__test_at_least_one", "macro_sql": "{% macro default__test_at_least_one(model, column_name, group_by_columns) %}\n\n{% set pruned_cols = [column_name] %}\n\n{% if group_by_columns|length() > 0 %}\n\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n {% set pruned_cols = group_by_columns %}\n\n {% if column_name not in pruned_cols %}\n {% do pruned_cols.append(column_name) %}\n {% endif %}\n\n{% endif %}\n\n{% set select_pruned_cols = pruned_cols|join(' ,') %}\n\nselect *\nfrom (\n with pruned_rows as (\n select\n {{ select_pruned_cols }}\n from {{ model }}\n {% if group_by_columns|length() == 0 %}\n where {{ column_name }} is not null\n limit 1\n {% endif %}\n )\n select\n {# In TSQL, subquery aggregate columns need aliases #}\n {# thus: a filler col name, 'filler_column' #}\n {{select_gb_cols}}\n count({{ column_name }}) as filler_column\n\n from pruned_rows\n\n {{groupby_gb_cols}}\n\n having count({{ column_name }}) = 0\n\n) validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.8996599, "supported_languages": null}, "macro.dbt_utils.test_fewer_rows_than": {"name": "test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.test_fewer_rows_than", "macro_sql": "{% test fewer_rows_than(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_fewer_rows_than', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_fewer_rows_than"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.900711, "supported_languages": null}, "macro.dbt_utils.default__test_fewer_rows_than": {"name": "default__test_fewer_rows_than", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/fewer_rows_than.sql", "original_file_path": "macros/generic_tests/fewer_rows_than.sql", "unique_id": "macro.dbt_utils.default__test_fewer_rows_than", "macro_sql": "{% macro default__test_fewer_rows_than(model, compare_model, group_by_columns) %}\n\n{{ config(fail_calc = 'sum(coalesce(row_count_delta, 0))') }}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in equal_rowcount. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_fewer_rows_than'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_our_model \n from {{ model }}\n {{ groupby_gb_cols }}\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_fewer_rows_than,\n count(*) as count_comparison_model \n from {{ compare_model }}\n {{ groupby_gb_cols }}\n\n),\ncounts as (\n\n select\n\n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_our_model,\n count_comparison_model\n from a\n full join b on \n a.id_dbtutils_test_fewer_rows_than = b.id_dbtutils_test_fewer_rows_than\n {{ join_gb_cols }}\n\n),\nfinal as (\n\n select *,\n case\n -- fail the test if we have more rows than the reference model and return the row count delta\n when count_our_model > count_comparison_model then (count_our_model - count_comparison_model)\n -- fail the test if they are the same number\n when count_our_model = count_comparison_model then 1\n -- pass the test if the delta is positive (i.e. return the number 0)\n else 0\n end as row_count_delta\n from counts\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9026327, "supported_languages": null}, "macro.dbt_utils.test_not_null_proportion": {"name": "test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.test_not_null_proportion", "macro_sql": "{% macro test_not_null_proportion(model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_not_null_proportion', 'dbt_utils')(model, group_by_columns, **kwargs)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_null_proportion"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.903503, "supported_languages": null}, "macro.dbt_utils.default__test_not_null_proportion": {"name": "default__test_not_null_proportion", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_null_proportion.sql", "original_file_path": "macros/generic_tests/not_null_proportion.sql", "unique_id": "macro.dbt_utils.default__test_not_null_proportion", "macro_sql": "{% macro default__test_not_null_proportion(model, group_by_columns) %}\n\n{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}\n{% set at_least = kwargs.get('at_least', kwargs.get('arg')) %}\n{% set at_most = kwargs.get('at_most', kwargs.get('arg', 1)) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith validation as (\n select\n {{select_gb_cols}}\n sum(case when {{ column_name }} is null then 0 else 1 end) / cast(count(*) as {{ dbt.type_numeric() }}) as not_null_proportion\n from {{ model }}\n {{groupby_gb_cols}}\n),\nvalidation_errors as (\n select\n {{select_gb_cols}}\n not_null_proportion\n from validation\n where not_null_proportion < {{ at_least }} or not_null_proportion > {{ at_most }}\n)\nselect\n *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_numeric"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.905225, "supported_languages": null}, "macro.dbt_utils.test_not_accepted_values": {"name": "test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.test_not_accepted_values", "macro_sql": "{% test not_accepted_values(model, column_name, values, quote=True) %}\n {{ return(adapter.dispatch('test_not_accepted_values', 'dbt_utils')(model, column_name, values, quote)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_accepted_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9060462, "supported_languages": null}, "macro.dbt_utils.default__test_not_accepted_values": {"name": "default__test_not_accepted_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_accepted_values.sql", "original_file_path": "macros/generic_tests/not_accepted_values.sql", "unique_id": "macro.dbt_utils.default__test_not_accepted_values", "macro_sql": "{% macro default__test_not_accepted_values(model, column_name, values, quote=True) %}\nwith all_values as (\n\n select distinct\n {{ column_name }} as value_field\n\n from {{ model }}\n\n),\n\nvalidation_errors as (\n\n select\n value_field\n\n from all_values\n where value_field 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)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.906949, "supported_languages": null}, "macro.dbt_utils.test_equal_rowcount": {"name": "test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.test_equal_rowcount", "macro_sql": "{% test equal_rowcount(model, compare_model, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_equal_rowcount', 'dbt_utils')(model, compare_model, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equal_rowcount"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9080768, "supported_languages": null}, "macro.dbt_utils.default__test_equal_rowcount": {"name": "default__test_equal_rowcount", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equal_rowcount.sql", "original_file_path": "macros/generic_tests/equal_rowcount.sql", "unique_id": "macro.dbt_utils.default__test_equal_rowcount", "macro_sql": "{% macro default__test_equal_rowcount(model, compare_model, group_by_columns) %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = 'sum(coalesce(diff_count, 0))') }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(', ') + ', ' %}\n {% set join_gb_cols %}\n {% for c in group_by_columns %}\n and a.{{c}} = b.{{c}}\n {% endfor %}\n {% endset %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n{#-- We must add a fake join key in case additional grouping variables are not provided --#}\n{#-- Redshift does not allow for dynamically created join conditions (e.g. full join on 1 = 1 --#}\n{#-- The same logic is used in fewer_rows_than. In case of changes, maintain consistent logic --#}\n{% set group_by_columns = ['id_dbtutils_test_equal_rowcount'] + group_by_columns %}\n{% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n\nwith a as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_a \n from {{ model }}\n {{groupby_gb_cols}}\n\n\n),\nb as (\n\n select \n {{select_gb_cols}}\n 1 as id_dbtutils_test_equal_rowcount,\n count(*) as count_b \n from {{ compare_model }}\n {{groupby_gb_cols}}\n\n),\nfinal as (\n\n select\n \n {% for c in group_by_columns -%}\n a.{{c}} as {{c}}_a,\n b.{{c}} as {{c}}_b,\n {% endfor %}\n\n count_a,\n count_b,\n abs(count_a - count_b) as diff_count\n\n from a\n full join b\n on\n a.id_dbtutils_test_equal_rowcount = b.id_dbtutils_test_equal_rowcount\n {{join_gb_cols}}\n\n\n)\n\nselect * from final\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9101288, "supported_languages": null}, "macro.dbt_utils.test_equality": {"name": "test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.test_equality", "macro_sql": "{% test equality(model, compare_model, compare_columns=None, exclude_columns=None, precision = None) %}\n {{ return(adapter.dispatch('test_equality', 'dbt_utils')(model, compare_model, compare_columns, exclude_columns, precision)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_equality"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9122846, "supported_languages": null}, "macro.dbt_utils.default__test_equality": {"name": "default__test_equality", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/equality.sql", "original_file_path": "macros/generic_tests/equality.sql", "unique_id": "macro.dbt_utils.default__test_equality", "macro_sql": "{% macro default__test_equality(model, compare_model, compare_columns=None, exclude_columns=None, precision = None) %}\n\n{%- if compare_columns and exclude_columns -%}\n {{ exceptions.raise_compiler_error(\"Both a compare and an ignore list were provided to the `equality` macro. Only one is allowed\") }}\n{%- endif -%}\n\n{% set set_diff %}\n count(*) + coalesce(abs(\n sum(case when which_diff = 'a_minus_b' then 1 else 0 end) -\n sum(case when which_diff = 'b_minus_a' then 1 else 0 end)\n ), 0)\n{% endset %}\n\n{#-- Needs to be set at parse time, before we return '' below --#}\n{{ config(fail_calc = set_diff) }}\n\n{#-- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}\n{%- if not execute -%}\n {{ return('') }}\n{% endif %}\n\n\n\n-- setup\n{%- do dbt_utils._is_relation(model, 'test_equality') -%}\n\n{# Ensure there are no extra columns in the compare_model vs model #}\n{%- if not compare_columns -%}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- do dbt_utils._is_ephemeral(compare_model, 'test_equality') -%}\n\n {%- set model_columns = adapter.get_columns_in_relation(model) -%}\n {%- set compare_model_columns = adapter.get_columns_in_relation(compare_model) -%}\n\n\n {%- if exclude_columns -%}\n {#-- Lower case ignore columns for easier comparison --#}\n {%- set exclude_columns = exclude_columns | map(\"lower\") | list %}\n\n {# Filter out the excluded columns #}\n {%- set include_columns = [] %}\n {%- set include_model_columns = [] %}\n {%- for column in model_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n {%- for column in compare_model_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_model_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n\n {%- set compare_columns_set = set(include_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- set compare_model_columns_set = set(include_model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- else -%}\n {%- set compare_columns_set = set(model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- set compare_model_columns_set = set(compare_model_columns | map(attribute='quoted') | map(\"lower\")) %}\n {%- endif -%}\n\n {% if compare_columns_set != compare_model_columns_set %}\n {{ exceptions.raise_compiler_error(compare_model ~\" has less columns than \" ~ model ~ \", please ensure they have the same columns or use the `compare_columns` or `exclude_columns` arguments to subset them.\") }}\n {% endif %}\n\n\n{% endif %}\n\n{%- if not precision -%}\n {%- if not compare_columns -%}\n {# \n You cannot get the columns in an ephemeral model (due to not existing in the information schema),\n so if the user does not provide an explicit list of columns we must error in the case it is ephemeral\n #}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set compare_columns = adapter.get_columns_in_relation(model)-%}\n\n {%- if exclude_columns -%}\n {#-- Lower case ignore columns for easier comparison --#}\n {%- set exclude_columns = exclude_columns | map(\"lower\") | list %}\n\n {# Filter out the excluded columns #}\n {%- set include_columns = [] %}\n {%- for column in compare_columns -%}\n {%- if column.name | lower not in exclude_columns -%}\n {% do include_columns.append(column) %}\n {%- endif %}\n {%- endfor %}\n\n {%- set compare_columns = include_columns | map(attribute='quoted') %}\n {%- else -%} {# Compare columns provided #}\n {%- set compare_columns = compare_columns | map(attribute='quoted') %}\n {%- endif -%}\n {%- endif -%}\n\n {% set compare_cols_csv = compare_columns | join(', ') %}\n\n{% else %} {# Precision required #}\n {#-\n If rounding is required, we need to get the types, so it cannot be ephemeral even if they provide column names\n -#}\n {%- do dbt_utils._is_ephemeral(model, 'test_equality') -%}\n {%- set columns = adapter.get_columns_in_relation(model) -%}\n\n {% set columns_list = [] %}\n {%- for col in columns -%}\n {%- if (\n (col.name|lower in compare_columns|map('lower') or not compare_columns) and\n (col.name|lower not in exclude_columns|map('lower') or not exclude_columns)\n ) -%}\n {# Databricks double type is not picked up by any number type checks in dbt #}\n {%- if col.is_float() or col.is_numeric() or col.data_type == 'double' -%}\n {# Cast is required due to postgres not having round for a double precision number #}\n {%- do columns_list.append('round(cast(' ~ col.quoted ~ ' as ' ~ dbt.type_numeric() ~ '),' ~ precision ~ ') as ' ~ col.quoted) -%}\n {%- else -%} {# Non-numeric type #}\n {%- do columns_list.append(col.quoted) -%}\n {%- endif -%}\n {% endif %}\n {%- endfor -%}\n\n {% set compare_cols_csv = columns_list | join(', ') %}\n\n{% endif %}\n\nwith a as (\n\n select * from {{ model }}\n\n),\n\nb as (\n\n select * from {{ compare_model }}\n\n),\n\na_minus_b as (\n\n select {{compare_cols_csv}} from a\n {{ dbt.except() }}\n select {{compare_cols_csv}} from b\n\n),\n\nb_minus_a as (\n\n select {{compare_cols_csv}} from b\n {{ dbt.except() }}\n select {{compare_cols_csv}} from a\n\n),\n\nunioned as (\n\n select 'a_minus_b' as which_diff, a_minus_b.* from a_minus_b\n union all\n select 'b_minus_a' as which_diff, b_minus_a.* from b_minus_a\n\n)\n\nselect * from unioned\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils._is_relation", "macro.dbt_utils._is_ephemeral", "macro.dbt.type_numeric", "macro.dbt.except"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9198115, "supported_languages": null}, "macro.dbt_utils.test_not_empty_string": {"name": "test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.test_not_empty_string", "macro_sql": "{% test not_empty_string(model, column_name, trim_whitespace=true) %}\n\n {{ return(adapter.dispatch('test_not_empty_string', 'dbt_utils')(model, column_name, trim_whitespace)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_not_empty_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9205797, "supported_languages": null}, "macro.dbt_utils.default__test_not_empty_string": {"name": "default__test_not_empty_string", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/not_empty_string.sql", "original_file_path": "macros/generic_tests/not_empty_string.sql", "unique_id": "macro.dbt_utils.default__test_not_empty_string", "macro_sql": "{% macro default__test_not_empty_string(model, column_name, trim_whitespace=true) %}\n\n with\n \n all_values as (\n\n select \n\n\n {% if trim_whitespace == true -%}\n\n trim({{ column_name }}) as {{ column_name }}\n\n {%- else -%}\n\n {{ column_name }}\n\n {%- endif %}\n \n from {{ model }}\n\n ),\n\n errors as (\n\n select * from all_values\n where {{ column_name }} = ''\n\n )\n\n select * from errors\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9211652, "supported_languages": null}, "macro.dbt_utils.test_recency": {"name": "test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.test_recency", "macro_sql": "{% test recency(model, field, datepart, interval, ignore_time_component=False, group_by_columns = []) %}\n {{ return(adapter.dispatch('test_recency', 'dbt_utils')(model, field, datepart, interval, ignore_time_component, group_by_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_recency"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.922184, "supported_languages": null}, "macro.dbt_utils.default__test_recency": {"name": "default__test_recency", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/recency.sql", "original_file_path": "macros/generic_tests/recency.sql", "unique_id": "macro.dbt_utils.default__test_recency", "macro_sql": "{% macro default__test_recency(model, field, datepart, interval, ignore_time_component, group_by_columns) %}\n\n{% set threshold = 'cast(' ~ dbt.dateadd(datepart, interval * -1, dbt.current_timestamp()) ~ ' as ' ~ ('date' if ignore_time_component else dbt.type_timestamp()) ~ ')' %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(' ,') + ', ' %}\n {% set groupby_gb_cols = 'group by ' + group_by_columns|join(',') %}\n{% endif %}\n\n\nwith recency as (\n\n select \n\n {{ select_gb_cols }}\n {% if ignore_time_component %}\n cast(max({{ field }}) as date) as most_recent\n {%- else %}\n max({{ field }}) as most_recent\n {%- endif %}\n\n from {{ model }}\n\n {{ groupby_gb_cols }}\n\n)\n\nselect\n\n {{ select_gb_cols }}\n most_recent,\n {{ threshold }} as threshold\n\nfrom recency\nwhere most_recent < {{ threshold }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.dateadd", "macro.dbt.current_timestamp", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9237657, "supported_languages": null}, "macro.dbt_utils.test_unique_combination_of_columns": {"name": "test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.test_unique_combination_of_columns", "macro_sql": "{% test unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n {{ return(adapter.dispatch('test_unique_combination_of_columns', 'dbt_utils')(model, combination_of_columns, quote_columns)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_unique_combination_of_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9245794, "supported_languages": null}, "macro.dbt_utils.default__test_unique_combination_of_columns": {"name": "default__test_unique_combination_of_columns", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/unique_combination_of_columns.sql", "original_file_path": "macros/generic_tests/unique_combination_of_columns.sql", "unique_id": "macro.dbt_utils.default__test_unique_combination_of_columns", "macro_sql": "{% macro default__test_unique_combination_of_columns(model, combination_of_columns, quote_columns=false) %}\n\n{% if not quote_columns %}\n {%- set column_list=combination_of_columns %}\n{% elif quote_columns %}\n {%- set column_list=[] %}\n {% for column in combination_of_columns -%}\n {% set column_list = column_list.append( adapter.quote(column) ) %}\n {%- endfor %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`quote_columns` argument for unique_combination_of_columns test must be one of [True, False] Got: '\" ~ quote ~\"'.'\"\n ) }}\n{% endif %}\n\n{%- set columns_csv=column_list | join(', ') %}\n\n\nwith validation_errors as (\n\n select\n {{ columns_csv }}\n from {{ model }}\n group by {{ columns_csv }}\n having count(*) > 1\n\n)\n\nselect *\nfrom validation_errors\n\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9258084, "supported_languages": null}, "macro.dbt_utils.test_mutually_exclusive_ranges": {"name": "test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.test_mutually_exclusive_ranges", "macro_sql": "{% test mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n {{ return(adapter.dispatch('test_mutually_exclusive_ranges', 'dbt_utils')(model, lower_bound_column, upper_bound_column, partition_by, gaps, zero_length_range_allowed)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_mutually_exclusive_ranges"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9272704, "supported_languages": null}, "macro.dbt_utils.default__test_mutually_exclusive_ranges": {"name": "default__test_mutually_exclusive_ranges", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/mutually_exclusive_ranges.sql", "original_file_path": "macros/generic_tests/mutually_exclusive_ranges.sql", "unique_id": "macro.dbt_utils.default__test_mutually_exclusive_ranges", "macro_sql": "{% macro default__test_mutually_exclusive_ranges(model, lower_bound_column, upper_bound_column, partition_by=None, gaps='allowed', zero_length_range_allowed=False) %}\n{% if gaps == 'not_allowed' %}\n {% set allow_gaps_operator='=' %}\n {% set allow_gaps_operator_in_words='equal_to' %}\n{% elif gaps == 'allowed' %}\n {% set allow_gaps_operator='<=' %}\n {% set allow_gaps_operator_in_words='less_than_or_equal_to' %}\n{% elif gaps == 'required' %}\n {% set allow_gaps_operator='<' %}\n {% set allow_gaps_operator_in_words='less_than' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`gaps` argument for mutually_exclusive_ranges test must be one of ['not_allowed', 'allowed', 'required'] Got: '\" ~ gaps ~\"'.'\"\n ) }}\n{% endif %}\n{% if not zero_length_range_allowed %}\n {% set allow_zero_length_operator='<' %}\n {% set allow_zero_length_operator_in_words='less_than' %}\n{% elif zero_length_range_allowed %}\n {% set allow_zero_length_operator='<=' %}\n {% set allow_zero_length_operator_in_words='less_than_or_equal_to' %}\n{% else %}\n {{ exceptions.raise_compiler_error(\n \"`zero_length_range_allowed` argument for mutually_exclusive_ranges test must be one of [true, false] Got: '\" ~ zero_length_range_allowed ~\"'.'\"\n ) }}\n{% endif %}\n\n{% set partition_clause=\"partition by \" ~ partition_by if partition_by else '' %}\n\nwith window_functions as (\n\n select\n {% if partition_by %}\n {{ partition_by }} as partition_by_col,\n {% endif %}\n {{ lower_bound_column }} as lower_bound,\n {{ upper_bound_column }} as upper_bound,\n\n lead({{ lower_bound_column }}) over (\n {{ partition_clause }}\n order by {{ lower_bound_column }}, {{ upper_bound_column }}\n ) as next_lower_bound,\n\n row_number() over (\n {{ partition_clause }}\n order by {{ lower_bound_column }} desc, {{ upper_bound_column }} desc\n ) = 1 as is_last_record\n\n from {{ model }}\n\n),\n\ncalc as (\n -- We want to return records where one of our assumptions fails, so we'll use\n -- the `not` function with `and` statements so we can write our assumptions more cleanly\n select\n *,\n\n -- For each record: lower_bound should be < upper_bound.\n -- Coalesce it to return an error on the null case (implicit assumption\n -- these columns are not_null)\n coalesce(\n lower_bound {{ allow_zero_length_operator }} upper_bound,\n false\n ) as lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound,\n\n -- For each record: upper_bound {{ allow_gaps_operator }} the next lower_bound.\n -- Coalesce it to handle null cases for the last record.\n coalesce(\n upper_bound {{ allow_gaps_operator }} next_lower_bound,\n is_last_record,\n false\n ) as upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n\n from window_functions\n\n),\n\nvalidation_errors as (\n\n select\n *\n from calc\n\n where not(\n -- THE FOLLOWING SHOULD BE TRUE --\n lower_bound_{{ allow_zero_length_operator_in_words }}_upper_bound\n and upper_bound_{{ allow_gaps_operator_in_words }}_next_lower_bound\n )\n)\n\nselect * from validation_errors\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9301918, "supported_languages": null}, "macro.dbt_utils.test_expression_is_true": {"name": "test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.test_expression_is_true", "macro_sql": "{% test expression_is_true(model, expression, column_name=None) %}\n {{ return(adapter.dispatch('test_expression_is_true', 'dbt_utils')(model, expression, column_name)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_expression_is_true"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9309134, "supported_languages": null}, "macro.dbt_utils.default__test_expression_is_true": {"name": "default__test_expression_is_true", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/expression_is_true.sql", "original_file_path": "macros/generic_tests/expression_is_true.sql", "unique_id": "macro.dbt_utils.default__test_expression_is_true", "macro_sql": "{% macro default__test_expression_is_true(model, expression, column_name) %}\n\n{% set column_list = '*' if should_store_failures() else \"1\" %}\n\nselect\n {{ column_list }}\nfrom {{ model }}\n{% if column_name is none %}\nwhere not({{ expression }})\n{%- else %}\nwhere not({{ column_name }} {{ expression }})\n{%- endif %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.should_store_failures"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9316204, "supported_languages": null}, "macro.dbt_utils.test_sequential_values": {"name": "test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.test_sequential_values", "macro_sql": "{% test sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n {{ return(adapter.dispatch('test_sequential_values', 'dbt_utils')(model, column_name, interval, datepart, group_by_columns)) }}\n\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_sequential_values"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.932627, "supported_languages": null}, "macro.dbt_utils.default__test_sequential_values": {"name": "default__test_sequential_values", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/sequential_values.sql", "original_file_path": "macros/generic_tests/sequential_values.sql", "unique_id": "macro.dbt_utils.default__test_sequential_values", "macro_sql": "{% macro default__test_sequential_values(model, column_name, interval=1, datepart=None, group_by_columns = []) %}\n\n{% set previous_column_name = \"previous_\" ~ dbt_utils.slugify(column_name) %}\n\n{% if group_by_columns|length() > 0 %}\n {% set select_gb_cols = group_by_columns|join(',') + ', ' %}\n {% set partition_gb_cols = 'partition by ' + group_by_columns|join(',') %}\n{% endif %}\n\nwith windowed as (\n\n select\n {{ select_gb_cols }}\n {{ column_name }},\n lag({{ column_name }}) over (\n {{partition_gb_cols}}\n order by {{ column_name }}\n ) as {{ previous_column_name }}\n from {{ model }}\n),\n\nvalidation_errors as (\n select\n *\n from windowed\n {% if datepart %}\n where not(cast({{ column_name }} as {{ dbt.type_timestamp() }})= cast({{ dbt.dateadd(datepart, interval, previous_column_name) }} as {{ dbt.type_timestamp() }}))\n {% else %}\n where not({{ column_name }} = {{ previous_column_name }} + {{ interval }})\n {% endif %}\n)\n\nselect *\nfrom validation_errors\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.slugify", "macro.dbt.type_timestamp", "macro.dbt.dateadd"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9343996, "supported_languages": null}, "macro.dbt_utils.test_relationships_where": {"name": "test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.test_relationships_where", "macro_sql": "{% test relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n {{ return(adapter.dispatch('test_relationships_where', 'dbt_utils')(model, column_name, to, field, from_condition, to_condition)) }}\n{% endtest %}", "depends_on": {"macros": ["macro.dbt_utils.default__test_relationships_where"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9352736, "supported_languages": null}, "macro.dbt_utils.default__test_relationships_where": {"name": "default__test_relationships_where", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/generic_tests/relationships_where.sql", "original_file_path": "macros/generic_tests/relationships_where.sql", "unique_id": "macro.dbt_utils.default__test_relationships_where", "macro_sql": "{% macro default__test_relationships_where(model, column_name, to, field, from_condition=\"1=1\", to_condition=\"1=1\") %}\n\n{# T-SQL has no boolean data type so we use 1=1 which returns TRUE #}\n{# ref https://stackoverflow.com/a/7170753/3842610 #}\n\nwith left_table as (\n\n select\n {{column_name}} as id\n\n from {{model}}\n\n where {{column_name}} is not null\n and {{from_condition}}\n\n),\n\nright_table as (\n\n select\n {{field}} as id\n\n from {{to}}\n\n where {{field}} is not null\n and {{to_condition}}\n\n),\n\nexceptions as (\n\n select\n left_table.id,\n right_table.id as right_id\n\n from left_table\n\n left join right_table\n on left_table.id = right_table.id\n\n where right_table.id is null\n\n)\n\nselect * from exceptions\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.935942, "supported_languages": null}, "macro.dbt_utils.pretty_log_format": {"name": "pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.pretty_log_format", "macro_sql": "{% macro pretty_log_format(message) %}\n {{ return(adapter.dispatch('pretty_log_format', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.93645, "supported_languages": null}, "macro.dbt_utils.default__pretty_log_format": {"name": "default__pretty_log_format", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_log_format.sql", "original_file_path": "macros/jinja_helpers/pretty_log_format.sql", "unique_id": "macro.dbt_utils.default__pretty_log_format", "macro_sql": "{% macro default__pretty_log_format(message) %}\n {{ return( dbt_utils.pretty_time() ~ ' + ' ~ message) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9367785, "supported_languages": null}, "macro.dbt_utils.log_info": {"name": "log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.log_info", "macro_sql": "{% macro log_info(message) %}\n {{ return(adapter.dispatch('log_info', 'dbt_utils')(message)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__log_info"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.937258, "supported_languages": null}, "macro.dbt_utils.default__log_info": {"name": "default__log_info", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/log_info.sql", "original_file_path": "macros/jinja_helpers/log_info.sql", "unique_id": "macro.dbt_utils.default__log_info", "macro_sql": "{% macro default__log_info(message) %}\n {{ log(dbt_utils.pretty_log_format(message), info=True) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.pretty_log_format"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9376059, "supported_languages": null}, "macro.dbt_utils._is_ephemeral": {"name": "_is_ephemeral", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_ephemeral.sql", "original_file_path": "macros/jinja_helpers/_is_ephemeral.sql", "unique_id": "macro.dbt_utils._is_ephemeral", "macro_sql": "{% macro _is_ephemeral(obj, macro) %}\n {%- if obj.is_cte -%}\n {% set ephemeral_prefix = api.Relation.add_ephemeral_prefix('') %}\n {% if obj.name.startswith(ephemeral_prefix) %}\n {% set model_name = obj.name[(ephemeral_prefix|length):] %}\n {% else %}\n {% set model_name = obj.name %}\n {%- endif -%}\n {% set error_message %}\nThe `{{ macro }}` macro cannot be used with ephemeral models, as it relies on the information schema.\n\n`{{ model_name }}` is an ephemeral model. Consider making it a view or table instead.\n {% endset %}\n {%- do exceptions.raise_compiler_error(error_message) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9390779, "supported_languages": null}, "macro.dbt_utils.pretty_time": {"name": "pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.pretty_time", "macro_sql": "{% macro pretty_time(format='%H:%M:%S') %}\n {{ return(adapter.dispatch('pretty_time', 'dbt_utils')(format)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_utils.default__pretty_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.939644, "supported_languages": null}, "macro.dbt_utils.default__pretty_time": {"name": "default__pretty_time", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/pretty_time.sql", "original_file_path": "macros/jinja_helpers/pretty_time.sql", "unique_id": "macro.dbt_utils.default__pretty_time", "macro_sql": "{% macro default__pretty_time(format='%H:%M:%S') %}\n {{ return(modules.datetime.datetime.now().strftime(format)) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9400148, "supported_languages": null}, "macro.dbt_utils.slugify": {"name": "slugify", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/slugify.sql", "original_file_path": "macros/jinja_helpers/slugify.sql", "unique_id": "macro.dbt_utils.slugify", "macro_sql": "{% macro slugify(string) %}\n\n{% if not string %}\n{{ return('') }}\n{% endif %}\n\n{#- Lower case the string -#}\n{% set string = string | lower %}\n{#- Replace spaces and dashes with underscores -#}\n{% set string = modules.re.sub('[ -]+', '_', string) %}\n{#- Only take letters, numbers, and underscores -#}\n{% set string = modules.re.sub('[^a-z0-9_]+', '', string) %}\n{#- Prepends \"_\" if string begins with a number -#}\n{% set string = modules.re.sub('^[0-9]', '_' + string[0], string) %}\n\n{{ return(string) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.9414175, "supported_languages": null}, "macro.dbt_utils._is_relation": {"name": "_is_relation", "resource_type": "macro", "package_name": "dbt_utils", "path": "macros/jinja_helpers/_is_relation.sql", "original_file_path": "macros/jinja_helpers/_is_relation.sql", "unique_id": "macro.dbt_utils._is_relation", "macro_sql": "{% macro _is_relation(obj, macro) %}\n {%- if not (obj is mapping and obj.get('metadata', {}).get('type', '').endswith('Relation')) -%}\n {%- do exceptions.raise_compiler_error(\"Macro \" ~ macro ~ \" expected a Relation but received the value: \" ~ obj) -%}\n {%- endif -%}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1755122568.942246, "supported_languages": null}}, "docs": {"doc.dbt.__overview__": {"name": "__overview__", "resource_type": "doc", "package_name": "dbt", "path": "overview.md", "original_file_path": "docs/overview.md", "unique_id": "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"}, "doc.amazon_ads._fivetran_deleted": {"name": "_fivetran_deleted", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads._fivetran_deleted", "block_contents": "Boolean created by Fivetran to indicate whether the record has been deleted."}, "doc.amazon_ads._fivetran_id": {"name": "_fivetran_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads._fivetran_id", "block_contents": "Unique ID used by Fivetran to sync and dedupe data."}, "doc.amazon_ads._fivetran_synced": {"name": "_fivetran_synced", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads._fivetran_synced", "block_contents": "Timestamp of when a record was last synced."}, "doc.amazon_ads.account_id": {"name": "account_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.account_id", "block_contents": "Identifier for sellers and vendors. Note that this value is not unique and may be the same across marketplaces."}, "doc.amazon_ads.account_name": {"name": "account_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.account_name", "block_contents": "Account Name. Not currently populated for sellers."}, "doc.amazon_ads.ad_group_id": {"name": "ad_group_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_group_id", "block_contents": "The ID of the AdGroup."}, "doc.amazon_ads.ad_group_name": {"name": "ad_group_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_group_name", "block_contents": "The name of the AdGroup."}, "doc.amazon_ads.ad_id": {"name": "ad_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_id", "block_contents": "The ID of the Ad."}, "doc.amazon_ads.ad_keyword_status": {"name": "ad_keyword_status", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.ad_keyword_status", "block_contents": "Current status of a keyword."}, "doc.amazon_ads.advertised_asin": {"name": "advertised_asin", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.advertised_asin", "block_contents": "The ASIN associated to an advertised product."}, "doc.amazon_ads.advertised_sku": {"name": "advertised_sku", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.advertised_sku", "block_contents": "The SKU being advertised."}, "doc.amazon_ads.bid_keyword": {"name": "bid_keyword", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.bid_keyword", "block_contents": "Bid associated with this keyword."}, "doc.amazon_ads.campaign_applicable_budget_rule_id": {"name": "campaign_applicable_budget_rule_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_applicable_budget_rule_id", "block_contents": "The ID associated to the active budget rule for a campaign."}, "doc.amazon_ads.campaign_applicable_budget_rule_name": {"name": "campaign_applicable_budget_rule_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_applicable_budget_rule_name", "block_contents": "The name associated to the active budget rule for a campaign."}, "doc.amazon_ads.campaign_bidding_strategy": {"name": "campaign_bidding_strategy", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_bidding_strategy", "block_contents": "The bidding strategy associated with a campaign."}, "doc.amazon_ads.campaign_budget_amount": {"name": "campaign_budget_amount", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_budget_amount", "block_contents": "Total budget allocated to the campaign."}, "doc.amazon_ads.campaign_budget_currency_code": {"name": "campaign_budget_currency_code", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_budget_currency_code", "block_contents": "The currency code associated with the campaign."}, "doc.amazon_ads.campaign_budget_type": {"name": "campaign_budget_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_budget_type", "block_contents": "One of: daily or lifetime."}, "doc.amazon_ads.campaign_id": {"name": "campaign_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_id", "block_contents": "The ID of the Campaign."}, "doc.amazon_ads.campaign_name": {"name": "campaign_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_name", "block_contents": "The name of the Campaign."}, "doc.amazon_ads.campaign_rule_based_budget_amount": {"name": "campaign_rule_based_budget_amount", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.campaign_rule_based_budget_amount", "block_contents": "The value of the rule-based budget for a campaign."}, "doc.amazon_ads.clicks": {"name": "clicks", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.clicks", "block_contents": "Total number of ad clicks."}, "doc.amazon_ads.cost": {"name": "cost", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.cost", "block_contents": "Total cost of ad clicks."}, "doc.amazon_ads.country_code": {"name": "country_code", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.country_code", "block_contents": "The code for a given country."}, "doc.amazon_ads.creation_date": {"name": "creation_date", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.creation_date", "block_contents": "The date of creation of the record."}, "doc.amazon_ads.currency_code": {"name": "currency_code", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.currency_code", "block_contents": "The currency used for all monetary values for entities under this profile."}, "doc.amazon_ads.default_bid": {"name": "default_bid", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.default_bid", "block_contents": "The date of creation of the record."}, "doc.amazon_ads.impressions": {"name": "impressions", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.impressions", "block_contents": "Total number of ad impressions."}, "doc.amazon_ads.is_most_recent_record": {"name": "is_most_recent_record", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.is_most_recent_record", "block_contents": "Boolean indicating whether record was the most recent instance."}, "doc.amazon_ads.keyword_bid": {"name": "keyword_bid", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_bid", "block_contents": "Bid associated with a keyword or targeting expression."}, "doc.amazon_ads.keyword_id": {"name": "keyword_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_id", "block_contents": "The ID of the keyword."}, "doc.amazon_ads.keyword_match_type": {"name": "keyword_match_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_match_type", "block_contents": "One of (broad, exact, or phrase.)"}, "doc.amazon_ads.keyword_text": {"name": "keyword_text", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_text", "block_contents": "The exact text for the keyword."}, "doc.amazon_ads.keyword_type": {"name": "keyword_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.keyword_type", "block_contents": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT."}, "doc.amazon_ads.last_updated_date": {"name": "last_updated_date", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.last_updated_date", "block_contents": "Date of last update to record."}, "doc.amazon_ads.match_type": {"name": "match_type", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.match_type", "block_contents": "Type of matching for the keyword used in bid. One of: BROAD, PHRASE, or EXACT."}, "doc.amazon_ads.negative_keyword_id": {"name": "negative_keyword_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.negative_keyword_id", "block_contents": "The ID of the negative keyword."}, "doc.amazon_ads.portfolio_id": {"name": "portfolio_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.portfolio_id", "block_contents": "The ID of the Portfolio."}, "doc.amazon_ads.portfolio_name": {"name": "portfolio_name", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.portfolio_name", "block_contents": "The name of the Portfolio."}, "doc.amazon_ads.profile_id": {"name": "profile_id", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.profile_id", "block_contents": "The profile ID associated with your Amazon Ads account. Advertisers who operate in more than one marketplace (for example, Amazon.com, Amazon.co.uk, Amazon.co.jp) will have one profile associated with each marketplace."}, "doc.amazon_ads.report_date": {"name": "report_date", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.report_date", "block_contents": "The date of the report."}, "doc.amazon_ads.search_term": {"name": "search_term", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.search_term", "block_contents": "The search term used by the customer."}, "doc.amazon_ads.serving_status": {"name": "serving_status", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.serving_status", "block_contents": "The current serving status of the record."}, "doc.amazon_ads.state": {"name": "state", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.state", "block_contents": "The state of the record (enabled, paused, or archived)."}, "doc.amazon_ads.targeting": {"name": "targeting", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.targeting", "block_contents": "A string representation of the expression object used in the targeting clause."}, "doc.amazon_ads.source_relation": {"name": "source_relation", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.source_relation", "block_contents": "The source of the record if the unioning functionality is being used. If not this field will be empty."}, "doc.amazon_ads.purchases_30_d": {"name": "purchases_30_d", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.purchases_30_d", "block_contents": "Number of attributed conversion events occurring within 30 days of an ad click."}, "doc.amazon_ads.sales_30_d": {"name": "sales_30_d", "resource_type": "doc", "package_name": "amazon_ads", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.amazon_ads.sales_30_d", "block_contents": "Total value of sales occurring within 30 days of an ad click."}}, "exposures": {}, "metrics": {}, "groups": {}, "selectors": {}, "disabled": {"test.amazon_ads_integration_tests.consistency_account_report": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "consistency_account_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_account_report.sql", "original_file_path": "tests/consistency/consistency_account_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_account_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_account_report"], "alias": "consistency_account_report", "checksum": {"name": "sha256", "checksum": "db2f30dbb810d4f2323b345b8426dafd0de510924496c6ffbcb0a27a51150d48"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.638381, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n account_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__account_report\n group by 1\n),\n\ndev as (\n select\n account_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__account_report\n group by 1\n),\n\nfinal as (\n select \n prod.account_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.account_id = prod.account_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_campaign_report": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "consistency_campaign_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_campaign_report.sql", "original_file_path": "tests/consistency/consistency_campaign_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_campaign_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_campaign_report"], "alias": "consistency_campaign_report", "checksum": {"name": "sha256", "checksum": "438b0e6b9f97f88ea67b3cd186f6030260cdc4e13755121a3ddc945d56d83a03"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.6701186, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n campaign_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__campaign_report\n group by 1\n),\n\ndev as (\n select\n campaign_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__campaign_report\n group by 1\n),\n\nfinal as (\n select \n prod.campaign_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.campaign_id = prod.campaign_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_keyword_report": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "consistency_keyword_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_keyword_report.sql", "original_file_path": "tests/consistency/consistency_keyword_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_keyword_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_keyword_report"], "alias": "consistency_keyword_report", "checksum": {"name": "sha256", "checksum": "e875717bd698fff6ac5c8a36600dcad8376af66ef2fbcc2d96bd9289ccea5468"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.6764529, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__keyword_report\n group by 1\n),\n\ndev as (\n select\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__keyword_report\n group by 1\n),\n\nfinal as (\n select \n prod.keyword_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.keyword_id = prod.keyword_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_ad_report": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "consistency_ad_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_ad_report.sql", "original_file_path": "tests/consistency/consistency_ad_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_ad_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_ad_report"], "alias": "consistency_ad_report", "checksum": {"name": "sha256", "checksum": "d9c5b478203b6491f53b85ed9be3c7e2aa38ce227142a7cdf6b6a3160bb683b3"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.6819925, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n ad_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__ad_report\n group by 1\n),\n\ndev as (\n select\n ad_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__ad_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.ad_id = prod.ad_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_search_report": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "consistency_search_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_search_report.sql", "original_file_path": "tests/consistency/consistency_search_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_search_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_search_report"], "alias": "consistency_search_report", "checksum": {"name": "sha256", "checksum": "48a234be8b8cdec29764d34c8cbdd1f94e209f58a56df99e3dc06a9b76a437cb"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.687448, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n search_term,\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__search_report\n group by 1,2\n),\n\ndev as (\n select\n search_term,\n keyword_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__search_report\n group by 1,2\n),\n\nfinal as (\n select \n prod.search_term,\n prod.keyword_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.search_term = prod.search_term\n and dev.keyword_id = prod.keyword_id\n\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_ad_group_report": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "consistency_ad_group_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_ad_group_report.sql", "original_file_path": "tests/consistency/consistency_ad_group_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_ad_group_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_ad_group_report"], "alias": "consistency_ad_group_report", "checksum": {"name": "sha256", "checksum": "5feb3a728c5bac0a67eaf69493c3435c0821d2e899f421f9b336af4989204ce8"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.6929693, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n ad_group_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__ad_group_report\n group by 1\n),\n\ndev as (\n select\n ad_group_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__ad_group_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_group_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.ad_group_id = prod.ad_group_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.consistency_portfolio_report": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "consistency_portfolio_report", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "consistency/consistency_portfolio_report.sql", "original_file_path": "tests/consistency/consistency_portfolio_report.sql", "unique_id": "test.amazon_ads_integration_tests.consistency_portfolio_report", "fqn": ["amazon_ads_integration_tests", "consistency", "consistency_portfolio_report"], "alias": "consistency_portfolio_report", "checksum": {"name": "sha256", "checksum": "3e0c666e358f5b4aff3ee4859e3978976cf6500ba610b461d3e87f3d4faf1d54"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.6984227, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith prod as (\n select\n portfolio_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_prod.amazon_ads__portfolio_report\n group by 1\n),\n\ndev as (\n select\n portfolio_id,\n sum(clicks) as clicks, \n sum(impressions) as impressions,\n sum(cost) as cost\n {# sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d #}\n from {{ target.schema }}_amazon_ads_dev.amazon_ads__portfolio_report\n group by 1\n),\n\nfinal as (\n select \n prod.portfolio_id,\n prod.clicks as prod_clicks,\n dev.clicks as dev_clicks,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.cost as prod_cost,\n dev.cost as dev_cost\n {# prod.purchases_30_d as prod_purchases_30_d,\n dev.purchases_30_d as dev_purchases_30_d,\n prod.sales_30_d as prod_sales_30_d,\n dev.sales_30_d as dev_sales_30_d #}\n from prod\n full outer join dev \n on dev.portfolio_id = prod.portfolio_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_clicks - dev_clicks) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_cost - dev_cost) >= .01\n {# or abs(prod_purchases_30_d - dev_purchases_30_d) >= .01\n or abs(prod_sales_30_d - dev_sales_30_d) >= .01 #}", "doc_blocks": [], "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.vertical_sum_conversions": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "vertical_sum_conversions", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "integrity/vertical_sum_conversions.sql", "original_file_path": "tests/integrity/vertical_sum_conversions.sql", "unique_id": "test.amazon_ads_integration_tests.vertical_sum_conversions", "fqn": ["amazon_ads_integration_tests", "integrity", "vertical_sum_conversions"], "alias": "vertical_sum_conversions", "checksum": {"name": "sha256", "checksum": "db53e026cb38089b381273005604afadd657727bdab492b5db5653268b7d84bb"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.704673, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith account_source as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ source('amazon_ads', 'campaign_level_report') }}\n),\n\naccount_model as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__account_report') }}\n),\n\nportfolio_source as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ source('amazon_ads', 'campaign_level_report') }}\n),\n\nportfolio_model as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__portfolio_report') }}\n),\n\ncampaign_source as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ source('amazon_ads', 'campaign_level_report') }}\n),\n\ncampaign_model as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__campaign_report') }}\n)\n\n{# Comment out below when running on seed data #}\n{# \n, ad_source as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ source('amazon_ads', 'advertised_product_report') }}\n),\n\nad_model as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__ad_report') }}\n),\n\nad_group_source as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ source('amazon_ads', 'ad_group_level_report') }}\n),\n\nad_group_model as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__ad_group_report') }}\n), \n\nsearch_source as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ source('amazon_ads', 'search_term_ad_keyword_report') }} as ad_performance\n),\n\nsearch_model as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__search_report') }}\n),\n\nkeyword_source as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ source('amazon_ads', 'targeting_keyword_report') }}\n),\n\nkeyword_model as (\n\n select \n sum(coalesce(purchases_30_d, 0)) as total_purchases_30_d,\n sum(coalesce(sales_30_d, 0)) as total_sales_30_d\n from {{ ref('amazon_ads__keyword_report') }}\n)\n\nselect \n 'ads' as comparison\nfrom ad_model \njoin ad_source on true\nwhere abs(ad_model.total_sales_30_d - ad_source.total_sales_30_d) >= .01\n or abs(ad_model.total_purchases_30_d - ad_source.total_purchases_30_d) >= .01\n\nunion all \n\nselect \n 'ad groups' as comparison\nfrom ad_group_model \njoin ad_group_source on true\nwhere abs(ad_group_model.total_sales_30_d - ad_group_source.total_sales_30_d) >= .01\n or abs(ad_group_model.total_purchases_30_d - ad_group_source.total_purchases_30_d) >= .01\n\nunion all \n\nselect \n 'keywords' as comparison\nfrom keyword_model \njoin keyword_source on true\nwhere abs(keyword_model.total_sales_30_d - keyword_source.total_sales_30_d) >= .01\n or abs(keyword_model.total_purchases_30_d - keyword_source.total_purchases_30_d) >= .01\n\nunion all \n\nselect \n 'search' as comparison\nfrom search_model \njoin search_source on true\nwhere abs(search_model.total_sales_30_d - search_source.total_sales_30_d) >= .01\n or abs(search_model.total_purchases_30_d - search_source.total_purchases_30_d) >= .01 \n \nunion all\n #}\n\n\nselect \n 'accounts' as comparison\nfrom account_model \njoin account_source on true\nwhere abs(account_model.total_sales_30_d - account_source.total_sales_30_d) >= .01\n or abs(account_model.total_purchases_30_d - account_source.total_purchases_30_d) >= .01\n\nunion all \n\nselect \n 'portfolios' as comparison\nfrom portfolio_model \njoin portfolio_source on true\nwhere abs(portfolio_model.total_sales_30_d - portfolio_source.total_sales_30_d) >= .01\n or abs(portfolio_model.total_purchases_30_d - portfolio_source.total_purchases_30_d) >= .01\n\nunion all \n\nselect \n 'campaigns' as comparison\nfrom campaign_model \njoin campaign_source on true\nwhere abs(campaign_model.total_sales_30_d - campaign_source.total_sales_30_d) >= .01\n or abs(campaign_model.total_purchases_30_d - campaign_source.total_purchases_30_d) >= .01", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__account_report", "package": null, "version": null}, {"name": "amazon_ads__portfolio_report", "package": null, "version": null}, {"name": "amazon_ads__campaign_report", "package": null, "version": null}], "sources": [["amazon_ads", "campaign_level_report"], ["amazon_ads", "campaign_level_report"], ["amazon_ads", "campaign_level_report"]], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.amazon_ads_integration_tests.horizontal_sum_conversions": [{"database": "postgres", "schema": "public_dbt_test__audit", "name": "horizontal_sum_conversions", "resource_type": "test", "package_name": "amazon_ads_integration_tests", "path": "integrity/horizontal_sum_conversions.sql", "original_file_path": "tests/integrity/horizontal_sum_conversions.sql", "unique_id": "test.amazon_ads_integration_tests.horizontal_sum_conversions", "fqn": ["amazon_ads_integration_tests", "integrity", "horizontal_sum_conversions"], "alias": "horizontal_sum_conversions", "checksum": {"name": "sha256", "checksum": "1b1daead41d43b46c788f17714a08b5ee279c3567d6a47029a7f477af39b2782"}, "config": {"enabled": false, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": ["fivetran_validations"], "meta": {}, "group": null, "materialized": "test", "severity": "ERROR", "store_failures": null, "store_failures_as": null, "where": null, "limit": null, "fail_calc": "count(*)", "warn_if": "!= 0", "error_if": "!= 0"}, "tags": ["fivetran_validations"], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"tags": "fivetran_validations", "enabled": false}, "created_at": 1755122569.7116845, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith ad_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__ad_report') }}\n),\n\naccount_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__account_report') }}\n),\n\nad_group_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__ad_group_report') }}\n),\n\ncampaign_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__campaign_report') }}\n),\n\nkeyword_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__keyword_report') }}\n),\n\nportfolio_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__portfolio_report') }}\n),\n\nsearch_report as (\n\n select \n sum(purchases_30_d) as total_purchases_30_d,\n sum(sales_30_d) as total_sales_30_d\n from {{ ref('amazon_ads__search_report') }}\n)\n\nselect \n 'ad vs account' as comparison\nfrom ad_report \njoin account_report on true\nwhere ad_report.total_purchases_30_d != account_report.total_purchases_30_d\n or ad_report.total_sales_30_d != account_report.total_sales_30_d\n\nunion all \n\nselect \n 'campaign vs ad group' as comparison\nfrom campaign_report \njoin ad_group_report on true\nwhere campaign_report.total_purchases_30_d != ad_group_report.total_purchases_30_d\n or campaign_report.total_sales_30_d != ad_group_report.total_sales_30_d\n\nunion all \n\nselect \n 'portfolio vs campaign' as comparison\nfrom portfolio_report \njoin campaign_report on true\nwhere portfolio_report.total_purchases_30_d != campaign_report.total_purchases_30_d\n or portfolio_report.total_sales_30_d != campaign_report.total_sales_30_d\n\n\nunion all \n\nselect \n 'campaign vs keyword' as comparison\nfrom campaign_report \njoin keyword_report on true\nwhere campaign_report.total_purchases_30_d != keyword_report.total_purchases_30_d\n or campaign_report.total_sales_30_d != keyword_report.total_sales_30_d\nunion all \n\nselect \n 'search_term vs keyword' as comparison\nfrom search_report \njoin keyword_report on true\nwhere search_report.total_purchases_30_d != keyword_report.total_purchases_30_d\n or search_report.total_sales_30_d != keyword_report.total_sales_30_d", "doc_blocks": [], "language": "sql", "refs": [{"name": "amazon_ads__ad_report", "package": null, "version": null}, {"name": "amazon_ads__account_report", "package": null, "version": null}, {"name": "amazon_ads__ad_group_report", "package": null, "version": null}, {"name": "amazon_ads__campaign_report", "package": null, "version": null}, {"name": "amazon_ads__keyword_report", "package": null, "version": null}, {"name": "amazon_ads__portfolio_report", "package": null, "version": null}, {"name": "amazon_ads__search_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}]}, "parent_map": {"seed.amazon_ads_integration_tests.product_ad_history_data": [], "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": [], "seed.amazon_ads_integration_tests.advertised_product_report_data": [], "seed.amazon_ads_integration_tests.portfolio_history_data": [], "seed.amazon_ads_integration_tests.targeting_keyword_report_data": [], "seed.amazon_ads_integration_tests.ad_group_level_report_data": [], "seed.amazon_ads_integration_tests.campaign_history_data": [], "seed.amazon_ads_integration_tests.profile_data": [], "seed.amazon_ads_integration_tests.campaign_level_report_data": [], "seed.amazon_ads_integration_tests.keyword_history_data": [], "seed.amazon_ads_integration_tests.ad_group_history_data": [], "model.amazon_ads.amazon_ads__keyword_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__ad_group_history", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__keyword_history", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.stg_amazon_ads__targeting_keyword_report"], "model.amazon_ads.amazon_ads__ad_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__ad_group_history", "model.amazon_ads.stg_amazon_ads__advertised_product_report", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__product_ad_history", "model.amazon_ads.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__campaign_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__campaign_level_report", "model.amazon_ads.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__portfolio_report": ["model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__campaign_level_report", "model.amazon_ads.stg_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__search_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__ad_group_history", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__keyword_history", "model.amazon_ads.stg_amazon_ads__profile", "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report"], "model.amazon_ads.amazon_ads__ad_group_report": ["model.amazon_ads.int_amazon_ads__portfolio_history", "model.amazon_ads.stg_amazon_ads__ad_group_history", "model.amazon_ads.stg_amazon_ads__ad_group_level_report", "model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__profile"], "model.amazon_ads.amazon_ads__account_report": ["model.amazon_ads.stg_amazon_ads__campaign_history", "model.amazon_ads.stg_amazon_ads__campaign_level_report", "model.amazon_ads.stg_amazon_ads__profile"], "model.amazon_ads.int_amazon_ads__portfolio_history": ["model.amazon_ads.stg_amazon_ads__portfolio_history"], "model.amazon_ads.stg_amazon_ads__portfolio_history": ["model.amazon_ads.stg_amazon_ads__portfolio_history_tmp"], "model.amazon_ads.stg_amazon_ads__profile": ["model.amazon_ads.stg_amazon_ads__profile_tmp"], "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report": ["model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp"], "model.amazon_ads.stg_amazon_ads__targeting_keyword_report": ["model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp"], "model.amazon_ads.stg_amazon_ads__campaign_level_report": ["model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp"], "model.amazon_ads.stg_amazon_ads__ad_group_history": ["model.amazon_ads.stg_amazon_ads__ad_group_history_tmp"], "model.amazon_ads.stg_amazon_ads__product_ad_history": ["model.amazon_ads.stg_amazon_ads__product_ad_history_tmp"], "model.amazon_ads.stg_amazon_ads__keyword_history": ["model.amazon_ads.stg_amazon_ads__keyword_history_tmp"], "model.amazon_ads.stg_amazon_ads__ad_group_level_report": ["model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp"], "model.amazon_ads.stg_amazon_ads__campaign_history": ["model.amazon_ads.stg_amazon_ads__campaign_history_tmp"], "model.amazon_ads.stg_amazon_ads__advertised_product_report": ["model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp"], "model.amazon_ads.stg_amazon_ads__ad_group_history_tmp": ["source.amazon_ads.amazon_ads.ad_group_history"], "model.amazon_ads.stg_amazon_ads__campaign_history_tmp": ["source.amazon_ads.amazon_ads.campaign_history"], "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp": ["source.amazon_ads.amazon_ads.search_term_ad_keyword_report"], "model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp": ["source.amazon_ads.amazon_ads.advertised_product_report"], "model.amazon_ads.stg_amazon_ads__keyword_history_tmp": ["source.amazon_ads.amazon_ads.keyword_history"], "model.amazon_ads.stg_amazon_ads__product_ad_history_tmp": ["source.amazon_ads.amazon_ads.product_ad_history"], "model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp": ["source.amazon_ads.amazon_ads.ad_group_level_report"], "model.amazon_ads.stg_amazon_ads__portfolio_history_tmp": ["source.amazon_ads.amazon_ads.portfolio_history"], "model.amazon_ads.stg_amazon_ads__profile_tmp": ["source.amazon_ads.amazon_ads.profile"], "model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp": ["source.amazon_ads.amazon_ads.campaign_level_report"], "model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp": ["source.amazon_ads.amazon_ads.targeting_keyword_report"], "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66": ["model.amazon_ads.amazon_ads__account_report"], "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061": ["model.amazon_ads.amazon_ads__account_report"], "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a": ["model.amazon_ads.amazon_ads__ad_group_report"], "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3": ["model.amazon_ads.amazon_ads__ad_report"], "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c": ["model.amazon_ads.amazon_ads__campaign_report"], "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6": ["model.amazon_ads.amazon_ads__portfolio_report"], "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a": ["model.amazon_ads.amazon_ads__keyword_report"], "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a": ["model.amazon_ads.amazon_ads__search_report"], "test.amazon_ads.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b": ["model.amazon_ads.stg_amazon_ads__ad_group_history"], "test.amazon_ads.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3": ["model.amazon_ads.stg_amazon_ads__ad_group_level_report"], "test.amazon_ads.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4": ["model.amazon_ads.stg_amazon_ads__advertised_product_report"], "test.amazon_ads.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c": ["model.amazon_ads.stg_amazon_ads__campaign_history"], "test.amazon_ads.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194": ["model.amazon_ads.stg_amazon_ads__campaign_level_report"], "test.amazon_ads.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e": ["model.amazon_ads.stg_amazon_ads__keyword_history"], "test.amazon_ads.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02": ["model.amazon_ads.stg_amazon_ads__portfolio_history"], "test.amazon_ads.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8": ["model.amazon_ads.stg_amazon_ads__product_ad_history"], "test.amazon_ads.not_null_stg_amazon_ads__profile_profile_id.bd192c102b": ["model.amazon_ads.stg_amazon_ads__profile"], "test.amazon_ads.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7": ["model.amazon_ads.stg_amazon_ads__targeting_keyword_report"], "test.amazon_ads.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06": ["model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report"], "source.amazon_ads.amazon_ads.ad_group_history": [], "source.amazon_ads.amazon_ads.ad_group_level_report": [], "source.amazon_ads.amazon_ads.advertised_product_report": [], "source.amazon_ads.amazon_ads.campaign_history": [], "source.amazon_ads.amazon_ads.campaign_level_report": [], "source.amazon_ads.amazon_ads.keyword_history": [], "source.amazon_ads.amazon_ads.portfolio_history": [], "source.amazon_ads.amazon_ads.product_ad_history": [], "source.amazon_ads.amazon_ads.profile": [], "source.amazon_ads.amazon_ads.targeting_keyword_report": [], "source.amazon_ads.amazon_ads.search_term_ad_keyword_report": []}, "child_map": {"seed.amazon_ads_integration_tests.product_ad_history_data": [], "seed.amazon_ads_integration_tests.search_term_ad_keyword_report_data": [], "seed.amazon_ads_integration_tests.advertised_product_report_data": [], "seed.amazon_ads_integration_tests.portfolio_history_data": [], "seed.amazon_ads_integration_tests.targeting_keyword_report_data": [], "seed.amazon_ads_integration_tests.ad_group_level_report_data": [], "seed.amazon_ads_integration_tests.campaign_history_data": [], "seed.amazon_ads_integration_tests.profile_data": [], "seed.amazon_ads_integration_tests.campaign_level_report_data": [], "seed.amazon_ads_integration_tests.keyword_history_data": [], "seed.amazon_ads_integration_tests.ad_group_history_data": [], "model.amazon_ads.amazon_ads__keyword_report": ["test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a"], "model.amazon_ads.amazon_ads__ad_report": ["test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3"], "model.amazon_ads.amazon_ads__campaign_report": ["test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c"], "model.amazon_ads.amazon_ads__portfolio_report": ["test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6"], "model.amazon_ads.amazon_ads__search_report": ["test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a"], "model.amazon_ads.amazon_ads__ad_group_report": ["test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a"], "model.amazon_ads.amazon_ads__account_report": ["test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061", "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66"], "model.amazon_ads.int_amazon_ads__portfolio_history": ["model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__search_report"], "model.amazon_ads.stg_amazon_ads__portfolio_history": ["model.amazon_ads.amazon_ads__portfolio_report", "model.amazon_ads.int_amazon_ads__portfolio_history", "test.amazon_ads.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02"], "model.amazon_ads.stg_amazon_ads__profile": ["model.amazon_ads.amazon_ads__account_report", "model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__portfolio_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads.not_null_stg_amazon_ads__profile_profile_id.bd192c102b"], "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report": ["model.amazon_ads.amazon_ads__search_report", "test.amazon_ads.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06"], "model.amazon_ads.stg_amazon_ads__targeting_keyword_report": ["model.amazon_ads.amazon_ads__keyword_report", "test.amazon_ads.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7"], "model.amazon_ads.stg_amazon_ads__campaign_level_report": ["model.amazon_ads.amazon_ads__account_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__portfolio_report", "test.amazon_ads.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194"], "model.amazon_ads.stg_amazon_ads__ad_group_history": ["model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b"], "model.amazon_ads.stg_amazon_ads__product_ad_history": ["model.amazon_ads.amazon_ads__ad_report", "test.amazon_ads.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8"], "model.amazon_ads.stg_amazon_ads__keyword_history": ["model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e"], "model.amazon_ads.stg_amazon_ads__ad_group_level_report": ["model.amazon_ads.amazon_ads__ad_group_report", "test.amazon_ads.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3"], "model.amazon_ads.stg_amazon_ads__campaign_history": ["model.amazon_ads.amazon_ads__account_report", "model.amazon_ads.amazon_ads__ad_group_report", "model.amazon_ads.amazon_ads__ad_report", "model.amazon_ads.amazon_ads__campaign_report", "model.amazon_ads.amazon_ads__keyword_report", "model.amazon_ads.amazon_ads__portfolio_report", "model.amazon_ads.amazon_ads__search_report", "test.amazon_ads.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c"], "model.amazon_ads.stg_amazon_ads__advertised_product_report": ["model.amazon_ads.amazon_ads__ad_report", "test.amazon_ads.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4"], "model.amazon_ads.stg_amazon_ads__ad_group_history_tmp": ["model.amazon_ads.stg_amazon_ads__ad_group_history"], "model.amazon_ads.stg_amazon_ads__campaign_history_tmp": ["model.amazon_ads.stg_amazon_ads__campaign_history"], "model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp": ["model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report"], "model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp": ["model.amazon_ads.stg_amazon_ads__advertised_product_report"], "model.amazon_ads.stg_amazon_ads__keyword_history_tmp": ["model.amazon_ads.stg_amazon_ads__keyword_history"], "model.amazon_ads.stg_amazon_ads__product_ad_history_tmp": ["model.amazon_ads.stg_amazon_ads__product_ad_history"], "model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp": ["model.amazon_ads.stg_amazon_ads__ad_group_level_report"], "model.amazon_ads.stg_amazon_ads__portfolio_history_tmp": ["model.amazon_ads.stg_amazon_ads__portfolio_history"], "model.amazon_ads.stg_amazon_ads__profile_tmp": ["model.amazon_ads.stg_amazon_ads__profile"], "model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp": ["model.amazon_ads.stg_amazon_ads__campaign_level_report"], "model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp": ["model.amazon_ads.stg_amazon_ads__targeting_keyword_report"], "test.amazon_ads.not_null_amazon_ads__account_report_profile_id.87fb8dbe66": [], "test.amazon_ads.not_null_amazon_ads__account_report_account_id.83adef7061": [], "test.amazon_ads.not_null_amazon_ads__ad_group_report_ad_group_id.8a23dc123a": [], "test.amazon_ads.not_null_amazon_ads__ad_report_ad_id.93728159b3": [], "test.amazon_ads.not_null_amazon_ads__campaign_report_campaign_id.a9cabadd7c": [], "test.amazon_ads.not_null_amazon_ads__portfolio_report_profile_id.1a910441c6": [], "test.amazon_ads.not_null_amazon_ads__keyword_report_keyword_id.303f680e4a": [], "test.amazon_ads.not_null_amazon_ads__search_report_search_term.3c23d4658a": [], "test.amazon_ads.not_null_stg_amazon_ads__ad_group_history_ad_group_id.6b524b990b": [], "test.amazon_ads.not_null_stg_amazon_ads__ad_group_level_report_ad_group_id.ee4ef641c3": [], "test.amazon_ads.not_null_stg_amazon_ads__advertised_product_report_ad_id.307c6bc8d4": [], "test.amazon_ads.not_null_stg_amazon_ads__campaign_history_campaign_id.49e395897c": [], "test.amazon_ads.not_null_stg_amazon_ads__campaign_level_report_campaign_id.1efec68194": [], "test.amazon_ads.not_null_stg_amazon_ads__keyword_history_keyword_id.f21f6add6e": [], "test.amazon_ads.not_null_stg_amazon_ads__portfolio_history_portfolio_id.e22bb2ba02": [], "test.amazon_ads.not_null_stg_amazon_ads__product_ad_history_ad_id.8744ab1cd8": [], "test.amazon_ads.not_null_stg_amazon_ads__profile_profile_id.bd192c102b": [], "test.amazon_ads.not_null_stg_amazon_ads__targeting_keyword_report_keyword_id.101a3299d7": [], "test.amazon_ads.not_null_stg_amazon_ads__search_term_ad_keyword_report_search_term.ef04af3b06": [], "source.amazon_ads.amazon_ads.ad_group_history": ["model.amazon_ads.stg_amazon_ads__ad_group_history_tmp"], "source.amazon_ads.amazon_ads.ad_group_level_report": ["model.amazon_ads.stg_amazon_ads__ad_group_level_report_tmp"], "source.amazon_ads.amazon_ads.advertised_product_report": ["model.amazon_ads.stg_amazon_ads__advertised_product_report_tmp"], "source.amazon_ads.amazon_ads.campaign_history": ["model.amazon_ads.stg_amazon_ads__campaign_history_tmp"], "source.amazon_ads.amazon_ads.campaign_level_report": ["model.amazon_ads.stg_amazon_ads__campaign_level_report_tmp"], "source.amazon_ads.amazon_ads.keyword_history": ["model.amazon_ads.stg_amazon_ads__keyword_history_tmp"], "source.amazon_ads.amazon_ads.portfolio_history": ["model.amazon_ads.stg_amazon_ads__portfolio_history_tmp"], "source.amazon_ads.amazon_ads.product_ad_history": ["model.amazon_ads.stg_amazon_ads__product_ad_history_tmp"], "source.amazon_ads.amazon_ads.profile": ["model.amazon_ads.stg_amazon_ads__profile_tmp"], "source.amazon_ads.amazon_ads.targeting_keyword_report": ["model.amazon_ads.stg_amazon_ads__targeting_keyword_report_tmp"], "source.amazon_ads.amazon_ads.search_term_ad_keyword_report": ["model.amazon_ads.stg_amazon_ads__search_term_ad_keyword_report_tmp"]}, "group_map": {}, "saved_queries": {}, "semantic_models": {}, "unit_tests": {}} \ No newline at end of file