diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e1b663..9321f67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,25 @@ -# dbt_snapchat_ads version.version +# dbt_snapchat_ads v0.8.0 +This release introduces the following updates: + +## Breaking Changes +- Adds ad squad and campaign details to the `snapchat_ads__ad_report` model, so that they can eventually be incorporated in the `dbt_ad_reporting` package for the `ad_reporting__ad_report` model. Fields added are included below. ([#33](https://github.com/fivetran/dbt_snapchat_ads/pull/33)) + - `ad_squad_id` + - `ad_squad_name` + - `campaign_id` + - `campaign_name` + +## Under The Hood +- Updated the tests to include `ad_squad_id` and `campaign_id` in `snapchat.yml` for `snapchat_ads__ad_report` and `snapchat_ads__url_report` to more closely align with other ad reporting packages. ([#33](https://github.com/fivetran/dbt_snapchat_ads/pull/33)) +- Added integrity test to ensure the `snapchat_ads__ad_report` maintains the same row grain count for `ad_id` and `date_day` betweens the source and end models. ([#33](https://github.com/fivetran/dbt_snapchat_ads/pull/33)) +- Updated validation tests in the `integration_tests` folder to check for discrepancies between `conversions` and `conversions_value`. ([#33](https://github.com/fivetran/dbt_snapchat_ads/pull/33)) ## Documentation - Added Quickstart model counts to README. ([#30](https://github.com/fivetran/dbt_snapchat_ads/pull/30)) - Corrected references to connectors and connections in the README. ([#30](https://github.com/fivetran/dbt_snapchat_ads/pull/30)) +- Updated `snapchat.yml` with new above field additions. ([#33](https://github.com/fivetran/dbt_snapchat_ads/pull/33)) + +## Contributors +- [@JeremyDOwens](https://github.com/JeremyDOwens) ([#32](https://github.com/fivetran/dbt_snapchat_ads/pull/32)) # dbt_snapchat_ads v0.7.0 [PR #28](https://github.com/fivetran/dbt_snapchat_ads/pull/28) includes the following **BREAKING CHANGE** updates: diff --git a/README.md b/README.md index 5e94a70..21d1993 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ If you are not using the [Ad Reporting](https://github.com/fivetran/dbt_ad_repor ```yml packages: - package: fivetran/snapchat_ads - version: [">=0.7.0", "<0.8.0"] # we recommend using ranges to capture non-breaking changes automatically + version: [">=0.8.0", "<0.9.0"] # we recommend using ranges to capture non-breaking changes automatically ``` Do NOT include the `snapchat_ads_source` package in this file. The transformation package itself has a dependency on it and will install the source package as well. diff --git a/dbt_project.yml b/dbt_project.yml index 3179ffc..04897d9 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -1,5 +1,5 @@ name: 'snapchat_ads' -version: '0.6.2' +version: '0.8.0' config-version: 2 require-dbt-version: [">=1.3.0", "<2.0.0"] vars: diff --git a/docs/catalog.json b/docs/catalog.json index ee4f8d9..fd900c4 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.8.7", "generated_at": "2024-10-29T19:19:50.401555Z", "invocation_id": "f385af02-cce9-4149-b638-4efd7b534030", "env": {}}, "nodes": {"model.snapchat_ads.snapchat_ads__account_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_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}, "ad_account_id": {"type": "STRING", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "STRING", "index": 4, "name": "ad_account_name", "comment": null}, "currency": {"type": "STRING", "index": 5, "name": "currency", "comment": null}, "swipes": {"type": "INT64", "index": 6, "name": "swipes", "comment": null}, "impressions": {"type": "INT64", "index": 7, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 8, "name": "spend", "comment": null}, "total_conversions": {"type": "INT64", "index": 9, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "NUMERIC", "index": 10, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 11, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 4, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 552, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads.snapchat_ads__account_report"}, "model.snapchat_ads.snapchat_ads__ad_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_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}, "ad_account_id": {"type": "STRING", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "STRING", "index": 4, "name": "ad_account_name", "comment": null}, "ad_id": {"type": "STRING", "index": 5, "name": "ad_id", "comment": null}, "ad_name": {"type": "STRING", "index": 6, "name": "ad_name", "comment": null}, "currency": {"type": "STRING", "index": 7, "name": "currency", "comment": null}, "swipes": {"type": "INT64", "index": 8, "name": "swipes", "comment": null}, "impressions": {"type": "INT64", "index": 9, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 10, "name": "spend", "comment": null}, "total_conversions": {"type": "INT64", "index": 11, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "NUMERIC", "index": 12, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 13, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 70, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 14700, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads.snapchat_ads__ad_report"}, "model.snapchat_ads.snapchat_ads__ad_squad_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__ad_squad_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}, "ad_account_id": {"type": "STRING", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "STRING", "index": 4, "name": "ad_account_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 5, "name": "campaign_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 6, "name": "campaign_name", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 7, "name": "ad_squad_id", "comment": null}, "ad_squad_name": {"type": "STRING", "index": 8, "name": "ad_squad_name", "comment": null}, "currency": {"type": "STRING", "index": 9, "name": "currency", "comment": null}, "swipes": {"type": "INT64", "index": 10, "name": "swipes", "comment": null}, "impressions": {"type": "INT64", "index": 11, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 12, "name": "spend", "comment": null}, "total_conversions": {"type": "INT64", "index": 13, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "NUMERIC", "index": 14, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 15, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 2, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 208, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads.snapchat_ads__ad_squad_report"}, "model.snapchat_ads.snapchat_ads__campaign_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_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}, "ad_account_id": {"type": "STRING", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "STRING", "index": 4, "name": "ad_account_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 5, "name": "campaign_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 6, "name": "campaign_name", "comment": null}, "currency": {"type": "STRING", "index": 7, "name": "currency", "comment": null}, "swipes": {"type": "INT64", "index": 8, "name": "swipes", "comment": null}, "impressions": {"type": "INT64", "index": 9, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 10, "name": "spend", "comment": null}, "total_conversions": {"type": "INT64", "index": 11, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "NUMERIC", "index": 12, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 13, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 1, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 104, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads.snapchat_ads__campaign_report"}, "model.snapchat_ads.snapchat_ads__url_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__url_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}, "ad_account_id": {"type": "STRING", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "STRING", "index": 4, "name": "ad_account_name", "comment": null}, "ad_id": {"type": "STRING", "index": 5, "name": "ad_id", "comment": null}, "ad_name": {"type": "STRING", "index": 6, "name": "ad_name", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 7, "name": "ad_squad_id", "comment": null}, "ad_squad_name": {"type": "STRING", "index": 8, "name": "ad_squad_name", "comment": null}, "campaign_id": {"type": "STRING", "index": 9, "name": "campaign_id", "comment": null}, "campaign_name": {"type": "STRING", "index": 10, "name": "campaign_name", "comment": null}, "currency": {"type": "STRING", "index": 11, "name": "currency", "comment": null}, "base_url": {"type": "STRING", "index": 12, "name": "base_url", "comment": null}, "url_host": {"type": "STRING", "index": 13, "name": "url_host", "comment": null}, "url_path": {"type": "STRING", "index": 14, "name": "url_path", "comment": null}, "utm_source": {"type": "STRING", "index": 15, "name": "utm_source", "comment": null}, "utm_medium": {"type": "STRING", "index": 16, "name": "utm_medium", "comment": null}, "utm_campaign": {"type": "STRING", "index": 17, "name": "utm_campaign", "comment": null}, "utm_content": {"type": "STRING", "index": 18, "name": "utm_content", "comment": null}, "utm_term": {"type": "STRING", "index": 19, "name": "utm_term", "comment": null}, "swipes": {"type": "INT64", "index": 20, "name": "swipes", "comment": null}, "impressions": {"type": "INT64", "index": 21, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 22, "name": "spend", "comment": null}, "total_conversions": {"type": "INT64", "index": 23, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "NUMERIC", "index": 24, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 25, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 70, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 34312, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads.snapchat_ads__url_report"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_account_id": {"type": "STRING", "index": 2, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "STRING", "index": 3, "name": "ad_account_name", "comment": null}, "created_at": {"type": "TIMESTAMP", "index": 4, "name": "created_at", "comment": null}, "advertiser": {"type": "STRING", "index": 5, "name": "advertiser", "comment": null}, "currency": {"type": "STRING", "index": 6, "name": "currency", "comment": null}, "timezone": {"type": "STRING", "index": 7, "name": "timezone", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 8, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 9, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 10, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 111, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 9213, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "name": {"type": "STRING", "index": 2, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 3, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__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_name": {"type": "STRING", "index": 3, "name": "ad_name", "comment": null}, "created_at": {"type": "TIMESTAMP", "index": 4, "name": "created_at", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 5, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "STRING", "index": 6, "name": "creative_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 7, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 8, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 9, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 320, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 50880, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_history"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 2, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "STRING", "index": 3, "name": "creative_id", "comment": null}, "name": {"type": "STRING", "index": 4, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_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}, "date_hour": {"type": "TIMESTAMP", "index": 3, "name": "date_hour", "comment": null}, "attachment_quartile_1": {"type": "NUMERIC", "index": 4, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "NUMERIC", "index": 5, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "NUMERIC", "index": 6, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time": {"type": "NUMERIC", "index": 7, "name": "attachment_total_view_time", "comment": null}, "attachment_view_completion": {"type": "NUMERIC", "index": 8, "name": "attachment_view_completion", "comment": null}, "quartile_1": {"type": "NUMERIC", "index": 9, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "NUMERIC", "index": 10, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "NUMERIC", "index": 11, "name": "quartile_3", "comment": null}, "saves": {"type": "NUMERIC", "index": 12, "name": "saves", "comment": null}, "shares": {"type": "NUMERIC", "index": 13, "name": "shares", "comment": null}, "screen_time": {"type": "NUMERIC", "index": 14, "name": "screen_time", "comment": null}, "video_views": {"type": "NUMERIC", "index": 15, "name": "video_views", "comment": null}, "view_completion": {"type": "NUMERIC", "index": 16, "name": "view_completion", "comment": null}, "view_time": {"type": "NUMERIC", "index": 17, "name": "view_time", "comment": null}, "impressions": {"type": "INT64", "index": 18, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 19, "name": "spend", "comment": null}, "swipes": {"type": "INT64", "index": 20, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 21, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 22, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 1212, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 106656, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_id": {"type": "STRING", "index": 1, "name": "ad_id", "comment": null}, "date": {"type": "TIMESTAMP", "index": 2, "name": "date", "comment": null}, "impressions": {"type": "INT64", "index": 3, "name": "impressions", "comment": null}, "spend": {"type": "INT64", "index": 4, "name": "spend", "comment": null}, "swipes": {"type": "INT64", "index": 5, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 6, "name": "conversion_purchases_value", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 7, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 8, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 9, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 10, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 11, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 12, "name": "conversion_purchases", "comment": null}, "conversion_save": {"type": "INT64", "index": 13, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 14, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 15, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 16, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 17, "name": "conversion_view_content", "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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 2, "name": "ad_squad_id", "comment": null}, "ad_squad_name": {"type": "STRING", "index": 3, "name": "ad_squad_name", "comment": null}, "created_at": {"type": "TIMESTAMP", "index": 4, "name": "created_at", "comment": null}, "campaign_id": {"type": "STRING", "index": 5, "name": "campaign_id", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 6, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 7, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 8, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 228, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 27588, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "campaign_id": {"type": "STRING", "index": 2, "name": "campaign_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 2, "name": "ad_squad_id", "comment": null}, "date_hour": {"type": "TIMESTAMP", "index": 3, "name": "date_hour", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 4, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 5, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 6, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time": {"type": "FLOAT64", "index": 7, "name": "attachment_total_view_time", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 8, "name": "attachment_view_completion", "comment": null}, "quartile_1": {"type": "INT64", "index": 9, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 10, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 11, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 12, "name": "saves", "comment": null}, "shares": {"type": "INT64", "index": 13, "name": "shares", "comment": null}, "screen_time": {"type": "FLOAT64", "index": 14, "name": "screen_time", "comment": null}, "video_views": {"type": "INT64", "index": 15, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 16, "name": "view_completion", "comment": null}, "view_time": {"type": "FLOAT64", "index": 17, "name": "view_time", "comment": null}, "impressions": {"type": "INT64", "index": 18, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 19, "name": "spend", "comment": null}, "swipes": {"type": "INT64", "index": 20, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 21, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 22, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 2000, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_squad_id": {"type": "STRING", "index": 1, "name": "ad_squad_id", "comment": null}, "date": {"type": "DATETIME", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "DATETIME", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "INT64", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "INT64", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "INT64", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "INT64", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "INT64", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "INT64", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "INT64", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "INT64", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "INT64", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "INT64", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "INT64", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "INT64", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "INT64", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "INT64", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "INT64", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "INT64", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "INT64", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "INT64", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "INT64", "index": 41, "name": "view_time_millis", "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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_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}, "ad_account_id": {"type": "STRING", "index": 3, "name": "ad_account_id", "comment": null}, "created_at": {"type": "TIMESTAMP", "index": 4, "name": "created_at", "comment": null}, "campaign_name": {"type": "STRING", "index": 5, "name": "campaign_name", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 6, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 7, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 8, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 58, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 7018, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "STRING", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report", "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}, "date_hour": {"type": "TIMESTAMP", "index": 3, "name": "date_hour", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 4, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 5, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 6, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time": {"type": "FLOAT64", "index": 7, "name": "attachment_total_view_time", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 8, "name": "attachment_view_completion", "comment": null}, "quartile_1": {"type": "INT64", "index": 9, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 10, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 11, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 12, "name": "saves", "comment": null}, "shares": {"type": "INT64", "index": 13, "name": "shares", "comment": null}, "screen_time": {"type": "FLOAT64", "index": 14, "name": "screen_time", "comment": null}, "video_views": {"type": "INT64", "index": 15, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 16, "name": "view_completion", "comment": null}, "view_time": {"type": "FLOAT64", "index": 17, "name": "view_time", "comment": null}, "impressions": {"type": "INT64", "index": 18, "name": "impressions", "comment": null}, "spend": {"type": "FLOAT64", "index": 19, "name": "spend", "comment": null}, "swipes": {"type": "INT64", "index": 20, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 21, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 22, "name": "conversion_purchases", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 2000, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"campaign_id": {"type": "STRING", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "DATETIME", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "DATETIME", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "INT64", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "INT64", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "INT64", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "INT64", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "INT64", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "INT64", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "INT64", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "INT64", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "INT64", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "INT64", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "INT64", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "INT64", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "INT64", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "INT64", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "INT64", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "INT64", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "INT64", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "INT64", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "INT64", "index": 41, "name": "view_time_millis", "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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "creative_id": {"type": "STRING", "index": 2, "name": "creative_id", "comment": null}, "created_at": {"type": "TIMESTAMP", "index": 3, "name": "created_at", "comment": null}, "ad_account_id": {"type": "STRING", "index": 4, "name": "ad_account_id", "comment": null}, "creative_name": {"type": "STRING", "index": 5, "name": "creative_name", "comment": null}, "url": {"type": "STRING", "index": 6, "name": "url", "comment": null}, "_fivetran_synced": {"type": "TIMESTAMP", "index": 7, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 8, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 9, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 119, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 17136, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_history"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "STRING", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "web_view_url": {"type": "STRING", "index": 4, "name": "web_view_url", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"source_relation": {"type": "STRING", "index": 1, "name": "source_relation", "comment": null}, "creative_id": {"type": "STRING", "index": 2, "name": "creative_id", "comment": null}, "param_key": {"type": "STRING", "index": 3, "name": "param_key", "comment": null}, "param_value": {"type": "STRING", "index": 4, "name": "param_value", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 5, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "BOOL", "index": 6, "name": "is_most_recent_record", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 383, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 36051, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": {"metadata": {"type": "view", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history_tmp", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"creative_id": {"type": "STRING", "index": 1, "name": "creative_id", "comment": null}, "key": {"type": "STRING", "index": 2, "name": "key", "comment": null}, "value": {"type": "STRING", "index": 3, "name": "value", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 4, "name": "updated_at", "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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"}, "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_account_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "name": {"type": "STRING", "index": 2, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 111, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 10767, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 2, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "STRING", "index": 3, "name": "creative_id", "comment": null}, "name": {"type": "STRING", "index": 4, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 5, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 320, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 55360, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_hourly_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_id": {"type": "STRING", "index": 1, "name": "ad_id", "comment": null}, "date": {"type": "TIMESTAMP", "index": 2, "name": "date", "comment": null}, "impressions": {"type": "INT64", "index": 3, "name": "impressions", "comment": null}, "spend": {"type": "INT64", "index": 4, "name": "spend", "comment": null}, "swipes": {"type": "INT64", "index": 5, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 6, "name": "conversion_purchases_value", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 7, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 8, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 9, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 10, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 11, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 12, "name": "conversion_purchases", "comment": null}, "conversion_save": {"type": "INT64", "index": 13, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 14, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 15, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 16, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 17, "name": "conversion_view_content", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 1212, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 201176, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_squad_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "campaign_id": {"type": "STRING", "index": 2, "name": "campaign_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 4, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 228, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 30780, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_squad_hourly_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_squad_id": {"type": "STRING", "index": 1, "name": "ad_squad_id", "comment": null}, "date": {"type": "DATETIME", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "DATETIME", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "INT64", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "INT64", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "INT64", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "INT64", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "INT64", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "INT64", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "INT64", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "INT64", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "INT64", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "INT64", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "INT64", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "INT64", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "INT64", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "INT64", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "INT64", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "INT64", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "INT64", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "INT64", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "INT64", "index": 41, "name": "view_time_millis", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 3580, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data"}, "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_campaign_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "STRING", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 4, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 58, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 7830, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_campaign_hourly_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"campaign_id": {"type": "STRING", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "DATETIME", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "DATETIME", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "INT64", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "INT64", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "INT64", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "INT64", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "INT64", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "INT64", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "INT64", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "INT64", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "INT64", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "INT64", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "INT64", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "INT64", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "INT64", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "INT64", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "INT64", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "INT64", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "INT64", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "INT64", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "INT64", "index": 41, "name": "view_time_millis", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 3580, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data"}, "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_creative_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "STRING", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "web_view_url": {"type": "STRING", "index": 4, "name": "web_view_url", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 5, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 119, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 18802, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_creative_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_creative_url_tag_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"creative_id": {"type": "STRING", "index": 1, "name": "creative_id", "comment": null}, "key": {"type": "STRING", "index": 2, "name": "key", "comment": null}, "value": {"type": "STRING", "index": 3, "name": "value", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 4, "name": "updated_at", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 383, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 34902, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data"}}, "sources": {"source.snapchat_ads_source.snapchat_ads.ad_account_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_account_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "name": {"type": "STRING", "index": 2, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 3, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 111, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 10767, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_account_history"}, "source.snapchat_ads_source.snapchat_ads.ad_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_squad_id": {"type": "STRING", "index": 2, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "STRING", "index": 3, "name": "creative_id", "comment": null}, "name": {"type": "STRING", "index": 4, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 5, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 320, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 55360, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_history"}, "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_hourly_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_id": {"type": "STRING", "index": 1, "name": "ad_id", "comment": null}, "date": {"type": "TIMESTAMP", "index": 2, "name": "date", "comment": null}, "impressions": {"type": "INT64", "index": 3, "name": "impressions", "comment": null}, "spend": {"type": "INT64", "index": 4, "name": "spend", "comment": null}, "swipes": {"type": "INT64", "index": 5, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 6, "name": "conversion_purchases_value", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 7, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 8, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 9, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 10, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 11, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 12, "name": "conversion_purchases", "comment": null}, "conversion_save": {"type": "INT64", "index": 13, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 14, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 15, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 16, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 17, "name": "conversion_view_content", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 1212, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 201176, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_hourly_report"}, "source.snapchat_ads_source.snapchat_ads.ad_squad_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_squad_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "campaign_id": {"type": "STRING", "index": 2, "name": "campaign_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 4, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 228, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 30780, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_squad_history"}, "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_ad_squad_hourly_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"ad_squad_id": {"type": "STRING", "index": 1, "name": "ad_squad_id", "comment": null}, "date": {"type": "DATETIME", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "DATETIME", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "INT64", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "INT64", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "INT64", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "INT64", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "INT64", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "INT64", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "INT64", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "INT64", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "INT64", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "INT64", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "INT64", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "INT64", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "INT64", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "INT64", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "INT64", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "INT64", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "INT64", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "INT64", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "INT64", "index": 41, "name": "view_time_millis", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 3580, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report"}, "source.snapchat_ads_source.snapchat_ads.campaign_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_campaign_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "STRING", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 4, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 58, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 7830, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.campaign_history"}, "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_campaign_hourly_report_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"campaign_id": {"type": "STRING", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "DATETIME", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "DATETIME", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "INT64", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "INT64", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "INT64", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "INT64", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "INT64", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "INT64", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "INT64", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "INT64", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "INT64", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "INT64", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "INT64", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "INT64", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "INT64", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "INT64", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "INT64", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "FLOAT64", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "INT64", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "INT64", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "INT64", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "INT64", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "INT64", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "INT64", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "INT64", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "INT64", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "INT64", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "INT64", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "INT64", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "INT64", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "INT64", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "INT64", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "INT64", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "INT64", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "INT64", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "INT64", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "INT64", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "INT64", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "INT64", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "INT64", "index": 41, "name": "view_time_millis", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 10, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 3580, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report"}, "source.snapchat_ads_source.snapchat_ads.creative_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_creative_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"id": {"type": "STRING", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "STRING", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "STRING", "index": 3, "name": "name", "comment": null}, "web_view_url": {"type": "STRING", "index": 4, "name": "web_view_url", "comment": null}, "_fivetran_synced": {"type": "STRING", "index": 5, "name": "_fivetran_synced", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 119, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 18802, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.creative_history"}, "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": {"metadata": {"type": "table", "schema": "snapchat_ads_tests", "name": "snapchat_creative_url_tag_history_data", "database": "dbt-package-testing", "comment": null, "owner": null}, "columns": {"creative_id": {"type": "STRING", "index": 1, "name": "creative_id", "comment": null}, "key": {"type": "STRING", "index": 2, "name": "key", "comment": null}, "value": {"type": "STRING", "index": 3, "name": "value", "comment": null}, "updated_at": {"type": "TIMESTAMP", "index": 4, "name": "updated_at", "comment": null}}, "stats": {"num_rows": {"id": "num_rows", "label": "# Rows", "value": 383, "include": true, "description": "Approximate count of rows in this table"}, "num_bytes": {"id": "num_bytes", "label": "Approximate Size", "value": 34902, "include": true, "description": "Approximate size of table as reported by BigQuery"}, "has_stats": {"id": "has_stats", "label": "Has Stats?", "value": true, "include": false, "description": "Indicates whether there are statistics for this table"}}, "unique_id": "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history"}}, "errors": null} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/catalog/v1.json", "dbt_version": "1.9.0b2", "generated_at": "2025-02-19T03:43:37.968964Z", "invocation_id": "b77a0cfa-0531-4c6d-81ef-0b3d82119e77", "env": {}}, "nodes": {"seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_account_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "name": {"type": "text", "index": 2, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 3, "name": "_fivetran_synced", "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.snapchat_ads_integration_tests.snapchat_ad_account_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_squad_id": {"type": "text", "index": 2, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "text", "index": 3, "name": "creative_id", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_integration_tests.snapchat_ad_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_hourly_report_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "text", "index": 1, "name": "ad_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "impressions": {"type": "integer", "index": 3, "name": "impressions", "comment": null}, "spend": {"type": "integer", "index": 4, "name": "spend", "comment": null}, "swipes": {"type": "integer", "index": 5, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 6, "name": "conversion_purchases_value", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 7, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 8, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 9, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 10, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 11, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 12, "name": "conversion_purchases", "comment": null}, "conversion_save": {"type": "integer", "index": 13, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 14, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 15, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 16, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 17, "name": "conversion_view_content", "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.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_squad_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "campaign_id": {"type": "text", "index": 2, "name": "campaign_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_integration_tests.snapchat_ad_squad_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_squad_hourly_report_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_squad_id": {"type": "text", "index": 1, "name": "ad_squad_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "integer", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "integer", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "integer", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "integer", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "integer", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "integer", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "integer", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "integer", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "integer", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "integer", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "integer", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "integer", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "integer", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "integer", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "integer", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "integer", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "integer", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "integer", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "integer", "index": 41, "name": "view_time_millis", "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.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data"}, "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_campaign_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "text", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_integration_tests.snapchat_campaign_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_campaign_hourly_report_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "text", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "integer", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "integer", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "integer", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "integer", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "integer", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "integer", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "integer", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "integer", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "integer", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "integer", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "integer", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "integer", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "integer", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "integer", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "integer", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "integer", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "integer", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "integer", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "integer", "index": 41, "name": "view_time_millis", "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.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data"}, "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_creative_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "text", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "web_view_url": {"type": "text", "index": 4, "name": "web_view_url", "comment": null}, "_fivetran_synced": {"type": "text", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_integration_tests.snapchat_creative_history_data"}, "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_creative_url_tag_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"creative_id": {"type": "text", "index": 1, "name": "creative_id", "comment": null}, "key": {"type": "text", "index": 2, "name": "key", "comment": null}, "value": {"type": "text", "index": 3, "name": "value", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 4, "name": "updated_at", "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.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data"}, "model.snapchat_ads.snapchat_ads__account_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__account_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "ad_account_id": {"type": "text", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "text", "index": 4, "name": "ad_account_name", "comment": null}, "currency": {"type": "text", "index": 5, "name": "currency", "comment": null}, "swipes": {"type": "bigint", "index": 6, "name": "swipes", "comment": null}, "impressions": {"type": "bigint", "index": 7, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 8, "name": "spend", "comment": null}, "total_conversions": {"type": "numeric", "index": 9, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "numeric", "index": 10, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "numeric", "index": 11, "name": "conversion_purchases", "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.snapchat_ads.snapchat_ads__account_report"}, "model.snapchat_ads.snapchat_ads__ad_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__ad_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "ad_account_id": {"type": "text", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "text", "index": 4, "name": "ad_account_name", "comment": null}, "ad_id": {"type": "text", "index": 5, "name": "ad_id", "comment": null}, "ad_name": {"type": "text", "index": 6, "name": "ad_name", "comment": null}, "ad_squad_id": {"type": "text", "index": 7, "name": "ad_squad_id", "comment": null}, "ad_squad_name": {"type": "text", "index": 8, "name": "ad_squad_name", "comment": null}, "campaign_id": {"type": "text", "index": 9, "name": "campaign_id", "comment": null}, "campaign_name": {"type": "text", "index": 10, "name": "campaign_name", "comment": null}, "currency": {"type": "text", "index": 11, "name": "currency", "comment": null}, "swipes": {"type": "bigint", "index": 12, "name": "swipes", "comment": null}, "impressions": {"type": "bigint", "index": 13, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 14, "name": "spend", "comment": null}, "total_conversions": {"type": "numeric", "index": 15, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "numeric", "index": 16, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "numeric", "index": 17, "name": "conversion_purchases", "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.snapchat_ads.snapchat_ads__ad_report"}, "model.snapchat_ads.snapchat_ads__ad_squad_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__ad_squad_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "ad_account_id": {"type": "text", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "text", "index": 4, "name": "ad_account_name", "comment": null}, "campaign_id": {"type": "text", "index": 5, "name": "campaign_id", "comment": null}, "campaign_name": {"type": "text", "index": 6, "name": "campaign_name", "comment": null}, "ad_squad_id": {"type": "text", "index": 7, "name": "ad_squad_id", "comment": null}, "ad_squad_name": {"type": "text", "index": 8, "name": "ad_squad_name", "comment": null}, "currency": {"type": "text", "index": 9, "name": "currency", "comment": null}, "swipes": {"type": "bigint", "index": 10, "name": "swipes", "comment": null}, "impressions": {"type": "bigint", "index": 11, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 12, "name": "spend", "comment": null}, "total_conversions": {"type": "numeric", "index": 13, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "numeric", "index": 14, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "numeric", "index": 15, "name": "conversion_purchases", "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.snapchat_ads.snapchat_ads__ad_squad_report"}, "model.snapchat_ads.snapchat_ads__campaign_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__campaign_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "ad_account_id": {"type": "text", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "text", "index": 4, "name": "ad_account_name", "comment": null}, "campaign_id": {"type": "text", "index": 5, "name": "campaign_id", "comment": null}, "campaign_name": {"type": "text", "index": 6, "name": "campaign_name", "comment": null}, "currency": {"type": "text", "index": 7, "name": "currency", "comment": null}, "swipes": {"type": "bigint", "index": 8, "name": "swipes", "comment": null}, "impressions": {"type": "bigint", "index": 9, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 10, "name": "spend", "comment": null}, "total_conversions": {"type": "numeric", "index": 11, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "numeric", "index": 12, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "numeric", "index": 13, "name": "conversion_purchases", "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.snapchat_ads.snapchat_ads__campaign_report"}, "model.snapchat_ads.snapchat_ads__url_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__url_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "date_day": {"type": "date", "index": 2, "name": "date_day", "comment": null}, "ad_account_id": {"type": "text", "index": 3, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "text", "index": 4, "name": "ad_account_name", "comment": null}, "ad_id": {"type": "text", "index": 5, "name": "ad_id", "comment": null}, "ad_name": {"type": "text", "index": 6, "name": "ad_name", "comment": null}, "ad_squad_id": {"type": "text", "index": 7, "name": "ad_squad_id", "comment": null}, "ad_squad_name": {"type": "text", "index": 8, "name": "ad_squad_name", "comment": null}, "campaign_id": {"type": "text", "index": 9, "name": "campaign_id", "comment": null}, "campaign_name": {"type": "text", "index": 10, "name": "campaign_name", "comment": null}, "currency": {"type": "text", "index": 11, "name": "currency", "comment": null}, "base_url": {"type": "text", "index": 12, "name": "base_url", "comment": null}, "url_host": {"type": "text", "index": 13, "name": "url_host", "comment": null}, "url_path": {"type": "text", "index": 14, "name": "url_path", "comment": null}, "utm_source": {"type": "text", "index": 15, "name": "utm_source", "comment": null}, "utm_medium": {"type": "text", "index": 16, "name": "utm_medium", "comment": null}, "utm_campaign": {"type": "text", "index": 17, "name": "utm_campaign", "comment": null}, "utm_content": {"type": "text", "index": 18, "name": "utm_content", "comment": null}, "utm_term": {"type": "text", "index": 19, "name": "utm_term", "comment": null}, "swipes": {"type": "bigint", "index": 20, "name": "swipes", "comment": null}, "impressions": {"type": "bigint", "index": 21, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 22, "name": "spend", "comment": null}, "total_conversions": {"type": "numeric", "index": 23, "name": "total_conversions", "comment": null}, "conversion_purchases_value": {"type": "numeric", "index": 24, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "numeric", "index": 25, "name": "conversion_purchases", "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.snapchat_ads.snapchat_ads__url_report"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_account_id": {"type": "text", "index": 2, "name": "ad_account_id", "comment": null}, "ad_account_name": {"type": "text", "index": 3, "name": "ad_account_name", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 4, "name": "created_at", "comment": null}, "advertiser": {"type": "text", "index": 5, "name": "advertiser", "comment": null}, "currency": {"type": "text", "index": 6, "name": "currency", "comment": null}, "timezone": {"type": "text", "index": 7, "name": "timezone", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 8, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 9, "name": "updated_at", "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.snapchat_ads_source.stg_snapchat_ads__ad_account_history"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "name": {"type": "text", "index": 2, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 3, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_history": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_id": {"type": "text", "index": 2, "name": "ad_id", "comment": null}, "ad_name": {"type": "text", "index": 3, "name": "ad_name", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 4, "name": "created_at", "comment": null}, "ad_squad_id": {"type": "text", "index": 5, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "text", "index": 6, "name": "creative_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 7, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 8, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 9, "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.snapchat_ads_source.stg_snapchat_ads__ad_history"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_squad_id": {"type": "text", "index": 2, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "text", "index": 3, "name": "creative_id", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_id": {"type": "text", "index": 2, "name": "ad_id", "comment": null}, "date_hour": {"type": "timestamp without time zone", "index": 3, "name": "date_hour", "comment": null}, "attachment_quartile_1": {"type": "numeric(28,6)", "index": 4, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "numeric(28,6)", "index": 5, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "numeric(28,6)", "index": 6, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time": {"type": "numeric", "index": 7, "name": "attachment_total_view_time", "comment": null}, "attachment_view_completion": {"type": "numeric(28,6)", "index": 8, "name": "attachment_view_completion", "comment": null}, "quartile_1": {"type": "numeric(28,6)", "index": 9, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "numeric(28,6)", "index": 10, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "numeric(28,6)", "index": 11, "name": "quartile_3", "comment": null}, "saves": {"type": "numeric(28,6)", "index": 12, "name": "saves", "comment": null}, "shares": {"type": "numeric(28,6)", "index": 13, "name": "shares", "comment": null}, "screen_time": {"type": "numeric", "index": 14, "name": "screen_time", "comment": null}, "video_views": {"type": "numeric(28,6)", "index": 15, "name": "video_views", "comment": null}, "view_completion": {"type": "numeric(28,6)", "index": 16, "name": "view_completion", "comment": null}, "view_time": {"type": "numeric", "index": 17, "name": "view_time", "comment": null}, "impressions": {"type": "integer", "index": 18, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 19, "name": "spend", "comment": null}, "swipes": {"type": "integer", "index": 20, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 21, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "bigint", "index": 22, "name": "conversion_purchases", "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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_report_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "text", "index": 1, "name": "ad_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "impressions": {"type": "integer", "index": 3, "name": "impressions", "comment": null}, "spend": {"type": "integer", "index": 4, "name": "spend", "comment": null}, "swipes": {"type": "integer", "index": 5, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 6, "name": "conversion_purchases_value", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 7, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 8, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 9, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 10, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 11, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 12, "name": "conversion_purchases", "comment": null}, "conversion_save": {"type": "integer", "index": 13, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 14, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 15, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 16, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 17, "name": "conversion_view_content", "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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_squad_id": {"type": "text", "index": 2, "name": "ad_squad_id", "comment": null}, "ad_squad_name": {"type": "text", "index": 3, "name": "ad_squad_name", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 4, "name": "created_at", "comment": null}, "campaign_id": {"type": "text", "index": 5, "name": "campaign_id", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 6, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 7, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 8, "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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "campaign_id": {"type": "text", "index": 2, "name": "campaign_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "ad_squad_id": {"type": "text", "index": 2, "name": "ad_squad_id", "comment": null}, "date_hour": {"type": "timestamp without time zone", "index": 3, "name": "date_hour", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 4, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 5, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 6, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time": {"type": "numeric", "index": 7, "name": "attachment_total_view_time", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 8, "name": "attachment_view_completion", "comment": null}, "quartile_1": {"type": "integer", "index": 9, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 10, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 11, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 12, "name": "saves", "comment": null}, "shares": {"type": "integer", "index": 13, "name": "shares", "comment": null}, "screen_time": {"type": "numeric", "index": 14, "name": "screen_time", "comment": null}, "video_views": {"type": "integer", "index": 15, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 16, "name": "view_completion", "comment": null}, "view_time": {"type": "numeric", "index": 17, "name": "view_time", "comment": null}, "impressions": {"type": "integer", "index": 18, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 19, "name": "spend", "comment": null}, "swipes": {"type": "integer", "index": 20, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 21, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "bigint", "index": 22, "name": "conversion_purchases", "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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_squad_id": {"type": "text", "index": 1, "name": "ad_squad_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "integer", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "integer", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "integer", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "integer", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "integer", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "integer", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "integer", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "integer", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "integer", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "integer", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "integer", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "integer", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "integer", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "integer", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "integer", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "integer", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "integer", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "integer", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "integer", "index": 41, "name": "view_time_millis", "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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "campaign_id": {"type": "text", "index": 2, "name": "campaign_id", "comment": null}, "ad_account_id": {"type": "text", "index": 3, "name": "ad_account_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 4, "name": "created_at", "comment": null}, "campaign_name": {"type": "text", "index": 5, "name": "campaign_name", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 6, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 7, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 8, "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.snapchat_ads_source.stg_snapchat_ads__campaign_history"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "text", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "campaign_id": {"type": "text", "index": 2, "name": "campaign_id", "comment": null}, "date_hour": {"type": "timestamp without time zone", "index": 3, "name": "date_hour", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 4, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 5, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 6, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time": {"type": "numeric", "index": 7, "name": "attachment_total_view_time", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 8, "name": "attachment_view_completion", "comment": null}, "quartile_1": {"type": "integer", "index": 9, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 10, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 11, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 12, "name": "saves", "comment": null}, "shares": {"type": "integer", "index": 13, "name": "shares", "comment": null}, "screen_time": {"type": "numeric", "index": 14, "name": "screen_time", "comment": null}, "video_views": {"type": "integer", "index": 15, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 16, "name": "view_completion", "comment": null}, "view_time": {"type": "numeric", "index": 17, "name": "view_time", "comment": null}, "impressions": {"type": "integer", "index": 18, "name": "impressions", "comment": null}, "spend": {"type": "numeric", "index": 19, "name": "spend", "comment": null}, "swipes": {"type": "integer", "index": 20, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 21, "name": "conversion_purchases_value", "comment": null}, "conversion_purchases": {"type": "bigint", "index": 22, "name": "conversion_purchases", "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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "text", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "integer", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "integer", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "integer", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "integer", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "integer", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "integer", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "integer", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "integer", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "integer", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "integer", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "integer", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "integer", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "integer", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "integer", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "integer", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "integer", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "integer", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "integer", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "integer", "index": 41, "name": "view_time_millis", "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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_history": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "creative_id": {"type": "text", "index": 2, "name": "creative_id", "comment": null}, "created_at": {"type": "timestamp without time zone", "index": 3, "name": "created_at", "comment": null}, "ad_account_id": {"type": "text", "index": 4, "name": "ad_account_id", "comment": null}, "creative_name": {"type": "text", "index": 5, "name": "creative_name", "comment": null}, "url": {"type": "text", "index": 6, "name": "url", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 7, "name": "_fivetran_synced", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 8, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 9, "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.snapchat_ads_source.stg_snapchat_ads__creative_history"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "text", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "web_view_url": {"type": "text", "index": 4, "name": "web_view_url", "comment": null}, "_fivetran_synced": {"type": "text", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": {"metadata": {"type": "BASE TABLE", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"source_relation": {"type": "text", "index": 1, "name": "source_relation", "comment": null}, "creative_id": {"type": "text", "index": 2, "name": "creative_id", "comment": null}, "param_key": {"type": "text", "index": 3, "name": "param_key", "comment": null}, "param_value": {"type": "text", "index": 4, "name": "param_value", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 5, "name": "updated_at", "comment": null}, "is_most_recent_record": {"type": "boolean", "index": 6, "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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"}, "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": {"metadata": {"type": "VIEW", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history_tmp", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"creative_id": {"type": "text", "index": 1, "name": "creative_id", "comment": null}, "key": {"type": "text", "index": 2, "name": "key", "comment": null}, "value": {"type": "text", "index": 3, "name": "value", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 4, "name": "updated_at", "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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"}}, "sources": {"source.snapchat_ads_source.snapchat_ads.ad_account_history": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_ad_account_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "name": {"type": "text", "index": 2, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 3, "name": "_fivetran_synced", "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.snapchat_ads_source.snapchat_ads.ad_account_history"}, "source.snapchat_ads_source.snapchat_ads.ad_history": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_ad_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_squad_id": {"type": "text", "index": 2, "name": "ad_squad_id", "comment": null}, "creative_id": {"type": "text", "index": 3, "name": "creative_id", "comment": null}, "name": {"type": "text", "index": 4, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_source.snapchat_ads.ad_history"}, "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_ad_hourly_report_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_id": {"type": "text", "index": 1, "name": "ad_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "impressions": {"type": "integer", "index": 3, "name": "impressions", "comment": null}, "spend": {"type": "integer", "index": 4, "name": "spend", "comment": null}, "swipes": {"type": "integer", "index": 5, "name": "swipes", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 6, "name": "conversion_purchases_value", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 7, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 8, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 9, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 10, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 11, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 12, "name": "conversion_purchases", "comment": null}, "conversion_save": {"type": "integer", "index": 13, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 14, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 15, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 16, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 17, "name": "conversion_view_content", "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.snapchat_ads_source.snapchat_ads.ad_hourly_report"}, "source.snapchat_ads_source.snapchat_ads.ad_squad_history": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_ad_squad_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "campaign_id": {"type": "text", "index": 2, "name": "campaign_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_source.snapchat_ads.ad_squad_history"}, "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_ad_squad_hourly_report_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"ad_squad_id": {"type": "text", "index": 1, "name": "ad_squad_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "integer", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "integer", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "integer", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "integer", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "integer", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "integer", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "integer", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "integer", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "integer", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "integer", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "integer", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "integer", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "integer", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "integer", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "integer", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "integer", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "integer", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "integer", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "integer", "index": 41, "name": "view_time_millis", "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.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report"}, "source.snapchat_ads_source.snapchat_ads.campaign_history": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_campaign_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "text", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "_fivetran_synced": {"type": "text", "index": 4, "name": "_fivetran_synced", "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.snapchat_ads_source.snapchat_ads.campaign_history"}, "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_campaign_hourly_report_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"campaign_id": {"type": "text", "index": 1, "name": "campaign_id", "comment": null}, "date": {"type": "timestamp without time zone", "index": 2, "name": "date", "comment": null}, "_fivetran_synced": {"type": "timestamp without time zone", "index": 3, "name": "_fivetran_synced", "comment": null}, "android_installs": {"type": "integer", "index": 4, "name": "android_installs", "comment": null}, "attachment_avg_view_time_millis": {"type": "integer", "index": 5, "name": "attachment_avg_view_time_millis", "comment": null}, "attachment_quartile_1": {"type": "integer", "index": 6, "name": "attachment_quartile_1", "comment": null}, "attachment_quartile_2": {"type": "integer", "index": 7, "name": "attachment_quartile_2", "comment": null}, "attachment_quartile_3": {"type": "integer", "index": 8, "name": "attachment_quartile_3", "comment": null}, "attachment_total_view_time_millis": {"type": "integer", "index": 9, "name": "attachment_total_view_time_millis", "comment": null}, "attachment_view_completion": {"type": "integer", "index": 10, "name": "attachment_view_completion", "comment": null}, "avg_screen_time_millis": {"type": "integer", "index": 11, "name": "avg_screen_time_millis", "comment": null}, "avg_view_time_millis": {"type": "integer", "index": 12, "name": "avg_view_time_millis", "comment": null}, "conversion_add_billing": {"type": "integer", "index": 13, "name": "conversion_add_billing", "comment": null}, "conversion_add_cart": {"type": "integer", "index": 14, "name": "conversion_add_cart", "comment": null}, "conversion_app_opens": {"type": "integer", "index": 15, "name": "conversion_app_opens", "comment": null}, "conversion_level_completes": {"type": "integer", "index": 16, "name": "conversion_level_completes", "comment": null}, "conversion_page_views": {"type": "integer", "index": 17, "name": "conversion_page_views", "comment": null}, "conversion_purchases": {"type": "integer", "index": 18, "name": "conversion_purchases", "comment": null}, "conversion_purchases_value": {"type": "double precision", "index": 19, "name": "conversion_purchases_value", "comment": null}, "conversion_save": {"type": "integer", "index": 20, "name": "conversion_save", "comment": null}, "conversion_searches": {"type": "integer", "index": 21, "name": "conversion_searches", "comment": null}, "conversion_sign_ups": {"type": "integer", "index": 22, "name": "conversion_sign_ups", "comment": null}, "conversion_start_checkout": {"type": "integer", "index": 23, "name": "conversion_start_checkout", "comment": null}, "conversion_view_content": {"type": "integer", "index": 24, "name": "conversion_view_content", "comment": null}, "impressions": {"type": "integer", "index": 25, "name": "impressions", "comment": null}, "ios_installs": {"type": "integer", "index": 26, "name": "ios_installs", "comment": null}, "quartile_1": {"type": "integer", "index": 27, "name": "quartile_1", "comment": null}, "quartile_2": {"type": "integer", "index": 28, "name": "quartile_2", "comment": null}, "quartile_3": {"type": "integer", "index": 29, "name": "quartile_3", "comment": null}, "saves": {"type": "integer", "index": 30, "name": "saves", "comment": null}, "screen_time_millis": {"type": "integer", "index": 31, "name": "screen_time_millis", "comment": null}, "shares": {"type": "integer", "index": 32, "name": "shares", "comment": null}, "spend": {"type": "integer", "index": 33, "name": "spend", "comment": null}, "story_completes": {"type": "integer", "index": 34, "name": "story_completes", "comment": null}, "story_opens": {"type": "integer", "index": 35, "name": "story_opens", "comment": null}, "swipe_up_percent": {"type": "integer", "index": 36, "name": "swipe_up_percent", "comment": null}, "swipes": {"type": "integer", "index": 37, "name": "swipes", "comment": null}, "total_installs": {"type": "integer", "index": 38, "name": "total_installs", "comment": null}, "video_views": {"type": "integer", "index": 39, "name": "video_views", "comment": null}, "view_completion": {"type": "integer", "index": 40, "name": "view_completion", "comment": null}, "view_time_millis": {"type": "integer", "index": 41, "name": "view_time_millis", "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.snapchat_ads_source.snapchat_ads.campaign_hourly_report"}, "source.snapchat_ads_source.snapchat_ads.creative_history": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_creative_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"id": {"type": "text", "index": 1, "name": "id", "comment": null}, "ad_account_id": {"type": "text", "index": 2, "name": "ad_account_id", "comment": null}, "name": {"type": "text", "index": 3, "name": "name", "comment": null}, "web_view_url": {"type": "text", "index": 4, "name": "web_view_url", "comment": null}, "_fivetran_synced": {"type": "text", "index": 5, "name": "_fivetran_synced", "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.snapchat_ads_source.snapchat_ads.creative_history"}, "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": {"metadata": {"type": "BASE TABLE", "schema": "zz_dbt_avinash", "name": "snapchat_creative_url_tag_history_data", "database": "postgres", "comment": null, "owner": "pguser"}, "columns": {"creative_id": {"type": "text", "index": 1, "name": "creative_id", "comment": null}, "key": {"type": "text", "index": 2, "name": "key", "comment": null}, "value": {"type": "text", "index": 3, "name": "value", "comment": null}, "updated_at": {"type": "timestamp without time zone", "index": 4, "name": "updated_at", "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.snapchat_ads_source.snapchat_ads.creative_url_tag_history"}}, "errors": null} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index c580ce9..9be6f0f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,4 +1,149 @@ -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') }]), 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
    \n \n
    \n
    \n
    \n
    \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 b52ba6b..db1967c 100644 --- a/docs/manifest.json +++ b/docs/manifest.json @@ -1 +1 @@ -{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", "dbt_version": "1.8.7", "generated_at": "2024-10-29T19:19:44.584596Z", "invocation_id": "f385af02-cce9-4149-b638-4efd7b534030", "env": {}, "project_name": "snapchat_ads_integration_tests", "project_id": "0eb30f7211ccca11c94be2a882f44ff0", "user_id": "2bfa9082-ea6e-467b-abdc-d0514ab111d9", "send_anonymous_usage_stats": true, "adapter_type": "bigquery"}, "nodes": {"seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_ad_squad_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_squad_history_data.csv", "original_file_path": "seeds/snapchat_ad_squad_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_squad_history_data"], "alias": "snapchat_ad_squad_history_data", "checksum": {"name": "sha256", "checksum": "0e83ca691f2153480e7b63173f1c7ed8c38c0dc247d41a6f2fd46afc1e5963b1"}, "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": {}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1730229541.6727538, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_squad_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_ad_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_history_data.csv", "original_file_path": "seeds/snapchat_ad_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_history_data"], "alias": "snapchat_ad_history_data", "checksum": {"name": "sha256", "checksum": "839c0910ff6ff3cff2580bd9144223132dd1d87f003aeea329e47ba858a2dc23"}, "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": {}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1730229541.6765928, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_campaign_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_campaign_history_data.csv", "original_file_path": "seeds/snapchat_campaign_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_campaign_history_data"], "alias": "snapchat_campaign_history_data", "checksum": {"name": "sha256", "checksum": "640eb2ec082938ad70c430a6b3441711f6fed19eb6e28d7622f03294e92e5b70"}, "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": {}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1730229541.677879, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_campaign_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_ad_squad_hourly_report_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_squad_hourly_report_data.csv", "original_file_path": "seeds/snapchat_ad_squad_hourly_report_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_squad_hourly_report_data"], "alias": "snapchat_ad_squad_hourly_report_data", "checksum": {"name": "sha256", "checksum": "4bcd58c89168843edd94874f95222804c28b5b3571d66dbb194a498a0f8f85b7"}, "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": {}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1730229541.679232, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_squad_hourly_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_creative_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_creative_history_data.csv", "original_file_path": "seeds/snapchat_creative_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_creative_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_creative_history_data"], "alias": "snapchat_creative_history_data", "checksum": {"name": "sha256", "checksum": "40505e1e47b59c850371007584560a03172120f078da2c81c6712aea77d868a8"}, "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": {}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1730229541.680498, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_creative_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_ad_hourly_report_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_hourly_report_data.csv", "original_file_path": "seeds/snapchat_ad_hourly_report_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_hourly_report_data"], "alias": "snapchat_ad_hourly_report_data", "checksum": {"name": "sha256", "checksum": "44942448ec2f5fdab1d102948af6724bc9d10970c6d760cd5b9eb778a16aa12b"}, "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": {"date": "timestamp"}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}", "column_types": {"date": "timestamp"}}, "created_at": 1730229541.681791, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_hourly_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_campaign_hourly_report_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_campaign_hourly_report_data.csv", "original_file_path": "seeds/snapchat_campaign_hourly_report_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_campaign_hourly_report_data"], "alias": "snapchat_campaign_hourly_report_data", "checksum": {"name": "sha256", "checksum": "90145700bcd091f7cfe9fa88155e2473a36b674778ec51ed934c6876ec23e91f"}, "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": {}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1730229541.68306, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_campaign_hourly_report_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_ad_account_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_account_history_data.csv", "original_file_path": "seeds/snapchat_ad_account_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_account_history_data"], "alias": "snapchat_ad_account_history_data", "checksum": {"name": "sha256", "checksum": "0e1f3a58ee6a4863bb59fbd30c286606f0de77040fbb2903ab312e5d248454cb"}, "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": {}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1730229541.6843112, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_account_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "snapchat_creative_url_tag_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_creative_url_tag_history_data.csv", "original_file_path": "seeds/snapchat_creative_url_tag_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_creative_url_tag_history_data"], "alias": "snapchat_creative_url_tag_history_data", "checksum": {"name": "sha256", "checksum": "c5e8dbafad038e142209d2145532d5d5e762922bf4fe44535901b46cd9797dcc"}, "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": {"updated_at": "timestamp"}, "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, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}", "column_types": {"updated_at": "timestamp"}}, "created_at": 1730229541.685628, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests`.`snapchat_creative_url_tag_history_data`", "raw_code": "", "root_path": "/Users/jamie.rodriguez/Desktop/dbt_repos/Ads/Snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "model.snapchat_ads.snapchat_ads__ad_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__ad_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__ad_report.sql", "original_file_path": "models/snapchat_ads__ad_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__ad_report", "fqn": ["snapchat_ads", "snapchat_ads__ad_report"], "alias": "snapchat_ads__ad_report", "checksum": {"name": "sha256", "checksum": "b8c200b335e6a9bc0aad27a812b925fe064a04395fa28dde73f305c9cd1f129f"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 the daily performance of a Snapchat ad account.", "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 ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.129369, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__ad_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_hourly_report') }}\n\n), creatives as (\n\n select *\n from {{ ref('snapchat_ads__creative_history_prep') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from {{ var('ad_history') }}\n where is_most_recent_record = true\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n \n {{ dbt_utils.group_by(7) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}, {"name": "snapchat_ads__creative_history_prep", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__ad_report.sql", "compiled": true, "compiled_code": "\n\nwith __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n split(\n base.url,\n '?'\n )[safe_offset(0)]\n \n\n as base_url,\n safe_cast(\n\n \n split(\n \n\n \n split(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n )[safe_offset(0)]\n \n\n,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_host,\n '/' || safe_cast(\n\n \n split(\n \n\n case when \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ) = 0\n then ''\n else\n substr(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n -1 * (\n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ))\n )\n end,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_source='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_medium='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_campaign='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_content='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_term='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n), ad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report`\n\n), creatives as (\n\n select *\n from __dbt__cte__snapchat_ads__creative_history_prep\n\n), account as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history`\n where is_most_recent_record = true\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as numeric), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n \n group by 1,2,3,4,5,6,7\n\n)\n\nselect *\nfrom aggregated", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.snapchat_ads.snapchat_ads__creative_history_prep", "sql": " __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n split(\n base.url,\n '?'\n )[safe_offset(0)]\n \n\n as base_url,\n safe_cast(\n\n \n split(\n \n\n \n split(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n )[safe_offset(0)]\n \n\n,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_host,\n '/' || safe_cast(\n\n \n split(\n \n\n case when \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ) = 0\n then ''\n else\n substr(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n -1 * (\n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ))\n )\n end,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_source='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_medium='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_campaign='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_content='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_term='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n)"}], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.snapchat_ads.snapchat_ads__url_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__url_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__url_report.sql", "original_file_path": "models/snapchat_ads__url_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__url_report", "fqn": ["snapchat_ads", "snapchat_ads__url_report"], "alias": "snapchat_ads__url_report", "checksum": {"name": "sha256", "checksum": "87d45159b72f1440b95f729fe41df3cc9dc77d5b57e173f30f93ecedf8b1eda6"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 the daily performance of Snapchat ads that leverage urls.", "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 ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_squad_name": {"name": "ad_squad_name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "base_url": {"name": "base_url", "description": "The base URL of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "url_host": {"name": "url_host", "description": "The URL host of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "url_path": {"name": "url_path", "description": "The URL path of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "utm_source": {"name": "utm_source", "description": "The utm_source parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "utm_medium": {"name": "utm_medium", "description": "The utm_medium parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "utm_campaign": {"name": "utm_campaign", "description": "The utm_campaign parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "utm_content": {"name": "utm_content", "description": "The utm_content parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "utm_term": {"name": "utm_term", "description": "The utm_term parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.133831, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__url_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_hourly_report') }}\n\n), creatives as (\n\n select *\n from {{ ref('snapchat_ads__creative_history_prep') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from {{ var('ad_history') }}\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from {{ var('ad_squad_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n ad_squads.ad_squad_id,\n ad_squads.ad_squad_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n account.currency,\n creatives.base_url,\n creatives.url_host,\n creatives.url_path,\n creatives.utm_source,\n creatives.utm_medium,\n creatives.utm_campaign,\n creatives.utm_content,\n creatives.utm_term,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n \n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n \n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n\n {% if var('ad_reporting__url_report__using_null_filter', True) %}\n -- We only want utm ads to populate this report. Therefore, we filter where url ads are populated.\n where creatives.url is not null\n {% endif %}\n\n {{ dbt_utils.group_by(19) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}, {"name": "snapchat_ads__creative_history_prep", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__url_report.sql", "compiled": true, "compiled_code": "\n\nwith __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n split(\n base.url,\n '?'\n )[safe_offset(0)]\n \n\n as base_url,\n safe_cast(\n\n \n split(\n \n\n \n split(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n )[safe_offset(0)]\n \n\n,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_host,\n '/' || safe_cast(\n\n \n split(\n \n\n case when \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ) = 0\n then ''\n else\n substr(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n -1 * (\n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ))\n )\n end,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_source='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_medium='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_campaign='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_content='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_term='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n), ad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report`\n\n), creatives as (\n\n select *\n from __dbt__cte__snapchat_ads__creative_history_prep\n\n), account as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history`\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history`\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history`\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n ad_squads.ad_squad_id,\n ad_squads.ad_squad_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n account.currency,\n creatives.base_url,\n creatives.url_host,\n creatives.url_path,\n creatives.utm_source,\n creatives.utm_medium,\n creatives.utm_campaign,\n creatives.utm_content,\n creatives.utm_term,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as numeric), 2) as conversion_purchases_value\n \n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n\n \n -- We only want utm ads to populate this report. Therefore, we filter where url ads are populated.\n where creatives.url is not null\n \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)\n\nselect *\nfrom aggregated", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.snapchat_ads.snapchat_ads__creative_history_prep", "sql": " __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n split(\n base.url,\n '?'\n )[safe_offset(0)]\n \n\n as base_url,\n safe_cast(\n\n \n split(\n \n\n \n split(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n )[safe_offset(0)]\n \n\n,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_host,\n '/' || safe_cast(\n\n \n split(\n \n\n case when \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ) = 0\n then ''\n else\n substr(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n -1 * (\n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ))\n )\n end,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_source='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_medium='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_campaign='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_content='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_term='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n)"}], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null}, "model.snapchat_ads.snapchat_ads__account_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__account_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__account_report.sql", "original_file_path": "models/snapchat_ads__account_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__account_report", "fqn": ["snapchat_ads", "snapchat_ads__account_report"], "alias": "snapchat_ads__account_report", "checksum": {"name": "sha256", "checksum": "b1f8ee646f82a94a902428080dc066c1a5df73879a405e677c5263adfd80e187"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 the daily performance of a Snapchat ad account.", "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_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.1283588, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__account_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_hourly_report') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from {{ var('ad_history') }}\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from {{ var('ad_squad_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n\n {{ dbt_utils.group_by(5) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__account_report.sql", "compiled": true, "compiled_code": "\n\nwith ad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report`\n\n), account as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history`\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history`\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history`\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as numeric), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n\n group by 1,2,3,4,5\n\n)\n\nselect *\nfrom aggregated", "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.snapchat_ads.snapchat_ads__ad_squad_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__ad_squad_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__ad_squad_report.sql", "original_file_path": "models/snapchat_ads__ad_squad_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__ad_squad_report", "fqn": ["snapchat_ads", "snapchat_ads__ad_squad_report"], "alias": "snapchat_ads__ad_squad_report", "checksum": {"name": "sha256", "checksum": "ce3c64584fef4a76d391b6153123ebc53bc4397cacb99027a88425b4c93af44c"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 the daily performance of a Snapchat ad squad.", "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_squad_id": {"name": "ad_squad_id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_squad_name": {"name": "ad_squad_name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.1317608, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__ad_squad_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_squad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_squad_hourly_report') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from {{ var('ad_squad_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_squad_hourly.source_relation,\n cast(ad_squad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n ad_squad_hourly.ad_squad_id,\n ad_squads.ad_squad_name,\n account.currency,\n sum(ad_squad_hourly.swipes) as swipes,\n sum(ad_squad_hourly.impressions) as impressions,\n round(sum(ad_squad_hourly.spend),2) as spend,\n sum(ad_squad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_squad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_squad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n \n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_squad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n\n from ad_squad_hourly\n left join ad_squads\n on ad_squad_hourly.ad_squad_id = ad_squads.ad_squad_id\n and ad_squad_hourly.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n {{ dbt_utils.group_by(9) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__ad_squad_report.sql", "compiled": true, "compiled_code": "\n\nwith ad_squad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_hourly_report`\n\n), account as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history`\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history`\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_squad_hourly.source_relation,\n cast(ad_squad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n ad_squad_hourly.ad_squad_id,\n ad_squads.ad_squad_name,\n account.currency,\n sum(ad_squad_hourly.swipes) as swipes,\n sum(ad_squad_hourly.impressions) as impressions,\n round(sum(ad_squad_hourly.spend),2) as spend,\n sum(ad_squad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_squad_hourly.conversion_purchases_value) as numeric), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n \n \n\n\n\n\n\n \n\n\n\n\n\n\n from ad_squad_hourly\n left join ad_squads\n on ad_squad_hourly.ad_squad_id = ad_squads.ad_squad_id\n and ad_squad_hourly.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n group by 1,2,3,4,5,6,7,8,9\n\n)\n\nselect *\nfrom aggregated", "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.snapchat_ads.snapchat_ads__campaign_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__campaign_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__campaign_report.sql", "original_file_path": "models/snapchat_ads__campaign_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__campaign_report", "fqn": ["snapchat_ads", "snapchat_ads__campaign_report"], "alias": "snapchat_ads__campaign_report", "checksum": {"name": "sha256", "checksum": "ce111e14c24a3748fec1557f9c2bfe540a3e7fac7dc95cbb6d36069415ec9e13"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 the daily performance of a Snapchat campaign.", "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 in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.130798, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__campaign_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith campaign_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('campaign_hourly_report') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n campaign_hourly.source_relation,\n cast(campaign_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaign_hourly.campaign_id,\n campaigns.campaign_name,\n account.currency,\n sum(campaign_hourly.swipes) as swipes,\n sum(campaign_hourly.impressions) as impressions,\n round(sum(campaign_hourly.spend),2) as spend,\n sum(campaign_hourly.total_conversions) as total_conversions,\n round(cast(sum(campaign_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__campaign_hourly_report_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n \n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__campaign_hourly_report_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n \n from campaign_hourly\n left join campaigns\n on campaign_hourly.campaign_id = campaigns.campaign_id\n and campaign_hourly.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n {{ dbt_utils.group_by(7) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__campaign_report.sql", "compiled": true, "compiled_code": "\n\nwith campaign_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_hourly_report`\n\n), account as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history`\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n campaign_hourly.source_relation,\n cast(campaign_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaign_hourly.campaign_id,\n campaigns.campaign_name,\n account.currency,\n sum(campaign_hourly.swipes) as swipes,\n sum(campaign_hourly.impressions) as impressions,\n round(sum(campaign_hourly.spend),2) as spend,\n sum(campaign_hourly.total_conversions) as total_conversions,\n round(cast(sum(campaign_hourly.conversion_purchases_value) as numeric), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n \n \n\n\n\n\n\n \n\n\n\n\n\n \n from campaign_hourly\n left join campaigns\n on campaign_hourly.campaign_id = campaigns.campaign_id\n and campaign_hourly.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n group by 1,2,3,4,5,6,7\n\n)\n\nselect *\nfrom aggregated", "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.snapchat_ads.snapchat_ads__creative_history_prep": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "snapchat_ads__creative_history_prep", "resource_type": "model", "package_name": "snapchat_ads", "path": "intermediate/snapchat_ads__creative_history_prep.sql", "original_file_path": "models/intermediate/snapchat_ads__creative_history_prep.sql", "unique_id": "model.snapchat_ads.snapchat_ads__creative_history_prep", "fqn": ["snapchat_ads", "intermediate", "snapchat_ads__creative_history_prep"], "alias": "snapchat_ads__creative_history_prep", "checksum": {"name": "sha256", "checksum": "e3cefdb96080d7616e006c39ed116afc1bfdf99c32ae5f8cf01f72a16e86a8a6"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "ephemeral", "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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "ephemeral", "enabled": true}, "created_at": 1730229541.883929, "relation_name": null, "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\nwith base as (\n\n select *\n from {{ var('creative_history') }}\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from {{ var('creative_url_tag_history') }}\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n {{ dbt.split_part('base.url', \"'?'\", 1) }} as base_url,\n {{ dbt_utils.get_url_host('base.url') }} as url_host,\n '/' || {{ dbt_utils.get_url_path('base.url') }} as url_path,\n coalesce(url_tags_pivoted.utm_source, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_source') }}) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_medium') }}) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_campaign') }}) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_content') }}) as utm_content,\n coalesce(url_tags_pivoted.utm_term, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_term') }}) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__creative_url_tag_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.split_part", "macro.dbt_utils.get_url_host", "macro.dbt_utils.get_url_path", "macro.snapchat_ads.snapchat_ads_extract_url_parameter"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history", "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/intermediate/snapchat_ads__creative_history_prep.sql", "compiled": true, "compiled_code": "\nwith base as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n split(\n base.url,\n '?'\n )[safe_offset(0)]\n \n\n as base_url,\n safe_cast(\n\n \n split(\n \n\n \n split(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n )[safe_offset(0)]\n \n\n,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_host,\n '/' || safe_cast(\n\n \n split(\n \n\n case when \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ) = 0\n then ''\n else\n substr(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n -1 * (\n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/'\n\n ), 0),\n \n\n strpos(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '?'\n\n ) - 1\n ))\n )\n end,\n '?'\n )[safe_offset(0)]\n \n\n as string) as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_source='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_medium='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_campaign='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_content='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n split(\n \n\n \n split(\n base.url,\n 'utm_term='\n )[safe_offset(1)]\n \n\n,\n '&'\n )[safe_offset(0)]\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_squad_hourly_report.sql", "original_file_path": "models/stg_snapchat_ads__ad_squad_hourly_report.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_squad_hourly_report"], "alias": "stg_snapchat_ads__ad_squad_hourly_report", "checksum": {"name": "sha256", "checksum": "366d99f92ec72fab32286b8910ec70cba3cdcf165b35698dc4012e42a20debce"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a historic version of an ad in Snapchat.", "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_squad_id": {"name": "ad_squad_id", "description": "ID of the ad squad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_hour": {"name": "date_hour", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_total_view_time": {"name": "attachment_total_view_time", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "screen_time": {"name": "screen_time", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_time": {"name": "view_time", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (in Ad Account's currency, converted from microcurrency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.317378, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_hourly_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_squad_hourly_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_snapchat_ads__ad_squad_hourly_report_tmp')),\n staging_columns=get_ad_squad_hourly_report_columns()\n )\n }} \n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n ad_squad_id,\n cast (date as {{ dbt.type_timestamp() }}) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as {{ dbt.type_float() }}), 0) / 1000000.0 as conversion_purchases_value\n\n {% for conversion in var('snapchat_ads__conversion_fields', []) %}\n , coalesce(cast({{ conversion }} as {{ dbt.type_bigint() }}), 0) as {{ conversion }}\n {% endfor %}\n\n {{ snapchat_ads_fill_pass_through_columns(pass_through_fields=var('snapchat_ads__ad_squad_hourly_passthrough_metrics'), except=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_squad_hourly_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_bigint", "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_squad_hourly_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_hourly_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_squad_id\n \n as \n \n ad_squad_id\n \n, \n \n \n attachment_quartile_1\n \n as \n \n attachment_quartile_1\n \n, \n \n \n attachment_quartile_2\n \n as \n \n attachment_quartile_2\n \n, \n \n \n attachment_quartile_3\n \n as \n \n attachment_quartile_3\n \n, \n \n \n attachment_total_view_time_millis\n \n as \n \n attachment_total_view_time_millis\n \n, \n \n \n attachment_view_completion\n \n as \n \n attachment_view_completion\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 quartile_1\n \n as \n \n quartile_1\n \n, \n \n \n quartile_2\n \n as \n \n quartile_2\n \n, \n \n \n quartile_3\n \n as \n \n quartile_3\n \n, \n \n \n saves\n \n as \n \n saves\n \n, \n \n \n screen_time_millis\n \n as \n \n screen_time_millis\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n swipes\n \n as \n \n swipes\n \n, \n \n \n video_views\n \n as \n \n video_views\n \n, \n \n \n view_completion\n \n as \n \n view_completion\n \n, \n \n \n view_time_millis\n \n as \n \n view_time_millis\n \n, \n \n \n conversion_purchases_value\n \n as \n \n conversion_purchases_value\n \n, \n \n \n conversion_purchases\n \n as \n \n conversion_purchases\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 ad_squad_id,\n cast (date as timestamp) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as FLOAT64), 0) / 1000000.0 as conversion_purchases_value\n\n \n , coalesce(cast(conversion_purchases as bigint), 0) as conversion_purchases\n \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.snapchat_ads_source.stg_snapchat_ads__ad_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_history.sql", "original_file_path": "models/stg_snapchat_ads__ad_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_history"], "alias": "stg_snapchat_ads__ad_history", "checksum": {"name": "sha256", "checksum": "c5e6d8190a234277e68501aa96b048452931369da6556021b43dfea818a276cf"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a historic version of an ad in Snapchat.", "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_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_id": {"name": "ad_id", "description": "The ID of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the related ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_name": {"name": "ad_name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.314671, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__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_snapchat_ads__ad_history_tmp')),\n staging_columns=get_ad_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as ad_id,\n name as ad_name,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n ad_squad_id,\n creative_id,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_squad_id\n \n as \n \n ad_squad_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n creative_id\n \n as \n \n creative_id\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\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 id as ad_id,\n name as ad_name,\n cast (created_at as timestamp) as created_at,\n ad_squad_id,\n creative_id,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_squad_history.sql", "original_file_path": "models/stg_snapchat_ads__ad_squad_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_squad_history"], "alias": "stg_snapchat_ads__ad_squad_history", "checksum": {"name": "sha256", "checksum": "52dd01aacf5296607f2cd01a15942b091ddf6b9df5b230e11eaf8bc8305e9994"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a historic version of an ad squad in Snapchat.", "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_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_squad_name": {"name": "ad_squad_name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the related campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.316597, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_squad_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_snapchat_ads__ad_squad_history_tmp')),\n staging_columns=get_ad_squad_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as ad_squad_id,\n name as ad_squad_name,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n campaign_id,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_squad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_squad_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\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 id as ad_squad_id,\n name as ad_squad_name,\n cast (created_at as timestamp) as created_at,\n campaign_id,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_report", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_hourly_report.sql", "original_file_path": "models/stg_snapchat_ads__ad_hourly_report.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_hourly_report"], "alias": "stg_snapchat_ads__ad_hourly_report", "checksum": {"name": "sha256", "checksum": "f5f1902a449bf2f7e8f5452586d5768cf5f0234925fc0ec085327e07eaaf7b4f"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 hourly performance summary for an ad in Snapchat.", "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 that the report relates to in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_hour": {"name": "date_hour", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_total_view_time": {"name": "attachment_total_view_time", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "screen_time": {"name": "screen_time", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_time": {"name": "view_time", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend for an ad in the hour of the record converted from micros.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (in Ad Account's currency, converted from microcurrency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.3161101, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_hourly_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_snapchat_ads__ad_hourly_report_tmp')),\n staging_columns=get_ad_hourly_report_columns()\n )\n }} \n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n ad_id,\n cast (date as {{ dbt.type_timestamp() }}) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as {{ dbt.type_float() }}), 0) / 1000000.0 as conversion_purchases_value\n\n {% for conversion in var('snapchat_ads__conversion_fields', []) %}\n , coalesce(cast({{ conversion }} as {{ dbt.type_bigint() }}), 0) as {{ conversion }}\n {% endfor %}\n\n {{ snapchat_ads_fill_pass_through_columns(pass_through_fields=var('snapchat_ads__ad_hourly_passthrough_metrics'), except=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_hourly_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_hourly_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_bigint", "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_hourly_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n cast(null as numeric) as \n \n attachment_quartile_1\n \n , \n cast(null as numeric) as \n \n attachment_quartile_2\n \n , \n cast(null as numeric) as \n \n attachment_quartile_3\n \n , \n cast(null as numeric) as \n \n attachment_total_view_time_millis\n \n , \n cast(null as numeric) as \n \n attachment_view_completion\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 numeric) as \n \n quartile_1\n \n , \n cast(null as numeric) as \n \n quartile_2\n \n , \n cast(null as numeric) as \n \n quartile_3\n \n , \n cast(null as numeric) as \n \n saves\n \n , \n cast(null as numeric) as \n \n screen_time_millis\n \n , \n cast(null as numeric) as \n \n shares\n \n , \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n swipes\n \n as \n \n swipes\n \n, \n cast(null as numeric) as \n \n video_views\n \n , \n cast(null as numeric) as \n \n view_completion\n \n , \n cast(null as numeric) as \n \n view_time_millis\n \n , \n \n \n conversion_purchases_value\n \n as \n \n conversion_purchases_value\n \n, \n \n \n conversion_purchases\n \n as \n \n conversion_purchases\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 ad_id,\n cast (date as timestamp) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as FLOAT64), 0) / 1000000.0 as conversion_purchases_value\n\n \n , coalesce(cast(conversion_purchases as bigint), 0) as conversion_purchases\n \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.snapchat_ads_source.stg_snapchat_ads__creative_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__creative_history.sql", "original_file_path": "models/stg_snapchat_ads__creative_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__creative_history"], "alias": "stg_snapchat_ads__creative_history", "checksum": {"name": "sha256", "checksum": "ee8a3cbc842df2f1f73d35d75566cbc3ab7e56056cad04dab1c98fa1f6853113"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a historic version of a creative in Snapchat.", "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_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creative_id": {"name": "creative_id", "description": "The ID of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creative_name": {"name": "creative_name", "description": "The name of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "url": {"name": "url", "description": "The URL of the creative if the creative is of type 'web view'.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.319514, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__creative_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_snapchat_ads__creative_history_tmp')),\n staging_columns=get_creative_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as creative_id,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n ad_account_id,\n name as creative_name,\n web_view_url as url,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) =1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__creative_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_creative_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__creative_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_account_id\n \n as \n \n ad_account_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\n \n , \n \n \n web_view_url\n \n as \n \n web_view_url\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 id as creative_id,\n cast (created_at as timestamp) as created_at,\n ad_account_id,\n name as creative_name,\n web_view_url as url,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__creative_url_tag_history.sql", "original_file_path": "models/stg_snapchat_ads__creative_url_tag_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__creative_url_tag_history"], "alias": "stg_snapchat_ads__creative_url_tag_history", "checksum": {"name": "sha256", "checksum": "92851f4b67f728a6845faca7a8f94e2851808a2fe430259b5fb8534a6212bd32"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a URL paramter key-value pair for a creative in Snapchat.", "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": []}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "param_key": {"name": "param_key", "description": "The URL parameter key, i.e. UTM_SOURCE.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "param_value": {"name": "param_value", "description": "The URL parameter value, i.e. Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.320212, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__creative_url_tag_history_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_snapchat_ads__creative_url_tag_history_tmp')),\n staging_columns=get_creative_url_tag_history_columns()\n )\n }}\n \n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n creative_id,\n key as param_key,\n value as param_value,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, creative_id, key order by updated_at desc) =1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_url_tag_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__creative_url_tag_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_creative_url_tag_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__creative_url_tag_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history_tmp`\n\n),\n\nfields as (\n\n select\n \n \n \n creative_id\n \n as \n \n creative_id\n \n, \n \n \n key\n \n as \n \n key\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n, \n \n \n value\n \n as \n \n value\n \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 creative_id,\n key as param_key,\n value as param_value,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, creative_id, key order by updated_at 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.snapchat_ads_source.stg_snapchat_ads__ad_account_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_account_history.sql", "original_file_path": "models/stg_snapchat_ads__ad_account_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_account_history"], "alias": "stg_snapchat_ads__ad_account_history", "checksum": {"name": "sha256", "checksum": "038466c7ae703d4c445eb0cfb1847ae4282b0f9cdf77f9d9ec4553befcba1ee0"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a historic version of an ad account in Snapchat.", "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_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertiser": {"name": "advertiser", "description": "Name of advertiser", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency": {"name": "currency", "description": "Currency used by account", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "Account timezone", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.314144, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_account_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_snapchat_ads__ad_account_history_tmp')),\n staging_columns=get_ad_account_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as ad_account_id,\n name as ad_account_name,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n advertiser, \n currency,\n timezone,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_account_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_account_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n cast(null as string) as \n \n advertiser\n \n , \n cast(null as timestamp) as \n \n created_at\n \n , \n cast(null as string) as \n \n currency\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as string) as \n \n timezone\n \n , \n cast(null as string) as \n \n type\n \n , \n cast(null as timestamp) as \n \n updated_at\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 id as ad_account_id,\n name as ad_account_name,\n cast (created_at as timestamp) as created_at,\n advertiser, \n currency,\n timezone,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__campaign_hourly_report.sql", "original_file_path": "models/stg_snapchat_ads__campaign_hourly_report.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__campaign_hourly_report"], "alias": "stg_snapchat_ads__campaign_hourly_report", "checksum": {"name": "sha256", "checksum": "b1f47ef69d58e570592e47fd4ed9874ddf3044ff816b8f21cb99b0418a32b63d"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a historic version of an ad in Snapchat.", "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": "ID of campaign", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date_hour": {"name": "date_hour", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_total_view_time": {"name": "attachment_total_view_time", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "screen_time": {"name": "screen_time", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_time": {"name": "view_time", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (in Ad Account's currency, converted from microcurrency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.318679, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_hourly_report`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__campaign_hourly_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_snapchat_ads__campaign_hourly_report_tmp')),\n staging_columns=get_campaign_hourly_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n campaign_id,\n cast (date as {{ dbt.type_timestamp() }}) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as {{ dbt.type_float() }}), 0) / 1000000.0 as conversion_purchases_value\n\n {% for conversion in var('snapchat_ads__conversion_fields', []) %}\n , coalesce(cast({{ conversion }} as {{ dbt.type_bigint() }}), 0) as {{ conversion }}\n {% endfor %}\n\n {{ snapchat_ads_fill_pass_through_columns(pass_through_fields=var('snapchat_ads__campaign_hourly_report_passthrough_metrics'), except=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n \n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_hourly_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_campaign_hourly_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_bigint", "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__campaign_hourly_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_hourly_report_tmp`\n),\n\nfields as (\n\n select\n \n \n \n attachment_quartile_1\n \n as \n \n attachment_quartile_1\n \n, \n \n \n attachment_quartile_2\n \n as \n \n attachment_quartile_2\n \n, \n \n \n attachment_quartile_3\n \n as \n \n attachment_quartile_3\n \n, \n \n \n attachment_total_view_time_millis\n \n as \n \n attachment_total_view_time_millis\n \n, \n \n \n attachment_view_completion\n \n as \n \n attachment_view_completion\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\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 quartile_1\n \n as \n \n quartile_1\n \n, \n \n \n quartile_2\n \n as \n \n quartile_2\n \n, \n \n \n quartile_3\n \n as \n \n quartile_3\n \n, \n \n \n saves\n \n as \n \n saves\n \n, \n \n \n screen_time_millis\n \n as \n \n screen_time_millis\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n swipes\n \n as \n \n swipes\n \n, \n \n \n video_views\n \n as \n \n video_views\n \n, \n \n \n view_completion\n \n as \n \n view_completion\n \n, \n \n \n view_time_millis\n \n as \n \n view_time_millis\n \n, \n \n \n conversion_purchases_value\n \n as \n \n conversion_purchases_value\n \n, \n \n \n conversion_purchases\n \n as \n \n conversion_purchases\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_id,\n cast (date as timestamp) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as FLOAT64), 0) / 1000000.0 as conversion_purchases_value\n\n \n , coalesce(cast(conversion_purchases as bigint), 0) as conversion_purchases\n \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.snapchat_ads_source.stg_snapchat_ads__campaign_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__campaign_history.sql", "original_file_path": "models/stg_snapchat_ads__campaign_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__campaign_history"], "alias": "stg_snapchat_ads__campaign_history", "checksum": {"name": "sha256", "checksum": "4bdc0a822494f1f1b1806407151746864f0cd31ca0393d54517cc1431dfef5f1"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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 a historic version of a campaign in Snapchat.", "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_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The id of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1730229542.317898, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_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_snapchat_ads__campaign_history_tmp')),\n staging_columns=get_campaign_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation,\n id as campaign_id,\n ad_account_id,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n name as campaign_name,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_campaign_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__campaign_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history_tmp`\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_account_id\n \n as \n \n ad_account_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\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 id as campaign_id,\n ad_account_id,\n cast (created_at as timestamp) as created_at,\n name as campaign_name,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__creative_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__creative_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__creative_history_tmp"], "alias": "stg_snapchat_ads__creative_history_tmp", "checksum": {"name": "sha256", "checksum": "af71368261d6f41a42e53d8d3522dbd7c2343ef32d5d518c0740024944b005e8"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.034088, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='creative_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='creative_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "creative_history"], ["snapchat_ads", "creative_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__creative_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_creative_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.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_account_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_account_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_account_history_tmp"], "alias": "stg_snapchat_ads__ad_account_history_tmp", "checksum": {"name": "sha256", "checksum": "ecb8114190d4e6ac289124eb4588c540a426e1d449caa958ad34bd4a7e3bf6a9"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.053459, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_account_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_account_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_account_history"], ["snapchat_ads", "ad_account_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_account_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_account_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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_report_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_hourly_report_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_hourly_report_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_hourly_report_tmp"], "alias": "stg_snapchat_ads__ad_hourly_report_tmp", "checksum": {"name": "sha256", "checksum": "6c656f5f35626e2da5fb5eb5c84ec8c6a92e99832407708ed55bd0de7e5df50e"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.057514, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_hourly_report', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_hourly_report',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_hourly_report"], ["snapchat_ads", "ad_hourly_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_hourly_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_hourly_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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__creative_url_tag_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__creative_url_tag_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__creative_url_tag_history_tmp"], "alias": "stg_snapchat_ads__creative_url_tag_history_tmp", "checksum": {"name": "sha256", "checksum": "9d7c3b09ee4cdd1b50bd4d9dcaa83506d4b92c886601a9a5b3d3eb3d64c87cb2"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.0616992, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='creative_url_tag_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='creative_url_tag_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "creative_url_tag_history"], ["snapchat_ads", "creative_url_tag_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__creative_url_tag_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_creative_url_tag_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_squad_hourly_report_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_squad_hourly_report_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_squad_hourly_report_tmp"], "alias": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "checksum": {"name": "sha256", "checksum": "95586bdee0fc83cd072ec0e9e53e5468e3fc125b6421d2eb7434e636c7dde0ea"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.065875, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_hourly_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_squad_hourly_report', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_squad_hourly_report',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_squad_hourly_report"], ["snapchat_ads", "ad_squad_hourly_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_squad_hourly_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_squad_hourly_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.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__campaign_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__campaign_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__campaign_history_tmp"], "alias": "stg_snapchat_ads__campaign_history_tmp", "checksum": {"name": "sha256", "checksum": "77443d363898105f0e8102998dc2e60b0ba612a50f0f0db676f7c77ed9c5de5c"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.070476, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='campaign_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "campaign_history"], ["snapchat_ads", "campaign_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__campaign_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_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.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_history_tmp"], "alias": "stg_snapchat_ads__ad_history_tmp", "checksum": {"name": "sha256", "checksum": "ff60fd4ced1d85ba518f5a0c3566e10aed80c9201c78e51d2e95e24e814a8610"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.074489, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_history"], ["snapchat_ads", "ad_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_squad_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_squad_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_squad_history_tmp"], "alias": "stg_snapchat_ads__ad_squad_history_tmp", "checksum": {"name": "sha256", "checksum": "7dd4147d6b7ee617b048090525b4578398c85fd40fb4f509efbbdefb89ed16ba"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.078537, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_squad_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_squad_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_squad_history"], ["snapchat_ads", "ad_squad_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_squad_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_ad_squad_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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__campaign_hourly_report_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__campaign_hourly_report_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__campaign_hourly_report_tmp"], "alias": "stg_snapchat_ads__campaign_hourly_report_tmp", "checksum": {"name": "sha256", "checksum": "25c22f93768af7aedb92b425ebe2b5756b624690741a7f333e3b2d4e5b677f66"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_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, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1730229542.082527, "relation_name": "`dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_hourly_report_tmp`", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_hourly_report', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='campaign_hourly_report',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "campaign_hourly_report"], ["snapchat_ads", "campaign_hourly_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__campaign_hourly_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from `dbt-package-testing`.`snapchat_ads_tests`.`snapchat_campaign_hourly_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}, "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__account_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__account_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260", "fqn": ["snapchat_ads", "not_null_snapchat_ads__account_report_date_day"], "alias": "not_null_snapchat_ads__account_report_date_day", "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": 1730229542.171625, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__account_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__account_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__account_report`\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__account_report", "attached_node": "model.snapchat_ads.snapchat_ads__account_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__account_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__account_report_ad_account_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__account_report_ad_account_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b", "fqn": ["snapchat_ads", "not_null_snapchat_ads__account_report_ad_account_id"], "alias": "not_null_snapchat_ads__account_report_ad_account_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "WARN", "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": {"severity": "WARN"}, "created_at": 1730229542.173032, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\") }}", "language": "sql", "refs": [{"name": "snapchat_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__account_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__account_report_ad_account_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_account_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__account_report`\nwhere ad_account_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_account_id", "file_key_name": "models.snapchat_ads__account_report", "attached_node": "model.snapchat_ads.snapchat_ads__account_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_account_id", "model": "{{ get_where_subquery(ref('snapchat_ads__account_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day"], "alias": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8", "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": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8"}, "created_at": 1730229542.1740649, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8\") }}", "language": "sql", "refs": [{"name": "snapchat_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.snapchat_ads.snapchat_ads__account_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_account_id, date_day\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__account_report`\n group by source_relation, ad_account_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.snapchat_ads__account_report", "attached_node": "model.snapchat_ads.snapchat_ads__account_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_account_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__account_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__ad_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_report_date_day"], "alias": "not_null_snapchat_ads__ad_report_date_day", "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": 1730229542.185935, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__ad_report`\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__ad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__ad_report_ad_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_report_ad_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_report_ad_id"], "alias": "not_null_snapchat_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": 1730229542.18693, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_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.snapchat_ads__ad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__date_day.9116e93fba": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_aee83389914e2784af892d88888b08c1.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__date_day.9116e93fba", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__date_day"], "alias": "dbt_utils_unique_combination_o_aee83389914e2784af892d88888b08c1", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_aee83389914e2784af892d88888b08c1", "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": "dbt_utils_unique_combination_o_aee83389914e2784af892d88888b08c1"}, "created_at": 1730229542.1879208, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_aee83389914e2784af892d88888b08c1\") }}", "language": "sql", "refs": [{"name": "snapchat_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.snapchat_ads.snapchat_ads__ad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_aee83389914e2784af892d88888b08c1.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`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__ad_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.snapchat_ads__ad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__ad_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__campaign_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__campaign_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b", "fqn": ["snapchat_ads", "not_null_snapchat_ads__campaign_report_date_day"], "alias": "not_null_snapchat_ads__campaign_report_date_day", "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": 1730229542.190347, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__campaign_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__campaign_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__campaign_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__campaign_report`\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__campaign_report", "attached_node": "model.snapchat_ads.snapchat_ads__campaign_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__campaign_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__campaign_report_campaign_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__campaign_report_campaign_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac", "fqn": ["snapchat_ads", "not_null_snapchat_ads__campaign_report_campaign_id"], "alias": "not_null_snapchat_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": 1730229542.191326, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__campaign_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__campaign_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__campaign_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_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.snapchat_ads__campaign_report", "attached_node": "model.snapchat_ads.snapchat_ads__campaign_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('snapchat_ads__campaign_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day"], "alias": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb", "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": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb"}, "created_at": 1730229542.1923132, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb\") }}", "language": "sql", "refs": [{"name": "snapchat_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.snapchat_ads.snapchat_ads__campaign_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb.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`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__campaign_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.snapchat_ads__campaign_report", "attached_node": "model.snapchat_ads.snapchat_ads__campaign_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__campaign_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__ad_squad_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_squad_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_squad_report_date_day"], "alias": "not_null_snapchat_ads__ad_squad_report_date_day", "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": 1730229542.1947289, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_squad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_squad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_squad_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__ad_squad_report`\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__ad_squad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_squad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_squad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__ad_squad_report_ad_squad_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_squad_report_ad_squad_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_squad_report_ad_squad_id"], "alias": "not_null_snapchat_ads__ad_squad_report_ad_squad_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": 1730229542.1957529, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_squad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_squad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_squad_report_ad_squad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_squad_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__ad_squad_report`\nwhere ad_squad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_squad_id", "file_key_name": "models.snapchat_ads__ad_squad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_squad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_squad_id", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_squad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day"], "alias": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3", "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": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3"}, "created_at": 1730229542.196745, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3\") }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_squad_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.snapchat_ads.snapchat_ads__ad_squad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_squad_id, date_day\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__ad_squad_report`\n group by source_relation, ad_squad_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.snapchat_ads__ad_squad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_squad_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_squad_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__ad_squad_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__url_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__url_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6", "fqn": ["snapchat_ads", "not_null_snapchat_ads__url_report_date_day"], "alias": "not_null_snapchat_ads__url_report_date_day", "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": 1730229542.1993458, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__url_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__url_report`\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__url_report_ad_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__url_report_ad_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78", "fqn": ["snapchat_ads", "not_null_snapchat_ads__url_report_ad_id"], "alias": "not_null_snapchat_ads__url_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": 1730229542.200338, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__url_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__url_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.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_snapchat_ads__url_report_base_url", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__url_report_base_url.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de", "fqn": ["snapchat_ads", "not_null_snapchat_ads__url_report_base_url"], "alias": "not_null_snapchat_ads__url_report_base_url", "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": {"enabled": true}, "created_at": 1730229542.2023501, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(enabled=True) }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__url_report_base_url.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect base_url\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__url_report`\nwhere base_url is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "base_url", "file_key_name": "models.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "base_url", "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__date_day.86e3504c07": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_d0f023fab5dadee3873fc4a187d38b76.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__date_day.86e3504c07", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__date_day"], "alias": "dbt_utils_unique_combination_o_d0f023fab5dadee3873fc4a187d38b76", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_d0f023fab5dadee3873fc4a187d38b76", "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": {"enabled": true, "alias": "dbt_utils_unique_combination_o_d0f023fab5dadee3873fc4a187d38b76"}, "created_at": 1730229542.203696, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(enabled=True,alias=\"dbt_utils_unique_combination_o_d0f023fab5dadee3873fc4a187d38b76\") }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_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.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_d0f023fab5dadee3873fc4a187d38b76.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`.`snapchat_ads_tests_snapchat_ads_dev`.`snapchat_ads__url_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.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced", "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": 1730229542.320792, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__ad_account_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_account_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_account_history_ad_account_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_account_history_ad_account_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_account_history_ad_account_id"], "alias": "not_null_stg_snapchat_ads__ad_account_history_ad_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": 1730229542.321877, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_account_history_ad_account_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_account_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\nwhere ad_account_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_account_id", "file_key_name": "models.stg_snapchat_ads__ad_account_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_account_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_account_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad", "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": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad"}, "created_at": 1730229542.322878, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_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.snapchat_ads_source.stg_snapchat_ads__ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_account_id, _fivetran_synced\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_account_history`\n group by source_relation, ad_account_id, _fivetran_synced\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_snapchat_ads__ad_account_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_account_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_account_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__ad_history__fivetran_synced", "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": 1730229542.3254, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history`\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__ad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_history_ad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_history_ad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_history_ad_id"], "alias": "not_null_stg_snapchat_ads__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": 1730229542.326386, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_history_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__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_snapchat_ads__ad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302", "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": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302"}, "created_at": 1730229542.3274481, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__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.snapchat_ads_source.stg_snapchat_ads__ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, _fivetran_synced\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_history`\n group by source_relation, ad_id, _fivetran_synced\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_snapchat_ads__ad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_hourly_report_ad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_hourly_report_ad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_hourly_report_ad_id"], "alias": "not_null_stg_snapchat_ads__ad_hourly_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": 1730229542.3297741, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_hourly_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_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_snapchat_ads__ad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_hourly_report_date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_hourly_report_date_hour.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_hourly_report_date_hour"], "alias": "not_null_stg_snapchat_ads__ad_hourly_report_date_hour", "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": 1730229542.330755, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_hourly_report_date_hour.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_hour\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report`\nwhere date_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_hour", "file_key_name": "models.stg_snapchat_ads__ad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_hour", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour"], "alias": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c", "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": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c"}, "created_at": 1730229542.3318248, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, date_hour\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_hourly_report`\n group by source_relation, ad_id, date_hour\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_snapchat_ads__ad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "date_hour"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_hourly_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced", "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": 1730229542.334146, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history`\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__ad_squad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id"], "alias": "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_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": 1730229542.335208, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_squad_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history`\nwhere ad_squad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_squad_id", "file_key_name": "models.stg_snapchat_ads__ad_squad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_squad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56", "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": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56"}, "created_at": 1730229542.336192, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_squad_id, _fivetran_synced\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_history`\n group by source_relation, ad_squad_id, _fivetran_synced\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_snapchat_ads__ad_squad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_squad_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id"], "alias": "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_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": 1730229542.338563, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_squad_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_hourly_report`\nwhere ad_squad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_squad_id", "file_key_name": "models.stg_snapchat_ads__ad_squad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_squad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour"], "alias": "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour", "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": 1730229542.3395479, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_hour\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_hourly_report`\nwhere date_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_hour", "file_key_name": "models.stg_snapchat_ads__ad_squad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_hour", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour"], "alias": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac", "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": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac"}, "created_at": 1730229542.340535, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_squad_id, date_hour\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__ad_squad_hourly_report`\n group by source_relation, ad_squad_id, date_hour\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_snapchat_ads__ad_squad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_squad_id", "date_hour"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_hourly_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__campaign_history__fivetran_synced", "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": 1730229542.342912, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history`\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__campaign_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_history_campaign_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_history_campaign_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_history_campaign_id"], "alias": "not_null_stg_snapchat_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": 1730229542.3438878, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_history_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_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_snapchat_ads__campaign_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014", "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": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014"}, "created_at": 1730229542.344866, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_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.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, campaign_id, _fivetran_synced\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_history`\n group by source_relation, campaign_id, _fivetran_synced\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_snapchat_ads__campaign_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id"], "alias": "not_null_stg_snapchat_ads__campaign_hourly_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": 1730229542.347221, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_hourly_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_snapchat_ads__campaign_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour"], "alias": "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour", "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": 1730229542.348192, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_hour\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_hourly_report`\nwhere date_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_hour", "file_key_name": "models.stg_snapchat_ads__campaign_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_hour", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour"], "alias": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d", "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": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d"}, "created_at": 1730229542.34917, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, campaign_id, date_hour\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__campaign_hourly_report`\n group by source_relation, campaign_id, date_hour\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_snapchat_ads__campaign_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "date_hour"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_hourly_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__creative_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__creative_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__creative_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__creative_history__fivetran_synced", "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": 1730229542.351804, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__creative_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__creative_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__creative_history_creative_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__creative_history_creative_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__creative_history_creative_id"], "alias": "not_null_stg_snapchat_ads__creative_history_creative_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": 1730229542.352798, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__creative_history_creative_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect creative_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\nwhere creative_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "creative_id", "file_key_name": "models.stg_snapchat_ads__creative_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "creative_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da", "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": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da"}, "created_at": 1730229542.35378, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_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.snapchat_ads_source.stg_snapchat_ads__creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, creative_id, _fivetran_synced\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_history`\n group by source_relation, creative_id, _fivetran_synced\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_snapchat_ads__creative_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "creative_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "not_null_stg_snapchat_ads__creative_url_tag_history_creative_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__creative_url_tag_history_creative_id"], "alias": "not_null_stg_snapchat_ads__creative_url_tag_history_creative_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": 1730229542.356149, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_url_tag_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect creative_id\nfrom `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`\nwhere creative_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "creative_id", "file_key_name": "models.stg_snapchat_ads__creative_url_tag_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "creative_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_url_tag_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at"], "alias": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16", "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": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16"}, "created_at": 1730229542.357135, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_url_tag_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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, creative_id, param_key, updated_at\n from `dbt-package-testing`.`snapchat_ads_tests_snapchat_ads_dev`.`stg_snapchat_ads__creative_url_tag_history`\n group by source_relation, creative_id, param_key, updated_at\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_snapchat_ads__creative_url_tag_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "creative_id", "param_key", "updated_at"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_url_tag_history')) }}"}, "namespace": "dbt_utils"}}}, "sources": {"source.snapchat_ads_source.snapchat_ads.ad_account_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "ad_account_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_account_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_account_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_account_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 in this table represents a historic version of an ad account in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "advertiser": {"name": "advertiser", "description": "Name of advertiser", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "currency": {"name": "currency", "description": "Currency used by account", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "timezone": {"name": "timezone", "description": "Account timezone", "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`.`snapchat_ads_tests`.`snapchat_ad_account_history_data`", "created_at": 1730229542.3614311}, "source.snapchat_ads_source.snapchat_ads.ad_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "ad_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_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 in this table represents a historic version of an ad in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the related ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp", "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`.`snapchat_ads_tests`.`snapchat_ad_history_data`", "created_at": 1730229542.362195}, "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "ad_hourly_report", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_hourly_report", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_hourly_report"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_hourly_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 represents an hourly performance summary for an ad in Snapchat.", "columns": {"ad_id": {"name": "ad_id", "description": "The ID of the ad that the report relates to in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_total_view_time_millis": {"name": "attachment_total_view_time_millis", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "screen_time_millis": {"name": "screen_time_millis", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_time_millis": {"name": "view_time_millis", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend in microdollars for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (microcurrency in Ad Account's currency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed to an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_add_billing": {"name": "conversion_add_billing", "description": "Total number of attributed \"ADD_BILLING\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_save": {"name": "conversion_save", "description": "Total number of attributed \"SAVE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_add_cart": {"name": "conversion_add_cart", "description": "Total number of attributed \"ADD_CART\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_sign_ups": {"name": "conversion_sign_ups", "description": "Total number of attributed \"SIGN_UP\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_start_checkout": {"name": "conversion_start_checkout", "description": "Total number of attributed \"START_CHECKOUT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_searches": {"name": "conversion_searches", "description": "Total number of attributed \"SEARCH\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_view_content": {"name": "conversion_view_content", "description": "Total number of attributed \"VIEW_CONTENT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_app_opens": {"name": "conversion_app_opens", "description": "Total number of attributed \"APP_OPEN\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_level_completes": {"name": "conversion_level_completes", "description": "Total number of attributed \"LEVEL_COMPLETE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_page_views": {"name": "conversion_page_views", "description": "Total number of attributed \"PAGE_VIEW\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "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`.`snapchat_ads_tests`.`snapchat_ad_hourly_report_data`", "created_at": 1730229542.362357}, "source.snapchat_ads_source.snapchat_ads.ad_squad_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "ad_squad_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_squad_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_squad_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_squad_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 in this table represents a historic version of an ad squad in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "campaign_id": {"name": "campaign_id", "description": "The ID of the related campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the ad squad in Snapchat.", "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`.`snapchat_ads_tests`.`snapchat_ad_squad_history_data`", "created_at": 1730229542.3624692}, "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "ad_squad_hourly_report", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_squad_hourly_report"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_squad_hourly_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 represents an hourly performance summary for each ad squad.", "columns": {"ad_squad_id": {"name": "ad_squad_id", "description": "ID of the ad squad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_total_view_time_millis": {"name": "attachment_total_view_time_millis", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "screen_time_millis": {"name": "screen_time_millis", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_time_millis": {"name": "view_time_millis", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend in microdollars for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (microcurrency in Ad Account's currency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed to an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_add_billing": {"name": "conversion_add_billing", "description": "Total number of attributed \"ADD_BILLING\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_save": {"name": "conversion_save", "description": "Total number of attributed \"SAVE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_add_cart": {"name": "conversion_add_cart", "description": "Total number of attributed \"ADD_CART\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_sign_ups": {"name": "conversion_sign_ups", "description": "Total number of attributed \"SIGN_UP\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_start_checkout": {"name": "conversion_start_checkout", "description": "Total number of attributed \"START_CHECKOUT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_searches": {"name": "conversion_searches", "description": "Total number of attributed \"SEARCH\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_view_content": {"name": "conversion_view_content", "description": "Total number of attributed \"VIEW_CONTENT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_app_opens": {"name": "conversion_app_opens", "description": "Total number of attributed \"APP_OPEN\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_level_completes": {"name": "conversion_level_completes", "description": "Total number of attributed \"LEVEL_COMPLETE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_page_views": {"name": "conversion_page_views", "description": "Total number of attributed \"PAGE_VIEW\" conversion events for an ad in the hour of the record.", "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`.`snapchat_ads_tests`.`snapchat_ad_squad_hourly_report_data`", "created_at": 1730229542.3626182}, "source.snapchat_ads_source.snapchat_ads.campaign_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "campaign_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.campaign_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "campaign_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_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 in this table represents a historic version of a campaign in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the campaign in Snapchat.", "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`.`snapchat_ads_tests`.`snapchat_campaign_history_data`", "created_at": 1730229542.362724}, "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "campaign_hourly_report", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report", "fqn": ["snapchat_ads_source", "snapchat_ads", "campaign_hourly_report"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_campaign_hourly_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 represents an hourly performance summary for each campaign.", "columns": {"campaign_id": {"name": "campaign_id", "description": "ID of campaign", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "date": {"name": "date", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_total_view_time_millis": {"name": "attachment_total_view_time_millis", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "screen_time_millis": {"name": "screen_time_millis", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "view_time_millis": {"name": "view_time_millis", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "spend": {"name": "spend", "description": "The amount of spend in microdollars for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (microcurrency in Ad Account's currency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed to an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_add_billing": {"name": "conversion_add_billing", "description": "Total number of attributed \"ADD_BILLING\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_save": {"name": "conversion_save", "description": "Total number of attributed \"SAVE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_add_cart": {"name": "conversion_add_cart", "description": "Total number of attributed \"ADD_CART\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_sign_ups": {"name": "conversion_sign_ups", "description": "Total number of attributed \"SIGN_UP\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_start_checkout": {"name": "conversion_start_checkout", "description": "Total number of attributed \"START_CHECKOUT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_searches": {"name": "conversion_searches", "description": "Total number of attributed \"SEARCH\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_view_content": {"name": "conversion_view_content", "description": "Total number of attributed \"VIEW_CONTENT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_app_opens": {"name": "conversion_app_opens", "description": "Total number of attributed \"APP_OPEN\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_level_completes": {"name": "conversion_level_completes", "description": "Total number of attributed \"LEVEL_COMPLETE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "conversion_page_views": {"name": "conversion_page_views", "description": "Total number of attributed \"PAGE_VIEW\" conversion events for an ad in the hour of the record.", "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`.`snapchat_ads_tests`.`snapchat_campaign_hourly_report_data`", "created_at": 1730229542.362967}, "source.snapchat_ads_source.snapchat_ads.creative_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "creative_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.creative_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "creative_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_creative_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 in this table represents a historic version of a creative in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "id": {"name": "id", "description": "The ID of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "name": {"name": "name", "description": "The name of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "web_view_url": {"name": "web_view_url", "description": "The URL of the creative if the creative is of type 'web view'.", "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`.`snapchat_ads_tests`.`snapchat_creative_history_data`", "created_at": 1730229542.363082}, "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": {"database": "dbt-package-testing", "schema": "snapchat_ads_tests", "name": "creative_url_tag_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "creative_url_tag_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_creative_url_tag_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 in this table represents a URL parameter key-value pair for a creative in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "key": {"name": "key", "description": "The URL parameter key, i.e. UTM_SOURCE.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": []}, "value": {"name": "value", "description": "The URL parameter value, i.e. Snapchat.", "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`.`snapchat_ads_tests`.`snapchat_creative_url_tag_history_data`", "created_at": 1730229542.36319}}, "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": 1730229540.729213, "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": 1730229540.729451, "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": 1730229540.729747, "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": 1730229540.7341828, "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": 1730229540.734657, "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": 1730229540.734795, "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": 1730229540.734955, "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": 1730229540.735112, "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": 1730229540.7352629, "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": 1730229540.7354429, "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": 1730229540.735724, "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": 1730229540.735882, "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": 1730229540.736286, "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": 1730229540.736651, "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": 1730229540.737375, "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": 1730229540.737546, "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": 1730229540.737817, "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": 1730229540.738198, "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": 1730229540.738354, "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": 1730229540.739091, "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": 1730229540.7396638, "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": 1730229540.7403038, "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": 1730229540.744459, "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 enable_list_inference = config.get('enable_list_inference', true) -%}\n{%- set intermediate_format = config.get('intermediate_format', none) -%}\n\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}}\")\nspark.conf.set(\"enableListInference\", \"{{ enable_list_inference }}\")\n{% if intermediate_format %}\nspark.conf.set(\"intermediateFormat\", \"{{ intermediate_format }}\")\n{% endif %}\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": 1730229540.745662, "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": 1730229540.746932, "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": 1730229540.749024, "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": 1730229540.7493062, "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": 1730229540.7500281, "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": 1730229540.7506402, "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": 1730229540.754445, "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": 1730229540.754848, "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": 1730229540.754999, "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": 1730229540.7551339, "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": 1730229540.75533, "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": 1730229540.7554612, "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 predicates = [] if incremental_predicates is none else [] + incremental_predicates -%}\n {%- set avoid_require_partition_filter = predicate_for_avoid_require_partition_filter() -%}\n {%- if avoid_require_partition_filter is not none -%}\n {% do predicates.append(avoid_require_partition_filter) %}\n {%- endif -%}\n\n {% set build_sql = get_merge_sql(target_relation, source_sql, unique_key, dest_columns, predicates) %}\n\n {{ return(build_sql) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.wrap_with_time_ingestion_partitioning_sql", "macro.dbt_bigquery.predicate_for_avoid_require_partition_filter", "macro.dbt.get_merge_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.756706, "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": 1730229540.757508, "supported_languages": null}, "macro.dbt_bigquery.predicate_for_avoid_require_partition_filter": {"name": "predicate_for_avoid_require_partition_filter", "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.predicate_for_avoid_require_partition_filter", "macro_sql": "{% macro predicate_for_avoid_require_partition_filter(target='DBT_INTERNAL_DEST') %}\n\n {%- set raw_partition_by = config.get('partition_by', none) -%}\n {%- set partition_config = adapter.parse_partition_by(raw_partition_by) -%}\n {%- set predicate = none -%}\n\n {% if partition_config and config.get('require_partition_filter') -%}\n {%- set partition_field = partition_config.time_partitioning_field() if partition_config.time_ingestion_partitioning else partition_config.field -%}\n {% set predicate %}\n (\n `{{ target }}`.`{{ partition_field }}` is null\n or `{{ target }}`.`{{ partition_field }}` is not null\n )\n {% endset %}\n {%- endif -%}\n\n {{ return(predicate) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.758097, "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": 1730229540.760972, "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": 1730229540.762223, "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": 1730229540.7627652, "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": 1730229540.7637188, "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": 1730229540.764383, "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": 1730229540.765461, "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": 1730229540.766861, "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": 1730229540.7672498, "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": 1730229540.767494, "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": 1730229540.768118, "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": 1730229540.768447, "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": 1730229540.76862, "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": 1730229540.7690518, "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": 1730229540.769514, "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": 1730229540.769702, "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": 1730229540.7705228, "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": 1730229540.770664, "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_relation_config(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": 1730229540.7712572, "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": 1730229540.771469, "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": 1730229540.772042, "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.model) %}\n {% do return(_configuration_changes) %}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.772337, "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_relation_config(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": 1730229540.772937, "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": 1730229540.773071, "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": 1730229540.773354, "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": 1730229540.773518, "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": 1730229540.7737222, "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": 1730229540.775394, "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": 1730229540.775587, "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": 1730229540.7758021, "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": 1730229540.7760682, "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": 1730229540.776235, "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": 1730229540.777589, "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": 1730229540.780376, "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": 1730229540.7804642, "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": 1730229540.780559, "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": 1730229540.7808352, "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": 1730229540.780938, "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": 1730229540.781203, "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": 1730229540.7823622, "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": 1730229540.782469, "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": 1730229540.782687, "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": 1730229540.7828531, "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": 1730229540.783028, "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": 1730229540.7831051, "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": 1730229540.783206, "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": 1730229540.7834508, "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": 1730229540.784292, "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": 1730229540.784859, "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": 1730229540.785026, "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": 1730229540.785493, "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": 1730229540.7857301, "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": 1730229540.786125, "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": 1730229540.786603, "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{%- if type.lower().startswith('array') and field is iterable and (field is not string and field is not mapping) and field | length > 0 -%}\n {#-- Extract nested type from 'array' --#}\n {% set nested_type = type.lower()[6:-1] %}\n {#-- BigQuery does not support direct casts to arrays. instead, each element must be cast individually + reaggregated into an array --#}\n {%- if cast_from_string_unsupported_for(nested_type) %}\n (select array_agg(safe_cast(i as {{ nested_type }})) from unnest([\n {%- for nested_field in field %}\n {{ nested_field.strip('\"').strip(\"'\") }}{{ ',' if not loop.last }}\n {%- endfor %}\n ]) i)\n {%- else -%}\n (select array_agg(safe_cast(i as {{nested_type}})) from unnest({{field}}) i)\n {%- endif -%}\n\n{%- elif type.lower() == 'json' and field is mapping -%}\n safe_cast(json {{ dbt.string_literal(tojson(field)) }} as json)\n{%- elif cast_from_string_unsupported_for(type) and field is string -%}\n safe_cast({{field.strip('\"').strip(\"'\")}} as {{type}})\n{%- else -%}\n safe_cast({{field}} as {{type}})\n{%- endif -%}\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt_bigquery.cast_from_string_unsupported_for", "macro.dbt.string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.788078, "supported_languages": null}, "macro.dbt_bigquery.cast_from_string_unsupported_for": {"name": "cast_from_string_unsupported_for", "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.cast_from_string_unsupported_for", "macro_sql": "{% macro cast_from_string_unsupported_for(type) %}\n {{ return(type.lower().startswith('struct') or type.lower() == 'geography') }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.788297, "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": 1730229540.788461, "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": 1730229540.788647, "supported_languages": null}, "macro.dbt_bigquery.bigquery__string_literal": {"name": "bigquery__string_literal", "resource_type": "macro", "package_name": "dbt_bigquery", "path": "macros/utils/string_literal.sql", "original_file_path": "macros/utils/string_literal.sql", "unique_id": "macro.dbt_bigquery.bigquery__string_literal", "macro_sql": "{%- macro bigquery__string_literal(value) -%}\n '''{{ value }}'''\n{%- endmacro -%}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.7887738, "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": 1730229540.7889369, "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": 1730229540.789066, "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": 1730229540.7896771, "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": 1730229540.789852, "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": 1730229540.790153, "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": 1730229540.7903638, "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": 1730229540.791136, "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": 1730229540.791373, "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": 1730229540.791605, "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": 1730229540.791884, "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": 1730229540.7921128, "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": 1730229540.7931688, "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": 1730229540.793362, "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": 1730229540.793508, "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": 1730229540.793647, "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": 1730229540.793783, "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": 1730229540.794153, "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": 1730229540.794442, "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": 1730229540.79473, "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": 1730229540.7954218, "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 and (DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }} or\n DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} is null)\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"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.796093, "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": 1730229540.799359, "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": 1730229540.7995882, "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": 1730229540.7998059, "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 invalidate_hard_deletes = config.get('invalidate_hard_deletes') or false %}\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 }) %}\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": 1730229540.800695, "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": 1730229540.800859, "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": 1730229540.801022, "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": 1730229540.802374, "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 invalidate_hard_deletes = config.get('invalidate_hard_deletes') or false %}\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 }) %}\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": 1730229540.8037472, "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": 1730229540.811342, "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 \"{{ 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": 1730229540.8116338, "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": 1730229540.8117929, "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": 1730229540.811883, "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": 1730229540.812028, "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": 1730229540.812143, "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": 1730229540.812344, "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'}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.812566, "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\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 {# Check for either dbt_valid_to_current OR null, in order to correctly update records with nulls #}\n ( {{ columns.dbt_valid_to }} = {{ config.get('dbt_valid_to_current') }} or {{ columns.dbt_valid_to }} 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.invalidate_hard_deletes %}\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\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 ({{ 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.{{ columns.dbt_scd_id }}\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 }}\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 {{ 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\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 {%- 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.get_snapshot_table_column_names", "macro.dbt.unique_key_fields", "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.snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.8144681, "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": 1730229540.814661, "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 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": 1730229540.815066, "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": 1730229540.8154812, "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": 1730229540.816055, "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": 1730229540.816469, "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": 1730229540.8167381, "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": 1730229540.817064, "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 {{ identifier }}.dbt_unique_key_{{ loop.index }} = {{ from_identifier }}.dbt_unique_key_{{ loop.index }}\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": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.817472, "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": 1730229540.817675, "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": 1730229540.817878, "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.valid_snapshot_target(target_relation, columns) }}\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": 1730229540.823544, "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": 1730229540.826215, "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": 1730229540.827342, "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": 1730229540.82764, "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": 1730229540.827848, "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": 1730229540.828434, "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": 1730229540.8288121, "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": 1730229540.829178, "supported_languages": null}, "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": 1730229540.830879, "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": 1730229540.835868, "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": 1730229540.8362439, "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": 1730229540.8364851, "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": 1730229540.837785, "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": 1730229540.8380108, "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": 1730229540.8386428, "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": 1730229540.841415, "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": 1730229540.844209, "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": 1730229540.845833, "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": 1730229540.846355, "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": 1730229540.8469918, "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": 1730229540.8472252, "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": 1730229540.847915, "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": 1730229540.85476, "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": 1730229540.856353, "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": 1730229540.8566122, "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": 1730229540.857579, "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": 1730229540.857846, "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": 1730229540.858478, "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": 1730229540.859086, "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": 1730229540.860189, "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": 1730229540.86042, "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": 1730229540.8606012, "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": 1730229540.8608902, "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": 1730229540.861071, "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": 1730229540.8613582, "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": 1730229540.861541, "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": 1730229540.861793, "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": 1730229540.861973, "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": 1730229540.862118, "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.default__get_incremental_microbatch_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.862294, "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": 1730229540.8624508, "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": 1730229540.8627179, "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 {% 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 {% 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 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": 1730229540.867809, "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": 1730229540.873626, "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": 1730229540.874777, "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": 1730229540.8758988, "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": 1730229540.876707, "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": 1730229540.8769438, "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": 1730229540.877058, "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": 1730229540.877341, "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": 1730229540.877503, "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 {% 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.render()) }}\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": 1730229540.88112, "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.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": 1730229540.8842728, "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": 1730229540.8896158, "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": 1730229540.890464, "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": 1730229540.8906932, "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": 1730229540.8911638, "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": 1730229540.891347, "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": 1730229540.891475, "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": 1730229540.8916101, "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": 1730229540.891725, "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": 1730229540.891881, "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": 1730229540.891995, "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": 1730229540.89245, "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": 1730229540.892629, "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": 1730229540.893832, "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": 1730229540.894248, "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": 1730229540.894613, "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": 1730229540.895134, "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": 1730229540.8953931, "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": 1730229540.8956811, "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": 1730229540.896078, "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": 1730229540.8963368, "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": 1730229540.897085, "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": 1730229540.897474, "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": 1730229540.897665, "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": 1730229540.897868, "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": 1730229540.8980632, "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": 1730229540.898865, "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": 1730229540.900158, "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": 1730229540.90055, "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": 1730229540.900803, "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": 1730229540.901081, "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": 1730229540.9012969, "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": 1730229540.901624, "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": 1730229540.901834, "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": 1730229540.902573, "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": 1730229540.903011, "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": 1730229540.903222, "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": 1730229540.903528, "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": 1730229540.903886, "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": 1730229540.904164, "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": 1730229540.904656, "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": 1730229540.905109, "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": 1730229540.9054458, "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": 1730229540.905664, "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_bigquery.bigquery__drop_materialized_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.905924, "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": 1730229540.906057, "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": 1730229540.9063418, "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": 1730229540.90656, "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": 1730229540.9068758, "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": 1730229540.907017, "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": 1730229540.907302, "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": 1730229540.9074519, "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": 1730229540.90809, "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": 1730229540.908284, "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": 1730229540.90858, "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": 1730229540.908729, "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": 1730229540.909014, "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": 1730229540.909164, "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": 1730229540.910224, "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": 1730229540.9103491, "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": 1730229540.910893, "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": 1730229540.911068, "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": 1730229540.911207, "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": 1730229540.912739, "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": 1730229540.913128, "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": 1730229540.913483, "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_bigquery.bigquery__drop_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.913741, "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": 1730229540.913866, "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": 1730229540.914146, "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": 1730229540.914298, "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": 1730229540.914575, "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": 1730229540.914724, "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": 1730229540.915616, "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": 1730229540.9158049, "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": 1730229540.916251, "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": 1730229540.91695, "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": 1730229540.917418, "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": 1730229540.917613, "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": 1730229540.9177952, "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_bigquery.bigquery__drop_view"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.918049, "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": 1730229540.918174, "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": 1730229540.919074, "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": 1730229540.919225, "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": 1730229540.9204428, "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": 1730229540.920647, "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": 1730229540.920892, "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": 1730229540.921171, "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": 1730229540.921321, "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": 1730229540.9217532, "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": 1730229540.9219232, "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": 1730229540.922112, "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": 1730229540.922564, "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": 1730229540.923092, "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": 1730229540.9234262, "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": 1730229540.9236748, "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": 1730229540.924256, "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": 1730229540.925903, "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": 1730229540.926498, "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": 1730229540.926805, "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": 1730229540.928797, "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": 1730229540.930062, "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": 1730229540.930788, "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": 1730229540.931017, "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": 1730229540.931246, "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": 1730229540.931326, "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": 1730229540.932085, "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": 1730229540.932757, "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": 1730229540.933078, "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": 1730229540.93347, "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": 1730229540.933816, "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": 1730229540.9341052, "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": 1730229540.934443, "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": 1730229540.9346108, "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": 1730229540.9348621, "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": 1730229540.9349911, "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": 1730229540.935849, "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": 1730229540.936267, "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": 1730229540.9364579, "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": 1730229540.9369652, "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": 1730229540.937222, "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": 1730229540.937328, "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": 1730229540.937674, "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": 1730229540.937932, "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": 1730229540.938164, "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": 1730229540.938247, "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": 1730229540.938519, "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": 1730229540.9386702, "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": 1730229540.93898, "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": 1730229540.939127, "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": 1730229540.939811, "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": 1730229540.9402182, "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": 1730229540.9405692, "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": 1730229540.9407392, "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": 1730229540.941032, "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": 1730229540.941178, "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": 1730229540.941443, "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": 1730229540.941611, "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": 1730229540.9418619, "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": 1730229540.942025, "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": 1730229540.942306, "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": 1730229540.942445, "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": 1730229540.942703, "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": 1730229540.942888, "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": 1730229540.9431832, "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": 1730229540.9433239, "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_bigquery.bigquery__string_literal"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.943572, "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": 1730229540.943679, "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": 1730229540.944617, "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": 1730229540.944771, "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": 1730229540.944941, "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": 1730229540.945096, "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": 1730229540.945261, "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": 1730229540.945418, "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": 1730229540.945584, "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": 1730229540.945764, "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": 1730229540.945926, "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": 1730229540.946081, "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": 1730229540.946243, "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": 1730229540.946388, "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": 1730229540.946552, "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": 1730229540.946697, "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": 1730229540.946978, "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": 1730229540.94718, "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": 1730229540.9474251, "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": 1730229540.947528, "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": 1730229540.947881, "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": 1730229540.9481559, "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": 1730229540.9483058, "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": 1730229540.948857, "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": 1730229540.949024, "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": 1730229540.949257, "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": 1730229540.949541, "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": 1730229540.949673, "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": 1730229540.950052, "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": 1730229540.950302, "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": 1730229540.9505842, "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": 1730229540.95072, "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": 1730229540.951104, "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": 1730229540.951283, "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": 1730229540.9514399, "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": 1730229540.95162, "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": 1730229540.952422, "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": 1730229540.952679, "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": 1730229540.952842, "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": 1730229540.9529622, "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.default__snapshot_get_time", "macro.dbt.get_column_schema_from_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229540.953401, "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": 1730229540.953588, "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": 1730229540.953675, "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": 1730229540.953849, "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": 1730229540.954027, "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": 1730229540.9549341, "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": 1730229540.95508, "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": 1730229540.9552472, "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": 1730229540.955658, "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": 1730229540.9558551, "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": 1730229540.956001, "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": 1730229540.956168, "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": 1730229540.956295, "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": 1730229540.958335, "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": 1730229540.9585001, "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": 1730229540.958712, "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": 1730229540.9590678, "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": 1730229540.959305, "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": 1730229540.9596229, "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": 1730229540.9598122, "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": 1730229540.959998, "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": 1730229540.960257, "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": 1730229540.960822, "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": 1730229540.961057, "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": 1730229540.961208, "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": 1730229540.961638, "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": 1730229540.962244, "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": 1730229540.9626508, "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": 1730229540.962909, "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": 1730229540.964897, "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": 1730229540.965039, "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": 1730229540.965226, "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": 1730229540.9653618, "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": 1730229540.96574, "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": 1730229540.96594, "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": 1730229540.966069, "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": 1730229540.9664152, "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": 1730229540.966634, "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": 1730229540.9668748, "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": 1730229540.96709, "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": 1730229540.9673321, "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": 1730229540.9681332, "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": 1730229540.968346, "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": 1730229540.9686038, "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": 1730229540.968883, "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": 1730229540.970227, "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": 1730229540.9706619, "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": 1730229540.97085, "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 {{ compiled_code }}\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": 1730229540.971039, "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": 1730229540.971968, "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": 1730229540.972159, "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": 1730229540.972378, "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": 1730229540.972558, "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": 1730229540.9728389, "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": 1730229540.973427, "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": 1730229540.9775958, "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": 1730229540.9779, "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": 1730229540.9781241, "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": 1730229540.978388, "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": 1730229540.978585, "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": 1730229540.9787478, "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": 1730229540.978934, "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": 1730229540.979181, "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": 1730229540.9793978, "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": 1730229540.979715, "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": 1730229540.979903, "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": 1730229540.9800682, "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": 1730229540.980261, "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": 1730229540.980436, "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": 1730229540.980601, "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": 1730229540.9807491, "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": 1730229540.9809558, "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": 1730229540.981211, "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": 1730229540.9841259, "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": 1730229540.984344, "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": 1730229540.984688, "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": 1730229540.98493, "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": 1730229540.985152, "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": 1730229540.9853451, "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": 1730229540.9865751, "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": 1730229540.986938, "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": 1730229540.987133, "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": 1730229540.987492, "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": 1730229540.987735, "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": 1730229540.988412, "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": 1730229540.988683, "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.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": 1730229540.98958, "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": 1730229540.993185, "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": 1730229540.993917, "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": 1730229540.995123, "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": 1730229540.9953558, "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": 1730229540.995462, "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": 1730229540.997216, "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": 1730229540.997386, "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": 1730229540.9982169, "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": 1730229540.9986649, "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": 1730229540.999458, "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": 1730229541.000001, "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": 1730229541.0000892, "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": 1730229541.000659, "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": 1730229541.000917, "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": 1730229541.00124, "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": 1730229541.001544, "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": 1730229541.001915, "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": 1730229541.0027, "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": 1730229541.003221, "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": 1730229541.003894, "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": 1730229541.0042062, "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": 1730229541.0045161, "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": 1730229541.0056052, "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": 1730229541.006588, "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": 1730229541.007431, "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": 1730229541.0084548, "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": 1730229541.009085, "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": 1730229541.0094159, "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": 1730229541.010126, "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": 1730229541.0109582, "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": 1730229541.011405, "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": 1730229541.011869, "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": 1730229541.0124831, "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": 1730229541.0129652, "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": 1730229541.013673, "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": 1730229541.0142899, "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": 1730229541.015269, "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": 1730229541.01615, "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": 1730229541.016823, "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": 1730229541.0174851, "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": 1730229541.018044, "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": 1730229541.018394, "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": 1730229541.018799, "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": 1730229541.019167, "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": 1730229541.019914, "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": 1730229541.020767, "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": 1730229541.021719, "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": 1730229541.022628, "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": 1730229541.0248399, "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": 1730229541.0290072, "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": 1730229541.02955, "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": 1730229541.02986, "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": 1730229541.033477, "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": 1730229541.035291, "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": 1730229541.03565, "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": 1730229541.035836, "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": 1730229541.036312, "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": 1730229541.036629, "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": 1730229541.036831, "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": 1730229541.037098, "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": 1730229541.03728, "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": 1730229541.038039, "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": 1730229541.039032, "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": 1730229541.0397508, "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": 1730229541.0403368, "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": 1730229541.040567, "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": 1730229541.0409238, "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": 1730229541.041302, "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": 1730229541.041913, "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": 1730229541.042222, "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": 1730229541.04256, "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": 1730229541.043253, "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": 1730229541.04423, "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": 1730229541.0451672, "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": 1730229541.045595, "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": 1730229541.045795, "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": 1730229541.046339, "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": 1730229541.0471108, "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": 1730229541.048068, "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": 1730229541.048557, "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": 1730229541.048866, "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": 1730229541.0503218, "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": 1730229541.052057, "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": 1730229541.053785, "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": 1730229541.055722, "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": 1730229541.056043, "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": 1730229541.056187, "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": 1730229541.060104, "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": 1730229541.063513, "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": 1730229541.0638342, "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": 1730229541.064081, "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": 1730229541.064948, "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": 1730229541.065161, "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": 1730229541.065331, "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": 1730229541.065515, "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": 1730229541.0656781, "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": 1730229541.0658402, "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": 1730229541.066011, "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": 1730229541.066387, "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": 1730229541.066616, "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": 1730229541.066986, "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": 1730229541.0675, "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": 1730229541.0678349, "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": 1730229541.068152, "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": 1730229541.071887, "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": 1730229541.072279, "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": 1730229541.073045, "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": 1730229541.07378, "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": 1730229541.0742762, "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": 1730229541.075485, "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": 1730229541.076997, "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": 1730229541.078115, "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": 1730229541.0789602, "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": 1730229541.079454, "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": 1730229541.080176, "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": 1730229541.080988, "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": 1730229541.081459, "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": 1730229541.0816572, "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": 1730229541.0820532, "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": 1730229541.0826502, "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": 1730229541.083123, "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": 1730229541.083767, "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": 1730229541.084333, "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": 1730229541.0844748, "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": 1730229541.084618, "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": 1730229541.084764, "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": 1730229541.085304, "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": 1730229541.086112, "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": 1730229541.087242, "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": 1730229541.0875242, "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": 1730229541.088118, "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": 1730229541.088937, "supported_languages": null}, "macro.spark_utils.get_tables": {"name": "get_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.get_tables", "macro_sql": "{% macro get_tables(table_regex_pattern='.*') %}\n\n {% set tables = [] %}\n {% for database in spark__list_schemas('not_used') %}\n {% for table in spark__list_relations_without_caching(database[0]) %}\n {% set db_tablename = database[0] ~ \".\" ~ table[1] %}\n {% set is_match = modules.re.match(table_regex_pattern, db_tablename) %}\n {% if is_match %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('type', 'TYPE', 'Type'))|first %}\n {% if table_type[1]|lower != 'view' %}\n {{ tables.append(db_tablename) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% endfor %}\n {{ return(tables) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.094492, "supported_languages": null}, "macro.spark_utils.get_delta_tables": {"name": "get_delta_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.get_delta_tables", "macro_sql": "{% macro get_delta_tables(table_regex_pattern='.*') %}\n\n {% set delta_tables = [] %}\n {% for db_tablename in get_tables(table_regex_pattern) %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('provider', 'PROVIDER', 'Provider'))|first %}\n {% if table_type[1]|lower == 'delta' %}\n {{ delta_tables.append(db_tablename) }}\n {% endif %}\n {% endfor %}\n {{ return(delta_tables) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.0951831, "supported_languages": null}, "macro.spark_utils.get_statistic_columns": {"name": "get_statistic_columns", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.get_statistic_columns", "macro_sql": "{% macro get_statistic_columns(table) %}\n\n {% call statement('input_columns', fetch_result=True) %}\n SHOW COLUMNS IN {{ table }}\n {% endcall %}\n {% set input_columns = load_result('input_columns').table %}\n\n {% set output_columns = [] %}\n {% for column in input_columns %}\n {% call statement('column_information', fetch_result=True) %}\n DESCRIBE TABLE {{ table }} `{{ column[0] }}`\n {% endcall %}\n {% if not load_result('column_information').table[1][1].startswith('struct') and not load_result('column_information').table[1][1].startswith('array') %}\n {{ output_columns.append('`' ~ column[0] ~ '`') }}\n {% endif %}\n {% endfor %}\n {{ return(output_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.096052, "supported_languages": null}, "macro.spark_utils.spark_optimize_delta_tables": {"name": "spark_optimize_delta_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.spark_optimize_delta_tables", "macro_sql": "{% macro spark_optimize_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Optimizing \" ~ table) }}\n {% do run_query(\"optimize \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.097054, "supported_languages": null}, "macro.spark_utils.spark_vacuum_delta_tables": {"name": "spark_vacuum_delta_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.spark_vacuum_delta_tables", "macro_sql": "{% macro spark_vacuum_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Vacuuming \" ~ table) }}\n {% do run_query(\"vacuum \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.0978181, "supported_languages": null}, "macro.spark_utils.spark_analyze_tables": {"name": "spark_analyze_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.spark_analyze_tables", "macro_sql": "{% macro spark_analyze_tables(table_regex_pattern='.*') %}\n\n {% for table in get_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set columns = get_statistic_columns(table) | join(',') %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Analyzing \" ~ table) }}\n {% if columns != '' %}\n {% do run_query(\"analyze table \" ~ table ~ \" compute statistics for columns \" ~ columns) %}\n {% endif %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.spark_utils.get_statistic_columns", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.098808, "supported_languages": null}, "macro.spark_utils.spark__concat": {"name": "spark__concat", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/concat.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/concat.sql", "unique_id": "macro.spark_utils.spark__concat", "macro_sql": "{% macro spark__concat(fields) -%}\n concat({{ fields|join(', ') }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.099018, "supported_languages": null}, "macro.spark_utils.spark__type_numeric": {"name": "spark__type_numeric", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "unique_id": "macro.spark_utils.spark__type_numeric", "macro_sql": "{% macro spark__type_numeric() %}\n decimal(28, 6)\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.099137, "supported_languages": null}, "macro.spark_utils.spark__dateadd": {"name": "spark__dateadd", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "unique_id": "macro.spark_utils.spark__dateadd", "macro_sql": "{% macro spark__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {%- set clock_component -%}\n {# make sure the dates + timestamps are real, otherwise raise an error asap #}\n to_unix_timestamp({{ spark_utils.assert_not_null('to_timestamp', from_date_or_timestamp) }})\n - to_unix_timestamp({{ spark_utils.assert_not_null('date', from_date_or_timestamp) }})\n {%- endset -%}\n\n {%- if datepart in ['day', 'week'] -%}\n \n {%- set multiplier = 7 if datepart == 'week' else 1 -%}\n\n to_timestamp(\n to_unix_timestamp(\n date_add(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ['month', 'quarter', 'year'] -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'month' -%} 1\n {%- elif datepart == 'quarter' -%} 3\n {%- elif datepart == 'year' -%} 12\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n to_unix_timestamp(\n add_months(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n {{ spark_utils.assert_not_null('to_unix_timestamp', from_date_or_timestamp) }}\n + cast({{interval}} * {{multiplier}} as int)\n )\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro dateadd not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.102161, "supported_languages": null}, "macro.spark_utils.spark__datediff": {"name": "spark__datediff", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/datediff.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datediff.sql", "unique_id": "macro.spark_utils.spark__datediff", "macro_sql": "{% macro spark__datediff(first_date, second_date, datepart) %}\n\n {%- if datepart in ['day', 'week', 'month', 'quarter', 'year'] -%}\n \n {# make sure the dates are real, otherwise raise an error asap #}\n {% set first_date = spark_utils.assert_not_null('date', first_date) %}\n {% set second_date = spark_utils.assert_not_null('date', second_date) %}\n \n {%- endif -%}\n \n {%- if datepart == 'day' -%}\n \n datediff({{second_date}}, {{first_date}})\n \n {%- elif datepart == 'week' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(datediff({{second_date}}, {{first_date}})/7)\n else ceil(datediff({{second_date}}, {{first_date}})/7)\n end\n \n -- did we cross a week boundary (Sunday)?\n + case\n when {{first_date}} < {{second_date}} and dayofweek({{second_date}}) < dayofweek({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofweek({{second_date}}) > dayofweek({{first_date}}) then -1\n else 0 end\n\n {%- elif datepart == 'month' -%}\n\n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}})))\n else ceil(months_between(date({{second_date}}), date({{first_date}})))\n end\n \n -- did we cross a month boundary?\n + case\n when {{first_date}} < {{second_date}} and dayofmonth({{second_date}}) < dayofmonth({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofmonth({{second_date}}) > dayofmonth({{first_date}}) then -1\n else 0 end\n \n {%- elif datepart == 'quarter' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}}))/3)\n else ceil(months_between(date({{second_date}}), date({{first_date}}))/3)\n end\n \n -- did we cross a quarter boundary?\n + case\n when {{first_date}} < {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n < (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then 1\n when {{first_date}} > {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n > (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then -1\n else 0 end\n\n {%- elif datepart == 'year' -%}\n \n year({{second_date}}) - year({{first_date}})\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set divisor -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n case when {{first_date}} < {{second_date}}\n then ceil((\n {# make sure the timestamps are real, otherwise raise an error asap #}\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n else floor((\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n end\n \n {% if datepart == 'millisecond' %}\n + cast(date_format({{second_date}}, 'SSS') as int)\n - cast(date_format({{first_date}}, 'SSS') as int)\n {% endif %}\n \n {% if datepart == 'microsecond' %} \n {% set capture_str = '[0-9]{4}-[0-9]{2}-[0-9]{2}.[0-9]{2}:[0-9]{2}:[0-9]{2}.([0-9]{6})' %}\n -- Spark doesn't really support microseconds, so this is a massive hack!\n -- It will only work if the timestamp-string is of the format\n -- 'yyyy-MM-dd-HH mm.ss.SSSSSS'\n + cast(regexp_extract({{second_date}}, '{{capture_str}}', 1) as int)\n - cast(regexp_extract({{first_date}}, '{{capture_str}}', 1) as int) \n {% endif %}\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro datediff not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.110278, "supported_languages": null}, "macro.spark_utils.spark__current_timestamp": {"name": "spark__current_timestamp", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "unique_id": "macro.spark_utils.spark__current_timestamp", "macro_sql": "{% macro spark__current_timestamp() %}\n current_timestamp()\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.110443, "supported_languages": null}, "macro.spark_utils.spark__current_timestamp_in_utc": {"name": "spark__current_timestamp_in_utc", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "unique_id": "macro.spark_utils.spark__current_timestamp_in_utc", "macro_sql": "{% macro spark__current_timestamp_in_utc() %}\n unix_timestamp()\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.110523, "supported_languages": null}, "macro.spark_utils.spark__split_part": {"name": "spark__split_part", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/split_part.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/split_part.sql", "unique_id": "macro.spark_utils.spark__split_part", "macro_sql": "{% macro spark__split_part(string_text, delimiter_text, part_number) %}\n\n {% set delimiter_expr %}\n \n -- escape if starts with a special character\n case when regexp_extract({{ delimiter_text }}, '([^A-Za-z0-9])(.*)', 1) != '_'\n then concat('\\\\', {{ delimiter_text }})\n else {{ delimiter_text }} end\n \n {% endset %}\n\n {% set split_part_expr %}\n \n split(\n {{ string_text }},\n {{ delimiter_expr }}\n )[({{ part_number - 1 }})]\n \n {% endset %}\n \n {{ return(split_part_expr) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.111108, "supported_languages": null}, "macro.spark_utils.spark__get_relations_by_pattern": {"name": "spark__get_relations_by_pattern", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_relations_by_pattern", "macro_sql": "{% macro spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n show table extended in {{ schema_pattern }} like '{{ table_pattern }}'\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=None,\n schema=row[0],\n identifier=row[1],\n type=('view' if 'Type: VIEW' in row[3] else 'table')\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"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.112745, "supported_languages": null}, "macro.spark_utils.spark__get_relations_by_prefix": {"name": "spark__get_relations_by_prefix", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_relations_by_prefix", "macro_sql": "{% macro spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {% set table_pattern = table_pattern ~ '*' %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.1130712, "supported_languages": null}, "macro.spark_utils.spark__get_tables_by_pattern": {"name": "spark__get_tables_by_pattern", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_tables_by_pattern", "macro_sql": "{% macro spark__get_tables_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.113339, "supported_languages": null}, "macro.spark_utils.spark__get_tables_by_prefix": {"name": "spark__get_tables_by_prefix", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_tables_by_prefix", "macro_sql": "{% macro spark__get_tables_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.113606, "supported_languages": null}, "macro.spark_utils.assert_not_null": {"name": "assert_not_null", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "unique_id": "macro.spark_utils.assert_not_null", "macro_sql": "{% macro assert_not_null(function, arg) -%}\n {{ return(adapter.dispatch('assert_not_null', 'spark_utils')(function, arg)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.spark_utils.default__assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.113929, "supported_languages": null}, "macro.spark_utils.default__assert_not_null": {"name": "default__assert_not_null", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "unique_id": "macro.spark_utils.default__assert_not_null", "macro_sql": "{% macro default__assert_not_null(function, arg) %}\n\n coalesce({{function}}({{arg}}), nvl2({{function}}({{arg}}), assert_true({{function}}({{arg}}) is not null), null))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.114122, "supported_languages": null}, "macro.spark_utils.spark__convert_timezone": {"name": "spark__convert_timezone", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/snowplow/convert_timezone.sql", "original_file_path": "macros/snowplow/convert_timezone.sql", "unique_id": "macro.spark_utils.spark__convert_timezone", "macro_sql": "{% macro spark__convert_timezone(in_tz, out_tz, in_timestamp) %}\n from_utc_timestamp(to_utc_timestamp({{in_timestamp}}, {{in_tz}}), {{out_tz}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.1143239, "supported_languages": null}, "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns": {"name": "snapchat_ads_persist_pass_through_columns", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_persist_pass_through_columns.sql", "original_file_path": "macros/snapchat_ads_persist_pass_through_columns.sql", "unique_id": "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro_sql": "{% macro snapchat_ads_persist_pass_through_columns(pass_through_variable, identifier=none, transform='', coalesce_with=none, except_variable=none, exclude_fields=[]) %}\n\n{% set except_fields = [] %}\n{% if except_variable is not none %}\n {# Start creating list of fields to exclude #}\n {% for item in var(except_variable) %}\n {% do except_fields.append(item.name) %}\n {% endfor %}\n{% endif %}\n\n{% for field in exclude_fields %}\n {% do except_fields.append(field) %}\n{% endfor %}\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|lower %}\n \n {% if field_name not in except_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\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.115872, "supported_languages": null}, "macro.snapchat_ads.snapchat_ads_extract_url_parameter": {"name": "snapchat_ads_extract_url_parameter", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_extract_url_parameters.sql", "original_file_path": "macros/snapchat_ads_extract_url_parameters.sql", "unique_id": "macro.snapchat_ads.snapchat_ads_extract_url_parameter", "macro_sql": "{% macro snapchat_ads_extract_url_parameter(field, url_parameter) -%}\n\n{{ return(adapter.dispatch('snapchat_ads_extract_url_parameter', 'snapchat_ads') (field, url_parameter)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.snapchat_ads.default__snapchat_ads_extract_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.116232, "supported_languages": null}, "macro.snapchat_ads.default__snapchat_ads_extract_url_parameter": {"name": "default__snapchat_ads_extract_url_parameter", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_extract_url_parameters.sql", "original_file_path": "macros/snapchat_ads_extract_url_parameters.sql", "unique_id": "macro.snapchat_ads.default__snapchat_ads_extract_url_parameter", "macro_sql": "{% macro default__snapchat_ads_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": 1730229541.1163788, "supported_languages": null}, "macro.snapchat_ads.spark__snapchat_ads_extract_url_parameter": {"name": "spark__snapchat_ads_extract_url_parameter", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_extract_url_parameters.sql", "original_file_path": "macros/snapchat_ads_extract_url_parameters.sql", "unique_id": "macro.snapchat_ads.spark__snapchat_ads_extract_url_parameter", "macro_sql": "{% macro spark__snapchat_ads_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": 1730229541.116586, "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": 1730229541.116971, "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": 1730229541.1179352, "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": 1730229541.1181052, "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": 1730229541.1182709, "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": 1730229541.118499, "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": 1730229541.1186502, "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": 1730229541.118808, "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": 1730229541.1195672, "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": 1730229541.120186, "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": 1730229541.121554, "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": 1730229541.12179, "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": 1730229541.1220942, "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": 1730229541.1223629, "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": 1730229541.122614, "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": 1730229541.122879, "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": 1730229541.1231449, "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": 1730229541.123384, "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": 1730229541.12372, "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": 1730229541.123831, "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": 1730229541.1239328, "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": 1730229541.124032, "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": 1730229541.124397, "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": 1730229541.125089, "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": 1730229541.126133, "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": 1730229541.126706, "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": 1730229541.127483, "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": 1730229541.127959, "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": 1730229541.1280909, "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": 1730229541.1282198, "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": 1730229541.128356, "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": 1730229541.128493, "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": 1730229541.131497, "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": 1730229541.1316538, "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": 1730229541.131813, "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": 1730229541.131967, "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": 1730229541.1338072, "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": 1730229541.134756, "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": 1730229541.134891, "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": 1730229541.135154, "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": 1730229541.135432, "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": 1730229541.13556, "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": 1730229541.135684, "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": 1730229541.135805, "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": 1730229541.135925, "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": 1730229541.13641, "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": 1730229541.136966, "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": 1730229541.137453, "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": 1730229541.137652, "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": 1730229541.1378691, "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": 1730229541.1381161, "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": 1730229541.1392498, "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": 1730229541.1431968, "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": 1730229541.143552, "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": 1730229541.143911, "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": 1730229541.145513, "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": 1730229541.1460469, "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": 1730229541.146615, "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": 1730229541.1467671, "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": 1730229541.1469162, "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": 1730229541.1470861, "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": 1730229541.147237, "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": 1730229541.147383, "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": 1730229541.148235, "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": 1730229541.149447, "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": 1730229541.1501791, "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": 1730229541.150341, "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": 1730229541.150497, "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": 1730229541.150653, "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": 1730229541.15081, "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": 1730229541.1509812, "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": 1730229541.151229, "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": 1730229541.15133, "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": 1730229541.151434, "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": 1730229541.152052, "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": 1730229541.153465, "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": 1730229541.1536372, "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": 1730229541.154449, "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": 1730229541.158033, "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": 1730229541.162456, "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": 1730229541.163831, "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": 1730229541.16417, "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": 1730229541.1643178, "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": 1730229541.164513, "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": 1730229541.164845, "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": 1730229541.164955, "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": 1730229541.165067, "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": 1730229541.165171, "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": 1730229541.165271, "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": 1730229541.165524, "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": 1730229541.165625, "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": 1730229541.165725, "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": 1730229541.166114, "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": 1730229541.166487, "supported_languages": null}, "macro.snapchat_ads_source.get_campaign_hourly_report_columns": {"name": "get_campaign_hourly_report_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_campaign_hourly_report_columns.sql", "original_file_path": "macros/get_campaign_hourly_report_columns.sql", "unique_id": "macro.snapchat_ads_source.get_campaign_hourly_report_columns", "macro_sql": "{% macro get_campaign_hourly_report_columns() %}\n\n{% set columns = [\n {\"name\": \"attachment_quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_total_view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"saves\", \"datatype\": dbt.type_int()},\n {\"name\": \"screen_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"shares\", \"datatype\": dbt.type_int()},\n {\"name\": \"spend\", \"datatype\": dbt.type_int()},\n {\"name\": \"swipes\", \"datatype\": dbt.type_int()},\n {\"name\": \"video_views\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"conversion_purchases_value\", \"datatype\": dbt.type_int()}\n] %}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('snapchat_ads__conversion_fields')) }}\n\n{# Doing it this way in case users were bringing in conversion metrics via passthrough columns prior to us adding them by default #}\n{{ snapchat_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('snapchat_ads__campaign_hourly_report_passthrough_metrics'), except_fields=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_timestamp", "macro.fivetran_utils.add_pass_through_columns", "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.1689758, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_squad_history_columns": {"name": "get_ad_squad_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_squad_history_columns.sql", "original_file_path": "macros/get_ad_squad_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_squad_history_columns", "macro_sql": "{% macro get_ad_squad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.169735, "supported_languages": null}, "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns": {"name": "snapchat_ads_add_pass_through_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/snapchat_ads_add_pass_through_columns.sql", "original_file_path": "macros/snapchat_ads_add_pass_through_columns.sql", "unique_id": "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns", "macro_sql": "{% macro snapchat_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": 1730229541.1712792, "supported_languages": null}, "macro.snapchat_ads_source.get_creative_history_columns": {"name": "get_creative_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_creative_history_columns.sql", "original_file_path": "macros/get_creative_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_creative_history_columns", "macro_sql": "{% macro get_creative_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"ad_account_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"web_view_url\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.172138, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_hourly_report_columns": {"name": "get_ad_hourly_report_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_hourly_report_columns.sql", "original_file_path": "macros/get_ad_hourly_report_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_hourly_report_columns", "macro_sql": "{% macro get_ad_hourly_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"attachment_quartile_1\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_quartile_2\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_quartile_3\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_total_view_time_millis\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_view_completion\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"impressions\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"quartile_1\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"quartile_2\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"quartile_3\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"saves\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"screen_time_millis\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"shares\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"swipes\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"video_views\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"view_completion\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"view_time_millis\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"conversion_purchases_value\", \"datatype\": dbt.type_int()}\n] %}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('snapchat_ads__conversion_fields')) }}\n\n{# Doing it this way in case users were bringing in conversion metrics via passthrough columns prior to us adding them by default #}\n{{ snapchat_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('snapchat_ads__ad_hourly_passthrough_metrics'), except_fields=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_numeric", "macro.dbt.type_timestamp", "macro.dbt.type_int", "macro.fivetran_utils.add_pass_through_columns", "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.174581, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_squad_hourly_report_columns": {"name": "get_ad_squad_hourly_report_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_squad_hourly_report_columns.sql", "original_file_path": "macros/get_ad_squad_hourly_report_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_squad_hourly_report_columns", "macro_sql": "{% macro get_ad_squad_hourly_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_squad_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"attachment_quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_total_view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"saves\", \"datatype\": dbt.type_int()},\n {\"name\": \"screen_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"shares\", \"datatype\": dbt.type_int()},\n {\"name\": \"spend\", \"datatype\": dbt.type_int()},\n {\"name\": \"swipes\", \"datatype\": dbt.type_int()},\n {\"name\": \"video_views\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"conversion_purchases_value\", \"datatype\": dbt.type_int()}\n] %}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('snapchat_ads__conversion_fields')) }}\n\n{# Doing it this way in case users were bringing in conversion metrics via passthrough columns prior to us adding them by default #}\n{{ snapchat_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('snapchat_ads__ad_squad_hourly_passthrough_metrics'), except_fields=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_int", "macro.dbt.type_timestamp", "macro.fivetran_utils.add_pass_through_columns", "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.1770082, "supported_languages": null}, "macro.snapchat_ads_source.get_campaign_history_columns": {"name": "get_campaign_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_campaign_history_columns.sql", "original_file_path": "macros/get_campaign_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_campaign_history_columns", "macro_sql": "{% macro get_campaign_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"ad_account_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.1777642, "supported_languages": null}, "macro.snapchat_ads_source.get_creative_url_tag_history_columns": {"name": "get_creative_url_tag_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_creative_url_tag_history_columns.sql", "original_file_path": "macros/get_creative_url_tag_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_creative_url_tag_history_columns", "macro_sql": "{% macro get_creative_url_tag_history_columns() %}\n\n{% set columns = [\n {\"name\": \"creative_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"key\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"value\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.1783261, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_history_columns": {"name": "get_ad_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_history_columns.sql", "original_file_path": "macros/get_ad_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_history_columns", "macro_sql": "{% macro get_ad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"ad_squad_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"creative_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.179171, "supported_languages": null}, "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns": {"name": "snapchat_ads_fill_pass_through_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/snapchat_ads_fill_pass_through_columns.sql", "original_file_path": "macros/snapchat_ads_fill_pass_through_columns.sql", "unique_id": "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns", "macro_sql": "{% macro snapchat_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": 1730229541.180146, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_account_history_columns": {"name": "get_ad_account_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_account_history_columns.sql", "original_file_path": "macros/get_ad_account_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_account_history_columns", "macro_sql": "{% macro get_ad_account_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"advertiser\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"currency\", \"datatype\": dbt.type_string()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"timezone\", \"datatype\": dbt.type_string()},\n {\"name\": \"type\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1730229541.18118, "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.snapchat_ads_source._fivetran_synced": {"name": "_fivetran_synced", "resource_type": "doc", "package_name": "snapchat_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.snapchat_ads_source._fivetran_synced", "block_contents": "When the record was last synced by Fivetran."}, "doc.snapchat_ads_source.is_most_recent_record": {"name": "is_most_recent_record", "resource_type": "doc", "package_name": "snapchat_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.snapchat_ads_source.is_most_recent_record", "block_contents": "Boolean representing whether a record is the most recent version of that record."}, "doc.snapchat_ads_source.source_relation": {"name": "source_relation", "resource_type": "doc", "package_name": "snapchat_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.snapchat_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."}}, "exposures": {}, "metrics": {}, "groups": {}, "selectors": {}, "disabled": {"test.snapchat_ads_integration_tests.consistency_url_report": [{"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "consistency_url_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_url_report.sql", "original_file_path": "tests/consistency/consistency_url_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_url_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_url_report"], "alias": "consistency_url_report", "checksum": {"name": "sha256", "checksum": "443e1d085108d4098b5706503867ef6aa64ee35adfa0317f15b947032d3ce02c"}, "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": 1730229541.565278, "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(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__url_report\n group by 1\n),\n\ndev as (\n select\n ad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__url_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend\n {# prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value #}\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_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n {# or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_ad_squad_report": [{"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "consistency_ad_squad_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_ad_squad_report.sql", "original_file_path": "tests/consistency/consistency_ad_squad_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_ad_squad_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_ad_squad_report"], "alias": "consistency_ad_squad_report", "checksum": {"name": "sha256", "checksum": "2a352d43017d46a0aa99a9a1d8712fd70191e2b0f994e71278a8290f35c1b5c4"}, "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": 1730229541.583402, "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_squad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__ad_squad_report\n group by 1\n),\n\ndev as (\n select\n ad_squad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__ad_squad_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_squad_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend\n {# prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value #}\n from prod\n full outer join dev \n on dev.ad_squad_id = prod.ad_squad_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n {# or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_campaign_report": [{"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "consistency_campaign_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_campaign_report.sql", "original_file_path": "tests/consistency/consistency_campaign_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_campaign_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_campaign_report"], "alias": "consistency_campaign_report", "checksum": {"name": "sha256", "checksum": "c32017960bdc946d359c3d172691fcfdc8ae3389db9dfae188297398483b0fce"}, "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": 1730229541.586974, "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(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__campaign_report\n group by 1\n),\n\ndev as (\n select\n campaign_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__campaign_report\n group by 1\n),\n\nfinal as (\n select \n prod.campaign_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend\n {# prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value #}\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_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n {# or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_account_report": [{"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "consistency_account_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_account_report.sql", "original_file_path": "tests/consistency/consistency_account_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_account_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_account_report"], "alias": "consistency_account_report", "checksum": {"name": "sha256", "checksum": "181b4a85631f6c2e69111fd542ea3bd010d04af4887693df88e1d26a63dbcb6b"}, "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": 1730229541.590288, "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_account_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__account_report\n group by 1\n),\n\ndev as (\n select\n ad_account_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__account_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_account_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend\n {# prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value #}\n from prod\n full outer join dev \n on dev.ad_account_id = prod.ad_account_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n {# or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_ads_report": [{"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "consistency_ads_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_ads_report.sql", "original_file_path": "tests/consistency/consistency_ads_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_ads_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_ads_report"], "alias": "consistency_ads_report", "checksum": {"name": "sha256", "checksum": "88152879430ac444455e46af74964cdc9ff20c11bdef92ddb38383d9bb89d534"}, "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": 1730229541.5933619, "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(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__ad_report\n group by 1\n),\n\ndev as (\n select\n ad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend\n {# sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value #}\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__ad_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend\n {# prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value #}\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_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n {# or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #}", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.horizontal_sum_conversions": [{"database": "dbt-package-testing", "schema": "snapchat_ads_tests_dbt_test__audit", "name": "horizontal_sum_conversions", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "integrity/horizontal_sum_conversions.sql", "original_file_path": "tests/integrity/horizontal_sum_conversions.sql", "unique_id": "test.snapchat_ads_integration_tests.horizontal_sum_conversions", "fqn": ["snapchat_ads_integration_tests", "integrity", "horizontal_sum_conversions"], "alias": "horizontal_sum_conversions", "checksum": {"name": "sha256", "checksum": "b52f0062e0677940cbcaf156537d194dc15fe77aecbb23b3dbb0652ff7491453"}, "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": 1730229541.596957, "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(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__ad_report') }}\n),\n\naccount_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__account_report') }}\n),\n\nad_squad_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__ad_squad_report') }}\n),\n\ncampaign_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__campaign_report') }}\n),\n\nurl_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__url_report') }}\n)\n\nselect \n 'ad vs account' as comparison,\n ad_report.*\nfrom ad_report\njoin account_report on true\nwhere ad_report.total_value != account_report.total_value\nor ad_report.total_conversions != account_report.total_conversions\n\nunion all \n\nselect \n 'ad vs ad squad' as comparison,\n ad_report.*\nfrom ad_report\njoin ad_squad_report on true\nwhere ad_report.total_value != ad_squad_report.total_value\nor ad_report.total_conversions != ad_squad_report.total_conversions\n\nunion all \n\nselect \n 'ad vs campaign' as comparison,\n ad_report.*\nfrom ad_report\njoin campaign_report on true\nwhere ad_report.total_value != campaign_report.total_value\nor ad_report.total_conversions != campaign_report.total_conversions\n\nunion all \n\nselect \n 'ad vs url' as comparison,\n ad_report.*\nfrom ad_report\njoin url_report on true\nwhere ad_report.total_value != url_report.total_value\nor ad_report.total_conversions != url_report.total_conversions", "language": "sql", "refs": [{"name": "snapchat_ads__ad_report", "package": null, "version": null}, {"name": "snapchat_ads__account_report", "package": null, "version": null}, {"name": "snapchat_ads__ad_squad_report", "package": null, "version": null}, {"name": "snapchat_ads__campaign_report", "package": null, "version": null}, {"name": "snapchat_ads__url_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.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": [], "model.snapchat_ads.snapchat_ads__ad_report": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "model.snapchat_ads.snapchat_ads__url_report": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads.snapchat_ads__account_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads.snapchat_ads__ad_squad_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads.snapchat_ads__campaign_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "model.snapchat_ads.snapchat_ads__creative_history_prep": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history", "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": ["source.snapchat_ads_source.snapchat_ads.creative_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_account_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": ["source.snapchat_ads_source.snapchat_ads.creative_url_tag_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": ["source.snapchat_ads_source.snapchat_ads.campaign_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_squad_history"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": ["source.snapchat_ads_source.snapchat_ads.campaign_hourly_report"], "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260": ["model.snapchat_ads.snapchat_ads__account_report"], "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b": ["model.snapchat_ads.snapchat_ads__account_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1": ["model.snapchat_ads.snapchat_ads__account_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe": ["model.snapchat_ads.snapchat_ads__ad_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744": ["model.snapchat_ads.snapchat_ads__ad_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__date_day.9116e93fba": ["model.snapchat_ads.snapchat_ads__ad_report"], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b": ["model.snapchat_ads.snapchat_ads__campaign_report"], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac": ["model.snapchat_ads.snapchat_ads__campaign_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a": ["model.snapchat_ads.snapchat_ads__campaign_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639": ["model.snapchat_ads.snapchat_ads__ad_squad_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe": ["model.snapchat_ads.snapchat_ads__ad_squad_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4": ["model.snapchat_ads.snapchat_ads__ad_squad_report"], "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__date_day.86e3504c07": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "source.snapchat_ads_source.snapchat_ads.ad_account_history": [], "source.snapchat_ads_source.snapchat_ads.ad_history": [], "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": [], "source.snapchat_ads_source.snapchat_ads.ad_squad_history": [], "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": [], "source.snapchat_ads_source.snapchat_ads.campaign_history": [], "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": [], "source.snapchat_ads_source.snapchat_ads.creative_history": [], "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": []}, "child_map": {"seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": [], "model.snapchat_ads.snapchat_ads__ad_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__date_day.9116e93fba", "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744", "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe"], "model.snapchat_ads.snapchat_ads__url_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__date_day.86e3504c07", "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78", "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de", "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6"], "model.snapchat_ads.snapchat_ads__account_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1", "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b", "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260"], "model.snapchat_ads.snapchat_ads__ad_squad_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4", "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe", "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639"], "model.snapchat_ads.snapchat_ads__campaign_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a", "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac", "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b"], "model.snapchat_ads.snapchat_ads__creative_history_prep": ["model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__url_report"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": ["model.snapchat_ads.snapchat_ads__ad_squad_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_squad_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418", "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380", "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a", "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__ad_squad_report", "model.snapchat_ads.snapchat_ads__campaign_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": ["model.snapchat_ads.snapchat_ads__campaign_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_squad_report", "model.snapchat_ads.snapchat_ads__campaign_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260": [], "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1": [], "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe": [], "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__date_day.9116e93fba": [], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b": [], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a": [], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639": [], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4": [], "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6": [], "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78": [], "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__date_day.86e3504c07": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a": [], "source.snapchat_ads_source.snapchat_ads.ad_account_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_squad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"], "source.snapchat_ads_source.snapchat_ads.campaign_history": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"], "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"], "source.snapchat_ads_source.snapchat_ads.creative_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"], "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"]}, "group_map": {}, "saved_queries": {}, "semantic_models": {}, "unit_tests": {}} \ No newline at end of file +{"metadata": {"dbt_schema_version": "https://schemas.getdbt.com/dbt/manifest/v12.json", "dbt_version": "1.9.0b2", "generated_at": "2025-02-19T03:43:29.253024Z", "invocation_id": "b77a0cfa-0531-4c6d-81ef-0b3d82119e77", "env": {}, "project_name": "snapchat_ads_integration_tests", "project_id": "0eb30f7211ccca11c94be2a882f44ff0", "user_id": "81581f81-d5af-4143-8fbf-c2f0001e4f56", "send_anonymous_usage_stats": true, "adapter_type": "postgres"}, "nodes": {"seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_squad_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_squad_history_data.csv", "original_file_path": "seeds/snapchat_ad_squad_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_squad_history_data"], "alias": "snapchat_ad_squad_history_data", "checksum": {"name": "sha256", "checksum": "0e83ca691f2153480e7b63173f1c7ed8c38c0dc247d41a6f2fd46afc1e5963b1"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1739936579.490769, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_ad_squad_history_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_history_data.csv", "original_file_path": "seeds/snapchat_ad_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_history_data"], "alias": "snapchat_ad_history_data", "checksum": {"name": "sha256", "checksum": "839c0910ff6ff3cff2580bd9144223132dd1d87f003aeea329e47ba858a2dc23"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1739936579.493691, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_ad_history_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_campaign_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_campaign_history_data.csv", "original_file_path": "seeds/snapchat_campaign_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_campaign_history_data"], "alias": "snapchat_campaign_history_data", "checksum": {"name": "sha256", "checksum": "640eb2ec082938ad70c430a6b3441711f6fed19eb6e28d7622f03294e92e5b70"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1739936579.494832, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_campaign_history_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_squad_hourly_report_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_squad_hourly_report_data.csv", "original_file_path": "seeds/snapchat_ad_squad_hourly_report_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_squad_hourly_report_data"], "alias": "snapchat_ad_squad_hourly_report_data", "checksum": {"name": "sha256", "checksum": "4bcd58c89168843edd94874f95222804c28b5b3571d66dbb194a498a0f8f85b7"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1739936579.495945, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_ad_squad_hourly_report_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_creative_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_creative_history_data.csv", "original_file_path": "seeds/snapchat_creative_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_creative_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_creative_history_data"], "alias": "snapchat_creative_history_data", "checksum": {"name": "sha256", "checksum": "40505e1e47b59c850371007584560a03172120f078da2c81c6712aea77d868a8"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1739936579.497236, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_creative_history_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_hourly_report_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_hourly_report_data.csv", "original_file_path": "seeds/snapchat_ad_hourly_report_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_hourly_report_data"], "alias": "snapchat_ad_hourly_report_data", "checksum": {"name": "sha256", "checksum": "44942448ec2f5fdab1d102948af6724bc9d10970c6d760cd5b9eb778a16aa12b"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"date": "timestamp"}, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}", "column_types": {"date": "timestamp"}}, "created_at": 1739936579.498362, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_ad_hourly_report_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_campaign_hourly_report_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_campaign_hourly_report_data.csv", "original_file_path": "seeds/snapchat_campaign_hourly_report_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_campaign_hourly_report_data"], "alias": "snapchat_campaign_hourly_report_data", "checksum": {"name": "sha256", "checksum": "90145700bcd091f7cfe9fa88155e2473a36b674778ec51ed934c6876ec23e91f"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1739936579.499486, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_campaign_hourly_report_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_ad_account_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_ad_account_history_data.csv", "original_file_path": "seeds/snapchat_ad_account_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_ad_account_history_data"], "alias": "snapchat_ad_account_history_data", "checksum": {"name": "sha256", "checksum": "0e1f3a58ee6a4863bb59fbd30c286606f0de77040fbb2903ab312e5d248454cb"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}"}, "created_at": 1739936579.500557, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_ad_account_history_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6", "name": "snapchat_creative_url_tag_history_data", "resource_type": "seed", "package_name": "snapchat_ads_integration_tests", "path": "snapchat_creative_url_tag_history_data.csv", "original_file_path": "seeds/snapchat_creative_url_tag_history_data.csv", "unique_id": "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data", "fqn": ["snapchat_ads_integration_tests", "snapchat_creative_url_tag_history_data"], "alias": "snapchat_creative_url_tag_history_data", "checksum": {"name": "sha256", "checksum": "c5e8dbafad038e142209d2145532d5d5e762922bf4fe44535901b46cd9797dcc"}, "config": {"enabled": true, "alias": null, "schema": null, "database": null, "tags": [], "meta": {}, "group": null, "materialized": "seed", "incremental_strategy": null, "batch_size": null, "lookback": 0, "begin": null, "persist_docs": {}, "post-hook": [], "pre-hook": [], "quoting": {}, "column_types": {"updated_at": "timestamp"}, "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, "delimiter": ",", "quote_columns": true}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"quote_columns": "{{ true if target.type in ('redshift', 'postgres') else false }}", "column_types": {"updated_at": "timestamp"}}, "created_at": 1739936579.501718, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6\".\"snapchat_creative_url_tag_history_data\"", "raw_code": "", "root_path": "/Users/avinash.kunnath/Documents/dbt_packages/snapchat_ads/dbt_snapchat_ads/integration_tests", "depends_on": {"macros": []}}, "model.snapchat_ads.snapchat_ads__ad_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__ad_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__ad_report.sql", "original_file_path": "models/snapchat_ads__ad_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__ad_report", "fqn": ["snapchat_ads", "snapchat_ads__ad_report"], "alias": "snapchat_ads__ad_report", "checksum": {"name": "sha256", "checksum": "84ac8aa5065f3ead8ef55cee2729328fccb90b959f5d0b440ffcf966349bdc2c"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record represents the daily performance of a Snapchat ad account.", "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": [], "granularity": null}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_id": {"name": "ad_id", "description": "The ID of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_name": {"name": "ad_name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_name": {"name": "ad_squad_name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "The ID of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936579.9076931, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__ad_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_hourly_report') }}\n\n), creatives as (\n\n select *\n from {{ ref('snapchat_ads__creative_history_prep') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from {{ var('ad_history') }}\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from {{ var('ad_squad_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n ad_squads.ad_squad_id,\n ad_squads.ad_squad_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n \n {{ dbt_utils.group_by(11) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}, {"name": "snapchat_ads__creative_history_prep", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__ad_report.sql", "compiled": true, "compiled_code": "\n\nwith __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n \n\n split_part(\n base.url,\n '?',\n 1\n )\n\n\n \n\n as base_url,\n \n \n cast(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/',\n 1\n )\n\n\n \n\n,\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_host,\n '/' || \n \n cast(\n\n \n \n\n split_part(\n \n\n right(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ) - 1\n )\n ),\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_source=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_medium=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_campaign=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_content=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_term=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n), ad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report\"\n\n), creatives as (\n\n select *\n from __dbt__cte__snapchat_ads__creative_history_prep\n\n), account as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history\"\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n ad_squads.ad_squad_id,\n ad_squads.ad_squad_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as numeric(28,6)), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n \n group by 1,2,3,4,5,6,7,8,9,10,11\n\n)\n\nselect *\nfrom aggregated", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.snapchat_ads.snapchat_ads__creative_history_prep", "sql": " __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n \n\n split_part(\n base.url,\n '?',\n 1\n )\n\n\n \n\n as base_url,\n \n \n cast(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/',\n 1\n )\n\n\n \n\n,\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_host,\n '/' || \n \n cast(\n\n \n \n\n split_part(\n \n\n right(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ) - 1\n )\n ),\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_source=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_medium=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_campaign=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_content=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_term=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n)"}], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["ad_id", "date_day"], "time_spine": null}, "model.snapchat_ads.snapchat_ads__url_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__url_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__url_report.sql", "original_file_path": "models/snapchat_ads__url_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__url_report", "fqn": ["snapchat_ads", "snapchat_ads__url_report"], "alias": "snapchat_ads__url_report", "checksum": {"name": "sha256", "checksum": "87d45159b72f1440b95f729fe41df3cc9dc77d5b57e173f30f93ecedf8b1eda6"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record represents the daily performance of Snapchat ads that leverage urls.", "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": [], "granularity": null}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_id": {"name": "ad_id", "description": "The ID of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "The ID of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_name": {"name": "ad_name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_name": {"name": "ad_squad_name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "base_url": {"name": "base_url", "description": "The base URL of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "url_host": {"name": "url_host", "description": "The URL host of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "url_path": {"name": "url_path", "description": "The URL path of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "utm_source": {"name": "utm_source", "description": "The utm_source parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "utm_medium": {"name": "utm_medium", "description": "The utm_medium parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "utm_campaign": {"name": "utm_campaign", "description": "The utm_campaign parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "utm_content": {"name": "utm_content", "description": "The utm_content parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "utm_term": {"name": "utm_term", "description": "The utm_term parameter of the ad, extracted from the web_view_url.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936579.910418, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__url_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_hourly_report') }}\n\n), creatives as (\n\n select *\n from {{ ref('snapchat_ads__creative_history_prep') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from {{ var('ad_history') }}\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from {{ var('ad_squad_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n ad_squads.ad_squad_id,\n ad_squads.ad_squad_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n account.currency,\n creatives.base_url,\n creatives.url_host,\n creatives.url_path,\n creatives.utm_source,\n creatives.utm_medium,\n creatives.utm_campaign,\n creatives.utm_content,\n creatives.utm_term,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n \n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n \n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n\n {% if var('ad_reporting__url_report__using_null_filter', True) %}\n -- We only want utm ads to populate this report. Therefore, we filter where url ads are populated.\n where creatives.url is not null\n {% endif %}\n\n {{ dbt_utils.group_by(19) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}, {"name": "snapchat_ads__creative_history_prep", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__url_report.sql", "compiled": true, "compiled_code": "\n\nwith __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n \n\n split_part(\n base.url,\n '?',\n 1\n )\n\n\n \n\n as base_url,\n \n \n cast(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/',\n 1\n )\n\n\n \n\n,\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_host,\n '/' || \n \n cast(\n\n \n \n\n split_part(\n \n\n right(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ) - 1\n )\n ),\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_source=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_medium=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_campaign=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_content=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_term=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n), ad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report\"\n\n), creatives as (\n\n select *\n from __dbt__cte__snapchat_ads__creative_history_prep\n\n), account as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history\"\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n ad_hourly.ad_id,\n ads.ad_name,\n ad_squads.ad_squad_id,\n ad_squads.ad_squad_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n account.currency,\n creatives.base_url,\n creatives.url_host,\n creatives.url_path,\n creatives.utm_source,\n creatives.utm_medium,\n creatives.utm_campaign,\n creatives.utm_content,\n creatives.utm_term,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as numeric(28,6)), 2) as conversion_purchases_value\n \n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join creatives\n on ads.creative_id = creatives.creative_id\n and ads.source_relation = creatives.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on creatives.ad_account_id = account.ad_account_id\n and creatives.source_relation = account.source_relation\n\n \n -- We only want utm ads to populate this report. Therefore, we filter where url ads are populated.\n where creatives.url is not null\n \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)\n\nselect *\nfrom aggregated", "extra_ctes_injected": true, "extra_ctes": [{"id": "model.snapchat_ads.snapchat_ads__creative_history_prep", "sql": " __dbt__cte__snapchat_ads__creative_history_prep as (\n\nwith base as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n \n\n split_part(\n base.url,\n '?',\n 1\n )\n\n\n \n\n as base_url,\n \n \n cast(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/',\n 1\n )\n\n\n \n\n,\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_host,\n '/' || \n \n cast(\n\n \n \n\n split_part(\n \n\n right(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ) - 1\n )\n ),\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_source=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_medium=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_campaign=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_content=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_term=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields\n)"}], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "access": "protected", "constraints": [], "version": null, "latest_version": null, "deprecation_date": null, "primary_key": ["ad_id", "date_day"], "time_spine": null}, "model.snapchat_ads.snapchat_ads__account_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__account_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__account_report.sql", "original_file_path": "models/snapchat_ads__account_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__account_report", "fqn": ["snapchat_ads", "snapchat_ads__account_report"], "alias": "snapchat_ads__account_report", "checksum": {"name": "sha256", "checksum": "b1f8ee646f82a94a902428080dc066c1a5df73879a405e677c5263adfd80e187"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record represents the daily performance of a Snapchat ad account.", "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": [], "granularity": null}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936579.906131, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__account_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_hourly_report') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from {{ var('ad_history') }}\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from {{ var('ad_squad_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n\n {{ dbt_utils.group_by(5) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__account_report.sql", "compiled": true, "compiled_code": "\n\nwith ad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report\"\n\n), account as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\n where is_most_recent_record = true\n\n), ads as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history\"\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_hourly.source_relation,\n cast(ad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n account.currency,\n sum(ad_hourly.swipes) as swipes,\n sum(ad_hourly.impressions) as impressions,\n round(sum(ad_hourly.spend),2) as spend,\n sum(ad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_hourly.conversion_purchases_value) as numeric(28,6)), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n\n from ad_hourly\n left join ads \n on ad_hourly.ad_id = ads.ad_id\n and ad_hourly.source_relation = ads.source_relation\n left join ad_squads\n on ads.ad_squad_id = ad_squads.ad_squad_id\n and ads.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n\n group by 1,2,3,4,5\n\n)\n\nselect *\nfrom aggregated", "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": ["ad_account_id", "date_day"], "time_spine": null}, "model.snapchat_ads.snapchat_ads__ad_squad_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__ad_squad_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__ad_squad_report.sql", "original_file_path": "models/snapchat_ads__ad_squad_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__ad_squad_report", "fqn": ["snapchat_ads", "snapchat_ads__ad_squad_report"], "alias": "snapchat_ads__ad_squad_report", "checksum": {"name": "sha256", "checksum": "ce3c64584fef4a76d391b6153123ebc53bc4397cacb99027a88425b4c93af44c"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record represents the daily performance of a Snapchat ad squad.", "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": [], "granularity": null}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "The ID of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_name": {"name": "ad_squad_name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936579.908742, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__ad_squad_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith ad_squad_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('ad_squad_hourly_report') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from {{ var('ad_squad_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_squad_hourly.source_relation,\n cast(ad_squad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n ad_squad_hourly.ad_squad_id,\n ad_squads.ad_squad_name,\n account.currency,\n sum(ad_squad_hourly.swipes) as swipes,\n sum(ad_squad_hourly.impressions) as impressions,\n round(sum(ad_squad_hourly.spend),2) as spend,\n sum(ad_squad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_squad_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__ad_squad_hourly_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n \n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__ad_squad_hourly_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n\n from ad_squad_hourly\n left join ad_squads\n on ad_squad_hourly.ad_squad_id = ad_squads.ad_squad_id\n and ad_squad_hourly.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n {{ dbt_utils.group_by(9) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__ad_squad_report.sql", "compiled": true, "compiled_code": "\n\nwith ad_squad_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_hourly_report\"\n\n), account as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\n where is_most_recent_record = true\n\n), ad_squads as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n ad_squad_hourly.source_relation,\n cast(ad_squad_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaigns.campaign_id,\n campaigns.campaign_name,\n ad_squad_hourly.ad_squad_id,\n ad_squads.ad_squad_name,\n account.currency,\n sum(ad_squad_hourly.swipes) as swipes,\n sum(ad_squad_hourly.impressions) as impressions,\n round(sum(ad_squad_hourly.spend),2) as spend,\n sum(ad_squad_hourly.total_conversions) as total_conversions,\n round(cast(sum(ad_squad_hourly.conversion_purchases_value) as numeric(28,6)), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n \n \n\n\n\n\n\n \n\n\n\n\n\n\n from ad_squad_hourly\n left join ad_squads\n on ad_squad_hourly.ad_squad_id = ad_squads.ad_squad_id\n and ad_squad_hourly.source_relation = ad_squads.source_relation\n left join campaigns\n on ad_squads.campaign_id = campaigns.campaign_id\n and ad_squads.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n group by 1,2,3,4,5,6,7,8,9\n\n)\n\nselect *\nfrom aggregated", "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": ["ad_squad_id", "date_day"], "time_spine": null}, "model.snapchat_ads.snapchat_ads__campaign_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__campaign_report", "resource_type": "model", "package_name": "snapchat_ads", "path": "snapchat_ads__campaign_report.sql", "original_file_path": "models/snapchat_ads__campaign_report.sql", "unique_id": "model.snapchat_ads.snapchat_ads__campaign_report", "fqn": ["snapchat_ads", "snapchat_ads__campaign_report"], "alias": "snapchat_ads__campaign_report", "checksum": {"name": "sha256", "checksum": "ce111e14c24a3748fec1557f9c2bfe540a3e7fac7dc95cbb6d36069415ec9e13"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record represents the daily performance of a Snapchat campaign.", "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": [], "granularity": null}, "date_day": {"name": "date_day", "description": "The date of the report.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "The ID of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "currency": {"name": "currency", "description": "The current used by the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The spend on the ad in the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes the ad had on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases for an ad on the given day.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "total_conversions": {"name": "total_conversions", "description": "The total conversions being brought in the conversion fields you select in your `snapchat_ads__conversion_fields`.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads://models/snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936579.9082081, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__campaign_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith campaign_hourly as (\n\n select *,\n {% if var('snapchat_ads__conversion_fields', none) %}\n {{ var('snapchat_ads__conversion_fields') | join(' + ') }} as total_conversions\n {% else %}\n 0 as total_conversions\n {% endif %}\n from {{ var('campaign_hourly_report') }}\n\n), account as (\n\n select *\n from {{ var('ad_account_history') }}\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from {{ var('campaign_history') }}\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n campaign_hourly.source_relation,\n cast(campaign_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaign_hourly.campaign_id,\n campaigns.campaign_name,\n account.currency,\n sum(campaign_hourly.swipes) as swipes,\n sum(campaign_hourly.impressions) as impressions,\n round(sum(campaign_hourly.spend),2) as spend,\n sum(campaign_hourly.total_conversions) as total_conversions,\n round(cast(sum(campaign_hourly.conversion_purchases_value) as {{ dbt.type_numeric() }}), 2) as conversion_purchases_value\n\n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__conversion_fields', transform='sum', coalesce_with=0, except_variable='snapchat_ads__campaign_hourly_report_passthrough_metrics', exclude_fields=['conversion_purchases_value']) }}\n \n {{ snapchat_ads_persist_pass_through_columns(pass_through_variable='snapchat_ads__campaign_hourly_report_passthrough_metrics', transform='sum', exclude_fields=['conversion_purchases_value']) }}\n \n from campaign_hourly\n left join campaigns\n on campaign_hourly.campaign_id = campaigns.campaign_id\n and campaign_hourly.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n {{ dbt_utils.group_by(7) }}\n\n)\n\nselect *\nfrom aggregated", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.type_numeric", "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro.dbt_utils.group_by"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat_ads__campaign_report.sql", "compiled": true, "compiled_code": "\n\nwith campaign_hourly as (\n\n select *,\n \n conversion_purchases as total_conversions\n \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_hourly_report\"\n\n), account as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\n where is_most_recent_record = true\n\n), campaigns as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"\n where is_most_recent_record = true\n\n\n), aggregated as (\n\n select\n campaign_hourly.source_relation,\n cast(campaign_hourly.date_hour as date) as date_day,\n account.ad_account_id,\n account.ad_account_name,\n campaign_hourly.campaign_id,\n campaigns.campaign_name,\n account.currency,\n sum(campaign_hourly.swipes) as swipes,\n sum(campaign_hourly.impressions) as impressions,\n round(sum(campaign_hourly.spend),2) as spend,\n sum(campaign_hourly.total_conversions) as total_conversions,\n round(cast(sum(campaign_hourly.conversion_purchases_value) as numeric(28,6)), 2) as conversion_purchases_value\n\n \n\n\n\n \n \n\n\n\n \n\n\n\n \n \n \n \n , sum(coalesce(conversion_purchases, 0)) as conversion_purchases\n \n\n \n\n\n\n \n \n\n\n\n\n\n \n\n\n\n\n\n \n from campaign_hourly\n left join campaigns\n on campaign_hourly.campaign_id = campaigns.campaign_id\n and campaign_hourly.source_relation = campaigns.source_relation\n left join account\n on campaigns.ad_account_id = account.ad_account_id\n and campaigns.source_relation = account.source_relation\n \n group by 1,2,3,4,5,6,7\n\n)\n\nselect *\nfrom aggregated", "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": ["campaign_id", "date_day"], "time_spine": null}, "model.snapchat_ads.snapchat_ads__creative_history_prep": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "snapchat_ads__creative_history_prep", "resource_type": "model", "package_name": "snapchat_ads", "path": "intermediate/snapchat_ads__creative_history_prep.sql", "original_file_path": "models/intermediate/snapchat_ads__creative_history_prep.sql", "unique_id": "model.snapchat_ads.snapchat_ads__creative_history_prep", "fqn": ["snapchat_ads", "intermediate", "snapchat_ads__creative_history_prep"], "alias": "snapchat_ads__creative_history_prep", "checksum": {"name": "sha256", "checksum": "e3cefdb96080d7616e006c39ed116afc1bfdf99c32ae5f8cf01f72a16e86a8a6"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "ephemeral", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "ephemeral", "enabled": true}, "created_at": 1739936579.659321, "relation_name": null, "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\nwith base as (\n\n select *\n from {{ var('creative_history') }}\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from {{ var('creative_url_tag_history') }}\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n {{ dbt.split_part('base.url', \"'?'\", 1) }} as base_url,\n {{ dbt_utils.get_url_host('base.url') }} as url_host,\n '/' || {{ dbt_utils.get_url_path('base.url') }} as url_path,\n coalesce(url_tags_pivoted.utm_source, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_source') }}) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_medium') }}) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_campaign') }}) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_content') }}) as utm_content,\n coalesce(url_tags_pivoted.utm_term, {{ snapchat_ads.snapchat_ads_extract_url_parameter('base.url', 'utm_term') }}) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\n)\n\nselect *\nfrom fields", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history", "package": null, "version": null}, {"name": "stg_snapchat_ads__creative_url_tag_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.split_part", "macro.dbt_utils.get_url_host", "macro.dbt_utils.get_url_path", "macro.snapchat_ads.snapchat_ads_extract_url_parameter"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history", "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads/models/intermediate/snapchat_ads__creative_history_prep.sql", "compiled": true, "compiled_code": "\nwith base as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\n where is_most_recent_record = true\n\n), url_tags as (\n\n select *\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"\n where is_most_recent_record = true\n\n), url_tags_pivoted as (\n\n select \n source_relation,\n creative_id,\n min(case when param_key = 'utm_source' then param_value end) as utm_source,\n min(case when param_key = 'utm_medium' then param_value end) as utm_medium,\n min(case when param_key = 'utm_campaign' then param_value end) as utm_campaign,\n min(case when param_key = 'utm_content' then param_value end) as utm_content,\n min(case when param_key = 'utm_term' then param_value end) as utm_term\n from url_tags\n group by 1,2\n\n), fields as (\n\n select\n base.source_relation,\n base.creative_id,\n base.ad_account_id,\n base.creative_name,\n base.url,\n \n\n \n \n\n split_part(\n base.url,\n '?',\n 1\n )\n\n\n \n\n as base_url,\n \n \n cast(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n \n\n replace(\n \n\n replace(\n \n\n replace(\n base.url,\n 'android-app://',\n ''\n )\n\n\n,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n '/',\n 1\n )\n\n\n \n\n,\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_host,\n '/' || \n \n cast(\n\n \n \n\n split_part(\n \n\n right(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n,\n \n\n length(\n \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n )-coalesce(\n nullif(\n\n position(\n '/' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ), 0),\n \n\n position(\n '?' in \n\n replace(\n \n\n replace(\n base.url,\n 'http://',\n ''\n )\n\n\n,\n 'https://',\n ''\n )\n\n\n\n ) - 1\n )\n ),\n '?',\n 1\n )\n\n\n \n\n as TEXT)\n as url_path,\n coalesce(url_tags_pivoted.utm_source, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_source=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_source,\n coalesce(url_tags_pivoted.utm_medium, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_medium=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_medium,\n coalesce(url_tags_pivoted.utm_campaign, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_campaign=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_campaign,\n coalesce(url_tags_pivoted.utm_content, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_content=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_content,\n coalesce(url_tags_pivoted.utm_term, nullif(\n\n \n \n\n split_part(\n \n\n \n \n\n split_part(\n base.url,\n 'utm_term=',\n 2\n )\n\n\n \n\n,\n '&',\n 1\n )\n\n\n \n\n,'')) as utm_term\n from base\n left join url_tags_pivoted\n on base.creative_id = url_tags_pivoted.creative_id\n and base.source_relation = url_tags_pivoted.source_relation\n\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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_squad_hourly_report.sql", "original_file_path": "models/stg_snapchat_ads__ad_squad_hourly_report.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_squad_hourly_report"], "alias": "stg_snapchat_ads__ad_squad_hourly_report", "checksum": {"name": "sha256", "checksum": "366d99f92ec72fab32286b8910ec70cba3cdcf165b35698dc4012e42a20debce"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a historic version of an ad in Snapchat.", "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": [], "granularity": null}, "ad_squad_id": {"name": "ad_squad_id", "description": "ID of the ad squad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "date_hour": {"name": "date_hour", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_total_view_time": {"name": "attachment_total_view_time", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "screen_time": {"name": "screen_time", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_time": {"name": "view_time", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The amount of spend for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (in Ad Account's currency, converted from microcurrency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.0434282, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_hourly_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_squad_hourly_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_snapchat_ads__ad_squad_hourly_report_tmp')),\n staging_columns=get_ad_squad_hourly_report_columns()\n )\n }} \n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n ad_squad_id,\n cast (date as {{ dbt.type_timestamp() }}) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as {{ dbt.type_float() }}), 0) / 1000000.0 as conversion_purchases_value\n\n {% for conversion in var('snapchat_ads__conversion_fields', []) %}\n , coalesce(cast({{ conversion }} as {{ dbt.type_bigint() }}), 0) as {{ conversion }}\n {% endfor %}\n\n {{ snapchat_ads_fill_pass_through_columns(pass_through_fields=var('snapchat_ads__ad_squad_hourly_passthrough_metrics'), except=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_squad_hourly_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_bigint", "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_squad_hourly_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_hourly_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_squad_id\n \n as \n \n ad_squad_id\n \n, \n \n \n attachment_quartile_1\n \n as \n \n attachment_quartile_1\n \n, \n \n \n attachment_quartile_2\n \n as \n \n attachment_quartile_2\n \n, \n \n \n attachment_quartile_3\n \n as \n \n attachment_quartile_3\n \n, \n \n \n attachment_total_view_time_millis\n \n as \n \n attachment_total_view_time_millis\n \n, \n \n \n attachment_view_completion\n \n as \n \n attachment_view_completion\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 quartile_1\n \n as \n \n quartile_1\n \n, \n \n \n quartile_2\n \n as \n \n quartile_2\n \n, \n \n \n quartile_3\n \n as \n \n quartile_3\n \n, \n \n \n saves\n \n as \n \n saves\n \n, \n \n \n screen_time_millis\n \n as \n \n screen_time_millis\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n swipes\n \n as \n \n swipes\n \n, \n \n \n video_views\n \n as \n \n video_views\n \n, \n \n \n view_completion\n \n as \n \n view_completion\n \n, \n \n \n view_time_millis\n \n as \n \n view_time_millis\n \n, \n \n \n conversion_purchases_value\n \n as \n \n conversion_purchases_value\n \n, \n \n \n conversion_purchases\n \n as \n \n conversion_purchases\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 ad_squad_id,\n cast (date as timestamp) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as float), 0) / 1000000.0 as conversion_purchases_value\n\n \n , coalesce(cast(conversion_purchases as bigint), 0) as conversion_purchases\n \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": ["ad_squad_id", "date_hour"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__ad_history": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_history.sql", "original_file_path": "models/stg_snapchat_ads__ad_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_history"], "alias": "stg_snapchat_ads__ad_history", "checksum": {"name": "sha256", "checksum": "c5e6d8190a234277e68501aa96b048452931369da6556021b43dfea818a276cf"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a historic version of an ad in Snapchat.", "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": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_id": {"name": "ad_id", "description": "The ID of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the related ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_name": {"name": "ad_name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.040714, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__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_snapchat_ads__ad_history_tmp')),\n staging_columns=get_ad_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as ad_id,\n name as ad_name,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n ad_squad_id,\n creative_id,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_squad_id\n \n as \n \n ad_squad_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n creative_id\n \n as \n \n creative_id\n \n, \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\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 id as ad_id,\n name as ad_name,\n cast (created_at as timestamp) as created_at,\n ad_squad_id,\n creative_id,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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": ["_fivetran_synced", "ad_id"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_squad_history.sql", "original_file_path": "models/stg_snapchat_ads__ad_squad_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_squad_history"], "alias": "stg_snapchat_ads__ad_squad_history", "checksum": {"name": "sha256", "checksum": "52dd01aacf5296607f2cd01a15942b091ddf6b9df5b230e11eaf8bc8305e9994"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a historic version of an ad squad in Snapchat.", "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": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_name": {"name": "ad_squad_name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "The ID of the related campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.0426948, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_squad_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_snapchat_ads__ad_squad_history_tmp')),\n staging_columns=get_ad_squad_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as ad_squad_id,\n name as ad_squad_name,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n campaign_id,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_squad_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_squad_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_squad_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\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 id as ad_squad_id,\n name as ad_squad_name,\n cast (created_at as timestamp) as created_at,\n campaign_id,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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": ["_fivetran_synced", "ad_squad_id"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_report", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_hourly_report.sql", "original_file_path": "models/stg_snapchat_ads__ad_hourly_report.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_hourly_report"], "alias": "stg_snapchat_ads__ad_hourly_report", "checksum": {"name": "sha256", "checksum": "f5f1902a449bf2f7e8f5452586d5768cf5f0234925fc0ec085327e07eaaf7b4f"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record represents an hourly performance summary for an ad in Snapchat.", "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": [], "granularity": null}, "ad_id": {"name": "ad_id", "description": "The ID of the ad that the report relates to in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "date_hour": {"name": "date_hour", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_total_view_time": {"name": "attachment_total_view_time", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "screen_time": {"name": "screen_time", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_time": {"name": "view_time", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The amount of spend for an ad in the hour of the record converted from micros.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (in Ad Account's currency, converted from microcurrency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.042248, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_hourly_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_snapchat_ads__ad_hourly_report_tmp')),\n staging_columns=get_ad_hourly_report_columns()\n )\n }} \n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n ad_id,\n cast (date as {{ dbt.type_timestamp() }}) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as {{ dbt.type_float() }}), 0) / 1000000.0 as conversion_purchases_value\n\n {% for conversion in var('snapchat_ads__conversion_fields', []) %}\n , coalesce(cast({{ conversion }} as {{ dbt.type_bigint() }}), 0) as {{ conversion }}\n {% endfor %}\n\n {{ snapchat_ads_fill_pass_through_columns(pass_through_fields=var('snapchat_ads__ad_hourly_passthrough_metrics'), except=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_hourly_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_hourly_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_bigint", "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_hourly_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n ad_id\n \n as \n \n ad_id\n \n, \n cast(null as numeric(28,6)) as \n \n attachment_quartile_1\n \n , \n cast(null as numeric(28,6)) as \n \n attachment_quartile_2\n \n , \n cast(null as numeric(28,6)) as \n \n attachment_quartile_3\n \n , \n cast(null as numeric(28,6)) as \n \n attachment_total_view_time_millis\n \n , \n cast(null as numeric(28,6)) as \n \n attachment_view_completion\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 numeric(28,6)) as \n \n quartile_1\n \n , \n cast(null as numeric(28,6)) as \n \n quartile_2\n \n , \n cast(null as numeric(28,6)) as \n \n quartile_3\n \n , \n cast(null as numeric(28,6)) as \n \n saves\n \n , \n cast(null as numeric(28,6)) as \n \n screen_time_millis\n \n , \n cast(null as numeric(28,6)) as \n \n shares\n \n , \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n swipes\n \n as \n \n swipes\n \n, \n cast(null as numeric(28,6)) as \n \n video_views\n \n , \n cast(null as numeric(28,6)) as \n \n view_completion\n \n , \n cast(null as numeric(28,6)) as \n \n view_time_millis\n \n , \n \n \n conversion_purchases_value\n \n as \n \n conversion_purchases_value\n \n, \n \n \n conversion_purchases\n \n as \n \n conversion_purchases\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 ad_id,\n cast (date as timestamp) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as float), 0) / 1000000.0 as conversion_purchases_value\n\n \n , coalesce(cast(conversion_purchases as bigint), 0) as conversion_purchases\n \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": ["ad_id", "date_hour"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__creative_history": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__creative_history.sql", "original_file_path": "models/stg_snapchat_ads__creative_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__creative_history"], "alias": "stg_snapchat_ads__creative_history", "checksum": {"name": "sha256", "checksum": "ee8a3cbc842df2f1f73d35d75566cbc3ab7e56056cad04dab1c98fa1f6853113"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a historic version of a creative in Snapchat.", "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": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "creative_id": {"name": "creative_id", "description": "The ID of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "creative_name": {"name": "creative_name", "description": "The name of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "url": {"name": "url", "description": "The URL of the creative if the creative is of type 'web view'.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.045254, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__creative_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_snapchat_ads__creative_history_tmp')),\n staging_columns=get_creative_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as creative_id,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n ad_account_id,\n name as creative_name,\n web_view_url as url,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) =1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__creative_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_creative_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__creative_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_account_id\n \n as \n \n ad_account_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\n \n , \n \n \n web_view_url\n \n as \n \n web_view_url\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 id as creative_id,\n cast (created_at as timestamp) as created_at,\n ad_account_id,\n name as creative_name,\n web_view_url as url,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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": ["_fivetran_synced", "creative_id"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__creative_url_tag_history.sql", "original_file_path": "models/stg_snapchat_ads__creative_url_tag_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__creative_url_tag_history"], "alias": "stg_snapchat_ads__creative_url_tag_history", "checksum": {"name": "sha256", "checksum": "92851f4b67f728a6845faca7a8f94e2851808a2fe430259b5fb8534a6212bd32"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a URL paramter key-value pair for a creative in Snapchat.", "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": [], "granularity": null}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "param_key": {"name": "param_key", "description": "The URL parameter key, i.e. UTM_SOURCE.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "param_value": {"name": "param_value", "description": "The URL parameter value, i.e. Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.045855, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__creative_url_tag_history_tmp') }}\n\n),\n\nfields as (\n\n select\n {{\n fivetran_utils.fill_staging_columns(\n source_columns=adapter.get_columns_in_relation(ref('stg_snapchat_ads__creative_url_tag_history_tmp')),\n staging_columns=get_creative_url_tag_history_columns()\n )\n }}\n \n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n creative_id,\n key as param_key,\n value as param_value,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, creative_id, key order by updated_at desc) =1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_url_tag_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__creative_url_tag_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_creative_url_tag_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__creative_url_tag_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history_tmp\"\n\n),\n\nfields as (\n\n select\n \n \n \n creative_id\n \n as \n \n creative_id\n \n, \n \n \n key\n \n as \n \n key\n \n, \n \n \n updated_at\n \n as \n \n updated_at\n \n, \n \n \n value\n \n as \n \n value\n \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 creative_id,\n key as param_key,\n value as param_value,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, creative_id, key order by updated_at 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": ["creative_id"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__ad_account_history.sql", "original_file_path": "models/stg_snapchat_ads__ad_account_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__ad_account_history"], "alias": "stg_snapchat_ads__ad_account_history", "checksum": {"name": "sha256", "checksum": "038466c7ae703d4c445eb0cfb1847ae4282b0f9cdf77f9d9ec4553befcba1ee0"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a historic version of an ad account in Snapchat.", "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": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_name": {"name": "ad_account_name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "advertiser": {"name": "advertiser", "description": "Name of advertiser", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "currency": {"name": "currency", "description": "Currency used by account", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "timezone": {"name": "timezone", "description": "Account timezone", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.040163, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__ad_account_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_snapchat_ads__ad_account_history_tmp')),\n staging_columns=get_ad_account_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n id as ad_account_id,\n name as ad_account_name,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n advertiser, \n currency,\n timezone,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__ad_account_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_ad_account_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__ad_account_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n cast(null as TEXT) as \n \n advertiser\n \n , \n cast(null as timestamp) as \n \n created_at\n \n , \n cast(null as TEXT) as \n \n currency\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as TEXT) as \n \n timezone\n \n , \n cast(null as TEXT) as \n \n type\n \n , \n cast(null as timestamp) as \n \n updated_at\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 id as ad_account_id,\n name as ad_account_name,\n cast (created_at as timestamp) as created_at,\n advertiser, \n currency,\n timezone,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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": ["_fivetran_synced", "ad_account_id"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__campaign_hourly_report.sql", "original_file_path": "models/stg_snapchat_ads__campaign_hourly_report.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__campaign_hourly_report"], "alias": "stg_snapchat_ads__campaign_hourly_report", "checksum": {"name": "sha256", "checksum": "b1f47ef69d58e570592e47fd4ed9874ddf3044ff816b8f21cb99b0418a32b63d"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a historic version of an ad in Snapchat.", "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": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "ID of campaign", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "date_hour": {"name": "date_hour", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_total_view_time": {"name": "attachment_total_view_time", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "screen_time": {"name": "screen_time", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_time": {"name": "view_time", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The amount of spend for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (in Ad Account's currency, converted from microcurrency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.044523, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_hourly_report\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_ads__campaign_hourly_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_snapchat_ads__campaign_hourly_report_tmp')),\n staging_columns=get_campaign_hourly_report_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation, \n campaign_id,\n cast (date as {{ dbt.type_timestamp() }}) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as {{ dbt.type_float() }}), 0) / 1000000.0 as conversion_purchases_value\n\n {% for conversion in var('snapchat_ads__conversion_fields', []) %}\n , coalesce(cast({{ conversion }} as {{ dbt.type_bigint() }}), 0) as {{ conversion }}\n {% endfor %}\n\n {{ snapchat_ads_fill_pass_through_columns(pass_through_fields=var('snapchat_ads__campaign_hourly_report_passthrough_metrics'), except=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n \n from fields\n)\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_hourly_report_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_campaign_hourly_report_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp", "macro.dbt.type_float", "macro.dbt.type_bigint", "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__campaign_hourly_report.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_hourly_report_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n attachment_quartile_1\n \n as \n \n attachment_quartile_1\n \n, \n \n \n attachment_quartile_2\n \n as \n \n attachment_quartile_2\n \n, \n \n \n attachment_quartile_3\n \n as \n \n attachment_quartile_3\n \n, \n \n \n attachment_total_view_time_millis\n \n as \n \n attachment_total_view_time_millis\n \n, \n \n \n attachment_view_completion\n \n as \n \n attachment_view_completion\n \n, \n \n \n campaign_id\n \n as \n \n campaign_id\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 quartile_1\n \n as \n \n quartile_1\n \n, \n \n \n quartile_2\n \n as \n \n quartile_2\n \n, \n \n \n quartile_3\n \n as \n \n quartile_3\n \n, \n \n \n saves\n \n as \n \n saves\n \n, \n \n \n screen_time_millis\n \n as \n \n screen_time_millis\n \n, \n \n \n shares\n \n as \n \n shares\n \n, \n \n \n spend\n \n as \n \n spend\n \n, \n \n \n swipes\n \n as \n \n swipes\n \n, \n \n \n video_views\n \n as \n \n video_views\n \n, \n \n \n view_completion\n \n as \n \n view_completion\n \n, \n \n \n view_time_millis\n \n as \n \n view_time_millis\n \n, \n \n \n conversion_purchases_value\n \n as \n \n conversion_purchases_value\n \n, \n \n \n conversion_purchases\n \n as \n \n conversion_purchases\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_id,\n cast (date as timestamp) as date_hour,\n attachment_quartile_1,\n attachment_quartile_2,\n attachment_quartile_3,\n (attachment_total_view_time_millis / 1000000.0) as attachment_total_view_time,\n attachment_view_completion,\n quartile_1,\n quartile_2,\n quartile_3,\n saves,\n shares,\n (screen_time_millis / 1000000.0) as screen_time,\n video_views,\n view_completion,\n (view_time_millis / 1000000.0) as view_time,\n impressions,\n (spend / 1000000.0) as spend,\n swipes,\n coalesce(cast(conversion_purchases_value as float), 0) / 1000000.0 as conversion_purchases_value\n\n \n , coalesce(cast(conversion_purchases as bigint), 0) as conversion_purchases\n \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": ["campaign_id", "date_hour"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__campaign_history": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_history", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "stg_snapchat_ads__campaign_history.sql", "original_file_path": "models/stg_snapchat_ads__campaign_history.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "fqn": ["snapchat_ads_source", "stg_snapchat_ads__campaign_history"], "alias": "stg_snapchat_ads__campaign_history", "checksum": {"name": "sha256", "checksum": "4bdc0a822494f1f1b1806407151746864f0cd31ca0393d54517cc1431dfef5f1"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "table", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "Each record in this table represents a historic version of a campaign in Snapchat.", "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": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "The id of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_name": {"name": "campaign_name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "updated_at": {"name": "updated_at", "description": "Timestamp of when the record was updated.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "is_most_recent_record": {"name": "is_most_recent_record", "description": "Boolean representing whether a record is the most recent version of that record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": "snapchat_ads_source://models/stg_snapchat.yml", "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "table", "enabled": true}, "created_at": 1739936580.043853, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\nwith base as (\n\n select * \n from {{ ref('stg_snapchat_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_snapchat_ads__campaign_history_tmp')),\n staging_columns=get_campaign_history_columns()\n )\n }}\n \n {{ fivetran_utils.source_relation(\n union_schema_variable='snapchat_ads_union_schemas', \n union_database_variable='snapchat_ads_union_databases') \n }}\n\n from base\n),\n\nfinal as (\n\n select\n source_relation,\n id as campaign_id,\n ad_account_id,\n cast (created_at as {{ dbt.type_timestamp() }}) as created_at,\n name as campaign_name,\n cast (_fivetran_synced as {{ dbt.type_timestamp() }}) as _fivetran_synced,\n cast (updated_at as {{ dbt.type_timestamp() }}) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced desc) = 1 as is_most_recent_record\n from fields\n)\n\nselect * \nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_history_tmp", "package": null, "version": null}, {"name": "stg_snapchat_ads__campaign_history_tmp", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.snapchat_ads_source.get_campaign_history_columns", "macro.fivetran_utils.fill_staging_columns", "macro.fivetran_utils.source_relation", "macro.dbt.type_timestamp"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat_ads__campaign_history.sql", "compiled": true, "compiled_code": "\n\nwith base as (\n\n select * \n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history_tmp\"\n),\n\nfields as (\n\n select\n \n \n \n _fivetran_synced\n \n as \n \n _fivetran_synced\n \n, \n \n \n ad_account_id\n \n as \n \n ad_account_id\n \n, \n cast(null as timestamp) as \n \n created_at\n \n , \n \n \n id\n \n as \n \n id\n \n, \n \n \n name\n \n as \n \n name\n \n, \n cast(null as timestamp) as \n \n updated_at\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 id as campaign_id,\n ad_account_id,\n cast (created_at as timestamp) as created_at,\n name as campaign_name,\n cast (_fivetran_synced as timestamp) as _fivetran_synced,\n cast (updated_at as timestamp) as updated_at,\n row_number() over (partition by source_relation, id order by _fivetran_synced 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": ["_fivetran_synced", "campaign_id"], "time_spine": null}, "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__creative_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__creative_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__creative_history_tmp"], "alias": "stg_snapchat_ads__creative_history_tmp", "checksum": {"name": "sha256", "checksum": "af71368261d6f41a42e53d8d3522dbd7c2343ef32d5d518c0740024944b005e8"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.783915, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='creative_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='creative_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "creative_history"], ["snapchat_ads", "creative_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__creative_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_creative_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.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_account_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_account_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_account_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_account_history_tmp"], "alias": "stg_snapchat_ads__ad_account_history_tmp", "checksum": {"name": "sha256", "checksum": "ecb8114190d4e6ac289124eb4588c540a426e1d449caa958ad34bd4a7e3bf6a9"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.799711, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_account_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_account_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_account_history"], ["snapchat_ads", "ad_account_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_account_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_account_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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_hourly_report_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_hourly_report_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_hourly_report_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_hourly_report_tmp"], "alias": "stg_snapchat_ads__ad_hourly_report_tmp", "checksum": {"name": "sha256", "checksum": "6c656f5f35626e2da5fb5eb5c84ec8c6a92e99832407708ed55bd0de7e5df50e"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.803226, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_hourly_report', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_hourly_report',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_hourly_report"], ["snapchat_ads", "ad_hourly_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_hourly_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_hourly_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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__creative_url_tag_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__creative_url_tag_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__creative_url_tag_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__creative_url_tag_history_tmp"], "alias": "stg_snapchat_ads__creative_url_tag_history_tmp", "checksum": {"name": "sha256", "checksum": "9d7c3b09ee4cdd1b50bd4d9dcaa83506d4b92c886601a9a5b3d3eb3d64c87cb2"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.8066828, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='creative_url_tag_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='creative_url_tag_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "creative_url_tag_history"], ["snapchat_ads", "creative_url_tag_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__creative_url_tag_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_creative_url_tag_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_squad_hourly_report_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_squad_hourly_report_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_squad_hourly_report_tmp"], "alias": "stg_snapchat_ads__ad_squad_hourly_report_tmp", "checksum": {"name": "sha256", "checksum": "95586bdee0fc83cd072ec0e9e53e5468e3fc125b6421d2eb7434e636c7dde0ea"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.810524, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_hourly_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_squad_hourly_report', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_squad_hourly_report',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_squad_hourly_report"], ["snapchat_ads", "ad_squad_hourly_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_squad_hourly_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_squad_hourly_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.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__campaign_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__campaign_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__campaign_history_tmp"], "alias": "stg_snapchat_ads__campaign_history_tmp", "checksum": {"name": "sha256", "checksum": "77443d363898105f0e8102998dc2e60b0ba612a50f0f0db676f7c77ed9c5de5c"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.813973, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='campaign_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "campaign_history"], ["snapchat_ads", "campaign_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__campaign_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_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.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_history_tmp"], "alias": "stg_snapchat_ads__ad_history_tmp", "checksum": {"name": "sha256", "checksum": "ff60fd4ced1d85ba518f5a0c3566e10aed80c9201c78e51d2e95e24e814a8610"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.817308, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_history"], ["snapchat_ads", "ad_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__ad_squad_history_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__ad_squad_history_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__ad_squad_history_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__ad_squad_history_tmp"], "alias": "stg_snapchat_ads__ad_squad_history_tmp", "checksum": {"name": "sha256", "checksum": "7dd4147d6b7ee617b048090525b4578398c85fd40fb4f509efbbdefb89ed16ba"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.820717, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='ad_squad_history', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='ad_squad_history',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "ad_squad_history"], ["snapchat_ads", "ad_squad_history"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__ad_squad_history_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_squad_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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_snapchat_ads_dev", "name": "stg_snapchat_ads__campaign_hourly_report_tmp", "resource_type": "model", "package_name": "snapchat_ads_source", "path": "tmp/stg_snapchat_ads__campaign_hourly_report_tmp.sql", "original_file_path": "models/tmp/stg_snapchat_ads__campaign_hourly_report_tmp.sql", "unique_id": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp", "fqn": ["snapchat_ads_source", "tmp", "stg_snapchat_ads__campaign_hourly_report_tmp"], "alias": "stg_snapchat_ads__campaign_hourly_report_tmp", "checksum": {"name": "sha256", "checksum": "25c22f93768af7aedb92b425ebe2b5756b624690741a7f333e3b2d4e5b677f66"}, "config": {"enabled": true, "alias": null, "schema": "snapchat_ads_dev", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "view", "incremental_strategy": null, "batch_size": null, "lookback": 0, "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, "access": "protected"}, "tags": [], "description": "", "columns": {}, "meta": {}, "group": null, "docs": {"show": true, "node_color": null}, "patch_path": null, "build_path": null, "unrendered_config": {"schema": "snapchat_ads_{{ var('directed_schema','dev') }}", "materialized": "view", "enabled": true}, "created_at": 1739936579.82432, "relation_name": "\"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_hourly_report_tmp\"", "raw_code": "{{ config(enabled=var('ad_reporting__snapchat_ads_enabled', true)) }}\n\n{{\n fivetran_utils.union_data(\n table_identifier='campaign_hourly_report', \n database_variable='snapchat_ads_database', \n schema_variable='snapchat_ads_schema', \n default_database=target.database,\n default_schema='snapchat_ads',\n default_variable='campaign_hourly_report',\n union_schema_variable='snapchat_ads_union_schemas',\n union_database_variable='snapchat_ads_union_databases'\n )\n}}", "language": "sql", "refs": [], "sources": [["snapchat_ads", "campaign_hourly_report"], ["snapchat_ads", "campaign_hourly_report"]], "metrics": [], "depends_on": {"macros": ["macro.fivetran_utils.union_data"], "nodes": ["source.snapchat_ads_source.snapchat_ads.campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/tmp/stg_snapchat_ads__campaign_hourly_report_tmp.sql", "compiled": true, "compiled_code": "\n\n\n \n \n \n \n \n select * \n from \"postgres\".\"zz_dbt_avinash\".\"snapchat_campaign_hourly_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.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__account_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__account_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260", "fqn": ["snapchat_ads", "not_null_snapchat_ads__account_report_date_day"], "alias": "not_null_snapchat_ads__account_report_date_day", "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": 1739936579.939696, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__account_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__account_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__account_report\"\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__account_report", "attached_node": "model.snapchat_ads.snapchat_ads__account_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__account_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__account_report_ad_account_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__account_report_ad_account_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b", "fqn": ["snapchat_ads", "not_null_snapchat_ads__account_report_ad_account_id"], "alias": "not_null_snapchat_ads__account_report_ad_account_id", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": null, "schema": "dbt_test__audit", "database": null, "tags": [], "meta": {}, "group": null, "materialized": "test", "severity": "WARN", "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": {"severity": "WARN"}, "created_at": 1739936579.941055, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(severity=\"warn\") }}", "language": "sql", "refs": [{"name": "snapchat_ads__account_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__account_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__account_report_ad_account_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_account_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__account_report\"\nwhere ad_account_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_account_id", "file_key_name": "models.snapchat_ads__account_report", "attached_node": "model.snapchat_ads.snapchat_ads__account_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_account_id", "model": "{{ get_where_subquery(ref('snapchat_ads__account_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day"], "alias": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8", "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": "dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8"}, "created_at": 1739936579.9419992, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8\") }}", "language": "sql", "refs": [{"name": "snapchat_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.snapchat_ads.snapchat_ads__account_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_214c2bcb5ae73bd8026704ca3c8449e8.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_account_id, date_day\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__account_report\"\n group by source_relation, ad_account_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.snapchat_ads__account_report", "attached_node": "model.snapchat_ads.snapchat_ads__account_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_account_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__account_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__ad_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_report_date_day"], "alias": "not_null_snapchat_ads__ad_report_date_day", "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": 1739936579.953172, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__ad_report\"\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__ad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__ad_report_ad_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_report_ad_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_report_ad_id"], "alias": "not_null_snapchat_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": 1739936579.954159, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_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.snapchat_ads__ad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.4b3bfcfa06": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_12af8a0d96b6c3c930df7ad3c1af10e9.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.4b3bfcfa06", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day"], "alias": "dbt_utils_unique_combination_o_12af8a0d96b6c3c930df7ad3c1af10e9", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_12af8a0d96b6c3c930df7ad3c1af10e9", "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": "dbt_utils_unique_combination_o_12af8a0d96b6c3c930df7ad3c1af10e9"}, "created_at": 1739936579.955071, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_12af8a0d96b6c3c930df7ad3c1af10e9\") }}", "language": "sql", "refs": [{"name": "snapchat_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.snapchat_ads.snapchat_ads__ad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_12af8a0d96b6c3c930df7ad3c1af10e9.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, ad_squad_id, campaign_id, date_day\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__ad_report\"\n group by source_relation, ad_id, ad_squad_id, 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.snapchat_ads__ad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "ad_squad_id", "campaign_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__ad_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__campaign_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__campaign_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b", "fqn": ["snapchat_ads", "not_null_snapchat_ads__campaign_report_date_day"], "alias": "not_null_snapchat_ads__campaign_report_date_day", "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": 1739936579.957428, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__campaign_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__campaign_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__campaign_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__campaign_report\"\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__campaign_report", "attached_node": "model.snapchat_ads.snapchat_ads__campaign_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__campaign_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__campaign_report_campaign_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__campaign_report_campaign_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac", "fqn": ["snapchat_ads", "not_null_snapchat_ads__campaign_report_campaign_id"], "alias": "not_null_snapchat_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": 1739936579.9583192, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__campaign_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__campaign_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__campaign_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_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.snapchat_ads__campaign_report", "attached_node": "model.snapchat_ads.snapchat_ads__campaign_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('snapchat_ads__campaign_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day"], "alias": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb", "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": "dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb"}, "created_at": 1739936579.959191, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb\") }}", "language": "sql", "refs": [{"name": "snapchat_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.snapchat_ads.snapchat_ads__campaign_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_e2e52096c5d2adfdd8022dda67d2eefb.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 \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__campaign_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.snapchat_ads__campaign_report", "attached_node": "model.snapchat_ads.snapchat_ads__campaign_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__campaign_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__ad_squad_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_squad_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_squad_report_date_day"], "alias": "not_null_snapchat_ads__ad_squad_report_date_day", "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": 1739936579.962475, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_squad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_squad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_squad_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__ad_squad_report\"\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__ad_squad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_squad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_squad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__ad_squad_report_ad_squad_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__ad_squad_report_ad_squad_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe", "fqn": ["snapchat_ads", "not_null_snapchat_ads__ad_squad_report_ad_squad_id"], "alias": "not_null_snapchat_ads__ad_squad_report_ad_squad_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": 1739936579.9635851, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_squad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__ad_squad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__ad_squad_report_ad_squad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_squad_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__ad_squad_report\"\nwhere ad_squad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_squad_id", "file_key_name": "models.snapchat_ads__ad_squad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_squad_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_squad_id", "model": "{{ get_where_subquery(ref('snapchat_ads__ad_squad_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day"], "alias": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3", "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": "dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3"}, "created_at": 1739936579.965038, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3\") }}", "language": "sql", "refs": [{"name": "snapchat_ads__ad_squad_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.snapchat_ads.snapchat_ads__ad_squad_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_aae226efcde859f979c893443d7e72e3.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_squad_id, date_day\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__ad_squad_report\"\n group by source_relation, ad_squad_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.snapchat_ads__ad_squad_report", "attached_node": "model.snapchat_ads.snapchat_ads__ad_squad_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_squad_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__ad_squad_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__url_report_date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__url_report_date_day.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6", "fqn": ["snapchat_ads", "not_null_snapchat_ads__url_report_date_day"], "alias": "not_null_snapchat_ads__url_report_date_day", "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": 1739936579.9676511, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__url_report_date_day.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_day\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__url_report\"\nwhere date_day is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_day", "file_key_name": "models.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_day", "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__url_report_ad_id", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__url_report_ad_id.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78", "fqn": ["snapchat_ads", "not_null_snapchat_ads__url_report_ad_id"], "alias": "not_null_snapchat_ads__url_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": 1739936579.9685462, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__url_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__url_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.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": null}}, "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_snapchat_ads__url_report_base_url", "resource_type": "test", "package_name": "snapchat_ads", "path": "not_null_snapchat_ads__url_report_base_url.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de", "fqn": ["snapchat_ads", "not_null_snapchat_ads__url_report_base_url"], "alias": "not_null_snapchat_ads__url_report_base_url", "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": {"enabled": true}, "created_at": 1739936579.9697669, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}{{ config(enabled=True) }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/not_null_snapchat_ads__url_report_base_url.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect base_url\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__url_report\"\nwhere base_url is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "base_url", "file_key_name": "models.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "base_url", "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": null}}, "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.1569c44c37": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day", "resource_type": "test", "package_name": "snapchat_ads", "path": "dbt_utils_unique_combination_o_21a961ebd1d58067bfbf7f3df38285e7.sql", "original_file_path": "models/snapchat.yml", "unique_id": "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.1569c44c37", "fqn": ["snapchat_ads", "dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day"], "alias": "dbt_utils_unique_combination_o_21a961ebd1d58067bfbf7f3df38285e7", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_21a961ebd1d58067bfbf7f3df38285e7", "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": {"enabled": true, "alias": "dbt_utils_unique_combination_o_21a961ebd1d58067bfbf7f3df38285e7"}, "created_at": 1739936579.971106, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(enabled=True,alias=\"dbt_utils_unique_combination_o_21a961ebd1d58067bfbf7f3df38285e7\") }}", "language": "sql", "refs": [{"name": "snapchat_ads__url_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.snapchat_ads.snapchat_ads__url_report"]}, "compiled_path": "target/compiled/snapchat_ads/models/snapchat.yml/dbt_utils_unique_combination_o_21a961ebd1d58067bfbf7f3df38285e7.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, ad_squad_id, campaign_id, date_day\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"snapchat_ads__url_report\"\n group by source_relation, ad_id, ad_squad_id, 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.snapchat_ads__url_report", "attached_node": "model.snapchat_ads.snapchat_ads__url_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "ad_squad_id", "campaign_id", "date_day"], "model": "{{ get_where_subquery(ref('snapchat_ads__url_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__ad_account_history__fivetran_synced", "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": 1739936580.046409, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__ad_account_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_account_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_account_history_ad_account_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_account_history_ad_account_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_account_history_ad_account_id"], "alias": "not_null_stg_snapchat_ads__ad_account_history_ad_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": 1739936580.0474188, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_account_history_ad_account_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_account_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\nwhere ad_account_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_account_id", "file_key_name": "models.stg_snapchat_ads__ad_account_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_account_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_account_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad", "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": "dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad"}, "created_at": 1739936580.048349, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_account_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.snapchat_ads_source.stg_snapchat_ads__ad_account_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_3190b1077468dff34e96d53f9129d3ad.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_account_id, _fivetran_synced\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_account_history\"\n group by source_relation, ad_account_id, _fivetran_synced\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_snapchat_ads__ad_account_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_account_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_account_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__ad_history__fivetran_synced", "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": 1739936580.05086, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history\"\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__ad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_history_ad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_history_ad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_history_ad_id"], "alias": "not_null_stg_snapchat_ads__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": 1739936580.051921, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_history_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__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_snapchat_ads__ad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302", "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": "dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302"}, "created_at": 1739936580.0528, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__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.snapchat_ads_source.stg_snapchat_ads__ad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_f0ee7dccca2fb2438166f8dca2158302.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, _fivetran_synced\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_history\"\n group by source_relation, ad_id, _fivetran_synced\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_snapchat_ads__ad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_hourly_report_ad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_hourly_report_ad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_hourly_report_ad_id"], "alias": "not_null_stg_snapchat_ads__ad_hourly_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": 1739936580.0550342, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_hourly_report_ad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_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_snapchat_ads__ad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_hourly_report_date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_hourly_report_date_hour.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_hourly_report_date_hour"], "alias": "not_null_stg_snapchat_ads__ad_hourly_report_date_hour", "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": 1739936580.0560489, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_hourly_report_date_hour.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_hour\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report\"\nwhere date_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_hour", "file_key_name": "models.stg_snapchat_ads__ad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_hour", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour"], "alias": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c", "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": "dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c"}, "created_at": 1739936580.0569222, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_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.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_6555cce51f9e5f821cdfba36a30dc18c.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_id, date_hour\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_hourly_report\"\n group by source_relation, ad_id, date_hour\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_snapchat_ads__ad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_id", "date_hour"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_hourly_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced", "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": 1739936580.059079, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__ad_squad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id"], "alias": "not_null_stg_snapchat_ads__ad_squad_history_ad_squad_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": 1739936580.059936, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_squad_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"\nwhere ad_squad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_squad_id", "file_key_name": "models.stg_snapchat_ads__ad_squad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_squad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56", "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": "dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56"}, "created_at": 1739936580.060784, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_d2dca03685a09270498ff6ebadf17c56.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_squad_id, _fivetran_synced\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_history\"\n group by source_relation, ad_squad_id, _fivetran_synced\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_snapchat_ads__ad_squad_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_squad_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id"], "alias": "not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_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": 1739936580.062997, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect ad_squad_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_hourly_report\"\nwhere ad_squad_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "ad_squad_id", "file_key_name": "models.stg_snapchat_ads__ad_squad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "ad_squad_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour"], "alias": "not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour", "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": 1739936580.063893, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_hour\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_hourly_report\"\nwhere date_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_hour", "file_key_name": "models.stg_snapchat_ads__ad_squad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_hour", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour"], "alias": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac", "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": "dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac"}, "created_at": 1739936580.064794, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_squad_hourly_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.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_67ba47c849a8a4422b78966095415fac.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, ad_squad_id, date_hour\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__ad_squad_hourly_report\"\n group by source_relation, ad_squad_id, date_hour\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_snapchat_ads__ad_squad_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "ad_squad_id", "date_hour"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__ad_squad_hourly_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__campaign_history__fivetran_synced", "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": 1739936580.067063, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__campaign_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_history_campaign_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_history_campaign_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_history_campaign_id"], "alias": "not_null_stg_snapchat_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": 1739936580.068058, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_history_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_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_snapchat_ads__campaign_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014", "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": "dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014"}, "created_at": 1739936580.068939, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_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.snapchat_ads_source.stg_snapchat_ads__campaign_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_2067af3e2838f3bcff0258eb157de014.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, campaign_id, _fivetran_synced\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_history\"\n group by source_relation, campaign_id, _fivetran_synced\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_snapchat_ads__campaign_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id"], "alias": "not_null_stg_snapchat_ads__campaign_hourly_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": 1739936580.0712562, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect campaign_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_hourly_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_snapchat_ads__campaign_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "campaign_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour"], "alias": "not_null_stg_snapchat_ads__campaign_hourly_report_date_hour", "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": 1739936580.072088, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect date_hour\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_hourly_report\"\nwhere date_hour is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "date_hour", "file_key_name": "models.stg_snapchat_ads__campaign_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "date_hour", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_hourly_report')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour"], "alias": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d", "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": "dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d"}, "created_at": 1739936580.0733252, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__campaign_hourly_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.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_90aa9903c369415cae32db38a6fa709d.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, campaign_id, date_hour\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__campaign_hourly_report\"\n group by source_relation, campaign_id, date_hour\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_snapchat_ads__campaign_hourly_report", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "campaign_id", "date_hour"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__campaign_hourly_report')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__creative_history__fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__creative_history__fivetran_synced.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__creative_history__fivetran_synced"], "alias": "not_null_stg_snapchat_ads__creative_history__fivetran_synced", "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": 1739936580.075496, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__creative_history__fivetran_synced.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect _fivetran_synced\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\nwhere _fivetran_synced is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "_fivetran_synced", "file_key_name": "models.stg_snapchat_ads__creative_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "_fivetran_synced", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__creative_history_creative_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__creative_history_creative_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__creative_history_creative_id"], "alias": "not_null_stg_snapchat_ads__creative_history_creative_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": 1739936580.076441, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__creative_history_creative_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect creative_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\nwhere creative_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "creative_id", "file_key_name": "models.stg_snapchat_ads__creative_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "creative_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced"], "alias": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da", "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": "dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da"}, "created_at": 1739936580.077298, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_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.snapchat_ads_source.stg_snapchat_ads__creative_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_fa589e52860732e2e8a9cb69701ed9da.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, creative_id, _fivetran_synced\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_history\"\n group by source_relation, creative_id, _fivetran_synced\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_snapchat_ads__creative_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "creative_id", "_fivetran_synced"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_history')) }}"}, "namespace": "dbt_utils"}}, "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "not_null_stg_snapchat_ads__creative_url_tag_history_creative_id", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b", "fqn": ["snapchat_ads_source", "not_null_stg_snapchat_ads__creative_url_tag_history_creative_id"], "alias": "not_null_stg_snapchat_ads__creative_url_tag_history_creative_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": 1739936580.079701, "relation_name": null, "raw_code": "{{ test_not_null(**_dbt_generic_test_kwargs) }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_url_tag_history", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt.test_not_null", "macro.dbt.get_where_subquery"], "nodes": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.sql", "compiled": true, "compiled_code": "\n \n \n\n\n\nselect creative_id\nfrom \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"\nwhere creative_id is null\n\n\n", "extra_ctes_injected": true, "extra_ctes": [], "contract": {"enforced": false, "alias_types": true, "checksum": null}, "column_name": "creative_id", "file_key_name": "models.stg_snapchat_ads__creative_url_tag_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history", "test_metadata": {"name": "not_null", "kwargs": {"column_name": "creative_id", "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_url_tag_history')) }}"}, "namespace": null}}, "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a": {"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at", "resource_type": "test", "package_name": "snapchat_ads_source", "path": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16.sql", "original_file_path": "models/stg_snapchat.yml", "unique_id": "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a", "fqn": ["snapchat_ads_source", "dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at"], "alias": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16", "checksum": {"name": "none", "checksum": ""}, "config": {"enabled": true, "alias": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16", "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": "dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16"}, "created_at": 1739936580.080647, "relation_name": null, "raw_code": "{{ dbt_utils.test_unique_combination_of_columns(**_dbt_generic_test_kwargs) }}{{ config(alias=\"dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16\") }}", "language": "sql", "refs": [{"name": "stg_snapchat_ads__creative_url_tag_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.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"]}, "compiled_path": "target/compiled/snapchat_ads_source/models/stg_snapchat.yml/dbt_utils_unique_combination_o_ee34b38641f864cf9860e2199aa29b16.sql", "compiled": true, "compiled_code": "\n\n\n\n\n\nwith validation_errors as (\n\n select\n source_relation, creative_id, param_key, updated_at\n from \"postgres\".\"snapchat_ads_integration_tests_6_snapchat_ads_dev\".\"stg_snapchat_ads__creative_url_tag_history\"\n group by source_relation, creative_id, param_key, updated_at\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_snapchat_ads__creative_url_tag_history", "attached_node": "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history", "test_metadata": {"name": "unique_combination_of_columns", "kwargs": {"combination_of_columns": ["source_relation", "creative_id", "param_key", "updated_at"], "model": "{{ get_where_subquery(ref('stg_snapchat_ads__creative_url_tag_history')) }}"}, "namespace": "dbt_utils"}}}, "sources": {"source.snapchat_ads_source.snapchat_ads.ad_account_history": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "ad_account_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_account_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_account_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_account_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 in this table represents a historic version of an ad account in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "id": {"name": "id", "description": "The ID of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The name of the account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "advertiser": {"name": "advertiser", "description": "Name of advertiser", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "currency": {"name": "currency", "description": "Currency used by account", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "timezone": {"name": "timezone", "description": "Account timezone", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_account_history_data\"", "created_at": 1739936580.085862, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.ad_history": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "ad_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_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 in this table represents a historic version of an ad in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "id": {"name": "id", "description": "The ID of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_squad_id": {"name": "ad_squad_id", "description": "The ID of the related ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The name of the ad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_history_data\"", "created_at": 1739936580.086622, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "ad_hourly_report", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_hourly_report", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_hourly_report"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_hourly_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 represents an hourly performance summary for an ad in Snapchat.", "columns": {"ad_id": {"name": "ad_id", "description": "The ID of the ad that the report relates to in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "date": {"name": "date", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_total_view_time_millis": {"name": "attachment_total_view_time_millis", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "screen_time_millis": {"name": "screen_time_millis", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_time_millis": {"name": "view_time_millis", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The amount of spend in microdollars for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (microcurrency in Ad Account's currency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed to an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_add_billing": {"name": "conversion_add_billing", "description": "Total number of attributed \"ADD_BILLING\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_save": {"name": "conversion_save", "description": "Total number of attributed \"SAVE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_add_cart": {"name": "conversion_add_cart", "description": "Total number of attributed \"ADD_CART\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_sign_ups": {"name": "conversion_sign_ups", "description": "Total number of attributed \"SIGN_UP\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_start_checkout": {"name": "conversion_start_checkout", "description": "Total number of attributed \"START_CHECKOUT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_searches": {"name": "conversion_searches", "description": "Total number of attributed \"SEARCH\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_view_content": {"name": "conversion_view_content", "description": "Total number of attributed \"VIEW_CONTENT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_app_opens": {"name": "conversion_app_opens", "description": "Total number of attributed \"APP_OPEN\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_level_completes": {"name": "conversion_level_completes", "description": "Total number of attributed \"LEVEL_COMPLETE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_page_views": {"name": "conversion_page_views", "description": "Total number of attributed \"PAGE_VIEW\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_hourly_report_data\"", "created_at": 1739936580.086774, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.ad_squad_history": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "ad_squad_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_squad_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_squad_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_squad_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 in this table represents a historic version of an ad squad in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "id": {"name": "id", "description": "The ID of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "campaign_id": {"name": "campaign_id", "description": "The ID of the related campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The name of the ad squad in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_squad_history_data\"", "created_at": 1739936580.086876, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "ad_squad_hourly_report", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report", "fqn": ["snapchat_ads_source", "snapchat_ads", "ad_squad_hourly_report"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_ad_squad_hourly_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 represents an hourly performance summary for each ad squad.", "columns": {"ad_squad_id": {"name": "ad_squad_id", "description": "ID of the ad squad.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "date": {"name": "date", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_total_view_time_millis": {"name": "attachment_total_view_time_millis", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "screen_time_millis": {"name": "screen_time_millis", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_time_millis": {"name": "view_time_millis", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The amount of spend in microdollars for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (microcurrency in Ad Account's currency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed to an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_add_billing": {"name": "conversion_add_billing", "description": "Total number of attributed \"ADD_BILLING\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_save": {"name": "conversion_save", "description": "Total number of attributed \"SAVE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_add_cart": {"name": "conversion_add_cart", "description": "Total number of attributed \"ADD_CART\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_sign_ups": {"name": "conversion_sign_ups", "description": "Total number of attributed \"SIGN_UP\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_start_checkout": {"name": "conversion_start_checkout", "description": "Total number of attributed \"START_CHECKOUT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_searches": {"name": "conversion_searches", "description": "Total number of attributed \"SEARCH\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_view_content": {"name": "conversion_view_content", "description": "Total number of attributed \"VIEW_CONTENT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_app_opens": {"name": "conversion_app_opens", "description": "Total number of attributed \"APP_OPEN\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_level_completes": {"name": "conversion_level_completes", "description": "Total number of attributed \"LEVEL_COMPLETE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_page_views": {"name": "conversion_page_views", "description": "Total number of attributed \"PAGE_VIEW\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_ad_squad_hourly_report_data\"", "created_at": 1739936580.087008, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.campaign_history": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "campaign_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.campaign_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "campaign_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_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 in this table represents a historic version of a campaign in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "id": {"name": "id", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The name of the campaign in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_campaign_history_data\"", "created_at": 1739936580.087105, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "campaign_hourly_report", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report", "fqn": ["snapchat_ads_source", "snapchat_ads", "campaign_hourly_report"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_campaign_hourly_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 represents an hourly performance summary for each campaign.", "columns": {"campaign_id": {"name": "campaign_id", "description": "ID of campaign", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "date": {"name": "date", "description": "The hour that the report relates to.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_1": {"name": "attachment_quartile_1", "description": "Number of times your Long Form Video was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_2": {"name": "attachment_quartile_2", "description": "Number of times your Long Form Video was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_quartile_3": {"name": "attachment_quartile_3", "description": "Number of times your Long Form Video was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_total_view_time_millis": {"name": "attachment_total_view_time_millis", "description": "Total time Snapchatters spent on the attachment (HH:MM:SS)", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "attachment_view_completion": {"name": "attachment_view_completion", "description": "The number of times your Long Form Video was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_1": {"name": "quartile_1", "description": "The number of times your video ad was viewed to 25%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_2": {"name": "quartile_2", "description": "The number of times your video ad was viewed to 50%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "quartile_3": {"name": "quartile_3", "description": "The number of times your video ad was viewed to 75%", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "saves": {"name": "saves", "description": "Number of times a lens/filter was saved to Memories", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "shares": {"name": "shares", "description": "Number of times a lens/filter was shared in a Chat or Story", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "screen_time_millis": {"name": "screen_time_millis", "description": "The number of milli seconds spent watching your ad across all paid impressions. Screen time starts recording as soon as the media is fully rendered on the device and the autoplay video starts", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "video_views": {"name": "video_views", "description": "The number of times your video was watched at least 2 seconds or swiped up, whichever comes first", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_completion": {"name": "view_completion", "description": "The number of times your video ad was viewed to completion (97% )", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "view_time_millis": {"name": "view_time_millis", "description": "The number of milli seconds spent watching your ad across all users reached.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "impressions": {"name": "impressions", "description": "The number of impressions for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "spend": {"name": "spend", "description": "The amount of spend in microdollars for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "swipes": {"name": "swipes", "description": "The number of swipes for an ad in the hour of the record. Swipes are when your ad was swiped up on or the CTA was tapped to view the attachment below.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases_value": {"name": "conversion_purchases_value", "description": "The total value of purchases attributed to an ad in the hour of the record (microcurrency in Ad Account's currency).", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_purchases": {"name": "conversion_purchases", "description": "The total number of purchases attributed to an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_add_billing": {"name": "conversion_add_billing", "description": "Total number of attributed \"ADD_BILLING\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_save": {"name": "conversion_save", "description": "Total number of attributed \"SAVE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_add_cart": {"name": "conversion_add_cart", "description": "Total number of attributed \"ADD_CART\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_sign_ups": {"name": "conversion_sign_ups", "description": "Total number of attributed \"SIGN_UP\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_start_checkout": {"name": "conversion_start_checkout", "description": "Total number of attributed \"START_CHECKOUT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_searches": {"name": "conversion_searches", "description": "Total number of attributed \"SEARCH\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_view_content": {"name": "conversion_view_content", "description": "Total number of attributed \"VIEW_CONTENT\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_app_opens": {"name": "conversion_app_opens", "description": "Total number of attributed \"APP_OPEN\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_level_completes": {"name": "conversion_level_completes", "description": "Total number of attributed \"LEVEL_COMPLETE\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "conversion_page_views": {"name": "conversion_page_views", "description": "Total number of attributed \"PAGE_VIEW\" conversion events for an ad in the hour of the record.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_campaign_hourly_report_data\"", "created_at": 1739936580.0872471, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.creative_history": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "creative_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.creative_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "creative_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_creative_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 in this table represents a historic version of a creative in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "id": {"name": "id", "description": "The ID of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "ad_account_id": {"name": "ad_account_id", "description": "The ID of the related ad account in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "name": {"name": "name", "description": "The name of the creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "web_view_url": {"name": "web_view_url", "description": "The URL of the creative if the creative is of type 'web view'.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_creative_history_data\"", "created_at": 1739936580.087347, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}, "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": {"database": "postgres", "schema": "zz_dbt_avinash", "name": "creative_url_tag_history", "resource_type": "source", "package_name": "snapchat_ads_source", "path": "models/src_snapchat.yml", "original_file_path": "models/src_snapchat.yml", "unique_id": "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history", "fqn": ["snapchat_ads_source", "snapchat_ads", "creative_url_tag_history"], "source_name": "snapchat_ads", "source_description": "", "loader": "Fivetran", "identifier": "snapchat_creative_url_tag_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 in this table represents a URL parameter key-value pair for a creative in Snapchat.", "columns": {"_fivetran_synced": {"name": "_fivetran_synced", "description": "When the record was last synced by Fivetran.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "creative_id": {"name": "creative_id", "description": "The ID of the related creative in Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "created_at": {"name": "created_at", "description": "Created at timestamp.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "key": {"name": "key", "description": "The URL parameter key, i.e. UTM_SOURCE.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}, "value": {"name": "value", "description": "The URL parameter value, i.e. Snapchat.", "meta": {}, "data_type": null, "constraints": [], "quote": null, "tags": [], "granularity": null}}, "meta": {}, "source_meta": {}, "tags": [], "config": {"enabled": true, "event_time": null}, "patch_path": null, "unrendered_config": {"enabled": true}, "relation_name": "\"postgres\".\"zz_dbt_avinash\".\"snapchat_creative_url_tag_history_data\"", "created_at": 1739936580.0876641, "unrendered_database": "{% if target.type != 'spark'%}{{ var('snapchat_ads_database', target.database) }}{% endif %}", "unrendered_schema": "{{ var('snapchat_ads_schema', 'snapchat_ads') }}"}}, "macros": {"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": 1739936578.732044, "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": 1739936578.732256, "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": 1739936578.732358, "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": 1739936578.732459, "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": 1739936578.7325509, "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": 1739936578.7339158, "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": 1739936578.7342489, "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\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": 1739936578.7348402, "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": 1739936578.734952, "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": 1739936578.7425332, "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": 1739936578.742944, "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": 1739936578.743202, "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": 1739936578.7434602, "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": 1739936578.743853, "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": 1739936578.7443562, "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": 1739936578.744504, "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": 1739936578.7448, "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": 1739936578.745117, "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": 1739936578.7457972, "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": 1739936578.745965, "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": 1739936578.746237, "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": 1739936578.746464, "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": 1739936578.746817, "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 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": 1739936578.7470021, "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": 1739936578.747481, "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": 1739936578.747652, "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": 1739936578.7477498, "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": 1739936578.747904, "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": 1739936578.74802, "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": 1739936578.7483342, "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 update {{ target }}\n set dbt_valid_to = DBT_INTERNAL_SOURCE.dbt_valid_to\n from {{ source }} as DBT_INTERNAL_SOURCE\n where DBT_INTERNAL_SOURCE.dbt_scd_id::text = {{ target }}.dbt_scd_id::text\n and DBT_INTERNAL_SOURCE.dbt_change_type::text in ('update'::text, 'delete'::text)\n and {{ target }}.dbt_valid_to is null;\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": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.748937, "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": 1739936578.7490602, "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": 1739936578.749305, "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": 1739936578.7494311, "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": 1739936578.749582, "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": 1739936578.7505128, "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": 1739936578.7510169, "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": 1739936578.7512739, "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": 1739936578.7516658, "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": 1739936578.751797, "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": 1739936578.752367, "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": 1739936578.7525198, "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": 1739936578.7526321, "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": 1739936578.753093, "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": 1739936578.75324, "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": 1739936578.75342, "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": 1739936578.753922, "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": 1739936578.756629, "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": 1739936578.756762, "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": 1739936578.757181, "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": 1739936578.757519, "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": 1739936578.758417, "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": 1739936578.758585, "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": 1739936578.758703, "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": 1739936578.758819, "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": 1739936578.758934, "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": 1739936578.759243, "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": 1739936578.759489, "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": 1739936578.759734, "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": 1739936578.760248, "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 and DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} is null\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"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.7606652, "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": 1739936578.763416, "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": 1739936578.763571, "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": 1739936578.763755, "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 invalidate_hard_deletes = config.get('invalidate_hard_deletes') or false %}\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_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.get_snapshot_table_column_names", "macro.dbt.snapshot_hash_arguments"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.7644548, "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": 1739936578.764599, "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": 1739936578.7647429, "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": 1739936578.765877, "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 invalidate_hard_deletes = config.get('invalidate_hard_deletes') or false %}\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_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": 1739936578.7670588, "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": 1739936578.7726169, "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 \"{{ 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": 1739936578.7728598, "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": 1739936578.7729979, "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": 1739936578.773078, "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": 1739936578.773202, "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": 1739936578.773298, "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": 1739936578.773466, "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'}) }}\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.773657, "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\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 {{ columns.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 {{ columns.dbt_updated_at }},\n {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as {{ columns.dbt_valid_to }},\n {{ strategy.scd_id }} as {{ columns.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 {{ 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.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.{{ columns.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 {{ 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\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.get_snapshot_table_column_names", "macro.dbt.snapshot_get_time"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.774705, "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": 1739936578.774871, "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 nullif({{ strategy.updated_at }}, {{ strategy.updated_at }}) as {{ columns.dbt_valid_to }}\n from (\n {{ sql }}\n ) sbq\n\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": 1739936578.7752278, "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": 1739936578.775574, "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": 1739936578.776049, "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": 1739936578.776463, "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.valid_snapshot_target(target_relation, columns) }}\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 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\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": 1739936578.780916, "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": 1739936578.7831419, "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": 1739936578.784197, "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": 1739936578.78445, "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": 1739936578.784624, "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": 1739936578.785127, "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": 1739936578.785446, "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": 1739936578.785755, "supported_languages": null}, "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": 1739936578.787204, "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": 1739936578.791255, "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": 1739936578.791591, "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": 1739936578.791801, "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": 1739936578.7929332, "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": 1739936578.7931259, "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": 1739936578.793656, "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": 1739936578.796018, "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": 1739936578.798374, "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": 1739936578.799744, "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": 1739936578.800193, "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": 1739936578.800732, "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": 1739936578.800931, "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": 1739936578.801517, "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": 1739936578.806608, "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": 1739936578.8079722, "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": 1739936578.808191, "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": 1739936578.809002, "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": 1739936578.809226, "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": 1739936578.809747, "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": 1739936578.8102589, "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": 1739936578.811203, "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": 1739936578.811397, "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": 1739936578.811551, "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": 1739936578.8118038, "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": 1739936578.8119628, "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": 1739936578.8122041, "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": 1739936578.812361, "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": 1739936578.812578, "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": 1739936578.812732, "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": 1739936578.8128588, "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.default__get_incremental_microbatch_sql"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.813007, "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": 1739936578.8131452, "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": 1739936578.813371, "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 {% 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_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": 1739936578.817707, "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": 1739936578.822229, "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": 1739936578.823206, "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": 1739936578.824176, "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": 1739936578.824864, "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.default__can_clone_table"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.825064, "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": 1739936578.825161, "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.default__create_or_replace_clone"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.825407, "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": 1739936578.825545, "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 {% 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.render()) }}\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": 1739936578.828592, "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.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": 1739936578.831253, "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": 1739936578.8353221, "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": 1739936578.8360431, "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": 1739936578.836239, "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": 1739936578.8366349, "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": 1739936578.8367941, "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": 1739936578.836905, "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": 1739936578.8370209, "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": 1739936578.837116, "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": 1739936578.8372512, "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": 1739936578.837352, "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": 1739936578.837739, "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": 1739936578.837895, "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": 1739936578.838928, "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": 1739936578.839285, "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": 1739936578.839605, "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": 1739936578.8400671, "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": 1739936578.840292, "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": 1739936578.841297, "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": 1739936578.841689, "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": 1739936578.841913, "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": 1739936578.8425379, "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": 1739936578.842869, "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": 1739936578.8430321, "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": 1739936578.843207, "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": 1739936578.843368, "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": 1739936578.8440902, "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": 1739936578.84561, "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": 1739936578.846049, "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": 1739936578.846273, "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": 1739936578.846514, "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": 1739936578.8466911, "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": 1739936578.846966, "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": 1739936578.847141, "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": 1739936578.847734, "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": 1739936578.848093, "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": 1739936578.848268, "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": 1739936578.848511, "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": 1739936578.8488052, "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": 1739936578.8490298, "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": 1739936578.8494232, "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": 1739936578.849805, "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": 1739936578.850081, "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": 1739936578.850257, "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": 1739936578.850471, "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": 1739936578.8505752, "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": 1739936578.850991, "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": 1739936578.851341, "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": 1739936578.851656, "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": 1739936578.8517919, "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": 1739936578.852048, "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": 1739936578.8521779, "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": 1739936578.852743, "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": 1739936578.852915, "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": 1739936578.853174, "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": 1739936578.853312, "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": 1739936578.8535879, "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": 1739936578.853793, "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": 1739936578.854676, "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": 1739936578.854778, "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": 1739936578.855215, "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": 1739936578.8553522, "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": 1739936578.855465, "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": 1739936578.856591, "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": 1739936578.8569028, "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": 1739936578.857193, "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": 1739936578.857406, "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": 1739936578.857506, "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": 1739936578.857729, "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": 1739936578.8578508, "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": 1739936578.8580868, "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": 1739936578.858207, "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": 1739936578.858922, "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": 1739936578.859078, "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": 1739936578.859432, "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": 1739936578.859989, "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": 1739936578.86036, "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": 1739936578.860517, "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": 1739936578.860661, "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": 1739936578.861008, "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": 1739936578.861161, "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": 1739936578.861995, "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": 1739936578.862119, "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": 1739936578.863102, "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": 1739936578.863269, "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": 1739936578.863461, "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": 1739936578.86369, "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": 1739936578.8638132, "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": 1739936578.864162, "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": 1739936578.8642938, "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": 1739936578.8644428, "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": 1739936578.864796, "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": 1739936578.865097, "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": 1739936578.86534, "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": 1739936578.865547, "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": 1739936578.866014, "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": 1739936578.867223, "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": 1739936578.867753, "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": 1739936578.867994, "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": 1739936578.869499, "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": 1739936578.8704388, "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": 1739936578.871202, "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": 1739936578.871474, "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": 1739936578.871706, "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": 1739936578.871784, "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": 1739936578.872463, "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": 1739936578.873009, "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": 1739936578.8732271, "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": 1739936578.873562, "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": 1739936578.873873, "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": 1739936578.874131, "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": 1739936578.8744278, "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": 1739936578.8745751, "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": 1739936578.8748071, "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": 1739936578.874932, "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": 1739936578.875686, "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": 1739936578.876235, "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": 1739936578.87641, "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": 1739936578.876864, "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": 1739936578.8771079, "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": 1739936578.877208, "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": 1739936578.877553, "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": 1739936578.877805, "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": 1739936578.8780348, "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": 1739936578.8781, "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": 1739936578.878315, "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": 1739936578.878432, "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": 1739936578.878675, "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": 1739936578.87879, "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": 1739936578.879306, "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": 1739936578.879631, "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": 1739936578.879905, "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": 1739936578.880042, "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": 1739936578.8802738, "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": 1739936578.880388, "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": 1739936578.880599, "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": 1739936578.880728, "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": 1739936578.881186, "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": 1739936578.88138, "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": 1739936578.881666, "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": 1739936578.881783, "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": 1739936578.882016, "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": 1739936578.882123, "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": 1739936578.8823922, "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": 1739936578.88253, "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": 1739936578.882755, "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": 1739936578.882852, "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": 1739936578.883719, "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": 1739936578.883857, "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": 1739936578.884008, "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": 1739936578.8841422, "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": 1739936578.8842869, "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": 1739936578.8844259, "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": 1739936578.884573, "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": 1739936578.8847308, "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": 1739936578.884879, "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": 1739936578.885153, "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": 1739936578.885304, "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": 1739936578.885438, "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": 1739936578.8855832, "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": 1739936578.885715, "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": 1739936578.885969, "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": 1739936578.886091, "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": 1739936578.8863099, "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": 1739936578.8864052, "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": 1739936578.8867142, "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": 1739936578.887108, "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": 1739936578.887251, "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": 1739936578.887688, "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": 1739936578.8878222, "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": 1739936578.888, "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": 1739936578.888226, "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": 1739936578.888333, "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": 1739936578.8886368, "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": 1739936578.888839, "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": 1739936578.8890722, "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": 1739936578.889259, "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": 1739936578.889568, "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": 1739936578.889716, "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": 1739936578.889848, "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": 1739936578.889996, "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": 1739936578.8905568, "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": 1739936578.89068, "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": 1739936578.890796, "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": 1739936578.8908858, "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": 1739936578.8914628, "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": 1739936578.891655, "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": 1739936578.8917298, "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": 1739936578.891884, "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": 1739936578.8920388, "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": 1739936578.892819, "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": 1739936578.892961, "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": 1739936578.893108, "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": 1739936578.893643, "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": 1739936578.893816, "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": 1739936578.89394, "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": 1739936578.894089, "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": 1739936578.894224, "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": 1739936578.895999, "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": 1739936578.89614, "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_postgres.postgres__make_temp_relation"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936578.896317, "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": 1739936578.896557, "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": 1739936578.896758, "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": 1739936578.897022, "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": 1739936578.8971741, "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": 1739936578.897318, "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": 1739936578.89752, "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": 1739936578.897975, "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": 1739936578.898174, "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": 1739936578.89829, "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": 1739936578.898643, "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": 1739936578.8989792, "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": 1739936578.899222, "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": 1739936578.8994849, "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": 1739936578.9032478, "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": 1739936578.903372, "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": 1739936578.90353, "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": 1739936578.903643, "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": 1739936578.903973, "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": 1739936578.904149, "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": 1739936578.904255, "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": 1739936578.904452, "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": 1739936578.904632, "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": 1739936578.904829, "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": 1739936578.9050088, "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": 1739936578.905208, "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": 1739936578.905795, "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": 1739936578.905962, "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": 1739936578.906173, "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": 1739936578.906371, "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": 1739936578.907449, "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": 1739936578.907848, "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": 1739936578.908021, "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 {{ compiled_code }}\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": 1739936578.908191, "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": 1739936578.9088, "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": 1739936578.90895, "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": 1739936578.909127, "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": 1739936578.909284, "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": 1739936578.9095192, "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": 1739936578.909924, "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": 1739936578.9129071, "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": 1739936578.91313, "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": 1739936578.9133, "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": 1739936578.913517, "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": 1739936578.913676, "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": 1739936578.9138088, "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": 1739936578.913962, "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": 1739936578.914165, "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": 1739936578.914647, "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": 1739936578.9148989, "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": 1739936578.915057, "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": 1739936578.9151921, "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": 1739936578.915343, "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": 1739936578.915477, "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": 1739936578.915617, "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": 1739936578.9157481, "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": 1739936578.915925, "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": 1739936578.916069, "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": 1739936578.918208, "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": 1739936578.91835, "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": 1739936578.918609, "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": 1739936578.918794, "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": 1739936578.918964, "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": 1739936578.9191208, "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": 1739936578.945467, "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": 1739936578.945826, "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": 1739936578.945996, "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": 1739936578.9462998, "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": 1739936578.9464982, "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": 1739936578.9470332, "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": 1739936578.9472551, "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.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": 1739936578.947916, "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": 1739936578.95089, "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": 1739936578.951415, "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": 1739936578.9523342, "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": 1739936578.952517, "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": 1739936578.952597, "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": 1739936578.9541938, "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": 1739936578.9543412, "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": 1739936578.955107, "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": 1739936578.955484, "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": 1739936578.95598, "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": 1739936578.956398, "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": 1739936578.9564679, "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": 1739936578.956954, "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": 1739936578.95718, "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": 1739936578.957462, "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": 1739936578.9577332, "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": 1739936578.958035, "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": 1739936578.958453, "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": 1739936578.958849, "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": 1739936578.95942, "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": 1739936578.959697, "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": 1739936578.960062, "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": 1739936578.9609869, "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": 1739936578.961837, "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": 1739936578.962574, "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": 1739936578.9636018, "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": 1739936578.964256, "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": 1739936578.964564, "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": 1739936578.965208, "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": 1739936578.965995, "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": 1739936578.966382, "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": 1739936578.9667652, "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": 1739936578.967286, "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": 1739936578.967691, "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": 1739936578.968161, "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": 1739936578.9684968, "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": 1739936578.9690728, "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": 1739936578.969891, "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": 1739936578.970421, "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": 1739936578.9710531, "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": 1739936578.971585, "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": 1739936578.971904, "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": 1739936578.9722502, "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": 1739936578.972543, "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": 1739936578.97314, "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": 1739936578.9738922, "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": 1739936578.974664, "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": 1739936578.975426, "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": 1739936578.977228, "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": 1739936578.980643, "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": 1739936578.9811, "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": 1739936578.981357, "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": 1739936578.984441, "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": 1739936578.985717, "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": 1739936578.985953, "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": 1739936578.986089, "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": 1739936578.986464, "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": 1739936578.9867, "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": 1739936578.986909, "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": 1739936578.987202, "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": 1739936578.987367, "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": 1739936578.9880168, "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": 1739936578.988737, "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": 1739936578.989357, "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": 1739936578.989856, "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": 1739936578.9901261, "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": 1739936578.990434, "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": 1739936578.990762, "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": 1739936578.9912288, "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": 1739936578.9915059, "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": 1739936578.9917922, "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": 1739936578.992355, "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": 1739936578.9930592, "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": 1739936578.993773, "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": 1739936578.994115, "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": 1739936578.9942772, "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": 1739936578.994694, "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": 1739936578.995254, "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": 1739936578.995968, "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": 1739936578.9963078, "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": 1739936578.996544, "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": 1739936578.997588, "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": 1739936578.9988952, "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": 1739936579.000234, "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": 1739936579.001801, "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": 1739936579.002068, "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": 1739936579.002183, "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": 1739936579.004969, "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": 1739936579.0080261, "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": 1739936579.008357, "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": 1739936579.008626, "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": 1739936579.00963, "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": 1739936579.009865, "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": 1739936579.010061, "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": 1739936579.0103412, "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": 1739936579.010547, "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": 1739936579.010705, "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": 1739936579.0109062, "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": 1739936579.0114062, "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": 1739936579.01164, "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": 1739936579.011999, "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": 1739936579.0124722, "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": 1739936579.012772, "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": 1739936579.0130649, "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": 1739936579.015981, "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": 1739936579.016412, "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": 1739936579.0169852, "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": 1739936579.0176268, "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": 1739936579.018049, "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": 1739936579.0190191, "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": 1739936579.0203788, "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": 1739936579.021308, "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": 1739936579.022039, "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": 1739936579.022444, "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": 1739936579.02305, "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": 1739936579.023702, "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": 1739936579.024095, "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": 1739936579.024256, "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": 1739936579.02459, "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": 1739936579.0250921, "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": 1739936579.025478, "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": 1739936579.0260081, "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": 1739936579.026461, "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": 1739936579.026581, "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": 1739936579.026706, "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": 1739936579.026826, "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": 1739936579.027315, "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": 1739936579.027927, "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": 1739936579.028851, "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": 1739936579.029114, "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": 1739936579.029609, "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": 1739936579.030337, "supported_languages": null}, "macro.spark_utils.get_tables": {"name": "get_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.get_tables", "macro_sql": "{% macro get_tables(table_regex_pattern='.*') %}\n\n {% set tables = [] %}\n {% for database in spark__list_schemas('not_used') %}\n {% for table in spark__list_relations_without_caching(database[0]) %}\n {% set db_tablename = database[0] ~ \".\" ~ table[1] %}\n {% set is_match = modules.re.match(table_regex_pattern, db_tablename) %}\n {% if is_match %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('type', 'TYPE', 'Type'))|first %}\n {% if table_type[1]|lower != 'view' %}\n {{ tables.append(db_tablename) }}\n {% endif %}\n {% endif %}\n {% endfor %}\n {% endfor %}\n {{ return(tables) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0347059, "supported_languages": null}, "macro.spark_utils.get_delta_tables": {"name": "get_delta_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.get_delta_tables", "macro_sql": "{% macro get_delta_tables(table_regex_pattern='.*') %}\n\n {% set delta_tables = [] %}\n {% for db_tablename in get_tables(table_regex_pattern) %}\n {% call statement('table_detail', fetch_result=True) -%}\n describe extended {{ db_tablename }}\n {% endcall %}\n\n {% set table_type = load_result('table_detail').table|reverse|selectattr(0, 'in', ('provider', 'PROVIDER', 'Provider'))|first %}\n {% if table_type[1]|lower == 'delta' %}\n {{ delta_tables.append(db_tablename) }}\n {% endif %}\n {% endfor %}\n {{ return(delta_tables) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.035284, "supported_languages": null}, "macro.spark_utils.get_statistic_columns": {"name": "get_statistic_columns", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.get_statistic_columns", "macro_sql": "{% macro get_statistic_columns(table) %}\n\n {% call statement('input_columns', fetch_result=True) %}\n SHOW COLUMNS IN {{ table }}\n {% endcall %}\n {% set input_columns = load_result('input_columns').table %}\n\n {% set output_columns = [] %}\n {% for column in input_columns %}\n {% call statement('column_information', fetch_result=True) %}\n DESCRIBE TABLE {{ table }} `{{ column[0] }}`\n {% endcall %}\n {% if not load_result('column_information').table[1][1].startswith('struct') and not load_result('column_information').table[1][1].startswith('array') %}\n {{ output_columns.append('`' ~ column[0] ~ '`') }}\n {% endif %}\n {% endfor %}\n {{ return(output_columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.statement"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.036032, "supported_languages": null}, "macro.spark_utils.spark_optimize_delta_tables": {"name": "spark_optimize_delta_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.spark_optimize_delta_tables", "macro_sql": "{% macro spark_optimize_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Optimizing \" ~ table) }}\n {% do run_query(\"optimize \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0366411, "supported_languages": null}, "macro.spark_utils.spark_vacuum_delta_tables": {"name": "spark_vacuum_delta_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.spark_vacuum_delta_tables", "macro_sql": "{% macro spark_vacuum_delta_tables(table_regex_pattern='.*') %}\n\n {% for table in get_delta_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Vacuuming \" ~ table) }}\n {% do run_query(\"vacuum \" ~ table) %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_delta_tables", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0372999, "supported_languages": null}, "macro.spark_utils.spark_analyze_tables": {"name": "spark_analyze_tables", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/maintenance_operation.sql", "original_file_path": "macros/maintenance_operation.sql", "unique_id": "macro.spark_utils.spark_analyze_tables", "macro_sql": "{% macro spark_analyze_tables(table_regex_pattern='.*') %}\n\n {% for table in get_tables(table_regex_pattern) %}\n {% set start=modules.datetime.datetime.now() %}\n {% set columns = get_statistic_columns(table) | join(',') %}\n {% set message_prefix=loop.index ~ \" of \" ~ loop.length %}\n {{ dbt_utils.log_info(message_prefix ~ \" Analyzing \" ~ table) }}\n {% if columns != '' %}\n {% do run_query(\"analyze table \" ~ table ~ \" compute statistics for columns \" ~ columns) %}\n {% endif %}\n {% set end=modules.datetime.datetime.now() %}\n {% set total_seconds = (end - start).total_seconds() | round(2) %}\n {{ dbt_utils.log_info(message_prefix ~ \" Finished \" ~ table ~ \" in \" ~ total_seconds ~ \"s\") }}\n {% endfor %}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.get_tables", "macro.spark_utils.get_statistic_columns", "macro.dbt_utils.log_info", "macro.dbt.run_query"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0381172, "supported_languages": null}, "macro.spark_utils.spark__concat": {"name": "spark__concat", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/concat.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/concat.sql", "unique_id": "macro.spark_utils.spark__concat", "macro_sql": "{% macro spark__concat(fields) -%}\n concat({{ fields|join(', ') }})\n{%- endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.038305, "supported_languages": null}, "macro.spark_utils.spark__type_numeric": {"name": "spark__type_numeric", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datatypes.sql", "unique_id": "macro.spark_utils.spark__type_numeric", "macro_sql": "{% macro spark__type_numeric() %}\n decimal(28, 6)\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0384011, "supported_languages": null}, "macro.spark_utils.spark__dateadd": {"name": "spark__dateadd", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/dateadd.sql", "unique_id": "macro.spark_utils.spark__dateadd", "macro_sql": "{% macro spark__dateadd(datepart, interval, from_date_or_timestamp) %}\n\n {%- set clock_component -%}\n {# make sure the dates + timestamps are real, otherwise raise an error asap #}\n to_unix_timestamp({{ spark_utils.assert_not_null('to_timestamp', from_date_or_timestamp) }})\n - to_unix_timestamp({{ spark_utils.assert_not_null('date', from_date_or_timestamp) }})\n {%- endset -%}\n\n {%- if datepart in ['day', 'week'] -%}\n \n {%- set multiplier = 7 if datepart == 'week' else 1 -%}\n\n to_timestamp(\n to_unix_timestamp(\n date_add(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ['month', 'quarter', 'year'] -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'month' -%} 1\n {%- elif datepart == 'quarter' -%} 3\n {%- elif datepart == 'year' -%} 12\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n to_unix_timestamp(\n add_months(\n {{ spark_utils.assert_not_null('date', from_date_or_timestamp) }},\n cast({{interval}} * {{multiplier}} as int)\n )\n ) + {{clock_component}}\n )\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set multiplier -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n to_timestamp(\n {{ spark_utils.assert_not_null('to_unix_timestamp', from_date_or_timestamp) }}\n + cast({{interval}} * {{multiplier}} as int)\n )\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro dateadd not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.040759, "supported_languages": null}, "macro.spark_utils.spark__datediff": {"name": "spark__datediff", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/datediff.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/datediff.sql", "unique_id": "macro.spark_utils.spark__datediff", "macro_sql": "{% macro spark__datediff(first_date, second_date, datepart) %}\n\n {%- if datepart in ['day', 'week', 'month', 'quarter', 'year'] -%}\n \n {# make sure the dates are real, otherwise raise an error asap #}\n {% set first_date = spark_utils.assert_not_null('date', first_date) %}\n {% set second_date = spark_utils.assert_not_null('date', second_date) %}\n \n {%- endif -%}\n \n {%- if datepart == 'day' -%}\n \n datediff({{second_date}}, {{first_date}})\n \n {%- elif datepart == 'week' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(datediff({{second_date}}, {{first_date}})/7)\n else ceil(datediff({{second_date}}, {{first_date}})/7)\n end\n \n -- did we cross a week boundary (Sunday)?\n + case\n when {{first_date}} < {{second_date}} and dayofweek({{second_date}}) < dayofweek({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofweek({{second_date}}) > dayofweek({{first_date}}) then -1\n else 0 end\n\n {%- elif datepart == 'month' -%}\n\n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}})))\n else ceil(months_between(date({{second_date}}), date({{first_date}})))\n end\n \n -- did we cross a month boundary?\n + case\n when {{first_date}} < {{second_date}} and dayofmonth({{second_date}}) < dayofmonth({{first_date}}) then 1\n when {{first_date}} > {{second_date}} and dayofmonth({{second_date}}) > dayofmonth({{first_date}}) then -1\n else 0 end\n \n {%- elif datepart == 'quarter' -%}\n \n case when {{first_date}} < {{second_date}}\n then floor(months_between(date({{second_date}}), date({{first_date}}))/3)\n else ceil(months_between(date({{second_date}}), date({{first_date}}))/3)\n end\n \n -- did we cross a quarter boundary?\n + case\n when {{first_date}} < {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n < (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then 1\n when {{first_date}} > {{second_date}} and (\n (dayofyear({{second_date}}) - (quarter({{second_date}}) * 365/4))\n > (dayofyear({{first_date}}) - (quarter({{first_date}}) * 365/4))\n ) then -1\n else 0 end\n\n {%- elif datepart == 'year' -%}\n \n year({{second_date}}) - year({{first_date}})\n\n {%- elif datepart in ('hour', 'minute', 'second', 'millisecond', 'microsecond') -%}\n \n {%- set divisor -%} \n {%- if datepart == 'hour' -%} 3600\n {%- elif datepart == 'minute' -%} 60\n {%- elif datepart == 'second' -%} 1\n {%- elif datepart == 'millisecond' -%} (1/1000)\n {%- elif datepart == 'microsecond' -%} (1/1000000)\n {%- endif -%}\n {%- endset -%}\n\n case when {{first_date}} < {{second_date}}\n then ceil((\n {# make sure the timestamps are real, otherwise raise an error asap #}\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n else floor((\n {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', second_date)) }}\n - {{ spark_utils.assert_not_null('to_unix_timestamp', spark_utils.assert_not_null('to_timestamp', first_date)) }}\n ) / {{divisor}})\n end\n \n {% if datepart == 'millisecond' %}\n + cast(date_format({{second_date}}, 'SSS') as int)\n - cast(date_format({{first_date}}, 'SSS') as int)\n {% endif %}\n \n {% if datepart == 'microsecond' %} \n {% set capture_str = '[0-9]{4}-[0-9]{2}-[0-9]{2}.[0-9]{2}:[0-9]{2}:[0-9]{2}.([0-9]{6})' %}\n -- Spark doesn't really support microseconds, so this is a massive hack!\n -- It will only work if the timestamp-string is of the format\n -- 'yyyy-MM-dd-HH mm.ss.SSSSSS'\n + cast(regexp_extract({{second_date}}, '{{capture_str}}', 1) as int)\n - cast(regexp_extract({{first_date}}, '{{capture_str}}', 1) as int) \n {% endif %}\n\n {%- else -%}\n\n {{ exceptions.raise_compiler_error(\"macro datediff not implemented for datepart ~ '\" ~ datepart ~ \"' ~ on Spark\") }}\n\n {%- endif -%}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.046978, "supported_languages": null}, "macro.spark_utils.spark__current_timestamp": {"name": "spark__current_timestamp", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "unique_id": "macro.spark_utils.spark__current_timestamp", "macro_sql": "{% macro spark__current_timestamp() %}\n current_timestamp()\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.047103, "supported_languages": null}, "macro.spark_utils.spark__current_timestamp_in_utc": {"name": "spark__current_timestamp_in_utc", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/current_timestamp.sql", "unique_id": "macro.spark_utils.spark__current_timestamp_in_utc", "macro_sql": "{% macro spark__current_timestamp_in_utc() %}\n unix_timestamp()\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0471702, "supported_languages": null}, "macro.spark_utils.spark__split_part": {"name": "spark__split_part", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/cross_db_utils/split_part.sql", "original_file_path": "macros/dbt_utils/cross_db_utils/split_part.sql", "unique_id": "macro.spark_utils.spark__split_part", "macro_sql": "{% macro spark__split_part(string_text, delimiter_text, part_number) %}\n\n {% set delimiter_expr %}\n \n -- escape if starts with a special character\n case when regexp_extract({{ delimiter_text }}, '([^A-Za-z0-9])(.*)', 1) != '_'\n then concat('\\\\', {{ delimiter_text }})\n else {{ delimiter_text }} end\n \n {% endset %}\n\n {% set split_part_expr %}\n \n split(\n {{ string_text }},\n {{ delimiter_expr }}\n )[({{ part_number - 1 }})]\n \n {% endset %}\n \n {{ return(split_part_expr) }}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.047638, "supported_languages": null}, "macro.spark_utils.spark__get_relations_by_pattern": {"name": "spark__get_relations_by_pattern", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_relations_by_pattern", "macro_sql": "{% macro spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n\n {%- call statement('get_tables', fetch_result=True) %}\n\n show table extended in {{ schema_pattern }} like '{{ table_pattern }}'\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=None,\n schema=row[0],\n identifier=row[1],\n type=('view' if 'Type: VIEW' in row[3] else 'table')\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"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.04899, "supported_languages": null}, "macro.spark_utils.spark__get_relations_by_prefix": {"name": "spark__get_relations_by_prefix", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_relations_by_prefix", "macro_sql": "{% macro spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {% set table_pattern = table_pattern ~ '*' %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.049273, "supported_languages": null}, "macro.spark_utils.spark__get_tables_by_pattern": {"name": "spark__get_tables_by_pattern", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_tables_by_pattern", "macro_sql": "{% macro spark__get_tables_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_pattern(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_pattern"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0495481, "supported_languages": null}, "macro.spark_utils.spark__get_tables_by_prefix": {"name": "spark__get_tables_by_prefix", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "original_file_path": "macros/dbt_utils/sql/get_relations_by_prefix.sql", "unique_id": "macro.spark_utils.spark__get_tables_by_prefix", "macro_sql": "{% macro spark__get_tables_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database) %}\n {{ return(spark_utils.spark__get_relations_by_prefix(schema_pattern, table_pattern, exclude='', database=target.database)) }}\n{% endmacro %}", "depends_on": {"macros": ["macro.spark_utils.spark__get_relations_by_prefix"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0497742, "supported_languages": null}, "macro.spark_utils.assert_not_null": {"name": "assert_not_null", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "unique_id": "macro.spark_utils.assert_not_null", "macro_sql": "{% macro assert_not_null(function, arg) -%}\n {{ return(adapter.dispatch('assert_not_null', 'spark_utils')(function, arg)) }}\n{%- endmacro %}", "depends_on": {"macros": ["macro.spark_utils.default__assert_not_null"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0500531, "supported_languages": null}, "macro.spark_utils.default__assert_not_null": {"name": "default__assert_not_null", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/etc/assert_not_null.sql", "original_file_path": "macros/etc/assert_not_null.sql", "unique_id": "macro.spark_utils.default__assert_not_null", "macro_sql": "{% macro default__assert_not_null(function, arg) %}\n\n coalesce({{function}}({{arg}}), nvl2({{function}}({{arg}}), assert_true({{function}}({{arg}}) is not null), null))\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.05022, "supported_languages": null}, "macro.spark_utils.spark__convert_timezone": {"name": "spark__convert_timezone", "resource_type": "macro", "package_name": "spark_utils", "path": "macros/snowplow/convert_timezone.sql", "original_file_path": "macros/snowplow/convert_timezone.sql", "unique_id": "macro.spark_utils.spark__convert_timezone", "macro_sql": "{% macro spark__convert_timezone(in_tz, out_tz, in_timestamp) %}\n from_utc_timestamp(to_utc_timestamp({{in_timestamp}}, {{in_tz}}), {{out_tz}})\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.050393, "supported_languages": null}, "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns": {"name": "snapchat_ads_persist_pass_through_columns", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_persist_pass_through_columns.sql", "original_file_path": "macros/snapchat_ads_persist_pass_through_columns.sql", "unique_id": "macro.snapchat_ads.snapchat_ads_persist_pass_through_columns", "macro_sql": "{% macro snapchat_ads_persist_pass_through_columns(pass_through_variable, identifier=none, transform='', coalesce_with=none, except_variable=none, exclude_fields=[]) %}\n\n{% set except_fields = [] %}\n{% if except_variable is not none %}\n {# Start creating list of fields to exclude #}\n {% for item in var(except_variable) %}\n {% do except_fields.append(item.name) %}\n {% endfor %}\n{% endif %}\n\n{% for field in exclude_fields %}\n {% do except_fields.append(field) %}\n{% endfor %}\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|lower %}\n \n {% if field_name not in except_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\n {% endfor %}\n{% endif %}\n\n{% endmacro %}", "depends_on": {"macros": []}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.051699, "supported_languages": null}, "macro.snapchat_ads.snapchat_ads_extract_url_parameter": {"name": "snapchat_ads_extract_url_parameter", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_extract_url_parameters.sql", "original_file_path": "macros/snapchat_ads_extract_url_parameters.sql", "unique_id": "macro.snapchat_ads.snapchat_ads_extract_url_parameter", "macro_sql": "{% macro snapchat_ads_extract_url_parameter(field, url_parameter) -%}\n\n{{ return(adapter.dispatch('snapchat_ads_extract_url_parameter', 'snapchat_ads') (field, url_parameter)) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.snapchat_ads.default__snapchat_ads_extract_url_parameter"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.05201, "supported_languages": null}, "macro.snapchat_ads.default__snapchat_ads_extract_url_parameter": {"name": "default__snapchat_ads_extract_url_parameter", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_extract_url_parameters.sql", "original_file_path": "macros/snapchat_ads_extract_url_parameters.sql", "unique_id": "macro.snapchat_ads.default__snapchat_ads_extract_url_parameter", "macro_sql": "{% macro default__snapchat_ads_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": 1739936579.052138, "supported_languages": null}, "macro.snapchat_ads.spark__snapchat_ads_extract_url_parameter": {"name": "spark__snapchat_ads_extract_url_parameter", "resource_type": "macro", "package_name": "snapchat_ads", "path": "macros/snapchat_ads_extract_url_parameters.sql", "original_file_path": "macros/snapchat_ads_extract_url_parameters.sql", "unique_id": "macro.snapchat_ads.spark__snapchat_ads_extract_url_parameter", "macro_sql": "{% macro spark__snapchat_ads_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": 1739936579.052305, "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": 1739936579.05263, "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": 1739936579.053438, "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": 1739936579.053594, "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": 1739936579.053741, "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": 1739936579.054206, "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": 1739936579.054336, "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": 1739936579.0544782, "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": 1739936579.05516, "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": 1739936579.0556958, "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": 1739936579.056884, "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": 1739936579.05709, "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": 1739936579.057305, "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": 1739936579.05751, "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": 1739936579.057709, "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": 1739936579.0579278, "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": 1739936579.058149, "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": 1739936579.0583491, "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": 1739936579.0586271, "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": 1739936579.058717, "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": 1739936579.0588002, "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": 1739936579.058887, "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": 1739936579.059201, "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": 1739936579.059785, "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": 1739936579.060673, "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": 1739936579.0611541, "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": 1739936579.061794, "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": 1739936579.062208, "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": 1739936579.0623412, "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": 1739936579.06248, "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": 1739936579.06259, "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": 1739936579.0627131, "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": 1739936579.065207, "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": 1739936579.065345, "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": 1739936579.0654778, "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": 1739936579.0656052, "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": 1739936579.067035, "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": 1739936579.067832, "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": 1739936579.067947, "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": 1739936579.068171, "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": 1739936579.0684102, "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": 1739936579.068522, "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": 1739936579.068628, "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": 1739936579.068733, "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": 1739936579.0688362, "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": 1739936579.0692549, "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": 1739936579.0697348, "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": 1739936579.070158, "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": 1739936579.070327, "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": 1739936579.070508, "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": 1739936579.0707462, "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": 1739936579.07174, "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": 1739936579.075061, "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": 1739936579.07538, "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": 1739936579.0757, "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": 1739936579.0769742, "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": 1739936579.077427, "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": 1739936579.077913, "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": 1739936579.0780501, "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": 1739936579.078182, "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": 1739936579.078331, "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": 1739936579.078485, "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": 1739936579.078611, "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": 1739936579.0793889, "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": 1739936579.080462, "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": 1739936579.081084, "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": 1739936579.081225, "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": 1739936579.081364, "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": 1739936579.0814989, "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": 1739936579.0816379, "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": 1739936579.0817869, "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": 1739936579.0819998, "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": 1739936579.0820868, "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": 1739936579.08217, "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": 1739936579.082689, "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": 1739936579.083782, "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": 1739936579.083934, "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": 1739936579.084615, "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": 1739936579.087688, "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": 1739936579.091607, "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": 1739936579.092781, "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": 1739936579.093079, "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": 1739936579.093208, "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": 1739936579.093371, "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": 1739936579.093662, "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": 1739936579.093757, "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": 1739936579.0938501, "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": 1739936579.0939388, "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": 1739936579.094024, "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": 1739936579.094244, "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": 1739936579.09433, "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": 1739936579.0944178, "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": 1739936579.094769, "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": 1739936579.095128, "supported_languages": null}, "macro.snapchat_ads_source.get_campaign_hourly_report_columns": {"name": "get_campaign_hourly_report_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_campaign_hourly_report_columns.sql", "original_file_path": "macros/get_campaign_hourly_report_columns.sql", "unique_id": "macro.snapchat_ads_source.get_campaign_hourly_report_columns", "macro_sql": "{% macro get_campaign_hourly_report_columns() %}\n\n{% set columns = [\n {\"name\": \"attachment_quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_total_view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"saves\", \"datatype\": dbt.type_int()},\n {\"name\": \"screen_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"shares\", \"datatype\": dbt.type_int()},\n {\"name\": \"spend\", \"datatype\": dbt.type_int()},\n {\"name\": \"swipes\", \"datatype\": dbt.type_int()},\n {\"name\": \"video_views\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"conversion_purchases_value\", \"datatype\": dbt.type_int()}\n] %}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('snapchat_ads__conversion_fields')) }}\n\n{# Doing it this way in case users were bringing in conversion metrics via passthrough columns prior to us adding them by default #}\n{{ snapchat_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('snapchat_ads__campaign_hourly_report_passthrough_metrics'), except_fields=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_int", "macro.dbt.type_string", "macro.dbt.type_timestamp", "macro.fivetran_utils.add_pass_through_columns", "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0973902, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_squad_history_columns": {"name": "get_ad_squad_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_squad_history_columns.sql", "original_file_path": "macros/get_ad_squad_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_squad_history_columns", "macro_sql": "{% macro get_ad_squad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"campaign_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.0980558, "supported_languages": null}, "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns": {"name": "snapchat_ads_add_pass_through_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/snapchat_ads_add_pass_through_columns.sql", "original_file_path": "macros/snapchat_ads_add_pass_through_columns.sql", "unique_id": "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns", "macro_sql": "{% macro snapchat_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": 1739936579.099351, "supported_languages": null}, "macro.snapchat_ads_source.get_creative_history_columns": {"name": "get_creative_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_creative_history_columns.sql", "original_file_path": "macros/get_creative_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_creative_history_columns", "macro_sql": "{% macro get_creative_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"ad_account_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"web_view_url\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.100096, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_hourly_report_columns": {"name": "get_ad_hourly_report_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_hourly_report_columns.sql", "original_file_path": "macros/get_ad_hourly_report_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_hourly_report_columns", "macro_sql": "{% macro get_ad_hourly_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"attachment_quartile_1\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_quartile_2\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_quartile_3\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_total_view_time_millis\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"attachment_view_completion\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"impressions\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"quartile_1\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"quartile_2\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"quartile_3\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"saves\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"screen_time_millis\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"shares\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"spend\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"swipes\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"video_views\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"view_completion\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"view_time_millis\", \"datatype\": dbt.type_numeric()},\n {\"name\": \"conversion_purchases_value\", \"datatype\": dbt.type_int()}\n] %}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('snapchat_ads__conversion_fields')) }}\n\n{# Doing it this way in case users were bringing in conversion metrics via passthrough columns prior to us adding them by default #}\n{{ snapchat_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('snapchat_ads__ad_hourly_passthrough_metrics'), except_fields=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_numeric", "macro.dbt.type_timestamp", "macro.dbt.type_int", "macro.fivetran_utils.add_pass_through_columns", "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.102226, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_squad_hourly_report_columns": {"name": "get_ad_squad_hourly_report_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_squad_hourly_report_columns.sql", "original_file_path": "macros/get_ad_squad_hourly_report_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_squad_hourly_report_columns", "macro_sql": "{% macro get_ad_squad_hourly_report_columns() %}\n\n{% set columns = [\n {\"name\": \"ad_squad_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"attachment_quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_total_view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"attachment_view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"date\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"impressions\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_1\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_2\", \"datatype\": dbt.type_int()},\n {\"name\": \"quartile_3\", \"datatype\": dbt.type_int()},\n {\"name\": \"saves\", \"datatype\": dbt.type_int()},\n {\"name\": \"screen_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"shares\", \"datatype\": dbt.type_int()},\n {\"name\": \"spend\", \"datatype\": dbt.type_int()},\n {\"name\": \"swipes\", \"datatype\": dbt.type_int()},\n {\"name\": \"video_views\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_completion\", \"datatype\": dbt.type_int()},\n {\"name\": \"view_time_millis\", \"datatype\": dbt.type_int()},\n {\"name\": \"conversion_purchases_value\", \"datatype\": dbt.type_int()}\n] %}\n\n{{ fivetran_utils.add_pass_through_columns(columns, var('snapchat_ads__conversion_fields')) }}\n\n{# Doing it this way in case users were bringing in conversion metrics via passthrough columns prior to us adding them by default #}\n{{ snapchat_ads_add_pass_through_columns(base_columns=columns, pass_through_fields=var('snapchat_ads__ad_squad_hourly_passthrough_metrics'), except_fields=(var('snapchat_ads__conversion_fields') + ['conversion_purchases_value'])) }}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_int", "macro.dbt.type_timestamp", "macro.fivetran_utils.add_pass_through_columns", "macro.snapchat_ads_source.snapchat_ads_add_pass_through_columns"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.104466, "supported_languages": null}, "macro.snapchat_ads_source.get_campaign_history_columns": {"name": "get_campaign_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_campaign_history_columns.sql", "original_file_path": "macros/get_campaign_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_campaign_history_columns", "macro_sql": "{% macro get_campaign_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"ad_account_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.1051362, "supported_languages": null}, "macro.snapchat_ads_source.get_creative_url_tag_history_columns": {"name": "get_creative_url_tag_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_creative_url_tag_history_columns.sql", "original_file_path": "macros/get_creative_url_tag_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_creative_url_tag_history_columns", "macro_sql": "{% macro get_creative_url_tag_history_columns() %}\n\n{% set columns = [\n {\"name\": \"creative_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"key\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"value\", \"datatype\": dbt.type_string()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_string", "macro.dbt.type_timestamp"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.105624, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_history_columns": {"name": "get_ad_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_history_columns.sql", "original_file_path": "macros/get_ad_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_history_columns", "macro_sql": "{% macro get_ad_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"ad_squad_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"creative_id\", \"datatype\": dbt.type_string()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.106343, "supported_languages": null}, "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns": {"name": "snapchat_ads_fill_pass_through_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/snapchat_ads_fill_pass_through_columns.sql", "original_file_path": "macros/snapchat_ads_fill_pass_through_columns.sql", "unique_id": "macro.snapchat_ads_source.snapchat_ads_fill_pass_through_columns", "macro_sql": "{% macro snapchat_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": 1739936579.107168, "supported_languages": null}, "macro.snapchat_ads_source.get_ad_account_history_columns": {"name": "get_ad_account_history_columns", "resource_type": "macro", "package_name": "snapchat_ads_source", "path": "macros/get_ad_account_history_columns.sql", "original_file_path": "macros/get_ad_account_history_columns.sql", "unique_id": "macro.snapchat_ads_source.get_ad_account_history_columns", "macro_sql": "{% macro get_ad_account_history_columns() %}\n\n{% set columns = [\n {\"name\": \"_fivetran_synced\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"advertiser\", \"datatype\": dbt.type_string()},\n {\"name\": \"created_at\", \"datatype\": dbt.type_timestamp()},\n {\"name\": \"currency\", \"datatype\": dbt.type_string()},\n {\"name\": \"id\", \"datatype\": dbt.type_string()},\n {\"name\": \"name\", \"datatype\": dbt.type_string()},\n {\"name\": \"timezone\", \"datatype\": dbt.type_string()},\n {\"name\": \"type\", \"datatype\": dbt.type_string()},\n {\"name\": \"updated_at\", \"datatype\": dbt.type_timestamp()}\n] %}\n\n{{ return(columns) }}\n\n{% endmacro %}", "depends_on": {"macros": ["macro.dbt.type_timestamp", "macro.dbt.type_string"]}, "description": "", "meta": {}, "docs": {"show": true, "node_color": null}, "patch_path": null, "arguments": [], "created_at": 1739936579.108055, "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.snapchat_ads_source._fivetran_synced": {"name": "_fivetran_synced", "resource_type": "doc", "package_name": "snapchat_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.snapchat_ads_source._fivetran_synced", "block_contents": "When the record was last synced by Fivetran."}, "doc.snapchat_ads_source.is_most_recent_record": {"name": "is_most_recent_record", "resource_type": "doc", "package_name": "snapchat_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.snapchat_ads_source.is_most_recent_record", "block_contents": "Boolean representing whether a record is the most recent version of that record."}, "doc.snapchat_ads_source.source_relation": {"name": "source_relation", "resource_type": "doc", "package_name": "snapchat_ads_source", "path": "docs.md", "original_file_path": "models/docs.md", "unique_id": "doc.snapchat_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."}}, "exposures": {}, "metrics": {}, "groups": {}, "selectors": {}, "disabled": {"test.snapchat_ads_integration_tests.consistency_url_report": [{"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "consistency_url_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_url_report.sql", "original_file_path": "tests/consistency/consistency_url_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_url_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_url_report"], "alias": "consistency_url_report", "checksum": {"name": "sha256", "checksum": "e933bb17b771a234f4443b74598b21df28b0aea838912de4ffa39fe2c633e748"}, "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": 1739936579.397357, "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(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__url_report\n group by 1\n),\n\ndev as (\n select\n ad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__url_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend,\n prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value\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_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_ad_squad_report": [{"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "consistency_ad_squad_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_ad_squad_report.sql", "original_file_path": "tests/consistency/consistency_ad_squad_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_ad_squad_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_ad_squad_report"], "alias": "consistency_ad_squad_report", "checksum": {"name": "sha256", "checksum": "6e6377a0af353ea65dd718ced763dc4c8a31bc259e6523e2920d8498cc7ad20b"}, "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": 1739936579.4116879, "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_squad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__ad_squad_report\n group by 1\n),\n\ndev as (\n select\n ad_squad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__ad_squad_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_squad_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend,\n prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value\n from prod\n full outer join dev \n on dev.ad_squad_id = prod.ad_squad_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_campaign_report": [{"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "consistency_campaign_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_campaign_report.sql", "original_file_path": "tests/consistency/consistency_campaign_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_campaign_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_campaign_report"], "alias": "consistency_campaign_report", "checksum": {"name": "sha256", "checksum": "2b28d425d81094d9ef14ddfba54e07e04ae5f3d03bf1f799fd7a78c474e61a2c"}, "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": 1739936579.414326, "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(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__campaign_report\n group by 1\n),\n\ndev as (\n select\n campaign_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__campaign_report\n group by 1\n),\n\nfinal as (\n select \n prod.campaign_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend,\n prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value\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_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_account_report": [{"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "consistency_account_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_account_report.sql", "original_file_path": "tests/consistency/consistency_account_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_account_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_account_report"], "alias": "consistency_account_report", "checksum": {"name": "sha256", "checksum": "cfd687b1ea758f8930be213a4df80eaff46fe0924c401894b52c6526fbd56087"}, "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": 1739936579.417609, "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_account_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__account_report\n group by 1\n),\n\ndev as (\n select\n ad_account_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__account_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_account_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend,\n prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value\n from prod\n full outer join dev \n on dev.ad_account_id = prod.ad_account_id\n)\n\nselect *\nfrom final\nwhere\n abs(prod_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.consistency_ads_report": [{"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "consistency_ads_report", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "consistency/consistency_ads_report.sql", "original_file_path": "tests/consistency/consistency_ads_report.sql", "unique_id": "test.snapchat_ads_integration_tests.consistency_ads_report", "fqn": ["snapchat_ads_integration_tests", "consistency", "consistency_ads_report"], "alias": "consistency_ads_report", "checksum": {"name": "sha256", "checksum": "5b462ed3899d12c0bea2b6bb45520a9eb5eea14c497467357626f80447a5cdf5"}, "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": 1739936579.4201589, "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(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__ad_report\n group by 1\n),\n\ndev as (\n select\n ad_id,\n sum(swipes) as swipes, \n sum(impressions) as impressions,\n sum(spend) as spend,\n sum(total_conversions) as total_conversions,\n sum(conversion_purchases_value) as conversion_purchases_value\n from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__ad_report\n group by 1\n),\n\nfinal as (\n select \n prod.ad_id,\n prod.swipes as prod_swipes,\n dev.swipes as dev_swipes,\n prod.impressions as prod_impressions,\n dev.impressions as dev_impressions,\n prod.spend as prod_spend,\n dev.spend as dev_spend,\n prod.total_conversions as prod_total_conversions,\n dev.total_conversions as dev_total_conversions,\n prod.conversion_purchases_value as prod_conversion_purchases_value,\n dev.conversion_purchases_value as dev_conversion_purchases_value\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_swipes - dev_swipes) >= .01\n or abs(prod_impressions - dev_impressions) >= .01\n or abs(prod_spend - dev_spend) >= .01\n or abs(prod_total_conversions - dev_total_conversions) >= .01\n or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01", "language": "sql", "refs": [], "sources": [], "metrics": [], "depends_on": {"macros": [], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.vertical_ad_grain_row_comparison": [{"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "vertical_ad_grain_row_comparison", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "integrity/vertical_ad_grain_row_comparison.sql", "original_file_path": "tests/integrity/vertical_ad_grain_row_comparison.sql", "unique_id": "test.snapchat_ads_integration_tests.vertical_ad_grain_row_comparison", "fqn": ["snapchat_ads_integration_tests", "integrity", "vertical_ad_grain_row_comparison"], "alias": "vertical_ad_grain_row_comparison", "checksum": {"name": "sha256", "checksum": "b766a627db908822687253576710e82dd86b190183fe3def0653204b5f9c9d1a"}, "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": 1739936579.422635, "relation_name": null, "raw_code": "{{ config(\n tags=\"fivetran_validations\",\n enabled=var('fivetran_validation_tests_enabled', false)\n) }}\n\nwith ad_day_source as (\n\n select \n ad_id, \n cast(date_hour as date) as date_day_source\n from {{ ref('stg_snapchat_ads__ad_hourly_report') }}\n {{ dbt_utils.group_by(2) }}\n), \n\nad_day_end as (\n\n select \n ad_id, \n date_day as date_day_end\n from {{ ref('snapchat_ads__ad_report') }}\n\n {{ dbt_utils.group_by(2) }}\n),\n\nfinal as (\n -- test will fail if any rows from source not found in end\n (select * from ad_day_source\n except distinct\n select * from ad_day_end)\n\n union all -- union since we only care if rows are produced\n\n -- test will fail if any rows from end are not found in source\n (select * from ad_day_end\n except distinct\n select * from ad_day_source)\n )\n\nselect *\nfrom final", "language": "sql", "refs": [{"name": "stg_snapchat_ads__ad_hourly_report", "package": null, "version": null}, {"name": "snapchat_ads__ad_report", "package": null, "version": null}], "sources": [], "metrics": [], "depends_on": {"macros": ["macro.dbt_utils.group_by"], "nodes": []}, "compiled_path": null, "contract": {"enforced": false, "alias_types": true, "checksum": null}}], "test.snapchat_ads_integration_tests.horizontal_sum_conversions": [{"database": "postgres", "schema": "snapchat_ads_integration_tests_6_dbt_test__audit", "name": "horizontal_sum_conversions", "resource_type": "test", "package_name": "snapchat_ads_integration_tests", "path": "integrity/horizontal_sum_conversions.sql", "original_file_path": "tests/integrity/horizontal_sum_conversions.sql", "unique_id": "test.snapchat_ads_integration_tests.horizontal_sum_conversions", "fqn": ["snapchat_ads_integration_tests", "integrity", "horizontal_sum_conversions"], "alias": "horizontal_sum_conversions", "checksum": {"name": "sha256", "checksum": "b52f0062e0677940cbcaf156537d194dc15fe77aecbb23b3dbb0652ff7491453"}, "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": 1739936579.426899, "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(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__ad_report') }}\n),\n\naccount_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__account_report') }}\n),\n\nad_squad_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__ad_squad_report') }}\n),\n\ncampaign_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__campaign_report') }}\n),\n\nurl_report as (\n\n select \n sum(conversion_purchases_value) as total_value,\n sum(total_conversions) as total_conversions\n from {{ ref('snapchat_ads__url_report') }}\n)\n\nselect \n 'ad vs account' as comparison,\n ad_report.*\nfrom ad_report\njoin account_report on true\nwhere ad_report.total_value != account_report.total_value\nor ad_report.total_conversions != account_report.total_conversions\n\nunion all \n\nselect \n 'ad vs ad squad' as comparison,\n ad_report.*\nfrom ad_report\njoin ad_squad_report on true\nwhere ad_report.total_value != ad_squad_report.total_value\nor ad_report.total_conversions != ad_squad_report.total_conversions\n\nunion all \n\nselect \n 'ad vs campaign' as comparison,\n ad_report.*\nfrom ad_report\njoin campaign_report on true\nwhere ad_report.total_value != campaign_report.total_value\nor ad_report.total_conversions != campaign_report.total_conversions\n\nunion all \n\nselect \n 'ad vs url' as comparison,\n ad_report.*\nfrom ad_report\njoin url_report on true\nwhere ad_report.total_value != url_report.total_value\nor ad_report.total_conversions != url_report.total_conversions", "language": "sql", "refs": [{"name": "snapchat_ads__ad_report", "package": null, "version": null}, {"name": "snapchat_ads__account_report", "package": null, "version": null}, {"name": "snapchat_ads__ad_squad_report", "package": null, "version": null}, {"name": "snapchat_ads__campaign_report", "package": null, "version": null}, {"name": "snapchat_ads__url_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.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": [], "model.snapchat_ads.snapchat_ads__ad_report": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads.snapchat_ads__url_report": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads.snapchat_ads__account_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads.snapchat_ads__ad_squad_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history", "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads.snapchat_ads__campaign_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_history", "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "model.snapchat_ads.snapchat_ads__creative_history_prep": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history", "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": ["source.snapchat_ads_source.snapchat_ads.creative_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_account_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": ["source.snapchat_ads_source.snapchat_ads.creative_url_tag_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": ["source.snapchat_ads_source.snapchat_ads.campaign_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": ["source.snapchat_ads_source.snapchat_ads.ad_squad_history"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": ["source.snapchat_ads_source.snapchat_ads.campaign_hourly_report"], "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260": ["model.snapchat_ads.snapchat_ads__account_report"], "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b": ["model.snapchat_ads.snapchat_ads__account_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1": ["model.snapchat_ads.snapchat_ads__account_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe": ["model.snapchat_ads.snapchat_ads__ad_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744": ["model.snapchat_ads.snapchat_ads__ad_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.4b3bfcfa06": ["model.snapchat_ads.snapchat_ads__ad_report"], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b": ["model.snapchat_ads.snapchat_ads__campaign_report"], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac": ["model.snapchat_ads.snapchat_ads__campaign_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a": ["model.snapchat_ads.snapchat_ads__campaign_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639": ["model.snapchat_ads.snapchat_ads__ad_squad_report"], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe": ["model.snapchat_ads.snapchat_ads__ad_squad_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4": ["model.snapchat_ads.snapchat_ads__ad_squad_report"], "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.1569c44c37": ["model.snapchat_ads.snapchat_ads__url_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "source.snapchat_ads_source.snapchat_ads.ad_account_history": [], "source.snapchat_ads_source.snapchat_ads.ad_history": [], "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": [], "source.snapchat_ads_source.snapchat_ads.ad_squad_history": [], "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": [], "source.snapchat_ads_source.snapchat_ads.campaign_history": [], "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": [], "source.snapchat_ads_source.snapchat_ads.creative_history": [], "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": []}, "child_map": {"seed.snapchat_ads_integration_tests.snapchat_ad_squad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_squad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_campaign_hourly_report_data": [], "seed.snapchat_ads_integration_tests.snapchat_ad_account_history_data": [], "seed.snapchat_ads_integration_tests.snapchat_creative_url_tag_history_data": [], "model.snapchat_ads.snapchat_ads__ad_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.4b3bfcfa06", "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744", "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe"], "model.snapchat_ads.snapchat_ads__url_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.1569c44c37", "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78", "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de", "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6"], "model.snapchat_ads.snapchat_ads__account_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1", "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b", "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260"], "model.snapchat_ads.snapchat_ads__ad_squad_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4", "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe", "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639"], "model.snapchat_ads.snapchat_ads__campaign_report": ["test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a", "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac", "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b"], "model.snapchat_ads.snapchat_ads__creative_history_prep": ["model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__url_report"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report": ["model.snapchat_ads.snapchat_ads__ad_squad_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__ad_squad_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418", "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380", "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history": ["model.snapchat_ads.snapchat_ads__creative_history_prep", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a", "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__ad_squad_report", "model.snapchat_ads.snapchat_ads__campaign_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824", "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report": ["model.snapchat_ads.snapchat_ads__campaign_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history": ["model.snapchat_ads.snapchat_ads__account_report", "model.snapchat_ads.snapchat_ads__ad_report", "model.snapchat_ads.snapchat_ads__ad_squad_report", "model.snapchat_ads.snapchat_ads__campaign_report", "model.snapchat_ads.snapchat_ads__url_report", "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec", "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0"], "model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history"], "model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history"], "model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report"], "test.snapchat_ads.not_null_snapchat_ads__account_report_date_day.688d7ed260": [], "test.snapchat_ads.not_null_snapchat_ads__account_report_ad_account_id.589c81966b": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__account_report_source_relation__ad_account_id__date_day.654a687cf1": [], "test.snapchat_ads.not_null_snapchat_ads__ad_report_date_day.7c5350c8fe": [], "test.snapchat_ads.not_null_snapchat_ads__ad_report_ad_id.9000850744": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.4b3bfcfa06": [], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_date_day.4e4e31223b": [], "test.snapchat_ads.not_null_snapchat_ads__campaign_report_campaign_id.19fd7135ac": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__campaign_report_source_relation__campaign_id__date_day.557487ad6a": [], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_date_day.39118ca639": [], "test.snapchat_ads.not_null_snapchat_ads__ad_squad_report_ad_squad_id.424c0bbffe": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__ad_squad_report_source_relation__ad_squad_id__date_day.b1a26a5bb4": [], "test.snapchat_ads.not_null_snapchat_ads__url_report_date_day.bcbe87a7f6": [], "test.snapchat_ads.not_null_snapchat_ads__url_report_ad_id.ecbdfc0d78": [], "test.snapchat_ads.not_null_snapchat_ads__url_report_base_url.15676dc1de": [], "test.snapchat_ads.dbt_utils_unique_combination_of_columns_snapchat_ads__url_report_source_relation__ad_id__ad_squad_id__campaign_id__date_day.1569c44c37": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history__fivetran_synced.2d5dd77824": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_account_history_ad_account_id.426d71d605": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_account_history_source_relation__ad_account_id___fivetran_synced.b8a4da92d1": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history__fivetran_synced.1607c70fda": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_history_ad_id.e9d367fd15": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_history_source_relation__ad_id___fivetran_synced.630e3ffee4": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_ad_id.7e763de19d": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_hourly_report_date_hour.666cda1cd7": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_hourly_report_source_relation__ad_id__date_hour.f2d4b9252f": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history__fivetran_synced.7ed7d105ae": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_history_ad_squad_id.71c7122278": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_history_source_relation__ad_squad_id___fivetran_synced.5d97ae5ee3": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_ad_squad_id.ab16aa72c9": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__ad_squad_hourly_report_date_hour.6f0b63a9cb": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__ad_squad_hourly_report_source_relation__ad_squad_id__date_hour.25afb4f9ae": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history__fivetran_synced.55bc48b3ec": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_history_campaign_id.f74a0fb8c0": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_history_source_relation__campaign_id___fivetran_synced.e003c1a660": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_campaign_id.f255c38a3e": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__campaign_hourly_report_date_hour.0bc4218ac8": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__campaign_hourly_report_source_relation__campaign_id__date_hour.3998b6bf9d": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history__fivetran_synced.b9c95b4380": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_history_creative_id.09c83690f4": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_history_source_relation__creative_id___fivetran_synced.1d4efdd418": [], "test.snapchat_ads_source.not_null_stg_snapchat_ads__creative_url_tag_history_creative_id.7ff6bb9c1b": [], "test.snapchat_ads_source.dbt_utils_unique_combination_of_columns_stg_snapchat_ads__creative_url_tag_history_source_relation__creative_id__param_key__updated_at.6ed98c175a": [], "source.snapchat_ads_source.snapchat_ads.ad_account_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_account_history_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_history_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_hourly_report_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_squad_history": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_history_tmp"], "source.snapchat_ads_source.snapchat_ads.ad_squad_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__ad_squad_hourly_report_tmp"], "source.snapchat_ads_source.snapchat_ads.campaign_history": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_history_tmp"], "source.snapchat_ads_source.snapchat_ads.campaign_hourly_report": ["model.snapchat_ads_source.stg_snapchat_ads__campaign_hourly_report_tmp"], "source.snapchat_ads_source.snapchat_ads.creative_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_history_tmp"], "source.snapchat_ads_source.snapchat_ads.creative_url_tag_history": ["model.snapchat_ads_source.stg_snapchat_ads__creative_url_tag_history_tmp"]}, "group_map": {}, "saved_queries": {}, "semantic_models": {}, "unit_tests": {}} \ No newline at end of file diff --git a/integration_tests/dbt_project.yml b/integration_tests/dbt_project.yml index 512f572..a1ee893 100644 --- a/integration_tests/dbt_project.yml +++ b/integration_tests/dbt_project.yml @@ -1,9 +1,9 @@ name: 'snapchat_ads_integration_tests' -version: '0.7.0' +version: '0.8.0' profile: 'integration_tests' config-version: 2 -vars: +vars: snapchat_ads_source: snapchat_ads_schema: snapchat_ads_integration_tests_6 snapchat_ads_ad_account_history_identifier: "snapchat_ad_account_history_data" diff --git a/integration_tests/tests/consistency/consistency_account_report.sql b/integration_tests/tests/consistency/consistency_account_report.sql index a05b9d2..37fb529 100644 --- a/integration_tests/tests/consistency/consistency_account_report.sql +++ b/integration_tests/tests/consistency/consistency_account_report.sql @@ -8,9 +8,9 @@ with prod as ( ad_account_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__account_report group by 1 ), @@ -20,9 +20,9 @@ dev as ( ad_account_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__account_report group by 1 ), @@ -35,11 +35,11 @@ final as ( prod.impressions as prod_impressions, dev.impressions as dev_impressions, prod.spend as prod_spend, - dev.spend as dev_spend - {# prod.total_conversions as prod_total_conversions, + dev.spend as dev_spend, + prod.total_conversions as prod_total_conversions, dev.total_conversions as dev_total_conversions, prod.conversion_purchases_value as prod_conversion_purchases_value, - dev.conversion_purchases_value as dev_conversion_purchases_value #} + dev.conversion_purchases_value as dev_conversion_purchases_value from prod full outer join dev on dev.ad_account_id = prod.ad_account_id @@ -51,5 +51,5 @@ where abs(prod_swipes - dev_swipes) >= .01 or abs(prod_impressions - dev_impressions) >= .01 or abs(prod_spend - dev_spend) >= .01 - {# or abs(prod_total_conversions - dev_total_conversions) >= .01 - or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #} \ No newline at end of file + or abs(prod_total_conversions - dev_total_conversions) >= .01 + or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 \ No newline at end of file diff --git a/integration_tests/tests/consistency/consistency_ad_squad_report.sql b/integration_tests/tests/consistency/consistency_ad_squad_report.sql index b822235..e64e5ae 100644 --- a/integration_tests/tests/consistency/consistency_ad_squad_report.sql +++ b/integration_tests/tests/consistency/consistency_ad_squad_report.sql @@ -8,9 +8,9 @@ with prod as ( ad_squad_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__ad_squad_report group by 1 ), @@ -20,9 +20,9 @@ dev as ( ad_squad_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__ad_squad_report group by 1 ), @@ -35,11 +35,11 @@ final as ( prod.impressions as prod_impressions, dev.impressions as dev_impressions, prod.spend as prod_spend, - dev.spend as dev_spend - {# prod.total_conversions as prod_total_conversions, + dev.spend as dev_spend, + prod.total_conversions as prod_total_conversions, dev.total_conversions as dev_total_conversions, prod.conversion_purchases_value as prod_conversion_purchases_value, - dev.conversion_purchases_value as dev_conversion_purchases_value #} + dev.conversion_purchases_value as dev_conversion_purchases_value from prod full outer join dev on dev.ad_squad_id = prod.ad_squad_id @@ -51,5 +51,5 @@ where abs(prod_swipes - dev_swipes) >= .01 or abs(prod_impressions - dev_impressions) >= .01 or abs(prod_spend - dev_spend) >= .01 - {# or abs(prod_total_conversions - dev_total_conversions) >= .01 - or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #} \ No newline at end of file + or abs(prod_total_conversions - dev_total_conversions) >= .01 + or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 \ No newline at end of file diff --git a/integration_tests/tests/consistency/consistency_ads_report.sql b/integration_tests/tests/consistency/consistency_ads_report.sql index 65d427b..906bc8f 100644 --- a/integration_tests/tests/consistency/consistency_ads_report.sql +++ b/integration_tests/tests/consistency/consistency_ads_report.sql @@ -8,9 +8,9 @@ with prod as ( ad_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__ad_report group by 1 ), @@ -20,9 +20,9 @@ dev as ( ad_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__ad_report group by 1 ), @@ -35,11 +35,11 @@ final as ( prod.impressions as prod_impressions, dev.impressions as dev_impressions, prod.spend as prod_spend, - dev.spend as dev_spend - {# prod.total_conversions as prod_total_conversions, + dev.spend as dev_spend, + prod.total_conversions as prod_total_conversions, dev.total_conversions as dev_total_conversions, prod.conversion_purchases_value as prod_conversion_purchases_value, - dev.conversion_purchases_value as dev_conversion_purchases_value #} + dev.conversion_purchases_value as dev_conversion_purchases_value from prod full outer join dev on dev.ad_id = prod.ad_id @@ -51,5 +51,5 @@ where abs(prod_swipes - dev_swipes) >= .01 or abs(prod_impressions - dev_impressions) >= .01 or abs(prod_spend - dev_spend) >= .01 - {# or abs(prod_total_conversions - dev_total_conversions) >= .01 - or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #} \ No newline at end of file + or abs(prod_total_conversions - dev_total_conversions) >= .01 + or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 \ No newline at end of file diff --git a/integration_tests/tests/consistency/consistency_campaign_report.sql b/integration_tests/tests/consistency/consistency_campaign_report.sql index 1fbb3c0..93972c7 100644 --- a/integration_tests/tests/consistency/consistency_campaign_report.sql +++ b/integration_tests/tests/consistency/consistency_campaign_report.sql @@ -8,9 +8,9 @@ with prod as ( campaign_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__campaign_report group by 1 ), @@ -20,9 +20,9 @@ dev as ( campaign_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__campaign_report group by 1 ), @@ -35,11 +35,11 @@ final as ( prod.impressions as prod_impressions, dev.impressions as dev_impressions, prod.spend as prod_spend, - dev.spend as dev_spend - {# prod.total_conversions as prod_total_conversions, + dev.spend as dev_spend, + prod.total_conversions as prod_total_conversions, dev.total_conversions as dev_total_conversions, prod.conversion_purchases_value as prod_conversion_purchases_value, - dev.conversion_purchases_value as dev_conversion_purchases_value #} + dev.conversion_purchases_value as dev_conversion_purchases_value from prod full outer join dev on dev.campaign_id = prod.campaign_id @@ -51,5 +51,5 @@ where abs(prod_swipes - dev_swipes) >= .01 or abs(prod_impressions - dev_impressions) >= .01 or abs(prod_spend - dev_spend) >= .01 - {# or abs(prod_total_conversions - dev_total_conversions) >= .01 - or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #} \ No newline at end of file + or abs(prod_total_conversions - dev_total_conversions) >= .01 + or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 \ No newline at end of file diff --git a/integration_tests/tests/consistency/consistency_url_report.sql b/integration_tests/tests/consistency/consistency_url_report.sql index f7562ca..43f0cb2 100644 --- a/integration_tests/tests/consistency/consistency_url_report.sql +++ b/integration_tests/tests/consistency/consistency_url_report.sql @@ -8,9 +8,9 @@ with prod as ( ad_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_prod.snapchat_ads__url_report group by 1 ), @@ -20,9 +20,9 @@ dev as ( ad_id, sum(swipes) as swipes, sum(impressions) as impressions, - sum(spend) as spend - {# sum(total_conversions) as total_conversions, - sum(conversion_purchases_value) as conversion_purchases_value #} + sum(spend) as spend, + sum(total_conversions) as total_conversions, + sum(conversion_purchases_value) as conversion_purchases_value from {{ target.schema }}_snapchat_ads_dev.snapchat_ads__url_report group by 1 ), @@ -35,11 +35,11 @@ final as ( prod.impressions as prod_impressions, dev.impressions as dev_impressions, prod.spend as prod_spend, - dev.spend as dev_spend - {# prod.total_conversions as prod_total_conversions, + dev.spend as dev_spend, + prod.total_conversions as prod_total_conversions, dev.total_conversions as dev_total_conversions, prod.conversion_purchases_value as prod_conversion_purchases_value, - dev.conversion_purchases_value as dev_conversion_purchases_value #} + dev.conversion_purchases_value as dev_conversion_purchases_value from prod full outer join dev on dev.ad_id = prod.ad_id @@ -51,5 +51,5 @@ where abs(prod_swipes - dev_swipes) >= .01 or abs(prod_impressions - dev_impressions) >= .01 or abs(prod_spend - dev_spend) >= .01 - {# or abs(prod_total_conversions - dev_total_conversions) >= .01 - or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 #} \ No newline at end of file + or abs(prod_total_conversions - dev_total_conversions) >= .01 + or abs(prod_conversion_purchases_value - dev_conversion_purchases_value) >= .01 \ No newline at end of file diff --git a/integration_tests/tests/integrity/vertical_ad_grain_row_comparison.sql b/integration_tests/tests/integrity/vertical_ad_grain_row_comparison.sql new file mode 100644 index 0000000..a754a1f --- /dev/null +++ b/integration_tests/tests/integrity/vertical_ad_grain_row_comparison.sql @@ -0,0 +1,40 @@ +{{ config( + tags="fivetran_validations", + enabled=var('fivetran_validation_tests_enabled', false) +) }} + +with ad_day_source as ( + + select + ad_id, + cast(date_hour as date) as date_day_source + from {{ ref('stg_snapchat_ads__ad_hourly_report') }} + {{ dbt_utils.group_by(2) }} +), + +ad_day_end as ( + + select + ad_id, + date_day as date_day_end + from {{ ref('snapchat_ads__ad_report') }} + + {{ dbt_utils.group_by(2) }} +), + +final as ( + -- test will fail if any rows from source not found in end + (select * from ad_day_source + except distinct + select * from ad_day_end) + + union all -- union since we only care if rows are produced + + -- test will fail if any rows from end are not found in source + (select * from ad_day_end + except distinct + select * from ad_day_source) + ) + +select * +from final \ No newline at end of file diff --git a/models/snapchat.yml b/models/snapchat.yml index 1cf501c..15d8810 100644 --- a/models/snapchat.yml +++ b/models/snapchat.yml @@ -46,6 +46,8 @@ models: combination_of_columns: - source_relation - ad_id + - ad_squad_id + - campaign_id - date_day columns: - name: source_relation @@ -64,6 +66,14 @@ models: description: The name of the account in Snapchat. - name: ad_name description: The name of the ad in Snapchat. + - name: ad_squad_id + description: The ID of the ad squad in Snapchat. + - name: ad_squad_name + description: The name of the ad squad in Snapchat. + - name: campaign_id + description: The ID of the campaign in Snapchat. + - name: campaign_name + description: The name of the campaign in Snapchat. - name: currency description: The current used by the account in Snapchat. - name: spend @@ -171,6 +181,8 @@ models: combination_of_columns: - source_relation - ad_id + - ad_squad_id + - campaign_id - date_day config: # Below is so we don't run this test if the user has allowed urls to have null entries diff --git a/models/snapchat_ads__ad_report.sql b/models/snapchat_ads__ad_report.sql index 0fee665..e2bbe4d 100644 --- a/models/snapchat_ads__ad_report.sql +++ b/models/snapchat_ads__ad_report.sql @@ -27,6 +27,19 @@ with ad_hourly as ( from {{ var('ad_history') }} where is_most_recent_record = true +), ad_squads as ( + + select * + from {{ var('ad_squad_history') }} + where is_most_recent_record = true + +), campaigns as ( + + select * + from {{ var('campaign_history') }} + where is_most_recent_record = true + + ), aggregated as ( select @@ -36,6 +49,10 @@ with ad_hourly as ( account.ad_account_name, ad_hourly.ad_id, ads.ad_name, + ad_squads.ad_squad_id, + ad_squads.ad_squad_name, + campaigns.campaign_id, + campaigns.campaign_name, account.currency, sum(ad_hourly.swipes) as swipes, sum(ad_hourly.impressions) as impressions, @@ -57,8 +74,14 @@ with ad_hourly as ( left join account on creatives.ad_account_id = account.ad_account_id and creatives.source_relation = account.source_relation + left join ad_squads + on ads.ad_squad_id = ad_squads.ad_squad_id + and ads.source_relation = ad_squads.source_relation + left join campaigns + on ad_squads.campaign_id = campaigns.campaign_id + and ad_squads.source_relation = campaigns.source_relation - {{ dbt_utils.group_by(7) }} + {{ dbt_utils.group_by(11) }} )