{"metadata":{"dbt_schema_version":"https://schemas.getdbt.com/dbt/manifest/v12.json","dbt_version":"1.8.9","generated_at":"1970-01-01T00:00:00.000000Z","invocation_id":"00000000-0000-0000-0000-000000000000","env":{},"project_name":"pingcap_lakehouse","project_id":"d5f2076a9f489c26739d94c5ef6f1122","user_id":"00000000-0000-0000-0000-000000000000","send_anonymous_usage_stats":true,"adapter_type":"databend"},"nodes":{"model.pingcap_lakehouse.stg_data_foundation_finance_salesforce_account":{"database":null,"schema":"transform_dbt_stg","name":"stg_data_foundation_finance_salesforce_account","resource_type":"model","package_name":"pingcap_lakehouse","path":"data_foundation_finance/models/staging/stg_data_foundation_finance_salesforce_account.sql","original_file_path":"sources/data_foundation_finance/models/staging/stg_data_foundation_finance_salesforce_account.sql","unique_id":"model.pingcap_lakehouse.stg_data_foundation_finance_salesforce_account","fqn":["pingcap_lakehouse","data_foundation_finance","models","staging","stg_data_foundation_finance_salesforce_account"],"alias":"stg_data_foundation_finance_salesforce_account","checksum":{"name":"sha256","checksum":"ab5511d27633c5780968fb3ba1bd9ec49c33d16a874182946ba0e07ceda6fe21"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_data_foundation_finance_salesforce_account","raw_code":"{{ table_config('view') }}\n\n-- Source-faithful finance data hub account mirror. The key that aligns with NexusCRM Account is\n-- the account number (NexusCRM Account_ID__c), not Salesforce Id; sf_id is not populated here.\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('data_foundation_finance', 'salesforce_account'), pk='id') }}\n)\n\nSELECT\n    id,\n    account_id AS account_number,\n    name AS account_name,\n    NULLIF(region, '') AS region,\n    create_time AS created_timestamp,\n    update_time AS updated_timestamp,\n    (is_deleted = 1) AS is_deleted\nFROM latest","language":"sql","refs":[],"sources":[["data_foundation_finance","salesforce_account"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.data_foundation_finance.salesforce_account"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_cloud_revenue":{"database":null,"schema":"transform_dbt_stg","name":"stg_cloud_revenue","resource_type":"model","package_name":"pingcap_lakehouse","path":"data_foundation_finance/models/staging/stg_cloud_revenue.sql","original_file_path":"sources/data_foundation_finance/models/staging/stg_cloud_revenue.sql","unique_id":"model.pingcap_lakehouse.stg_cloud_revenue","fqn":["pingcap_lakehouse","data_foundation_finance","models","staging","stg_cloud_revenue"],"alias":"stg_cloud_revenue","checksum":{"name":"sha256","checksum":"118eb00167a21d6f9dd65ae9e134d1b54e91ca07409a92891747619cfc2a739d"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_cloud_revenue","raw_code":"{{ table_config('view') }}\n\n-- Cloud rev-rec, sourced from the data_foundation_finance hub's monthly_cloud_revrec ledger.\n-- This managed, monthly-refreshed source carries pre-adjust amount, adjusted amount, credit, and\n-- per-tier breakdowns for cloud revenue. It is intentionally cloud-scoped; strict historical\n-- Revenue__c parity for salesforce_order_daily_view comes from the salesforce_raw snapshot (#16).\n--\n-- Two layers of collapsing:\n--   1. latest_snapshot_manifest -> the latest LOAD snapshot per raw row (manifest path, ADR 0016/0018).\n--   2. Within that snapshot, monthly_cloud_revrec keeps estimate AND actual restatements of the same\n--      (revrec_number, bill_month) as separate rows. We keep the ACTUAL (estimate <> 1), latest `date`.\n--      After this, the grain is one row per (revrec_number, bill_month) -- and in practice one row per\n--      revrec (4486/4487 revrecs have a single bill_month), matching the Revenue__c grain so the\n--      downstream accumulated_* sums stay 1:1 with BigQuery.\n--\n-- Amount columns are VARCHAR in raw (empty string = absent) -> try_cast(nullif(...)) to DOUBLE, which\n-- matches the BigQuery float grain. `order` is the Salesforce Order Id (joins to salesforce_orders\n-- on order_id, same key the prior revenue path used). Amounts are source/native values; most rows\n-- are USD passthrough and the rare JPY rows carry a non-1 exchange_rate_to_use for USD projection.\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('data_foundation_finance', 'monthly_cloud_revrec'), pk='id') }}\n),\ndeduped AS (\n    SELECT *\n    FROM (\n        SELECT *,\n            ROW_NUMBER() OVER (\n                PARTITION BY revrec_number, bill_month\n                ORDER BY CASE WHEN estimate = 1 THEN 1 ELSE 0 END ASC,\n                         CAST(date AS date) DESC\n            ) AS _actual_rn\n        FROM latest\n    )\n    WHERE _actual_rn = 1\n)\nSELECT\n    revrec_id                                                   AS revenue_id,\n    revrec_number                                               AS revenue_name,\n    \"order\"                                                     AS order_id,\n    order_number                                                AS order_number,\n    account_number                                              AS account_number,\n    account_name                                                AS account_name,\n    account_region                                              AS account_region,\n    account_surrogate_key                                       AS account_surrogate_key,\n    created_at                                                  AS created_timestamp,\n    CAST(date AS date)                                          AS revenue_date,\n    bill_month                                                  AS bill_month,\n    status                                                      AS revenue_status,\n    currency_iso_code                                           AS currency_iso_code,\n    payment_type                                                AS payment_type,\n    -- adjusted revenue (= SF Revenue__c amount_c); pre-adjust (= amount_before_adjust_to_use_c); credit.\n    try_cast(nullif(adjusted_revenue_amount, '') AS double)     AS amount,\n    try_cast(nullif(revenue_amount, '') AS double)              AS amount_before_adjust_raw,\n    try_cast(nullif(credit_amount, '') AS double)               AS credit_amount,\n    try_cast(nullif(shortfall_amount, '') AS double)            AS shortfall_amount,\n    -- Most monthly_cloud_revrec rows are USD with rate 1; the rare JPY rows carry a real rate.\n    -- Empty/zero -> 1 (USD passthrough), never NULL (would void the USD projection downstream).\n    COALESCE(NULLIF(try_cast(nullif(exchange_rate_to_use, '') AS double), 0), 1) AS exchange_rate_to_use,\n    -- adjusted per-tier breakdown (cloud only).\n    try_cast(nullif(adjusted_starter_amount, '') AS double)     AS amount_starter,\n    try_cast(nullif(adjusted_dedicated_amount, '') AS double)   AS amount_dedicated,\n    try_cast(nullif(adjusted_support_amount, '') AS double)     AS amount_support,\n    try_cast(nullif(adjusted_essential_amount, '') AS double)   AS amount_essential,\n    try_cast(nullif(adjusted_premium_amount, '') AS double)     AS amount_premium,\n    try_cast(nullif(adjusted_byoc_amount, '') AS double)        AS amount_byoc,\n    try_cast(nullif(adjusted_lake_amount, '') AS double)        AS amount_lake\nFROM deduped","language":"sql","refs":[],"sources":[["data_foundation_finance","monthly_cloud_revrec"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.data_foundation_finance.monthly_cloud_revrec"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_dates":{"database":null,"schema":"transform_dbt_stg","name":"stg_dates","resource_type":"model","package_name":"pingcap_lakehouse","path":"core/models/staging/stg_dates.sql","original_file_path":"sources/core/models/staging/stg_dates.sql","unique_id":"model.pingcap_lakehouse.stg_dates","fqn":["pingcap_lakehouse","core","models","staging","stg_dates"],"alias":"stg_dates","checksum":{"name":"sha256","checksum":"47b8663bdbcbcefab1bda9116511763685238984daab22f0f79e4e59c80fa058"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":"","columns":{},"meta":{},"group":null,"docs":{"show":true,"node_color":null},"patch_path":null,"build_path":null,"unrendered_config":{"materialized":"table","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_dates","raw_code":"{{ table_config('table') }}\n\n-- Databend-native date dimension, replacing the BigQuery project's dbt_date.get_date_dimension()\n-- (the dbt_date package does not dispatch on Databend). Downstream (date_spine) only needs\n-- date_day, month_of_year, year_number, so this is intentionally minimal. numbers(N) generates one\n-- row per day from 2015-01-01 (~16 years, covering the daily view's rolling 90-day window).\nSELECT\n    d AS date_day,\n    month(d) AS month_of_year,\n    year(d) AS year_number\nFROM (\n    SELECT to_date('2015-01-01') + number AS d\n    FROM numbers(6000)\n)","language":"sql","refs":[],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":[]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_metadb_billing2_invoices":{"database":null,"schema":"transform_dbt_stg","name":"stg_metadb_billing2_invoices","resource_type":"model","package_name":"pingcap_lakehouse","path":"metadb/models/staging/stg_metadb_billing2_invoices.sql","original_file_path":"sources/metadb/models/staging/stg_metadb_billing2_invoices.sql","unique_id":"model.pingcap_lakehouse.stg_metadb_billing2_invoices","fqn":["pingcap_lakehouse","metadb","models","staging","stg_metadb_billing2_invoices"],"alias":"stg_metadb_billing2_invoices","checksum":{"name":"sha256","checksum":"8abf8a82b671bb3e3e192b25d3e5d5f715b825d5d1f7fafbcb1d81879ee8562f"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_metadb_billing2_invoices","raw_code":"{{ table_config('view') }}\n\n-- Latest snapshot per invoice from the external-incremental raw table. tenant_id is DECIMAL in\n-- raw; cast to VARCHAR to match the string tenant_id convention used across the warehouse.\nWITH latest AS (\n    {{ latest_snapshot_external(source('metadb', 'billing2_invoices'), pk='id') }}\n)\nSELECT\n    id                      AS invoice_id,\n    created_at              AS created_at,\n    updated_at              AS updated_at,\n    deleted_at              AS deleted_at,\n    CAST(tenant_id AS VARCHAR) AS tenant_id,\n    status                  AS status,\n    type                    AS invoice_type,\n    invoice_date            AS invoice_date,\n    cost_price              AS cost_price,\n    raw_price               AS raw_price,\n    sent_date               AS sent_date,\n    payment_method_id       AS payment_method_id,\n    binded_billing_config_id AS binded_billing_config_id,\n    payment_meta            AS payment_meta,\n    channel_loss            AS channel_loss,\n    payment_code            AS payment_code,\n    parent_invoice_id       AS parent_invoice_id,\n    payment_type            AS payment_type\nFROM latest","language":"sql","refs":[],"sources":[["metadb","billing2_invoices"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_external"],"nodes":["source.pingcap_lakehouse.metadb.billing2_invoices"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec":{"database":null,"schema":"transform_dbt_stg","name":"stg_google_sheets_org_monthly_bill_confirmation_for_revrec","resource_type":"model","package_name":"pingcap_lakehouse","path":"googlesheets/models/staging/stg_google_sheets_org_monthly_bill_confirmation_for_revrec.sql","original_file_path":"sources/googlesheets/models/staging/stg_google_sheets_org_monthly_bill_confirmation_for_revrec.sql","unique_id":"model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec","fqn":["pingcap_lakehouse","googlesheets","models","staging","stg_google_sheets_org_monthly_bill_confirmation_for_revrec"],"alias":"stg_google_sheets_org_monthly_bill_confirmation_for_revrec","checksum":{"name":"sha256","checksum":"d539192635f7f9423f30fb99cc49c5c4c7bc2d9ca4287eef0edede486cd6adf2"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_google_sheets_org_monthly_bill_confirmation_for_revrec","raw_code":"{{ table_config('view') }}\n\n-- Ported from the BigQuery project. Source switched from the google_sheets BigQuery dataset to a\n-- committed seed (ref). FLOAT64 -> DOUBLE; tenant_id cast to VARCHAR to match the warehouse's\n-- string tenant_id convention. The *_serverless amounts were hardcoded 0.0 in BQ; preserved.\nSELECT\n    try_cast(NULLIF(end_date, '') AS DATE)                          AS billing_end_date,\n    CAST(tenant_id AS VARCHAR)                                      AS tenant_id,\n    stripe_invoice_paid                                             AS stripe_invoice_paid,\n    CAST(0.0 AS DOUBLE)                                             AS raw_program_credit_amount_serverless,\n    try_cast(NULLIF(segment_c_end_date, '') AS DATE)                 AS segment_c_end_date,\n    try_cast(NULLIF(raw_redeem_credit_amount_support, '') AS DOUBLE) AS raw_redeem_credit_amount_support,\n    stripe_amount                                                   AS stripe_amount,\n    stripe_tax_rate                                                 AS stripe_tax_rate,\n    stripe_invoice                                                  AS stripe_invoice,\n    try_cast(NULLIF(segment_b_start_date, '') AS DATE)               AS segment_b_start_date,\n    stripe_invoice_paid_date                                        AS stripe_invoice_paid_date,\n    CAST(invoice_amount AS DOUBLE)                                  AS invoice_amount,\n    try_cast(NULLIF(marketplace_amount, '') AS DOUBLE)               AS marketplace_amount,\n    try_cast(NULLIF(_fivetran_synced, '') AS TIMESTAMP)              AS _fivetran_synced,\n    try_cast(NULLIF(segment_a_start_date, '') AS DATE)               AS segment_a_start_date,\n    try_cast(NULLIF(raw_redeem_credit_amount_dedicated, '') AS DOUBLE) AS raw_redeem_credit_amount_dedicated,\n    bill_month                                                      AS billing_month,\n    try_cast(NULLIF(raw_program_credit_amount_dedicated, '') AS DOUBLE) AS raw_program_credit_amount_dedicated,\n    stripe_invoice_number                                           AS stripe_invoice_number,\n    try_cast(NULLIF(start_date, '') AS DATE)                         AS billing_start_date,\n    try_cast(NULLIF(number_of_segments, '') AS INT)                  AS number_of_segments,\n    try_cast(NULLIF(wire_transfer_amount, '') AS DOUBLE)             AS wire_transfer_amount,\n    CAST(0.0 AS DOUBLE)                                             AS raw_redeem_credit_amount_serverless,\n    try_cast(NULLIF(segment_a_end_date, '') AS DATE)                 AS segment_a_end_date,\n    try_cast(NULLIF(segment_a_amount, '') AS DOUBLE)                 AS segment_a_amount,\n    try_cast(NULLIF(segment_b_amount, '') AS DOUBLE)                 AS segment_b_amount,\n    try_cast(NULLIF(segment_c_amount, '') AS DOUBLE)                 AS segment_c_amount,\n    try_cast(NULLIF(raw_support_amount, '') AS DOUBLE)               AS raw_support_amount,\n    CAST(0.0 AS DOUBLE)                                             AS raw_serverless_amount,\n    stripe_invoice_finalized_date                                   AS stripe_invoice_finalized_date,\n    try_cast(NULLIF(segment_b_end_date, '') AS DATE)                 AS segment_b_end_date,\n    CAST(0.0 AS DOUBLE)                                             AS raw_customer_success_credit_amount_serverless,\n    CAST(total_amount AS DOUBLE)                                    AS total_amount,\n    try_cast(NULLIF(raw_customer_success_credit_amount_support, '') AS DOUBLE) AS raw_customer_success_credit_amount_support,\n    try_cast(NULLIF(_row, '') AS INT)                                AS _row,\n    try_cast(NULLIF(raw_program_credit_amount_support, '') AS DOUBLE) AS raw_program_credit_amount_support,\n    try_cast(NULLIF(raw_customer_success_credit_amount_dedicated, '') AS DOUBLE) AS raw_customer_success_credit_amount_dedicated,\n    try_cast(NULLIF(raw_dedicated_amount, '') AS DOUBLE)             AS raw_dedicated_amount,\n    try_cast(NULLIF(segment_c_start_date, '') AS DATE)               AS segment_c_start_date,\n    stripe_amount_including_tax                                     AS stripe_amount_including_tax,\n    try_cast(NULLIF(raw_redeem_credit_amount_starter, '') AS DOUBLE) AS raw_redeem_credit_amount_starter,\n    try_cast(NULLIF(raw_starter_amount, '') AS DOUBLE)               AS raw_starter_amount,\n    try_cast(NULLIF(raw_program_credit_amount_starter, '') AS DOUBLE) AS raw_program_credit_amount_starter,\n    try_cast(NULLIF(raw_customer_success_credit_amount_starter, '') AS DOUBLE) AS raw_customer_success_credit_amount_starter,\n    COALESCE(CAST(raw_customer_success_credit_amount_essential AS DOUBLE), 0.0) AS raw_customer_success_credit_amount_essential,\n    COALESCE(CAST(raw_essential_amount AS DOUBLE), 0.0)             AS raw_essential_amount,\n    COALESCE(CAST(raw_redeem_credit_amount_essential AS DOUBLE), 0.0) AS raw_redeem_credit_amount_essential,\n    COALESCE(CAST(raw_program_credit_amount_essential AS DOUBLE), 0.0) AS raw_program_credit_amount_essential,\n    COALESCE(CAST(raw_premium_amount AS DOUBLE), 0.0)              AS raw_premium_amount,\n    COALESCE(CAST(raw_redeem_credit_amount_premium AS DOUBLE), 0.0) AS raw_redeem_credit_amount_premium,\n    COALESCE(CAST(raw_program_credit_amount_premium AS DOUBLE), 0.0) AS raw_program_credit_amount_premium,\n    COALESCE(CAST(raw_customer_success_credit_amount_premium AS DOUBLE), 0.0) AS raw_customer_success_credit_amount_premium,\n    payment_type                                                    AS payment_type,\n    try_cast(NULLIF(actual_revenue_recognition_date, '') AS DATE)    AS actual_revenue_recognition_date\nFROM {{ ref('org_monthly_bill_confirmation_for_revrec') }}","language":"sql","refs":[{"name":"org_monthly_bill_confirmation_for_revrec","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["seed.pingcap_lakehouse.org_monthly_bill_confirmation_for_revrec"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_salesforce_opportunity":{"database":null,"schema":"transform_dbt_stg","name":"stg_salesforce_opportunity","resource_type":"model","package_name":"pingcap_lakehouse","path":"nexuscrm/models/staging/stg_salesforce_opportunity.sql","original_file_path":"sources/nexuscrm/models/staging/stg_salesforce_opportunity.sql","unique_id":"model.pingcap_lakehouse.stg_salesforce_opportunity","fqn":["pingcap_lakehouse","nexuscrm","models","staging","stg_salesforce_opportunity"],"alias":"stg_salesforce_opportunity","checksum":{"name":"sha256","checksum":"a74a7a7d035620544e4d0f2e5b25c22fc9ec05ee46b61150aace5798f9508e44"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_salesforce_opportunity","raw_code":"{{ table_config('view') }}\n\n-- Source switched from BigQuery Fivetran salesforce.opportunity to nexuscrm.Opportunity. Minimal\n-- projection: the order_daily_view chain only needs the currency + exchange rate from opportunities\n-- (the full opportunity enrichment is intentionally not ported — see ADR 0019 / salesforce_opportunities).\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('nexuscrm', 'opportunity'), pk='\"Id\"') }}\n)\nSELECT\n    \"Id\"              AS id,\n    \"CurrencyIsoCode\" AS currency_iso_code,\n    \"Rate__c\"         AS rate_c,\n    (\"IsDeleted\" = 1) AS is_deleted\nFROM latest","language":"sql","refs":[],"sources":[["nexuscrm","opportunity"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.nexuscrm.opportunity"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_salesforce_org":{"database":null,"schema":"transform_dbt_stg","name":"stg_salesforce_org","resource_type":"model","package_name":"pingcap_lakehouse","path":"nexuscrm/models/staging/stg_salesforce_org.sql","original_file_path":"sources/nexuscrm/models/staging/stg_salesforce_org.sql","unique_id":"model.pingcap_lakehouse.stg_salesforce_org","fqn":["pingcap_lakehouse","nexuscrm","models","staging","stg_salesforce_org"],"alias":"stg_salesforce_org","checksum":{"name":"sha256","checksum":"cbeca31b2f989fc12f5e8d34da6d89dbf5a8a3bab72b86bf3c7493b45b046b02"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_salesforce_org","raw_code":"{{ table_config('view') }}\n\n-- Source switched from BigQuery Fivetran salesforce.org to nexuscrm.Org__c.\n-- Column names are remapped from Salesforce-native (PascalCase + __c) to the Fivetran-flattened\n-- names the downstream salesforce_orgs model expects. nexuscrm raw columns were loaded with\n-- quoted identifiers, so they are case-sensitive and must be double-quoted with exact case.\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('nexuscrm', 'org__c'), pk='\"Id\"') }}\n)\nSELECT\n    \"Id\"                           AS id,\n    \"ID__c\"                        AS id_c,                          -- tenant_id\n    \"Account__c\"                   AS account_c,                     -- account_id\n    \"Accumulate_revenue_to_Org__c\" AS accumulate_revenue_to_org_c,\n    \"Name\"                         AS name,\n    \"Name__c\"                      AS name_c,\n    \"CreatedDate\"                  AS created_date,\n    (\"IsDeleted\" = 1)              AS is_deleted\nFROM latest","language":"sql","refs":[],"sources":[["nexuscrm","org__c"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.nexuscrm.org__c"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_salesforce_product":{"database":null,"schema":"transform_dbt_stg","name":"stg_salesforce_product","resource_type":"model","package_name":"pingcap_lakehouse","path":"nexuscrm/models/staging/stg_salesforce_product.sql","original_file_path":"sources/nexuscrm/models/staging/stg_salesforce_product.sql","unique_id":"model.pingcap_lakehouse.stg_salesforce_product","fqn":["pingcap_lakehouse","nexuscrm","models","staging","stg_salesforce_product"],"alias":"stg_salesforce_product","checksum":{"name":"sha256","checksum":"77356e00743658f6204506296aeef3fcbf592da00665d5b69b00f6ea0db84d3c"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_salesforce_product","raw_code":"{{ table_config('view') }}\n\n-- Source switched from BigQuery Fivetran salesforce.product to nexuscrm.Product2.\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('nexuscrm', 'product2'), pk='\"Id\"') }}\n)\nSELECT\n    \"Id\"              AS product_id,\n    \"Name\"            AS product_name,\n    \"ProductCode\"     AS product_code,\n    \"Family\"          AS family,\n    (\"IsDeleted\" = 1) AS is_deleted\nFROM latest","language":"sql","refs":[],"sources":[["nexuscrm","product2"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.nexuscrm.product2"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_salesforce_order_item":{"database":null,"schema":"transform_dbt_stg","name":"stg_salesforce_order_item","resource_type":"model","package_name":"pingcap_lakehouse","path":"nexuscrm/models/staging/stg_salesforce_order_item.sql","original_file_path":"sources/nexuscrm/models/staging/stg_salesforce_order_item.sql","unique_id":"model.pingcap_lakehouse.stg_salesforce_order_item","fqn":["pingcap_lakehouse","nexuscrm","models","staging","stg_salesforce_order_item"],"alias":"stg_salesforce_order_item","checksum":{"name":"sha256","checksum":"452010147db1f56146508c66b8d0d0b28aa0485847b1d3b97df2119cd87f4114"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_salesforce_order_item","raw_code":"{{ table_config('view') }}\n\n-- Salesforce order line items, sourced from the custom Order_Product__c object — the same line\n-- source the BigQuery model uses, and the object nexuscrm's own Order rollups (Overall_*_Date__c,\n-- Net_Fees__c) read from. The earlier detour to the standard OrderItem object (taken because the\n-- Salesforce→nexuscrm migration left Order_Product__c's base columns unpopulated) is reverted now\n-- that those dropped columns were backfilled from the legacy Fivetran→BigQuery mirror (2026-05-31,\n-- #17): net_fees_c <- Net_fees__c reproduces BigQuery's order net fees (contract value, not the\n-- monthly OrderItem.TotalPrice), and Service_Start/End_Date__c populate the daily view's service\n-- window (which previously yielded 0 rows). Model name kept; output columns unchanged.\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('nexuscrm', 'order_product'), pk='\"Id\"') }}\n)\nSELECT\n    \"Id\"                    AS order_product_id,\n    \"Order__c\"              AS order_id,\n    \"Product__c\"            AS product_id,\n    \"Net_fees__c\"           AS net_fees_c,\n    \"Service_Start_Date__c\" AS service_start_date_c,\n    \"Service_End_Date__c\"   AS service_end_date_c,\n    (\"IsDeleted\" = 1)       AS is_deleted\nFROM latest","language":"sql","refs":[],"sources":[["nexuscrm","order_product"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.nexuscrm.order_product"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_salesforce_account":{"database":null,"schema":"transform_dbt_stg","name":"stg_salesforce_account","resource_type":"model","package_name":"pingcap_lakehouse","path":"nexuscrm/models/staging/stg_salesforce_account.sql","original_file_path":"sources/nexuscrm/models/staging/stg_salesforce_account.sql","unique_id":"model.pingcap_lakehouse.stg_salesforce_account","fqn":["pingcap_lakehouse","nexuscrm","models","staging","stg_salesforce_account"],"alias":"stg_salesforce_account","checksum":{"name":"sha256","checksum":"f0c45ef3adbcaef80fb712bf7dd8fd7f148597fa62f990942929c822aca0cc6b"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_salesforce_account","raw_code":"{{ table_config('view') }}\n\n-- Source switched from BigQuery Fivetran salesforce.account to nexuscrm.Account.\n-- The original BQ model used a run_query() fivetran_formula_model trick to resolve formula\n-- fields at parse time; we drop that and read the table directly (its `default_model_sql` path).\n-- Column names are remapped from Salesforce-native to the Fivetran-flattened names the\n-- downstream salesforce_accounts model expects; fy26_* were already NULL in BQ. nexuscrm raw\n-- columns are case-sensitive (loaded quoted), so they are double-quoted with exact case.\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('nexuscrm', 'account'), pk='\"Id\"') }}\n)\nSELECT\n    \"Id\"                  AS id,\n    \"Account_ID__c\"       AS account_id_c,\n    \"CreatedDate\"         AS created_date,\n    \"Name\"                AS name,\n    \"OwnerId\"             AS owner_id,\n    \"Region__c\"           AS region_c,\n    \"Rating\"              AS rating,\n    \"TAM__c\"              AS tam_name,\n    \"Segmentation__c\"     AS segmentation_c,\n    CAST(NULL AS VARCHAR) AS fy26_segmentation,\n    \"ICP__c\"              AS icp_c,\n    CAST(NULL AS VARCHAR) AS fy26_icp,\n    \"Industry\"            AS industry,\n    \"Vertical__c\"         AS vertical_c,\n    \"Latest_Month_ARR__c\" AS latest_month_arr,\n    (\"IsDeleted\" = 1)     AS is_deleted\nFROM latest","language":"sql","refs":[],"sources":[["nexuscrm","account"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.nexuscrm.account"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_salesforce_order":{"database":null,"schema":"transform_dbt_stg","name":"stg_salesforce_order","resource_type":"model","package_name":"pingcap_lakehouse","path":"nexuscrm/models/staging/stg_salesforce_order.sql","original_file_path":"sources/nexuscrm/models/staging/stg_salesforce_order.sql","unique_id":"model.pingcap_lakehouse.stg_salesforce_order","fqn":["pingcap_lakehouse","nexuscrm","models","staging","stg_salesforce_order"],"alias":"stg_salesforce_order","checksum":{"name":"sha256","checksum":"38e2a3b687993f38b91f128c8d44f4a068835d8471b1e34dd176d8d6a1348d38"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_salesforce_order","raw_code":"{{ table_config('view') }}\n\n-- Source switched from BigQuery Fivetran salesforce.order to nexuscrm.Order. Lean projection of the\n-- columns salesforce_orders consumes, remapped from Salesforce-native (quoted, case-sensitive) names.\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('nexuscrm', 'order'), pk='\"Id\"') }}\n)\nSELECT\n    \"Id\"                           AS id,\n    NULLIF(\"OpportunityId\", '')    AS opportunity_id,\n    \"AccountId\"                    AS account_id,\n    NULLIF(\"Accumulate_revenue_to_Org__c\", '') AS accumulate_revenue_to_org_c,\n    -- Order.Name is empty in this nexuscrm instance; the order code lives in the standard OrderNumber\n    -- autonumber (backfilled from the Order_Number__c formula — bare code e.g. JP-OF-24090323, matches\n    -- the BigQuery order_name/order_number exactly).\n    \"OrderNumber\"                  AS order_number,\n    \"Status\"                       AS status,\n    NULLIF(\"Reason__c\", '')        AS reason_c,\n    \"Product_Family__c\"            AS product_family_c,\n    \"EffectiveDate\"                AS effective_date,\n    \"Order_End_Date__c\"            AS order_end_date_c,\n    \"Write_Off_Date__c\"            AS write_off_date_c,\n    \"Order_is_Terminated__c\"       AS order_is_terminated_c,\n    \"Termination_Date__c\"          AS termination_date_c,\n    \"Total_Fees_New__c\"            AS total_fees_new_c,\n    \"Tax__c\"                       AS tax_c,\n    (\"IsDeleted\" = 1)              AS is_deleted\nFROM latest","language":"sql","refs":[],"sources":[["nexuscrm","order"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.nexuscrm.order"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_cloud_tenants":{"database":null,"schema":"transform_dbt_stg","name":"stg_cloud_tenants","resource_type":"model","package_name":"pingcap_lakehouse","path":"bq_warehouse/models/staging/stg_cloud_tenants.sql","original_file_path":"sources/bq_warehouse/models/staging/stg_cloud_tenants.sql","unique_id":"model.pingcap_lakehouse.stg_cloud_tenants","fqn":["pingcap_lakehouse","bq_warehouse","models","staging","stg_cloud_tenants"],"alias":"stg_cloud_tenants","checksum":{"name":"sha256","checksum":"678a7f7f3e684ccac2d333d8f8298053a90e3e4f5ac0695e18e2b277f9dbace6"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_cloud_tenants","raw_code":"{{ table_config('view') }}\n\n-- Thin staging view over the BigQuery cloud_tenants snapshot. Only the scalar columns consumed\n-- downstream (customers, customer_surrogate_keys) are kept; the BigQuery `users` ARRAY<STRUCT>\n-- column is intentionally not carried (nothing downstream of the target reads it).\nWITH latest AS (\n    {{ latest_snapshot_manifest(source('bq_warehouse', 'cloud_tenants'), pk='tenant_id') }}\n)\nSELECT\n    tenant_id,\n    tenant_name,\n    region,\n    created_timestamp\nFROM latest","language":"sql","refs":[],"sources":[["bq_warehouse","cloud_tenants"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_manifest"],"nodes":["source.pingcap_lakehouse.bq_warehouse.cloud_tenants"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.stg_salesforce_revenue":{"database":null,"schema":"transform_dbt_stg","name":"stg_salesforce_revenue","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce/models/staging/stg_salesforce_revenue.sql","original_file_path":"sources/salesforce/models/staging/stg_salesforce_revenue.sql","unique_id":"model.pingcap_lakehouse.stg_salesforce_revenue","fqn":["pingcap_lakehouse","salesforce","models","staging","stg_salesforce_revenue"],"alias":"stg_salesforce_revenue","checksum":{"name":"sha256","checksum":"67e693ef8f3b7ee255e8935f57b67415d282d6437b09de2d22ba8a0b9d3a38fb"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_stg","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":{"materialized":"view","schema":"transform_dbt_stg"},"created_at":0,"relation_name":"transform_dbt_stg.stg_salesforce_revenue","raw_code":"{{ table_config('view') }}\n\n-- The datalake revenue table: historical Salesforce Revenue__c (a frozen one-off snapshot) UNION ALL\n-- a placeholder for the go-forward revenue process (#19).\n--\n-- Source: the legacy BigQuery Fivetran table salesforce.revenue_c, extracted UNMANAGED to a no-expiry\n-- ad-hoc S3 bucket and loaded by the MANAGED s3_bulk_load `salesforce` unit (external mode, ADR 0018)\n-- into salesforce_raw.salesforce_revenue_c_snapshots. This is the SAME source table BigQuery derives\n-- its salesforce_order_daily_view from, and salesforce_revrec / the daily view are left UNCHANGED\n-- (join on order_id), so the accumulated_* fields are NATURALLY identical to BigQuery — not a\n-- reconstruction. Managed finance-hub sources were rechecked for #16, but sf_revrec lacks\n-- order/date/exchange/before-adjust context and ns_revrec misses historical Revenue__c rows, so\n-- this one-off raw snapshot is the strict-parity fallback.\n--\n-- External-loaded snapshot, so `latest_snapshot_external` (strips _extraction_* provenance), not the\n-- manifest macro. BigQuery Fivetran columns are lowercase snake_case. `is_deleted = false` reproduces\n-- BigQuery's exact row set (7766 live rows == salesforce_revrec). currency_iso_code is dropped\n-- (unused downstream), matching the prior staging model.\n\nWITH hist_latest AS (\n    {{ latest_snapshot_external(source('salesforce', 'revenue'), pk='id') }}\n),\nhistorical AS (\n    SELECT\n        id                              AS revenue_id,\n        account_c                       AS account_id,\n        order_c                         AS order_id,\n        order_product_c                 AS order_product_id,\n        name                            AS revenue_name,\n        created_date                    AS created_timestamp,\n        date_c                          AS revenue_date,\n        status_c                        AS revenue_status,\n        amount_before_adjust_to_use_c   AS amount_before_adjust_to_use,\n        amount_c                        AS amount,\n        credit_amount_c                 AS credit_amount,\n        exchange_rate_to_use_c          AS exchange_rate_to_use,\n        is_deleted                      AS is_deleted\n    FROM hist_latest\n),\n-- PLACEHOLDER for the go-forward revenue business process (#19). Revenue is no longer recorded in\n-- Salesforce/NexusCRM, so until the new process lands the future arm contributes no rows. When #19\n-- is implemented, replace this CTE's body with the new source — its columns, types, and grain must\n-- match `historical` above so this UNION and everything downstream (salesforce_revrec,\n-- salesforce_order_daily_view) stay unchanged. The `WHERE false` keeps the schema identical today.\nfuture AS (\n    SELECT\n        revenue_id, account_id, order_id, order_product_id, revenue_name, created_timestamp,\n        revenue_date, revenue_status, amount_before_adjust_to_use, amount, credit_amount,\n        exchange_rate_to_use, is_deleted\n    FROM historical\n    WHERE false\n)\nSELECT * FROM historical\nUNION ALL\nSELECT * FROM future","language":"sql","refs":[],"sources":[["salesforce","revenue"]],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.latest_snapshot_external"],"nodes":["source.pingcap_lakehouse.salesforce.revenue"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.customers":{"database":null,"schema":"transform_dbt_dwh","name":"customers","resource_type":"model","package_name":"pingcap_lakehouse","path":"customers/models/customers.sql","original_file_path":"products/customers/models/customers.sql","unique_id":"model.pingcap_lakehouse.customers","fqn":["pingcap_lakehouse","customers","models","customers"],"alias":"customers","checksum":{"name":"sha256","checksum":"bae631809c1086c9da9a64e02de55240340f172c8f335afd0f51c24952fc34cc"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.customers","raw_code":"{{ table_config('view') }}\n\n-- we only include basic information for now\nWITH customer_ids AS (\n    SELECT\n        customer_surrogate_key,\n        account_id,\n        tenant_id\n    FROM {{ ref('customer_surrogate_keys') }}\n),\n\n-- CTE renamed (not `salesforce_accounts`): Databend resolves an unqualified self-named CTE\n-- reference as recursive, which collides with ref('salesforce_accounts').\nsf_accounts AS (\n    SELECT\n        account_id,\n        account_name,\n        account_number,\n        region,\n        created_timestamp\n    FROM {{ ref('salesforce_accounts') }}\n),\n\ntenants AS (\n    SELECT\n        tenant_id,\n        tenant_name,\n        region,\n        created_timestamp\n    FROM {{ ref('stg_cloud_tenants') }}\n),\n\nbilling_tenant_ids AS (\n    SELECT DISTINCT tenant_id\n    FROM {{ ref('stg_google_sheets_org_monthly_bill_confirmation_for_revrec') }}\n    WHERE tenant_id IS NOT NULL\n),\n\nconsolidate_info AS (\n    SELECT\n        cik.customer_surrogate_key,\n        -- Any value: if multiple exist for a surrogate key, the account (gold standard) wins.\n        COALESCE(\n            NULLIF(ANY_VALUE(sa.account_name), ''),\n            ANY_VALUE(t.tenant_name)\n        ) AS customer_name,\n        ANY_VALUE(sa.account_id) AS salesforce_account_id,\n        ANY_VALUE(sa.account_number) AS salesforce_account_number,\n        -- BigQuery ARRAY_AGG(DISTINCT t.tenant_id IGNORE NULLS); Databend has no IGNORE NULLS /\n        -- FILTER on array_agg, so dedup via array_distinct (this column is not consumed downstream).\n        array_distinct(array_agg(t.tenant_id)) AS tenant_ids,\n        COALESCE(\n            NULLIF(ANY_VALUE(sa.region), ''),\n            ANY_VALUE(t.region)\n        ) AS region,\n        MIN(COALESCE(sa.created_timestamp, t.created_timestamp)) AS customer_created_timestamp,\n        ANY_VALUE(sa.created_timestamp) AS account_created_timestamp,\n        MAX(if(bt.tenant_id IS NOT NULL, TRUE, FALSE)) AS is_billing_capable\n    FROM customer_ids cik\n    LEFT JOIN sf_accounts sa USING(account_id)\n    LEFT JOIN tenants t USING(tenant_id)\n    LEFT JOIN billing_tenant_ids bt ON t.tenant_id = bt.tenant_id\n    GROUP BY ALL\n)\n\nSELECT *\nFROM consolidate_info","language":"sql","refs":[{"name":"customer_surrogate_keys","package":null,"version":null},{"name":"salesforce_accounts","package":null,"version":null},{"name":"stg_cloud_tenants","package":null,"version":null},{"name":"stg_google_sheets_org_monthly_bill_confirmation_for_revrec","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.customer_surrogate_keys","model.pingcap_lakehouse.salesforce_accounts","model.pingcap_lakehouse.stg_cloud_tenants","model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.customer_surrogate_keys":{"database":null,"schema":"transform_dbt_dwh","name":"customer_surrogate_keys","resource_type":"model","package_name":"pingcap_lakehouse","path":"customer_surrogate_keys/models/customer_surrogate_keys.sql","original_file_path":"products/customer_surrogate_keys/models/customer_surrogate_keys.sql","unique_id":"model.pingcap_lakehouse.customer_surrogate_keys","fqn":["pingcap_lakehouse","customer_surrogate_keys","models","customer_surrogate_keys"],"alias":"customer_surrogate_keys","checksum":{"name":"sha256","checksum":"bf835ecc62000e04d4d108771d4ca0d7be5bdf3c31a4cd66a8cc99facc9b2f82"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":"","columns":{},"meta":{},"group":null,"docs":{"show":true,"node_color":null},"patch_path":null,"build_path":null,"unrendered_config":{"materialized":"table","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.customer_surrogate_keys","raw_code":"{{ table_config('table') }}\n\nWITH raw_accounts AS (\n    SELECT\n        account_id,\n        created_timestamp AS account_created_timestamp\n    FROM {{ ref('salesforce_accounts') }}\n),\n\n-- Replaces the BigQuery LEFT JOIN UNNEST(tenant_ids): the (account_id, tenant_id) pairs are\n-- exactly salesforce_orgs (the array was an ARRAY_AGG of salesforce_orgs.tenant_id per account).\naccount_tenant_pairs AS (\n    SELECT\n        ra.account_id,\n        ra.account_created_timestamp,\n        o.tenant_id,\n        CAST(NULL AS TIMESTAMP) AS tenant_created_timestamp\n    FROM raw_accounts ra\n    JOIN {{ ref('salesforce_orgs') }} o ON o.account_id = ra.account_id\n    WHERE o.account_id IS NOT NULL AND o.tenant_id IS NOT NULL\n),\n\naccounts AS (\n    SELECT account_id, account_created_timestamp, tenant_id, tenant_created_timestamp\n    FROM account_tenant_pairs\n),\n\ntenants AS (\n    SELECT\n        CAST(NULL AS VARCHAR) AS account_id,\n        CAST(NULL AS TIMESTAMP) AS account_created_timestamp,\n        tenant_id,\n        created_timestamp AS tenant_created_timestamp\n    FROM {{ ref('stg_cloud_tenants') }}\n),\n\norgs AS (\n    SELECT tenant_id, account_id, org_created_timestamp\n    FROM {{ ref('salesforce_orgs') }}\n    WHERE tenant_id IS NOT NULL AND account_id IS NOT NULL\n),\n\nconsolidate AS (\n    SELECT * FROM accounts\n    UNION ALL\n    SELECT * FROM tenants\n),\n\ncollapse_on_tenant AS (\n    SELECT\n        MIN(account_id) AS account_id,\n        MIN(account_created_timestamp) AS account_created_timestamp,\n        tenant_id,\n        MIN(tenant_created_timestamp) AS tenant_created_timestamp\n    FROM consolidate\n    GROUP BY ALL\n),\n\nremove_null_tenants AS (\n    SELECT * FROM collapse_on_tenant WHERE tenant_id IS NOT NULL\n),\n\nunify AS (\n    -- account instances\n    SELECT\n        account_id AS _group_id,\n        account_id,\n        CAST(NULL AS VARCHAR) AS tenant_id,\n        account_created_timestamp AS _instance_created_timestamp,\n        'account' AS _instance_type\n    FROM raw_accounts\n    UNION ALL\n    -- tenant instances\n    SELECT\n        COALESCE(account_id, tenant_id) AS _group_id,\n        CAST(NULL AS VARCHAR) AS account_id,\n        tenant_id,\n        tenant_created_timestamp AS _instance_created_timestamp,\n        'tenant' AS _instance_type\n    FROM remove_null_tenants\n),\n\nget_natural_key AS (\n    SELECT\n        FIRST_VALUE(COALESCE(account_id, tenant_id)) OVER (PARTITION BY _group_id ORDER BY _instance_created_timestamp ASC) AS _legacy_customer_id,\n        FIRST_VALUE(_instance_type)                  OVER (PARTITION BY _group_id ORDER BY _instance_created_timestamp ASC) AS _legacy_customer_type,\n        FIRST_VALUE(_instance_created_timestamp)     OVER (PARTITION BY _group_id ORDER BY _instance_created_timestamp ASC) AS _legacy_customer_created_timestamp,\n        account_id,\n        tenant_id,\n        _instance_created_timestamp,\n        _instance_type\n    FROM unify\n),\n\nadd_org_link AS (\n    SELECT\n        gnk.*,\n        o.org_created_timestamp\n    FROM get_natural_key gnk\n    LEFT JOIN orgs o ON gnk.tenant_id = o.tenant_id\n),\n\napply_key_policy AS (\n    SELECT\n        CASE\n            -- Override: specific tenants synced to Netsuite with tenant-based keys\n            WHEN tenant_id IN ('1372813089209282999', '1372813089209296390')\n                THEN tenant_id\n            -- Legacy: link established before cutoff, preserve existing keys\n            WHEN org_created_timestamp < CAST('{{ var(\"surrogate_key_cutoff\") }}' AS TIMESTAMP)\n                THEN _legacy_customer_id\n            -- New policy: tenant is the real customer entity\n            WHEN tenant_id IS NOT NULL\n                THEN tenant_id\n            ELSE _legacy_customer_id\n        END AS customer_id,\n        CASE\n            WHEN tenant_id IN ('1372813089209282999', '1372813089209296390')\n                THEN 'tenant'\n            WHEN org_created_timestamp < CAST('{{ var(\"surrogate_key_cutoff\") }}' AS TIMESTAMP)\n                THEN _legacy_customer_type\n            WHEN tenant_id IS NOT NULL\n                THEN 'tenant'\n            ELSE _legacy_customer_type\n        END AS customer_type,\n        CASE\n            WHEN tenant_id IN ('1372813089209282999', '1372813089209296390')\n                THEN _instance_created_timestamp\n            WHEN org_created_timestamp < CAST('{{ var(\"surrogate_key_cutoff\") }}' AS TIMESTAMP)\n                THEN _legacy_customer_created_timestamp\n            WHEN tenant_id IS NOT NULL\n                THEN _instance_created_timestamp\n            ELSE _legacy_customer_created_timestamp\n        END AS customer_created_timestamp,\n        account_id,\n        tenant_id,\n        _instance_created_timestamp,\n        _instance_type\n    FROM add_org_link\n),\n\nfinal_keys AS (\n    SELECT\n        sha2(customer_id, 256) AS customer_surrogate_key,\n        *\n    FROM apply_key_policy\n)\n\nSELECT * FROM final_keys","language":"sql","refs":[{"name":"salesforce_accounts","package":null,"version":null},{"name":"salesforce_orgs","package":null,"version":null},{"name":"stg_cloud_tenants","package":null,"version":null},{"name":"salesforce_orgs","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.salesforce_accounts","model.pingcap_lakehouse.salesforce_orgs","model.pingcap_lakehouse.stg_cloud_tenants"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.date_spine":{"database":null,"schema":"transform_dbt_dwh","name":"date_spine","resource_type":"model","package_name":"pingcap_lakehouse","path":"date_spine/models/date_spine.sql","original_file_path":"products/date_spine/models/date_spine.sql","unique_id":"model.pingcap_lakehouse.date_spine","fqn":["pingcap_lakehouse","date_spine","models","date_spine"],"alias":"date_spine","checksum":{"name":"sha256","checksum":"189633a723405c88efc790a70b718adb97a86d11152310b5da11e6232b0828af"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":"","columns":{},"meta":{},"group":null,"docs":{"show":true,"node_color":null},"patch_path":null,"build_path":null,"unrendered_config":{"materialized":"table","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.date_spine","raw_code":"{{ table_config('table') }}\n\n-- Ported from the BigQuery project. Fiscal calendar (fiscal year starts in April: month>=4 -> +1).\n-- BigQuery MOD/DIV -> Databend % / DIV operators; double-quoted 'Q' literal -> single-quoted.\nWITH date_dimension AS (\n    SELECT * FROM {{ ref('stg_dates') }}\n),\nget_fiscal_month_of_year AS (\n    SELECT *, (month_of_year + 8) % 12 + 1 AS fiscal_month_of_year\n    FROM date_dimension\n),\nfiscal_periods AS (\n    SELECT\n        a.*,\n        (fiscal_month_of_year - 1) DIV 3 + 1 AS fiscal_quarter_of_year,\n        (fiscal_month_of_year - 1) DIV 6 + 1 AS fiscal_half_of_year,\n        if(month_of_year >= 4, year_number + 1, year_number) AS fiscal_year\n    FROM get_fiscal_month_of_year a\n),\nadd_fiscal_period_display AS (\n    SELECT *,\n        concat('FY', right(cast(fiscal_year AS VARCHAR), 2), 'Q', cast(fiscal_quarter_of_year AS VARCHAR)) AS fiscal_period\n    FROM fiscal_periods\n)\nSELECT * FROM add_fiscal_period_display","language":"sql","refs":[{"name":"stg_dates","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.stg_dates"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.salesforce_orders":{"database":null,"schema":"transform_dbt_dwh","name":"salesforce_orders","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce_orders/models/salesforce_orders.sql","original_file_path":"products/salesforce_orders/models/salesforce_orders.sql","unique_id":"model.pingcap_lakehouse.salesforce_orders","fqn":["pingcap_lakehouse","salesforce_orders","models","salesforce_orders"],"alias":"salesforce_orders","checksum":{"name":"sha256","checksum":"c7e33728717eaced9aad24f5c8299a7c0cd52f64a7cbcf27a8cf356c0efb5c4f"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.salesforce_orders","raw_code":"{{ table_config('view') }}\n\n-- Restructured from the BigQuery version. The original built revenues/order_products as\n-- ARRAY_AGG(STRUCT(...)) columns consumed only by salesforce_order_daily_view via correlated\n-- UNNEST. Databend favors flat rows, so this model is order-grain (no arrays); the daily view\n-- joins the order-product and revenue detail flatly. The BigQuery invoice_collection CTE was dead\n-- code (defined, never joined) and is omitted.\nWITH orders AS (\n    SELECT\n        id AS order_id,\n        opportunity_id,\n        account_id,\n        accumulate_revenue_to_org_c AS accumulate_revenue_to_org_tenant_id,\n        order_number AS order_name,           -- Salesforce Order.Name defaults to the order number\n        order_number AS order_number,         -- legacy naming\n        status AS order_status,\n        reason_c AS reason,\n        product_family_c AS order_product_family,\n        effective_date AS order_start_date,\n        order_end_date_c AS order_end_date,\n        write_off_date_c AS write_off_date,\n        order_is_terminated_c AS order_is_terminated,\n        termination_date_c AS order_termination_date,\n        -- Terminations are recorded in month X+1; roll back to the last day of month X.\n        date_sub(day, 1, date_trunc(month, termination_date_c)) AS real_order_termination_date,\n        total_fees_new_c AS total_fees,\n        -- NexusCRM Order snapshots do not expose the legacy Order.BillingCountryCode field.\n        -- This non-revrec parity gap is tracked in #39.\n        CAST(NULL AS VARCHAR) AS billing_country_code,\n        product_family_c AS product_family,\n        COALESCE(tax_c, 0) AS tax_rate\n    FROM {{ ref('stg_salesforce_order') }}\n    WHERE is_deleted = false\n),\nopportunity AS (\n    SELECT\n        opportunity_id,\n        opportunity_currency,\n        exchange_rate AS opportunity_exchange_rate\n    FROM {{ ref('salesforce_opportunities') }}\n),\n-- is_commitment_plan: does the order's in-service product span exceed one month? (BigQuery computed\n-- this from the order_products array via UNNEST; here from the flat order-product detail.)\nop_span AS (\n    SELECT\n        order_id,\n        date_diff(month, MIN(service_start_date_c), MAX(service_end_date_c)) > 1 AS is_commitment_plan\n    FROM {{ ref('stg_salesforce_order_item') }}\n    WHERE is_deleted = false AND net_fees_c > 0.01\n    GROUP BY order_id\n)\nSELECT\n    o.*,\n    opp.opportunity_currency,\n    opp.opportunity_exchange_rate,\n    COALESCE(sp.is_commitment_plan, false) AS is_commitment_plan,\n    now() AS processed_at\nFROM orders o\nLEFT JOIN opportunity opp USING(opportunity_id)\nLEFT JOIN op_span sp USING(order_id)","language":"sql","refs":[{"name":"stg_salesforce_order","package":null,"version":null},{"name":"salesforce_opportunities","package":null,"version":null},{"name":"stg_salesforce_order_item","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.stg_salesforce_order","model.pingcap_lakehouse.salesforce_opportunities","model.pingcap_lakehouse.stg_salesforce_order_item"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.salesforce_order_daily_view":{"database":null,"schema":"transform_dbt_dwh","name":"salesforce_order_daily_view","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce_order_daily_view/models/salesforce_order_daily_view.sql","original_file_path":"products/salesforce_order_daily_view/models/salesforce_order_daily_view.sql","unique_id":"model.pingcap_lakehouse.salesforce_order_daily_view","fqn":["pingcap_lakehouse","salesforce_order_daily_view","models","salesforce_order_daily_view"],"alias":"salesforce_order_daily_view","checksum":{"name":"sha256","checksum":"0fa2ac766fef58df4a068653252a9fbb562947a9f8ca7c57151a8ef8a8c53175"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.salesforce_order_daily_view","raw_code":"{{ table_config('view') }}\n\n-- Flat rewrite of the BigQuery model. The original cross-joined orders x date_spine and, per row,\n-- ran correlated SUM(...) over UNNEST(revenues) / UNNEST(order_products) (arrays built in\n-- salesforce_orders). Databend favors flat aggregation, so we accumulate revenue and order-products\n-- per (order, day) in SEPARATE CTEs (joining each detail independently to avoid fan-out double\n-- counting) and join them back. Same result, idiomatic SQL.\n-- CTE not named `date_spine`: Databend reads an unqualified self-named CTE reference as recursive,\n-- colliding with ref('date_spine').\nWITH spine AS (\n    SELECT *\n    FROM {{ ref('date_spine') }}\n    WHERE date_diff(day, date_day, current_date()) BETWEEN 0 AND 90\n),\n-- CTE not named `orders`: the referenced salesforce_orders view has an internal `orders` CTE, and\n-- Databend flattens view CTEs into the outer scope (would cycle).\ndv_orders AS (\n    SELECT * FROM {{ ref('salesforce_orders') }}\n),\norder_product AS (\n    SELECT\n        o_p.order_id,\n        o_p.order_product_id,\n        p.product_id,\n        o_p.net_fees_c AS net_fees,\n        p.product_name,\n        p.product_code,\n        o_p.service_start_date_c AS service_start_date,\n        o_p.service_end_date_c AS service_end_date\n    FROM {{ ref('stg_salesforce_order_item') }} o_p\n    LEFT JOIN {{ ref('stg_salesforce_product') }} p ON p.product_id = o_p.product_id\n    WHERE o_p.is_deleted = false\n),\nrevenue AS (\n    SELECT\n        revenue_id,\n        order_id,\n        cast(created_timestamp AS date) AS created_date,\n        revenue_date,\n        amount_before_adjust,\n        amount,\n        amount_usd,\n        credit_amount,\n        revenue_exchange_rate\n    FROM {{ ref('salesforce_revrec') }}\n),\n-- Revenue recognized on/before each spine day, per order.\nrev_by_day AS (\n    SELECT\n        o.order_id,\n        ds.date_day,\n        SUM(rev.amount) AS accumulated_revenue_native,\n        SUM(rev.amount_usd) AS accumulated_revenue_usd,\n        SUM(rev.credit_amount) AS accumulated_credit_amount,\n        SUM(rev.amount_before_adjust) AS accumulated_revenue_before_adjust,\n        SUM(rev.amount_before_adjust / rev.revenue_exchange_rate) AS accumulated_revenue_before_adjust_usd\n    FROM dv_orders o\n    CROSS JOIN spine ds\n    LEFT JOIN revenue rev\n        ON rev.order_id = o.order_id\n        AND COALESCE(rev.revenue_date, rev.created_date) <= ds.date_day\n    GROUP BY o.order_id, ds.date_day\n),\n-- Order-product net fees for products in service on/before each spine day, per order.\nop_by_day AS (\n    SELECT\n        o.order_id,\n        ds.date_day,\n        SUM(op.net_fees) AS order_net_fees,\n        SUM(op.net_fees / COALESCE(o.opportunity_exchange_rate, 1)) AS order_net_fees_usd,\n        MIN(op.service_start_date) AS order_service_start_date,\n        MAX(op.service_end_date) AS order_service_end_date\n    FROM dv_orders o\n    CROSS JOIN spine ds\n    LEFT JOIN order_product op\n        ON op.order_id = o.order_id\n        AND op.service_start_date <= ds.date_day\n        AND op.net_fees > 0.01\n    GROUP BY o.order_id, ds.date_day, o.opportunity_exchange_rate\n),\norder_view_by_day AS (\n    SELECT\n        ds.date_day,\n        o.*,\n        r.accumulated_revenue_native,\n        r.accumulated_revenue_usd,\n        r.accumulated_credit_amount,\n        r.accumulated_revenue_before_adjust,\n        r.accumulated_revenue_before_adjust_usd,\n        op.order_net_fees,\n        op.order_net_fees_usd,\n        op.order_service_start_date,\n        op.order_service_end_date\n    FROM dv_orders o\n    CROSS JOIN spine ds\n    LEFT JOIN rev_by_day r ON r.order_id = o.order_id AND r.date_day = ds.date_day\n    LEFT JOIN op_by_day op ON op.order_id = o.order_id AND op.date_day = ds.date_day\n),\n-- COALESCE the accumulated measures to 0, then keep USD as the canonical amounts (matching the\n-- BigQuery model: accumulated_revenue<-usd, accumulated_revenue_before_adjust<-local, net_fees<-usd).\nfinalize AS (\n    SELECT\n        o.* EXCLUDE (\n            accumulated_revenue_native, accumulated_revenue_usd,\n            accumulated_credit_amount,\n            accumulated_revenue_before_adjust, accumulated_revenue_before_adjust_usd,\n            order_net_fees, order_net_fees_usd\n        ),\n        COALESCE(accumulated_revenue_usd, 0) AS accumulated_revenue,\n        COALESCE(accumulated_credit_amount, 0) AS accumulated_credit_amount,\n        COALESCE(accumulated_revenue_before_adjust, 0) AS accumulated_revenue_before_adjust,\n        COALESCE(order_net_fees_usd, 0) AS order_net_fees\n    FROM order_view_by_day o\n)\nSELECT * FROM finalize\nWHERE order_service_start_date <= date_day","language":"sql","refs":[{"name":"date_spine","package":null,"version":null},{"name":"salesforce_orders","package":null,"version":null},{"name":"stg_salesforce_order_item","package":null,"version":null},{"name":"stg_salesforce_product","package":null,"version":null},{"name":"salesforce_revrec","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.date_spine","model.pingcap_lakehouse.salesforce_orders","model.pingcap_lakehouse.stg_salesforce_order_item","model.pingcap_lakehouse.stg_salesforce_product","model.pingcap_lakehouse.salesforce_revrec"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.salesforce_revrec":{"database":null,"schema":"transform_dbt_dwh","name":"salesforce_revrec","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce_revrec/models/salesforce_revrec.sql","original_file_path":"products/salesforce_revrec/models/salesforce_revrec.sql","unique_id":"model.pingcap_lakehouse.salesforce_revrec","fqn":["pingcap_lakehouse","salesforce_revrec","models","salesforce_revrec"],"alias":"salesforce_revrec","checksum":{"name":"sha256","checksum":"776a9a4a632017debc166e0c6d8a1df04f873beac7d68865da0fa8d66bff99ec"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.salesforce_revrec","raw_code":"{{ table_config('view') }}\n\n-- Ported from the BigQuery project's salesforce_revrec model, sourced from the frozen\n-- Revenue__c raw snapshot loaded into salesforce_raw. This is the same source table BigQuery\n-- uses for salesforce_order_daily_view, so #16 revenue parity is source-identical rather than\n-- reconstructed from finance-hub ledgers.\nWITH raw_data AS (\n    SELECT\n        revenue_id,\n        account_id,\n        order_id,\n        order_product_id,\n        revenue_name,\n        created_timestamp,\n        revenue_date,\n        revenue_status,\n        CASE\n            WHEN cast(created_timestamp AS date) >= '2025-05-01' THEN amount_before_adjust_to_use\n            WHEN amount_before_adjust_to_use < 0.01 OR amount_before_adjust_to_use IS NULL THEN amount\n            ELSE amount_before_adjust_to_use\n        END AS amount_before_adjust,\n        amount,\n        amount / COALESCE(NULLIF(exchange_rate_to_use, 0), 1) AS amount_usd,\n        credit_amount,\n        exchange_rate_to_use AS revenue_exchange_rate\n    FROM {{ ref('stg_salesforce_revenue') }}\n    WHERE is_deleted = false\n)\nSELECT *, now() AS processed_at\nFROM raw_data","language":"sql","refs":[{"name":"stg_salesforce_revenue","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.stg_salesforce_revenue"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.cloud_revenue":{"database":null,"schema":"transform_dbt_dwh","name":"cloud_revenue","resource_type":"model","package_name":"pingcap_lakehouse","path":"cloud_revenue/models/cloud_revenue.sql","original_file_path":"products/cloud_revenue/models/cloud_revenue.sql","unique_id":"model.pingcap_lakehouse.cloud_revenue","fqn":["pingcap_lakehouse","cloud_revenue","models","cloud_revenue"],"alias":"cloud_revenue","checksum":{"name":"sha256","checksum":"7c82f72420933cfd3f59d5fcc0007adb13e1f2ea429724be48e0bfa44cd0dc04"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.cloud_revenue","raw_code":"{{ table_config('view') }}\n\n-- Curated cloud revenue, one row per rev-rec record, sourced from the data_foundation_finance hub's\n-- monthly_cloud_revrec ledger (via stg_cloud_revenue). This remains a managed cloud-scoped\n-- revenue product; strict salesforce_order_daily_view revenue parity uses the frozen\n-- Revenue__c snapshot through salesforce_revrec (#16).\n--\n-- SCOPE: cloud revenue only (accepted 2026-05-30). Per-order USD revenue matches BigQuery's\n-- salesforce_order_daily_view (which derives from Revenue__c) for 98.1% of cloud orders; the\n-- USD adjusted amount matches BQ's accumulated_revenue for 99.4% of revrecs. The residual ~1.9%\n-- is NON-CLOUD revenue (services/licenses recognised through NetSuite, not the cloud billing\n-- system): 175 revrec records on 66 cloud orders that Revenue__c carries but the cloud ledger\n-- does not (166 of them live in the hub's ns_revrec). By DOLLAR the gap is larger than by order\n-- count: ~$9.45M, ≈7.7% of the $122.6M BigQuery recognises on cloud orders, because the non-cloud\n-- tail concentrates on a few large orders. Bit-exact 100% parity is not reachable from\n-- the cloud ledger because BigQuery's number IS Revenue__c; strict parity therefore uses the\n-- one-off Revenue__c raw snapshot instead of treating this product as complete coverage.\n--\n-- amount_before_adjust replicates the BigQuery Revenue__c rule exactly so the downstream\n-- accumulated_revenue_before_adjust stays parity-faithful: use the pre-adjust amount, except for\n-- pre-2025-05 records where it is missing/zero, which fall back to the adjusted amount. The hub's\n-- revenue_amount reconciles to Revenue__c amount_before_adjust_to_use_c and adjusted_revenue_amount\n-- to source/native amount_c (~99% to the cent). amount_usd is the explicit USD projection used\n-- downstream for accumulated_revenue.\nWITH raw_data AS (\n    SELECT\n        revenue_id,\n        order_id,\n        order_number,\n        account_number,\n        account_name,\n        account_region,\n        account_surrogate_key,\n        revenue_name,\n        created_timestamp,\n        revenue_date,\n        bill_month,\n        revenue_status,\n        currency_iso_code,\n        payment_type,\n        CASE\n            WHEN cast(created_timestamp AS date) >= '2025-05-01' THEN amount_before_adjust_raw\n            WHEN amount_before_adjust_raw < 0.01 OR amount_before_adjust_raw IS NULL THEN amount\n            ELSE amount_before_adjust_raw\n        END AS amount_before_adjust,\n        amount,\n        amount / exchange_rate_to_use AS amount_usd,\n        credit_amount,\n        shortfall_amount,\n        exchange_rate_to_use AS revenue_exchange_rate,\n        -- adjusted per-tier breakdown (cloud only)\n        amount_starter,\n        amount_dedicated,\n        amount_support,\n        amount_essential,\n        amount_premium,\n        amount_byoc,\n        amount_lake\n    FROM {{ ref('stg_cloud_revenue') }}\n)\nSELECT *, now() AS processed_at\nFROM raw_data","language":"sql","refs":[{"name":"stg_cloud_revenue","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.stg_cloud_revenue"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.salesforce_opportunities":{"database":null,"schema":"transform_dbt_dwh","name":"salesforce_opportunities","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce_opportunities/models/salesforce_opportunities.sql","original_file_path":"products/salesforce_opportunities/models/salesforce_opportunities.sql","unique_id":"model.pingcap_lakehouse.salesforce_opportunities","fqn":["pingcap_lakehouse","salesforce_opportunities","models","salesforce_opportunities"],"alias":"salesforce_opportunities","checksum":{"name":"sha256","checksum":"8609dedaba68a63ed08fc382134b9b82c010da61f5bf93c5f09f21cb10382aba"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.salesforce_opportunities","raw_code":"{{ table_config('view') }}\n\n-- MINIMAL projection. The order_daily_view chain consumes only (opportunity_id, currency,\n-- exchange_rate) from opportunities. The full BigQuery salesforce_opportunities model (quotes,\n-- tasks, opportunity field history, stage-name mapping, fiscal periods, the order_acv_special_\n-- treatment Google Sheet) is intentionally NOT ported here — it is a large enrichment that nothing\n-- in this target consumes. Port it separately if/when a model needs it (ADR 0019, feel-things-out).\nSELECT\n    id AS opportunity_id,\n    currency_iso_code AS opportunity_currency,\n    rate_c AS exchange_rate\nFROM {{ ref('stg_salesforce_opportunity') }}\nWHERE is_deleted = false","language":"sql","refs":[{"name":"stg_salesforce_opportunity","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.stg_salesforce_opportunity"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.salesforce_org_monthly_revrec":{"database":null,"schema":"transform_dbt_dwh","name":"salesforce_org_monthly_revrec","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce_org_monthly_revrec/models/salesforce_org_monthly_revrec.sql","original_file_path":"products/salesforce_org_monthly_revrec/models/salesforce_org_monthly_revrec.sql","unique_id":"model.pingcap_lakehouse.salesforce_org_monthly_revrec","fqn":["pingcap_lakehouse","salesforce_org_monthly_revrec","models","salesforce_org_monthly_revrec"],"alias":"salesforce_org_monthly_revrec","checksum":{"name":"sha256","checksum":"867b7237688d451bb1a2bf6c2ddbf0cb024659cd112d0b2222cf8472e6acacaf"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.salesforce_org_monthly_revrec","raw_code":"{{ table_config('view') }}\n\nWITH org_billing AS (\n    SELECT\n        {{ generate_surrogate_key(['gs.billing_month', 'gs.tenant_id', 'gs.total_amount']) }} AS hash_id,\n        gs.billing_start_date,\n        gs.billing_end_date,\n        gs.tenant_id,\n        COALESCE(source_org.accumulate_revenue_to_org_tenant_id, gs.tenant_id) AS accumulate_revenue_to_org_tenant_id,\n        acc_org.account_id,\n        gs.* EXCLUDE (billing_start_date, billing_end_date, tenant_id)\n    FROM {{ ref('stg_google_sheets_org_monthly_bill_confirmation_for_revrec') }} gs\n    LEFT JOIN {{ ref('salesforce_orgs') }} source_org ON source_org.tenant_id = gs.tenant_id\n    LEFT JOIN {{ ref('salesforce_orgs') }} acc_org ON source_org.accumulate_revenue_to_org_tenant_id = acc_org.tenant_id\n    WHERE ABS(\n        total_amount\n        - COALESCE(raw_starter_amount, 0.0)\n        - COALESCE(raw_dedicated_amount, 0.0)\n        - COALESCE(raw_support_amount, 0.0)\n        - COALESCE(raw_essential_amount, 0.0)\n        - COALESCE(raw_premium_amount, 0.0)\n    ) <= 0.01\n),\n\nget_customer_surrogate_key AS (\n    SELECT\n        aa.*,\n        COALESCE(csk_account.customer_surrogate_key, csk_tenant.customer_surrogate_key) AS customer_surrogate_key,\n        if(csk_account.customer_surrogate_key IS NULL, FALSE, TRUE) AS is_salesforce_customer\n    FROM org_billing aa\n    LEFT JOIN {{ ref('customer_surrogate_keys') }} csk_tenant\n        ON aa.tenant_id = csk_tenant.tenant_id\n    LEFT JOIN {{ ref('customer_surrogate_keys') }} csk_account\n        ON aa.account_id = csk_account.account_id\n),\n\nget_customer_information AS (\n    SELECT\n        o.*,\n        a.customer_name AS customer_name,\n        COALESCE(a.salesforce_account_number, o.tenant_id) AS account_number_for_netsuite,\n        a.region\n    FROM get_customer_surrogate_key o\n    LEFT JOIN {{ ref('customers') }} a USING(customer_surrogate_key)\n),\n\nraw_tenant_payment_type AS (\n    SELECT\n        tenant_id,\n        to_string(invoice_date, '%Y-%m') AS billing_month,\n        status AS invoice_status,\n        COALESCE(payment_type, 'null') AS raw_payment_type\n    FROM {{ ref('stg_metadb_billing2_invoices') }}\n    WHERE status IN ('sent') AND tenant_id IS NOT NULL\n    QUALIFY ROW_NUMBER() OVER (\n        PARTITION BY tenant_id, to_string(invoice_date, '%Y-%m')\n        ORDER BY updated_at DESC\n    ) = 1\n),\n\ntenant_payment_type_mapped AS (\n    SELECT\n        inv.*,\n        ptm.payment_type_group AS payment_type\n    FROM raw_tenant_payment_type inv\n    LEFT JOIN {{ ref('payment_type_mapping') }} ptm ON inv.raw_payment_type = ptm.payment_type\n),\n\nattach_tenant_payment_type AS (\n    SELECT\n        o.* EXCLUDE (payment_type),\n        tpt.invoice_status,\n        tpt.raw_payment_type,\n        COALESCE(o.payment_type, tpt.payment_type) AS payment_type\n    FROM get_customer_information o\n    LEFT JOIN tenant_payment_type_mapped tpt\n        ON o.tenant_id = tpt.tenant_id\n        AND o.billing_month = tpt.billing_month\n)\n\nSELECT * FROM attach_tenant_payment_type","language":"sql","refs":[{"name":"stg_google_sheets_org_monthly_bill_confirmation_for_revrec","package":null,"version":null},{"name":"salesforce_orgs","package":null,"version":null},{"name":"salesforce_orgs","package":null,"version":null},{"name":"customer_surrogate_keys","package":null,"version":null},{"name":"customer_surrogate_keys","package":null,"version":null},{"name":"customers","package":null,"version":null},{"name":"stg_metadb_billing2_invoices","package":null,"version":null},{"name":"payment_type_mapping","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config","macro.pingcap_lakehouse.generate_surrogate_key"],"nodes":["model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec","model.pingcap_lakehouse.salesforce_orgs","model.pingcap_lakehouse.customer_surrogate_keys","model.pingcap_lakehouse.customers","model.pingcap_lakehouse.stg_metadb_billing2_invoices","seed.pingcap_lakehouse.payment_type_mapping"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.salesforce_orgs":{"database":null,"schema":"transform_dbt_dwh","name":"salesforce_orgs","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce_orgs/models/salesforce_orgs.sql","original_file_path":"products/salesforce_orgs/models/salesforce_orgs.sql","unique_id":"model.pingcap_lakehouse.salesforce_orgs","fqn":["pingcap_lakehouse","salesforce_orgs","models","salesforce_orgs"],"alias":"salesforce_orgs","checksum":{"name":"sha256","checksum":"beb8677edebe27ab663d6b6fea57247a3b040ab129df73f83f087c37093e1032"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.salesforce_orgs","raw_code":"{{ table_config('view') }}\n\nSELECT\n    id AS org_id,\n    id_c AS tenant_id,                                                       -- tenant_id used across internal systems\n    account_c AS account_id,                                                 -- account <> tenant is one-to-many\n    -- nexuscrm stores an unset accumulation parent as '' (not NULL), so NULLIF first or the\n    -- COALESCE fallback to the org's own tenant never fires (every consumer that groups on this\n    -- column would otherwise collapse all such orgs together).\n    COALESCE(NULLIF(accumulate_revenue_to_org_c, ''), id_c) AS accumulate_revenue_to_org_tenant_id,\n    name AS org_name,\n    created_date AS org_created_timestamp\nFROM {{ ref('stg_salesforce_org') }}\nWHERE is_deleted = false","language":"sql","refs":[{"name":"stg_salesforce_org","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.stg_salesforce_org"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"model.pingcap_lakehouse.salesforce_accounts":{"database":null,"schema":"transform_dbt_dwh","name":"salesforce_accounts","resource_type":"model","package_name":"pingcap_lakehouse","path":"salesforce_accounts/models/salesforce_accounts.sql","original_file_path":"products/salesforce_accounts/models/salesforce_accounts.sql","unique_id":"model.pingcap_lakehouse.salesforce_accounts","fqn":["pingcap_lakehouse","salesforce_accounts","models","salesforce_accounts"],"alias":"salesforce_accounts","checksum":{"name":"sha256","checksum":"f31ee31f76a200a9dcdba32a9a38d647fa88f5b8aea662240302d9ae78805dc8"},"config":{"enabled":true,"alias":null,"schema":"transform_dbt_dwh","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":{"materialized":"view","schema":"transform_dbt_dwh"},"created_at":0,"relation_name":"transform_dbt_dwh.salesforce_accounts","raw_code":"{{ table_config('view') }}\n\n-- Restructured from the BigQuery version: the original built a tenant_ids ARRAY_AGG and joined it\n-- back on, but that array was only consumed by customer_surrogate_keys via UNNEST. We drop it here\n-- and let customer_surrogate_keys enumerate (account_id, tenant_id) pairs directly from salesforce_orgs.\nWITH data_foundation_accounts AS (\n    SELECT\n        account_number,\n        region\n    FROM {{ ref('stg_data_foundation_finance_salesforce_account') }}\n    WHERE is_deleted = false\n      AND account_number IS NOT NULL\n      AND account_number <> ''\n)\n\nSELECT\n    sa.id AS account_id,\n    sa.account_id_c AS account_number,\n    sa.created_date AS created_timestamp,\n    sa.name AS account_name,\n    sa.owner_id AS owner_user_id,\n    COALESCE(NULLIF(sa.region_c, ''), dfa.region) AS region,\n    sa.rating AS account_rating,\n    sa.tam_name,\n    sa.segmentation_c AS segmentation,\n    sa.fy26_segmentation,\n    sa.icp_c AS icp,\n    sa.fy26_icp,\n    sa.industry AS industry,\n    sa.vertical_c AS vertical,\n    sa.latest_month_arr AS latest_month_arr\nFROM {{ ref('stg_salesforce_account') }} sa\nLEFT JOIN data_foundation_accounts dfa\n    ON NULLIF(sa.account_id_c, '') = dfa.account_number\nWHERE sa.is_deleted = false","language":"sql","refs":[{"name":"stg_data_foundation_finance_salesforce_account","package":null,"version":null},{"name":"stg_salesforce_account","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":["macro.pingcap_lakehouse.table_config"],"nodes":["model.pingcap_lakehouse.stg_data_foundation_finance_salesforce_account","model.pingcap_lakehouse.stg_salesforce_account"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null},"access":"protected","constraints":[],"version":null,"latest_version":null,"deprecation_date":null},"test.pingcap_lakehouse.parity_order_daily_view_vs_taskflow":{"database":null,"schema":"dbt_test__audit","name":"parity_order_daily_view_vs_taskflow","resource_type":"test","package_name":"pingcap_lakehouse","path":"parity_order_daily_view_vs_taskflow.sql","original_file_path":"engine/tests/parity_order_daily_view_vs_taskflow.sql","unique_id":"test.pingcap_lakehouse.parity_order_daily_view_vs_taskflow","fqn":["pingcap_lakehouse","parity_order_daily_view_vs_taskflow"],"alias":"parity_order_daily_view_vs_taskflow","checksum":{"name":"sha256","checksum":"63ed516e51d1ccf3ec521976fc2f334271063f54970e604b2df131379c0ed5a2"},"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":0,"relation_name":null,"raw_code":"-- Parity test (ADR 0019) for salesforce_order_daily_view: the dbt and native Task Flow builds must\n-- materialise the same order-day rows. processed_at is excluded because it is now() —\n-- non-deterministic between a dbt view (evaluated at query time) and a Task Flow table (frozen at\n-- build time). Floating revenue/rate fields use the same tolerances as the BigQuery daily-view\n-- parity harness, because view evaluation and Task Flow table materialization can differ by\n-- insignificant binary-float noise.\n-- Passes when zero rows are returned. Requires transform/taskflow/deploy.py to have run.\n\nWITH dbt AS (\n    SELECT TRUE AS _dbt_present, * EXCLUDE (processed_at)\n    FROM {{ ref('salesforce_order_daily_view') }}\n),\n\ntaskflow AS (\n    SELECT TRUE AS _taskflow_present, * EXCLUDE (processed_at)\n    FROM transform_taskflow_dwh.salesforce_order_daily_view\n)\n\nSELECT\n    CASE\n        WHEN dbt._dbt_present IS NULL THEN 'taskflow_only'\n        WHEN taskflow._taskflow_present IS NULL THEN 'dbt_only'\n        ELSE 'value_mismatch'\n    END AS _reason,\n    date_day,\n    order_id\nFROM dbt\nFULL OUTER JOIN taskflow USING (date_day, order_id)\nWHERE\n    dbt._dbt_present IS NULL\n    OR taskflow._taskflow_present IS NULL\n    OR (\n        dbt.opportunity_id IS DISTINCT FROM taskflow.opportunity_id\n        OR dbt.account_id IS DISTINCT FROM taskflow.account_id\n        OR dbt.accumulate_revenue_to_org_tenant_id IS DISTINCT FROM taskflow.accumulate_revenue_to_org_tenant_id\n        OR dbt.order_name IS DISTINCT FROM taskflow.order_name\n        OR dbt.order_number IS DISTINCT FROM taskflow.order_number\n        OR dbt.order_status IS DISTINCT FROM taskflow.order_status\n        OR dbt.reason IS DISTINCT FROM taskflow.reason\n        OR dbt.order_product_family IS DISTINCT FROM taskflow.order_product_family\n        OR dbt.order_start_date IS DISTINCT FROM taskflow.order_start_date\n        OR dbt.order_end_date IS DISTINCT FROM taskflow.order_end_date\n        OR dbt.write_off_date IS DISTINCT FROM taskflow.write_off_date\n        OR dbt.order_is_terminated IS DISTINCT FROM taskflow.order_is_terminated\n        OR dbt.order_termination_date IS DISTINCT FROM taskflow.order_termination_date\n        OR dbt.real_order_termination_date IS DISTINCT FROM taskflow.real_order_termination_date\n        OR dbt.billing_country_code IS DISTINCT FROM taskflow.billing_country_code\n        OR dbt.product_family IS DISTINCT FROM taskflow.product_family\n        OR dbt.opportunity_currency IS DISTINCT FROM taskflow.opportunity_currency\n        OR dbt.is_commitment_plan IS DISTINCT FROM taskflow.is_commitment_plan\n        OR dbt.order_service_start_date IS DISTINCT FROM taskflow.order_service_start_date\n        OR dbt.order_service_end_date IS DISTINCT FROM taskflow.order_service_end_date\n        OR (\n            dbt.total_fees IS DISTINCT FROM taskflow.total_fees\n            AND (dbt.total_fees IS NULL OR taskflow.total_fees IS NULL OR ABS(dbt.total_fees - taskflow.total_fees) > 0.01)\n        )\n        OR (\n            dbt.order_net_fees IS DISTINCT FROM taskflow.order_net_fees\n            AND (dbt.order_net_fees IS NULL OR taskflow.order_net_fees IS NULL OR ABS(dbt.order_net_fees - taskflow.order_net_fees) > 0.01)\n        )\n        OR (\n            dbt.accumulated_revenue IS DISTINCT FROM taskflow.accumulated_revenue\n            AND (dbt.accumulated_revenue IS NULL OR taskflow.accumulated_revenue IS NULL OR ABS(dbt.accumulated_revenue - taskflow.accumulated_revenue) > 0.01)\n        )\n        OR (\n            dbt.accumulated_credit_amount IS DISTINCT FROM taskflow.accumulated_credit_amount\n            AND (dbt.accumulated_credit_amount IS NULL OR taskflow.accumulated_credit_amount IS NULL OR ABS(dbt.accumulated_credit_amount - taskflow.accumulated_credit_amount) > 0.01)\n        )\n        OR (\n            dbt.accumulated_revenue_before_adjust IS DISTINCT FROM taskflow.accumulated_revenue_before_adjust\n            AND (dbt.accumulated_revenue_before_adjust IS NULL OR taskflow.accumulated_revenue_before_adjust IS NULL OR ABS(dbt.accumulated_revenue_before_adjust - taskflow.accumulated_revenue_before_adjust) > 0.01)\n        )\n        OR (\n            dbt.tax_rate IS DISTINCT FROM taskflow.tax_rate\n            AND (dbt.tax_rate IS NULL OR taskflow.tax_rate IS NULL OR ABS(dbt.tax_rate - taskflow.tax_rate) > 0.000001)\n        )\n        OR (\n            dbt.opportunity_exchange_rate IS DISTINCT FROM taskflow.opportunity_exchange_rate\n            AND (dbt.opportunity_exchange_rate IS NULL OR taskflow.opportunity_exchange_rate IS NULL OR ABS(dbt.opportunity_exchange_rate - taskflow.opportunity_exchange_rate) > 0.000001)\n        )\n    )","language":"sql","refs":[{"name":"salesforce_order_daily_view","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":[],"nodes":["model.pingcap_lakehouse.salesforce_order_daily_view"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null}},"test.pingcap_lakehouse.parity_vs_taskflow":{"database":null,"schema":"dbt_test__audit","name":"parity_vs_taskflow","resource_type":"test","package_name":"pingcap_lakehouse","path":"parity_vs_taskflow.sql","original_file_path":"engine/tests/parity_vs_taskflow.sql","unique_id":"test.pingcap_lakehouse.parity_vs_taskflow","fqn":["pingcap_lakehouse","parity_vs_taskflow"],"alias":"parity_vs_taskflow","checksum":{"name":"sha256","checksum":"ee7e92ca66a771c9035397fe8b82b4f35d58ff06d204d18e6b8e3ee8a2f387ed"},"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":0,"relation_name":null,"raw_code":"-- Parity test (ADR 0019): the dbt build and the native Task Flow build of the target must\n-- materialise identical rows. dbt singular tests pass when the query returns zero rows.\n-- Requires transform/taskflow/deploy.py to have run (creates transform_taskflow_dwh.*).\nSELECT 'dbt_only' AS _side, *\nFROM (\n    SELECT * FROM {{ ref('salesforce_org_monthly_revrec') }}\n    EXCEPT\n    SELECT * FROM transform_taskflow_dwh.salesforce_org_monthly_revrec\n)\n\nUNION ALL\n\nSELECT 'taskflow_only' AS _side, *\nFROM (\n    SELECT * FROM transform_taskflow_dwh.salesforce_org_monthly_revrec\n    EXCEPT\n    SELECT * FROM {{ ref('salesforce_org_monthly_revrec') }}\n)","language":"sql","refs":[{"name":"salesforce_org_monthly_revrec","package":null,"version":null},{"name":"salesforce_org_monthly_revrec","package":null,"version":null}],"sources":[],"metrics":[],"depends_on":{"macros":[],"nodes":["model.pingcap_lakehouse.salesforce_org_monthly_revrec"]},"compiled_path":null,"contract":{"enforced":false,"alias_types":true,"checksum":null}},"seed.pingcap_lakehouse.payment_type_mapping":{"database":null,"schema":"transform_seeds","name":"payment_type_mapping","resource_type":"seed","package_name":"pingcap_lakehouse","path":"payment_type_mapping.csv","original_file_path":"seeds/payment_type_mapping.csv","unique_id":"seed.pingcap_lakehouse.payment_type_mapping","fqn":["pingcap_lakehouse","payment_type_mapping"],"alias":"payment_type_mapping","checksum":{"name":"sha256","checksum":"5e71412ba47b042a72e13cec12e87bdab00e40efcf3c59c764a3018bf891c5bc"},"config":{"enabled":true,"alias":null,"schema":"transform_seeds","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":null},"tags":[],"description":"","columns":{},"meta":{},"group":null,"docs":{"show":true,"node_color":null},"patch_path":null,"build_path":null,"unrendered_config":{"schema":"transform_seeds"},"created_at":0,"relation_name":"transform_seeds.payment_type_mapping","raw_code":"","root_path":"transform/dbt","depends_on":{"macros":[]}},"seed.pingcap_lakehouse.org_monthly_bill_confirmation_for_revrec":{"database":null,"schema":"transform_seeds","name":"org_monthly_bill_confirmation_for_revrec","resource_type":"seed","package_name":"pingcap_lakehouse","path":"org_monthly_bill_confirmation_for_revrec.csv","original_file_path":"sources/googlesheets/seeds/org_monthly_bill_confirmation_for_revrec.csv","unique_id":"seed.pingcap_lakehouse.org_monthly_bill_confirmation_for_revrec","fqn":["pingcap_lakehouse","org_monthly_bill_confirmation_for_revrec"],"alias":"org_monthly_bill_confirmation_for_revrec","checksum":{"name":"path","checksum":"sources/googlesheets/seeds/org_monthly_bill_confirmation_for_revrec.csv"},"config":{"enabled":true,"alias":null,"schema":"transform_seeds","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":null},"tags":[],"description":"","columns":{},"meta":{},"group":null,"docs":{"show":true,"node_color":null},"patch_path":null,"build_path":null,"unrendered_config":{"schema":"transform_seeds"},"created_at":0,"relation_name":"transform_seeds.org_monthly_bill_confirmation_for_revrec","raw_code":"","root_path":"transform/dbt","depends_on":{"macros":[]}}},"sources":{"source.pingcap_lakehouse.data_foundation_finance.monthly_cloud_revrec":{"database":null,"schema":"data_foundation_finance_raw","name":"monthly_cloud_revrec","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/data_foundation_finance/sources.yml","original_file_path":"sources/data_foundation_finance/sources.yml","unique_id":"source.pingcap_lakehouse.data_foundation_finance.monthly_cloud_revrec","fqn":["pingcap_lakehouse","data_foundation_finance","data_foundation_finance","monthly_cloud_revrec"],"source_name":"data_foundation_finance","source_description":"Raw snapshots from the `data_foundation_finance` finance data hub (a TiDB database, a different org from nexuscrm), loaded TiDB Cloud -> S3 -> Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016; manifest path). This hub is the upstream system for managed cloud revenue tables. `monthly_cloud_revrec` remains the cloud rev-rec ledger behind finance.cloud_revenue. It is not sufficient by itself for strict Revenue__c parity in salesforce_order_daily_view (#16); that parity input comes from the one-off salesforce_raw Revenue__c snapshot.\n","loader":"","identifier":"data_foundation_finance_monthly_cloud_revrec_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Cloud monthly rev-rec ledger. Grain: one row per (revrec_number, bill_month) per reporting snapshot (estimate then actual restatements live as separate rows within a snapshot; staging dedups to the actual). adjusted_revenue_amount reconciles to the SF Revenue__c adjusted amount and revenue_amount to the pre-adjust amount (~99% to the cent).\n","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"data_foundation_finance_raw.data_foundation_finance_monthly_cloud_revrec_snapshots","created_at":0},"source.pingcap_lakehouse.data_foundation_finance.salesforce_account":{"database":null,"schema":"data_foundation_finance_raw","name":"salesforce_account","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/data_foundation_finance/sources.yml","original_file_path":"sources/data_foundation_finance/sources.yml","unique_id":"source.pingcap_lakehouse.data_foundation_finance.salesforce_account","fqn":["pingcap_lakehouse","data_foundation_finance","data_foundation_finance","salesforce_account"],"source_name":"data_foundation_finance","source_description":"Raw snapshots from the `data_foundation_finance` finance data hub (a TiDB database, a different org from nexuscrm), loaded TiDB Cloud -> S3 -> Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016; manifest path). This hub is the upstream system for managed cloud revenue tables. `monthly_cloud_revrec` remains the cloud rev-rec ledger behind finance.cloud_revenue. It is not sufficient by itself for strict Revenue__c parity in salesforce_order_daily_view (#16); that parity input comes from the one-off salesforce_raw Revenue__c snapshot.\n","loader":"","identifier":"data_foundation_finance_salesforce_account_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Finance data hub's Salesforce account mirror. Used as a source-faithful supplement for account metadata that is blank in NexusCRM snapshots but populated in the legacy finance source, such as account region for monthly revrec parity.","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"data_foundation_finance_raw.data_foundation_finance_salesforce_account_snapshots","created_at":0},"source.pingcap_lakehouse.metadb.billing2_invoices":{"database":null,"schema":"metadb_raw","name":"billing2_invoices","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/metadb/sources.yml","original_file_path":"sources/metadb/sources.yml","unique_id":"source.pingcap_lakehouse.metadb.billing2_invoices","fqn":["pingcap_lakehouse","metadb","metadb","billing2_invoices"],"source_name":"metadb","source_description":"metadb raw snapshots, loaded by ingestion/load/gcs_bulk_load via the external-incremental path (ADR 0018; owns the raw-snapshot contract per ADR 0016). Only billing2_invoices is used by this target: snapshotting cloud_tenants from BigQuery removed the need for metadb.tenants / metadb.users (their only consumers were cloud_users / cloud_tenants).\n","loader":"","identifier":"metadb_billing2_invoices_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"metadb_raw.metadb_billing2_invoices_snapshots","created_at":0},"source.pingcap_lakehouse.nexuscrm.org__c":{"database":null,"schema":"nexuscrm_raw","name":"org__c","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/nexuscrm/sources.yml","original_file_path":"sources/nexuscrm/sources.yml","unique_id":"source.pingcap_lakehouse.nexuscrm.org__c","fqn":["pingcap_lakehouse","nexuscrm","nexuscrm","org__c"],"source_name":"nexuscrm","source_description":"nexuscrm (a parallel Salesforce instance) raw snapshots, loaded from TiDB Cloud → S3 → Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016). These replace the BigQuery Fivetran `salesforce.*` sources from the digital_bi_dbt project.\n","loader":"","identifier":"nexuscrm_org__c_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Salesforce custom object Org__c — the org↔tenant mapping (ID__c = tenant_id).","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"nexuscrm_raw.nexuscrm_org__c_snapshots","created_at":0},"source.pingcap_lakehouse.nexuscrm.account":{"database":null,"schema":"nexuscrm_raw","name":"account","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/nexuscrm/sources.yml","original_file_path":"sources/nexuscrm/sources.yml","unique_id":"source.pingcap_lakehouse.nexuscrm.account","fqn":["pingcap_lakehouse","nexuscrm","nexuscrm","account"],"source_name":"nexuscrm","source_description":"nexuscrm (a parallel Salesforce instance) raw snapshots, loaded from TiDB Cloud → S3 → Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016). These replace the BigQuery Fivetran `salesforce.*` sources from the digital_bi_dbt project.\n","loader":"","identifier":"nexuscrm_account_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Salesforce Account.","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"nexuscrm_raw.nexuscrm_account_snapshots","created_at":0},"source.pingcap_lakehouse.nexuscrm.order":{"database":null,"schema":"nexuscrm_raw","name":"order","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/nexuscrm/sources.yml","original_file_path":"sources/nexuscrm/sources.yml","unique_id":"source.pingcap_lakehouse.nexuscrm.order","fqn":["pingcap_lakehouse","nexuscrm","nexuscrm","order"],"source_name":"nexuscrm","source_description":"nexuscrm (a parallel Salesforce instance) raw snapshots, loaded from TiDB Cloud → S3 → Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016). These replace the BigQuery Fivetran `salesforce.*` sources from the digital_bi_dbt project.\n","loader":"","identifier":"nexuscrm_order_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Salesforce Order.","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"nexuscrm_raw.nexuscrm_order_snapshots","created_at":0},"source.pingcap_lakehouse.nexuscrm.opportunity":{"database":null,"schema":"nexuscrm_raw","name":"opportunity","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/nexuscrm/sources.yml","original_file_path":"sources/nexuscrm/sources.yml","unique_id":"source.pingcap_lakehouse.nexuscrm.opportunity","fqn":["pingcap_lakehouse","nexuscrm","nexuscrm","opportunity"],"source_name":"nexuscrm","source_description":"nexuscrm (a parallel Salesforce instance) raw snapshots, loaded from TiDB Cloud → S3 → Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016). These replace the BigQuery Fivetran `salesforce.*` sources from the digital_bi_dbt project.\n","loader":"","identifier":"nexuscrm_opportunity_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Salesforce Opportunity.","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"nexuscrm_raw.nexuscrm_opportunity_snapshots","created_at":0},"source.pingcap_lakehouse.nexuscrm.order_product":{"database":null,"schema":"nexuscrm_raw","name":"order_product","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/nexuscrm/sources.yml","original_file_path":"sources/nexuscrm/sources.yml","unique_id":"source.pingcap_lakehouse.nexuscrm.order_product","fqn":["pingcap_lakehouse","nexuscrm","nexuscrm","order_product"],"source_name":"nexuscrm","source_description":"nexuscrm (a parallel Salesforce instance) raw snapshots, loaded from TiDB Cloud → S3 → Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016). These replace the BigQuery Fivetran `salesforce.*` sources from the digital_bi_dbt project.\n","loader":"","identifier":"nexuscrm_order_product__c_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Salesforce custom order line object Order_Product__c — the authoritative line source (same object the BigQuery model uses, and what nexuscrm's own Order rollups Overall_*_Date__c / Net_Fees__c read from). The earlier detour to the standard OrderItem object (taken because the migration left Order_Product__c unpopulated) is reverted now that the dropped base columns (Net_fees__c, Service_Start/End_Date__c, Term_Months__c, Product__c) were backfilled from the legacy Fivetran→BigQuery mirror (2026-05-31, #17).\n","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"nexuscrm_raw.nexuscrm_order_product__c_snapshots","created_at":0},"source.pingcap_lakehouse.nexuscrm.product2":{"database":null,"schema":"nexuscrm_raw","name":"product2","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/nexuscrm/sources.yml","original_file_path":"sources/nexuscrm/sources.yml","unique_id":"source.pingcap_lakehouse.nexuscrm.product2","fqn":["pingcap_lakehouse","nexuscrm","nexuscrm","product2"],"source_name":"nexuscrm","source_description":"nexuscrm (a parallel Salesforce instance) raw snapshots, loaded from TiDB Cloud → S3 → Databend by ingestion/load/s3_bulk_load (owns the raw-snapshot contract per ADR 0016). These replace the BigQuery Fivetran `salesforce.*` sources from the digital_bi_dbt project.\n","loader":"","identifier":"nexuscrm_product2_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Salesforce Product2.","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"nexuscrm_raw.nexuscrm_product2_snapshots","created_at":0},"source.pingcap_lakehouse.bq_warehouse.cloud_tenants":{"database":null,"schema":"bq_warehouse_raw","name":"cloud_tenants","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/bq_warehouse/sources.yml","original_file_path":"sources/bq_warehouse/sources.yml","unique_id":"source.pingcap_lakehouse.bq_warehouse.cloud_tenants","fqn":["pingcap_lakehouse","bq_warehouse","bq_warehouse","cloud_tenants"],"source_name":"bq_warehouse","source_description":"Snapshots of BigQuery warehouse-layer tables (from the digital_bi_dbt project) landed in Databend so we can short-circuit branches we are not re-porting. cloud_tenants is snapshotted instead of rebuilding the GA4 → cloud_users → cloud_tenants chain (only its scalar columns are consumed downstream). In production this is produced by the ingestion/extract/bigquery + gcs_bulk_load cloud_tenants units (ADR 0017); for now it is seeded by a fixture (engine/fixtures/cloud_tenants_fixture.sql).\n","loader":"","identifier":"cloud_tenants_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"bq_warehouse_raw.cloud_tenants_snapshots","created_at":0},"source.pingcap_lakehouse.salesforce.revenue":{"database":null,"schema":"salesforce_raw","name":"revenue","resource_type":"source","package_name":"pingcap_lakehouse","path":"sources/salesforce/sources.yml","original_file_path":"sources/salesforce/sources.yml","unique_id":"source.pingcap_lakehouse.salesforce.revenue","fqn":["pingcap_lakehouse","salesforce","salesforce","revenue"],"source_name":"salesforce","source_description":"Frozen one-off snapshot of the Salesforce `Revenue__c` object. Sourced from the legacy digital_bi Fivetran table `gcp-digital-bi.salesforce.revenue_c` (the only populated copy — the NexusCRM `Revenue__c` snapshot is empty at source, #15), extracted UNMANAGED to a no-expiry ad-hoc S3 bucket and loaded by the MANAGED s3_bulk_load `salesforce` unit (external mode, ADR 0018), which owns the raw-snapshot contract (ADR 0016). This is the same object BigQuery derives `salesforce_order_daily_view` from. Revenue is no longer recorded in Salesforce/NexusCRM (#16); go-forward revenue is the new business process tracked in #19.\n","loader":"","identifier":"salesforce_revenue_c_snapshots","quoting":{"database":null,"schema":null,"identifier":null,"column":null},"loaded_at_field":null,"freshness":{"warn_after":{"count":null,"period":null},"error_after":{"count":null,"period":null},"filter":null},"external":null,"description":"Salesforce custom object Revenue__c (rev-rec records) — historical freeze.","columns":{},"meta":{},"source_meta":{},"tags":[],"config":{"enabled":true},"patch_path":null,"unrendered_config":{},"relation_name":"salesforce_raw.salesforce_revenue_c_snapshots","created_at":0}},"macros":{"macro.pingcap_lakehouse.latest_snapshot_manifest":{"name":"latest_snapshot_manifest","resource_type":"macro","package_name":"pingcap_lakehouse","path":"engine/macros/raw_snapshot_latest.sql","original_file_path":"engine/macros/raw_snapshot_latest.sql","unique_id":"macro.pingcap_lakehouse.latest_snapshot_manifest","macro_sql":"\n\n{%- macro latest_snapshot_manifest(relation, pk='id') -%}\n    SELECT * EXCLUDE (_snapshot_date, _snapshot_run_id, _snapshot_loaded_at, _source_database, _source_table, _rn)\n    FROM (\n        SELECT *, ROW_NUMBER() OVER (PARTITION BY {{ pk }} ORDER BY _snapshot_loaded_at DESC) AS _rn\n        FROM {{ relation }}\n    )\n    WHERE _rn = 1\n{%- endmacro -%}\n\n","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.pingcap_lakehouse.latest_snapshot_external":{"name":"latest_snapshot_external","resource_type":"macro","package_name":"pingcap_lakehouse","path":"engine/macros/raw_snapshot_latest.sql","original_file_path":"engine/macros/raw_snapshot_latest.sql","unique_id":"macro.pingcap_lakehouse.latest_snapshot_external","macro_sql":"{%- macro latest_snapshot_external(relation, pk='id') -%}\n    SELECT * EXCLUDE (_extraction_ts, _extraction_at, _loaded_at, _source_uri, _source_table, _rn)\n    FROM (\n        SELECT *, ROW_NUMBER() OVER (PARTITION BY {{ pk }} ORDER BY _extraction_ts DESC) AS _rn\n        FROM {{ relation }}\n    )\n    WHERE _rn = 1\n{%- endmacro -%}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.pingcap_lakehouse.table_config":{"name":"table_config","resource_type":"macro","package_name":"pingcap_lakehouse","path":"engine/macros/table_config.sql","original_file_path":"engine/macros/table_config.sql","unique_id":"macro.pingcap_lakehouse.table_config","macro_sql":"\n{%- macro table_config(table_type='view', partition_column=None, unique_keys=None, merge_update_columns=None) -%}\n\n    {%- if table_type == 'view' -%}\n        {{ config(materialized='view') }}\n\n    {%- elif table_type == 'table' -%}\n        {{ config(materialized='table') }}\n\n    {%- elif table_type == 'ephemeral' -%}\n        {{ config(materialized='ephemeral') }}\n\n    {%- elif table_type in ['merge', 'incremental'] -%}\n        {%- if unique_keys is none -%}\n            {{ exceptions.raise_compiler_error(\"unique_keys must be defined for incremental/merge models\") }}\n        {%- endif -%}\n        {#- dbt-databend-cloud incremental defaults to delete+insert on unique_key; merge is not\n            assumed supported. None of the ported revrec models use this path today. -#}\n        {{ config(materialized='incremental', unique_key=unique_keys) }}\n\n    {%- else -%}\n        {{ exceptions.raise_compiler_error(\"Unsupported table_type for Databend: \" ~ table_type) }}\n    {%- endif -%}\n\n{%- endmacro -%}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.pingcap_lakehouse.generate_schema_name":{"name":"generate_schema_name","resource_type":"macro","package_name":"pingcap_lakehouse","path":"engine/macros/generate_schema_name.sql","original_file_path":"engine/macros/generate_schema_name.sql","unique_id":"macro.pingcap_lakehouse.generate_schema_name","macro_sql":"\n{%- macro generate_schema_name(custom_schema_name, node) -%}\n    {%- if custom_schema_name is none -%}\n        {{ target.schema }}\n    {%- else -%}\n        {{ custom_schema_name | trim }}\n    {%- endif -%}\n{%- endmacro -%}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.pingcap_lakehouse.generate_surrogate_key":{"name":"generate_surrogate_key","resource_type":"macro","package_name":"pingcap_lakehouse","path":"engine/macros/dbt_utils_compat/surrogate_key.sql","original_file_path":"engine/macros/dbt_utils_compat/surrogate_key.sql","unique_id":"macro.pingcap_lakehouse.generate_surrogate_key","macro_sql":"\n{%- macro generate_surrogate_key(field_list) -%}\n    md5(concat_ws('-'\n        {%- for field in field_list -%}\n            , coalesce(cast({{ field }} as varchar), '')\n        {%- endfor -%}\n    ))\n{%- endmacro -%}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__any_value":{"name":"databend__any_value","resource_type":"macro","package_name":"dbt_databend","path":"macros/utils.sql","original_file_path":"macros/utils.sql","unique_id":"macro.dbt_databend.databend__any_value","macro_sql":"{% macro databend__any_value(expression) -%}\n    any({{ expression }})\n{%- endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__dateadd":{"name":"databend__dateadd","resource_type":"macro","package_name":"dbt_databend","path":"macros/utils.sql","original_file_path":"macros/utils.sql","unique_id":"macro.dbt_databend.databend__dateadd","macro_sql":"{% macro databend__dateadd(datepart, interval, from_date_or_timestamp) %}\n    date_add(\n        {{ datepart }},\n        {{ interval }},\n        {{ from_date_or_timestamp }}\n        )\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__get_catalog":{"name":"databend__get_catalog","resource_type":"macro","package_name":"dbt_databend","path":"macros/catalog.sql","original_file_path":"macros/catalog.sql","unique_id":"macro.dbt_databend.databend__get_catalog","macro_sql":"{% macro databend__get_catalog(information_schema, schemas) -%}\n  {%- call statement('catalog', fetch_result=True) -%}\n    select\n      null as table_database,\n      tables.database as table_schema,\n      tables.name as table_name,\n      if(tables.engine = 'VIEW', 'view', 'table') as table_type,\n      null as table_comment,\n      null as column_name,\n      0 as column_index,\n      null as column_type,\n      null as column_comment,\n      null as table_owner\n    from system.tables\n    where tables.database != 'system' and\n    (\n    {%- for schema in schemas -%}\n      tables.database = '{{ schema }}'\n      {%- if not loop.last %} or {% endif -%}\n    {%- endfor -%}\n    )\n    order by tables.database, tables.name\n  {%- endcall -%}\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":0,"supported_languages":null},"macro.dbt_databend.databend__create_schema":{"name":"databend__create_schema","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__create_schema","macro_sql":"{% macro databend__create_schema(relation) -%}\n'''Creates a new schema in the  target database, if schema already exists, method is a no-op. '''\n  {%- call statement('create_schema') -%}\n    create database 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":0,"supported_languages":null},"macro.dbt_databend.databend__drop_relation":{"name":"databend__drop_relation","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__drop_relation","macro_sql":"{% macro databend__drop_relation(relation) -%}\n'''Deletes relatonship identifer between tables.'''\n/*\n  1. If database exists\n  2. Create a new schema if passed schema does not exist already\n*/\n  {% call statement('drop_relation', auto_begin=False) -%}\n    drop {{ relation.type }} if exists {{ relation }}\n  {%- endcall %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__drop_schema":{"name":"databend__drop_schema","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__drop_schema","macro_sql":"{% macro databend__drop_schema(relation) -%}\n'''drops a schema in a target database.'''\n/*\n  1. If database exists\n  2. search all calls of schema, and change include value to False, cascade it to backtrack\n*/\n  {%- call statement('drop_schema') -%}\n    drop database if 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":0,"supported_languages":null},"macro.dbt_databend.databend__get_columns_in_relation":{"name":"databend__get_columns_in_relation","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__get_columns_in_relation","macro_sql":"{% macro databend__get_columns_in_relation(relation) -%}\n'''Returns a list of Columns in a table.'''\n/*\n  1. select as many values from column as needed\n  2. search relations to columns\n  3. where table name is equal to the relation identifier\n  4. if a relation schema exists and table schema is equal to the relation schema\n  5. order in whatever way you want to call.\n  6. create a table by loading result from call\n  7. return new table\n*/\n  {% call statement('get_columns_in_relation', fetch_result=True) %}\n    select\n      name,\n      type,\n      0 as position\n    from system.columns\n    where\n      table = '{{ relation.identifier }}'\n    {% if relation.schema %}\n      and database = '{{ relation.schema }}'\n    {% endif %}\n  {% endcall %}\n  {% do return(load_result('get_columns_in_relation').table) %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__list_relations_without_caching":{"name":"databend__list_relations_without_caching","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__list_relations_without_caching","macro_sql":"{% macro databend__list_relations_without_caching(schema_relation) -%}\n'''creates a table of relations withough using local caching.'''\n  {% call statement('list_relations_without_caching', fetch_result=True) -%}\n    select\n      null as db,\n      name as name,\n      database as schema,\n      if(engine = 'VIEW', 'view', 'table') as type\n    from system.tables\n    where database = '{{ 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":0,"supported_languages":null},"macro.dbt_databend.databend__list_schemas":{"name":"databend__list_schemas","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__list_schemas","macro_sql":"{% macro databend__list_schemas(database) -%}\n'''Returns a table of unique schemas.'''\n/*\n  1. search schemea by specific name\n  2. create a table with names\n*/\n  {% call statement('list_schemas', fetch_result=True, auto_begin=False) %}\n    select name from system.databases\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":0,"supported_languages":null},"macro.dbt_databend.databend__rename_relation":{"name":"databend__rename_relation","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__rename_relation","macro_sql":"{% macro databend__rename_relation(from_relation, to_relation) -%}\n'''Renames a relation in the database.'''\n/*\n  1. Search for a specific relation name\n  2. alter table by targeting specific name and passing in new name\n*/\n  {% call statement('drop_relation') %}\n    drop {{ to_relation.type }} if exists {{ to_relation }}\n  {% endcall %}\n  {% call statement('rename_relation') %}\n    rename table {{ from_relation }} to {{ to_relation }}\n  {% endcall %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__truncate_relation":{"name":"databend__truncate_relation","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__truncate_relation","macro_sql":"{% macro databend__truncate_relation(relation) -%}\n'''Removes all rows from a targeted set of tables.'''\n/*\n  1. grab all tables tied to the relation\n  2. remove rows from relations\n*/\n  {% call statement('truncate_relation') -%}\n    truncate table {{ relation }}\n  {%- endcall %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__make_temp_relation":{"name":"databend__make_temp_relation","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__make_temp_relation","macro_sql":"{% macro databend__make_temp_relation(base_relation, suffix) %}\n  {% set tmp_identifier = base_relation.identifier ~ suffix %}\n  {% set tmp_relation = base_relation.incorporate(\n                              path={\"identifier\": tmp_identifier, \"schema\": None}) -%}\n  {% do return(tmp_relation) %}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__generate_database_name":{"name":"databend__generate_database_name","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__generate_database_name","macro_sql":"{% macro databend__generate_database_name(custom_database_name=none, node=none) -%}\n  {% do return(None) %}\n{%- endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__current_timestamp":{"name":"databend__current_timestamp","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__current_timestamp","macro_sql":"{% macro databend__current_timestamp() -%}\n  NOW()\n{%- endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__create_table_as":{"name":"databend__create_table_as","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__create_table_as","macro_sql":"{% macro databend__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  {% if temporary -%}\n    create or replace transient table {{ relation.name }}\n  {%- else %}\n    create or replace table {{ relation.include(database=False) }}\n    {{ cluster_by_clause(label=\"cluster by\") }}\n  {%- endif %}\n  as {{ sql }}\n{%- endmacro %}","depends_on":{"macros":["macro.dbt_databend.cluster_by_clause"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__create_view_as":{"name":"databend__create_view_as","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__create_view_as","macro_sql":"{% macro databend__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.include(database=False) }}\n  as {{ sql }}\n{%- endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__get_columns_in_query":{"name":"databend__get_columns_in_query","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.databend__get_columns_in_query","macro_sql":"{% macro databend__get_columns_in_query(select_sql) %}\n  {% call statement('get_columns_in_query', fetch_result=True, auto_begin=False) -%}\n    select * from (\n        {{ select_sql }}\n    ) as __dbt_sbq\n    limit 0\n  {% endcall %}\n\n  {{ return(load_result('get_columns_in_query').table.columns | map(attribute='name') | list) }}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.cluster_by_clause":{"name":"cluster_by_clause","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters.sql","original_file_path":"macros/adapters.sql","unique_id":"macro.dbt_databend.cluster_by_clause","macro_sql":"{% macro cluster_by_clause(label) %}\n  {%- set cols = config.get('cluster_by', validator=validation.any[list, basestring]) -%}\n  {%- if cols is not none %}\n    {%- if cols is string -%}\n      {%- set cols = [cols] -%}\n    {%- endif -%}\n    {{ label }}\n    {%- for item in cols -%}\n      {{ item }}\n      {%- if not loop.last -%},{%- endif -%}\n    {%- endfor -%}\n  {%- endif %}\n{%- endmacro -%}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.basic_load_csv_rows":{"name":"basic_load_csv_rows","resource_type":"macro","package_name":"dbt_databend","path":"macros/materializations/seed.sql","original_file_path":"macros/materializations/seed.sql","unique_id":"macro.dbt_databend.basic_load_csv_rows","macro_sql":"{% macro basic_load_csv_rows(model, batch_size, agate_table) %}\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                    %s\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_seed_column_quoted_csv"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.materialization_table_databend":{"name":"materialization_table_databend","resource_type":"macro","package_name":"dbt_databend","path":"macros/materializations/table.sql","original_file_path":"macros/materializations/table.sql","unique_id":"macro.dbt_databend.materialization_table_databend","macro_sql":"{% materialization table, adapter='databend' %}\n\n  {%- set existing_relation = load_cached_relation(this) -%}\n  {%- set target_relation = this.incorporate(type='table') -%}\n  {%- set backup_relation = none -%}\n  {%- set preexisting_backup_relation = none -%}\n  {%- set preexisting_intermediate_relation = none -%}\n\n  {% if existing_relation is not none %}\n    {%- set backup_relation_type = existing_relation.type -%}\n    {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n    {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n--     {% if not existing_relation.can_exchange %}\n--       {%- set intermediate_relation =  make_intermediate_relation(target_relation) -%}\n--       {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%}\n--     {% endif %}\n  {% endif %}\n\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  {% if backup_relation is none %}\n    {{ log('Creating new relation ' + target_relation.name )}}\n    -- There is not existing relation, so we can just create\n    {% call statement('main') -%}\n      {{ get_create_table_as_sql(False, target_relation, sql) }}\n    {%- endcall %}\n  {% elif existing_relation.can_exchange %}\n    -- We can do an atomic exchange, so no need for an intermediate\n    {% call statement('main') -%}\n      {{ get_create_table_as_sql(False, backup_relation, sql) }}\n    {%- endcall %}\n    {% do exchange_tables_atomic(backup_relation, existing_relation) %}\n  {% else %}\n    -- We have to use an intermediate and rename accordingly\n    {% call statement('main') -%}\n      {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n    {%- endcall %}\n    {{ adapter.rename_relation(existing_relation, backup_relation) }}\n    {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n  {% endif %}\n\n  -- cleanup\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_backup_relation","macro.dbt.make_intermediate_relation","macro.dbt.run_hooks","macro.dbt.drop_relation_if_exists","macro.dbt.statement","macro.dbt.get_create_table_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":0,"supported_languages":["sql"]},"macro.dbt_databend.databend__insert_into":{"name":"databend__insert_into","resource_type":"macro","package_name":"dbt_databend","path":"macros/materializations/table.sql","original_file_path":"macros/materializations/table.sql","unique_id":"macro.dbt_databend.databend__insert_into","macro_sql":"{% macro databend__insert_into(target_relation, sql) %}\n    {%- set dest_columns = adapter.get_columns_in_relation(target_relation) -%}\n    {%- set dest_cols_csv = dest_columns | map(attribute='quoted') | join(', ') -%}\n\n    insert into {{ target_relation }} ({{ dest_cols_csv }})\n    {{ sql }}\n{%- endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.materialization_incremental_databend":{"name":"materialization_incremental_databend","resource_type":"macro","package_name":"dbt_databend","path":"macros/materializations/incremental.sql","original_file_path":"macros/materializations/incremental.sql","unique_id":"macro.dbt_databend.materialization_incremental_databend","macro_sql":"{% materialization incremental, adapter='databend' %}\n\n  {%- set existing_relation = load_cached_relation(this) -%}\n  {%- set target_relation = this.incorporate(type='table') -%}\n\n  {%- set unique_key = config.get('unique_key') -%}\n  {% if unique_key is not none and unique_key|length == 0 %}\n    {% set unique_key = none %}\n  {% endif %}\n  {% if unique_key is iterable and (unique_key is not string and unique_key is not mapping) %}\n     {% set unique_key = unique_key|join(', ') %}\n  {% endif %}\n  {%- set grant_config = config.get('grants') -%}\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  {%- 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  {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n  {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n\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  {{ run_hooks(pre_hooks, inside_transaction=True) }}\n  {% set to_drop = [] %}\n\n  {% if existing_relation is none %}\n    -- No existing table, simply create a new one\n    {% call statement('main') %}\n        {{ get_create_table_as_sql(False, target_relation, sql) }}\n    {% endcall %}\n\n  {% elif full_refresh_mode %}\n    -- Completely replacing the old table, so create a temporary table and then swap it\n    {% call statement('main') %}\n        {{ get_create_table_as_sql(False, intermediate_relation, sql) }}\n    {% endcall %}\n    {% set need_swap = true %}\n\n  {% elif unique_key is none -%}\n    {% call statement('main') %}\n        {{ databend__insert_into(target_relation, sql) }}\n    {% endcall %}\n\n  {% else %}\n    {% set schema_changes = 'ignore' %}\n    {% set incremental_strategy = config.get('incremental_strategy') %}\n    {% set incremental_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\n    {% if incremental_strategy != 'delete_insert' and incremental_predicates %}\n      {% do exceptions.raise_compiler_error('Cannot apply incremental predicates with ' + incremental_strategy + ' strategy.') %}\n    {% endif %}\n    {% if incremental_strategy == 'delete_insert' %}\n      {% do databend__incremental_delete_insert(existing_relation, unique_key, incremental_predicates) %}\n    {% elif incremental_strategy == 'append' %}\n      {% call statement('main') %}\n        {{ databend__insert_into(target_relation, sql) }}\n      {% endcall %}\n    {% endif %}\n  {% endif %}\n\n--   {% if need_swap %}\n--       {% if existing_relation.can_exchange %}\n--         {% do adapter.rename_relation(intermediate_relation, backup_relation) %}\n--         {% do exchange_tables_atomic(backup_relation, target_relation) %}\n--       {% else %}\n--         {% do adapter.rename_relation(target_relation, backup_relation) %}\n--         {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n--       {% endif %}\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  {% 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.should_full_refresh","macro.dbt.incremental_validate_on_schema_change","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_databend.databend__insert_into","macro.dbt_databend.databend__incremental_delete_insert","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":0,"supported_languages":["sql"]},"macro.dbt_databend.process_schema_changes":{"name":"process_schema_changes","resource_type":"macro","package_name":"dbt_databend","path":"macros/materializations/incremental.sql","original_file_path":"macros/materializations/incremental.sql","unique_id":"macro.dbt_databend.process_schema_changes","macro_sql":"{% macro process_schema_changes(on_schema_change, source_relation, target_relation) %}\n\n    {%- set schema_changes_dict = check_for_schema_changes(source_relation, target_relation) -%}\n    {% if not schema_changes_dict['schema_changed'] %}\n      {{ return }}\n    {% endif %}\n\n    {% if on_schema_change == 'fail' %}\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      {% endset %}\n {% do exceptions.raise_compiler_error(fail_msg) %}\n {{ return }}\n {% endif %}\n\n {% do sync_column_schemas(on_schema_change, target_relation, schema_changes_dict) %}\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":0,"supported_languages":null},"macro.dbt_databend.databend__incremental_delete_insert":{"name":"databend__incremental_delete_insert","resource_type":"macro","package_name":"dbt_databend","path":"macros/materializations/incremental.sql","original_file_path":"macros/materializations/incremental.sql","unique_id":"macro.dbt_databend.databend__incremental_delete_insert","macro_sql":"{% macro databend__incremental_delete_insert(existing_relation, unique_key, incremental_predicates) %}\n    {% set new_data_relation = existing_relation.incorporate(path={\"identifier\": model['name']\n    + '__dbt_new_data_' + invocation_id.replace('-', '_')}) %}\n    {{ drop_relation_if_exists(new_data_relation) }}\n    {% call statement('main') %}\n    {{ get_create_table_as_sql(False, new_data_relation, sql) }}\n    {% endcall %}\n    {% call statement('delete_existing_data') %}\ndelete from {{ existing_relation }} where ({{ unique_key }}) in (select {{ unique_key }}\n    from {{ new_data_relation }})\n  {%- if incremental_predicates %}\n    {% for predicate in incremental_predicates %}\n        and {{ predicate }}\n    {% endfor %}\n  {%- endif -%};\n{% endcall %}\n\n    {%- set dest_columns = adapter.get_columns_in_relation(existing_relation) -%}\n    {%- set dest_cols_csv = dest_columns | map(attribute='quoted') | join(', ') -%}\n    {% call statement('insert_new_data') %}\n        insert into {{ existing_relation}} select {{ dest_cols_csv}} from {{ new_data_relation }}\n    {% endcall %}\n    {% do adapter.drop_relation(new_data_relation) %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.replace","macro.dbt.drop_relation_if_exists","macro.dbt.statement","macro.dbt.get_create_table_as_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__get_or_create_relation":{"name":"databend__get_or_create_relation","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/relation.sql","original_file_path":"macros/adapters/relation.sql","unique_id":"macro.dbt_databend.databend__get_or_create_relation","macro_sql":"{% macro databend__get_or_create_relation(database, schema, identifier, type) %}\n  {%- set target_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\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":0,"supported_languages":null},"macro.dbt_databend.databend__get_database":{"name":"databend__get_database","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/relation.sql","original_file_path":"macros/adapters/relation.sql","unique_id":"macro.dbt_databend.databend__get_database","macro_sql":"{% macro databend__get_database(database) %}\n    {% call statement('get_database', fetch_result=True) %}\nselect name\nfrom system.databases\nwhere name = '{{ database }}'\n    {% endcall %}\n   {% do return(load_result('get_database').table) %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__get_show_grant_sql":{"name":"databend__get_show_grant_sql","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/apply_grants.sql","original_file_path":"macros/adapters/apply_grants.sql","unique_id":"macro.dbt_databend.databend__get_show_grant_sql","macro_sql":"{% macro databend__get_show_grant_sql(relation) %}\n    {# Usually called from apply_grants. Should not be called directly. #}\n    {{ adapter.raise_grant_error() }}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__get_grant_sql":{"name":"databend__get_grant_sql","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/apply_grants.sql","original_file_path":"macros/adapters/apply_grants.sql","unique_id":"macro.dbt_databend.databend__get_grant_sql","macro_sql":"\n\n\n{%- macro databend__get_grant_sql(relation, privilege, grantee) -%}\n    {# Usually called from apply_grants. Should not be called directly. #}\n    {{ adapter.raise_grant_error() }}\n{%- endmacro -%}\n\n\n","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__get_revoke_sql":{"name":"databend__get_revoke_sql","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/apply_grants.sql","original_file_path":"macros/adapters/apply_grants.sql","unique_id":"macro.dbt_databend.databend__get_revoke_sql","macro_sql":"{%- macro databend__get_revoke_sql(relation, privilege, grantee) -%}\n    {# Usually called from apply_grants. Should not be called directly. #}\n    {{ adapter.raise_grant_error() }}\n{%- endmacro -%}\n\n\n","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__copy_grants":{"name":"databend__copy_grants","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/apply_grants.sql","original_file_path":"macros/adapters/apply_grants.sql","unique_id":"macro.dbt_databend.databend__copy_grants","macro_sql":"{% macro databend__copy_grants() %}\n    {{ return(True) }}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__apply_grants":{"name":"databend__apply_grants","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/apply_grants.sql","original_file_path":"macros/adapters/apply_grants.sql","unique_id":"macro.dbt_databend.databend__apply_grants","macro_sql":"{% macro databend__apply_grants(relation, grant_config, should_revoke) %}\n    {% if grant_config %}\n        {{ adapter.raise_grant_error() }}\n    {% endif %}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt_databend.databend__get_dcl_statement_list":{"name":"databend__get_dcl_statement_list","resource_type":"macro","package_name":"dbt_databend","path":"macros/adapters/apply_grants.sql","original_file_path":"macros/adapters/apply_grants.sql","unique_id":"macro.dbt_databend.databend__get_dcl_statement_list","macro_sql":"\n\n\n{%- macro databend__get_dcl_statement_list(relation, grant_config, get_dcl_macro) -%}\n    {# Databend does not support DCL statements yet #}\n    {% if grant_config %}\n        {{ adapter.raise_grant_error() }}\n    {% endif %}\n    {{ return([]) }}\n{%- endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.default__snapshot_merge_sql":{"name":"default__snapshot_merge_sql","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/snapshot_merge.sql","original_file_path":"macros/materializations/snapshots/snapshot_merge.sql","unique_id":"macro.dbt.default__snapshot_merge_sql","macro_sql":"{% macro default__snapshot_merge_sql(target, source, insert_cols) -%}\n    {%- set insert_cols_csv = insert_cols | join(', ') -%}\n\n    {%- set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() -%}\n\n    merge into {{ target.render() }} as DBT_INTERNAL_DEST\n    using {{ source }} as DBT_INTERNAL_SOURCE\n    on DBT_INTERNAL_SOURCE.{{ columns.dbt_scd_id }} = DBT_INTERNAL_DEST.{{ columns.dbt_scd_id }}\n\n    when matched\n     {% if config.get(\"dbt_valid_to_current\") %}\n\t{% set source_unique_key = (\"DBT_INTERNAL_DEST.\" ~ columns.dbt_valid_to) | trim %}\n\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\tand ({{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null)\n\n     {% else %}\n       and DBT_INTERNAL_DEST.{{ columns.dbt_valid_to }} is null\n     {% endif %}\n     and DBT_INTERNAL_SOURCE.dbt_change_type in ('update', 'delete')\n        then update\n        set {{ columns.dbt_valid_to }} = DBT_INTERNAL_SOURCE.{{ columns.dbt_valid_to }}\n\n    when not matched\n     and DBT_INTERNAL_SOURCE.dbt_change_type = 'insert'\n        then insert ({{ insert_cols_csv }})\n        values ({{ insert_cols_csv }})\n\n{% endmacro %}","depends_on":{"macros":["macro.dbt.get_snapshot_table_column_names","macro.dbt.equals"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.snapshot_timestamp_strategy":{"name":"snapshot_timestamp_strategy","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/strategies.sql","original_file_path":"macros/materializations/snapshots/strategies.sql","unique_id":"macro.dbt.snapshot_timestamp_strategy","macro_sql":"{% macro snapshot_timestamp_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n    {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n    {% set primary_key = config.get('unique_key') %}\n    {% set updated_at = config.get('updated_at') %}\n    {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n    {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n    {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n    {#/*\n        The snapshot relation might not have an {{ updated_at }} value if the\n        snapshot strategy is changed from `check` to `timestamp`. We\n        should use a dbt-created column for the comparison in the snapshot\n        table instead of assuming that the user-supplied {{ updated_at }}\n        will be present in the historical data.\n\n        See https://github.com/dbt-labs/dbt-core/issues/2350\n    */ #}\n    {% set row_changed_expr -%}\n        ({{ snapshotted_rel }}.{{ columns.dbt_valid_from }} < {{ current_rel }}.{{ updated_at }})\n    {%- endset %}\n\n    {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n    {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n    {% do return({\n        \"unique_key\": primary_key,\n        \"updated_at\": updated_at,\n        \"row_changed\": row_changed_expr,\n        \"scd_id\": scd_id_expr,\n        \"invalidate_hard_deletes\": invalidate_hard_deletes,\n        \"hard_deletes\": hard_deletes\n    }) %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.get_snapshot_table_column_names","macro.dbt.snapshot_hash_arguments"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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.default__snapshot_string_as_time"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.snapshot_check_strategy":{"name":"snapshot_check_strategy","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/strategies.sql","original_file_path":"macros/materializations/snapshots/strategies.sql","unique_id":"macro.dbt.snapshot_check_strategy","macro_sql":"{% macro snapshot_check_strategy(node, snapshotted_rel, current_rel, model_config, target_exists) %}\n    {# The model_config parameter is no longer used, but is passed in anyway for compatibility. #}\n    {% set check_cols_config = config.get('check_cols') %}\n    {% set primary_key = config.get('unique_key') %}\n    {% set hard_deletes = adapter.get_hard_deletes_behavior(config) %}\n    {% set invalidate_hard_deletes = hard_deletes == 'invalidate' %}\n    {% set updated_at = config.get('updated_at') or snapshot_get_time() %}\n\n    {% set column_added = false %}\n\n    {% set column_added, check_cols = snapshot_check_all_get_existing_columns(node, target_exists, check_cols_config) %}\n\n    {%- set row_changed_expr -%}\n    (\n    {%- if column_added -%}\n        {{ get_true_sql() }}\n    {%- else -%}\n    {%- for col in check_cols -%}\n        {{ snapshotted_rel }}.{{ col }} != {{ current_rel }}.{{ col }}\n        or\n        (\n            (({{ snapshotted_rel }}.{{ col }} is null) and not ({{ current_rel }}.{{ col }} is null))\n            or\n            ((not {{ snapshotted_rel }}.{{ col }} is null) and ({{ current_rel }}.{{ col }} is null))\n        )\n        {%- if not loop.last %} or {% endif -%}\n    {%- endfor -%}\n    {%- endif -%}\n    )\n    {%- endset %}\n\n    {% set scd_args = api.Relation.scd_args(primary_key, updated_at) %}\n    {% set scd_id_expr = snapshot_hash_arguments(scd_args) %}\n\n    {% do return({\n        \"unique_key\": primary_key,\n        \"updated_at\": updated_at,\n        \"row_changed\": row_changed_expr,\n        \"scd_id\": scd_id_expr,\n        \"invalidate_hard_deletes\": invalidate_hard_deletes,\n        \"hard_deletes\": hard_deletes\n    }) %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.snapshot_get_time","macro.dbt.snapshot_check_all_get_existing_columns","macro.dbt.get_true_sql","macro.dbt.snapshot_hash_arguments"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"supported_languages":null},"macro.dbt.default__create_columns":{"name":"default__create_columns","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/helpers.sql","original_file_path":"macros/materializations/snapshots/helpers.sql","unique_id":"macro.dbt.default__create_columns","macro_sql":"{% macro default__create_columns(relation, columns) %}\n  {% for column in columns %}\n    {% call statement() %}\n      alter table {{ relation.render() }} add column {{ adapter.quote(column.name) }} {{ column.data_type }};\n    {% endcall %}\n  {% endfor %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.get_snapshot_table_column_names":{"name":"get_snapshot_table_column_names","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/helpers.sql","original_file_path":"macros/materializations/snapshots/helpers.sql","unique_id":"macro.dbt.get_snapshot_table_column_names","macro_sql":"{% macro get_snapshot_table_column_names() %}\n    {{ return({'dbt_valid_to': 'dbt_valid_to', 'dbt_valid_from': 'dbt_valid_from', 'dbt_scd_id': 'dbt_scd_id', 'dbt_updated_at': 'dbt_updated_at', 'dbt_is_deleted': 'dbt_is_deleted'}) }}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt.default__snapshot_staging_table":{"name":"default__snapshot_staging_table","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/helpers.sql","original_file_path":"macros/materializations/snapshots/helpers.sql","unique_id":"macro.dbt.default__snapshot_staging_table","macro_sql":"{% macro default__snapshot_staging_table(strategy, source_sql, target_relation) -%}\n    {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n    {% if strategy.hard_deletes == 'new_record' %}\n        {% set new_scd_id = snapshot_hash_arguments([columns.dbt_scd_id, snapshot_get_time()]) %}\n    {% endif %}\n    with snapshot_query as (\n\n        {{ source_sql }}\n\n    ),\n\n    snapshotted_data as (\n\n        select *, {{ unique_key_fields(strategy.unique_key) }}\n        from {{ target_relation }}\n        where\n            {% if config.get('dbt_valid_to_current') %}\n\t\t{% set source_unique_key = columns.dbt_valid_to | trim %}\n\t\t{% set target_unique_key = config.get('dbt_valid_to_current') | trim %}\n\n\t\t{# The exact equals semantics between NULL values depends on the current behavior flag set. Also, update records if the source field is null #}\n                ( {{ equals(source_unique_key, target_unique_key) }} or {{ source_unique_key }} is null )\n            {% else %}\n                {{ columns.dbt_valid_to }} is null\n            {% endif %}\n\n    ),\n\n    insertions_source_data as (\n\n        select *, {{ unique_key_fields(strategy.unique_key) }},\n            {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n            {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n            {{ get_dbt_valid_to_current(strategy, columns) }},\n            {{ strategy.scd_id }} as {{ columns.dbt_scd_id }}\n\n        from snapshot_query\n    ),\n\n    updates_source_data as (\n\n        select *, {{ unique_key_fields(strategy.unique_key) }},\n            {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n            {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n            {{ strategy.updated_at }} as {{ columns.dbt_valid_to }}\n\n        from snapshot_query\n    ),\n\n    {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n\n    deletes_source_data as (\n\n        select *, {{ unique_key_fields(strategy.unique_key) }}\n        from snapshot_query\n    ),\n    {% endif %}\n\n    insertions as (\n\n        select\n            'insert' as dbt_change_type,\n            source_data.*\n          {%- if strategy.hard_deletes == 'new_record' -%}\n            ,'False' as {{ columns.dbt_is_deleted }}\n          {%- endif %}\n\n        from insertions_source_data as source_data\n        left outer join snapshotted_data\n            on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n            where {{ unique_key_is_null(strategy.unique_key, \"snapshotted_data\") }}\n            or ({{ unique_key_is_not_null(strategy.unique_key, \"snapshotted_data\") }} and (\n               {{ strategy.row_changed }} {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n            )\n\n        )\n\n    ),\n\n    updates as (\n\n        select\n            'update' as dbt_change_type,\n            source_data.*,\n            snapshotted_data.{{ columns.dbt_scd_id }}\n          {%- if strategy.hard_deletes == 'new_record' -%}\n            , snapshotted_data.{{ columns.dbt_is_deleted }}\n          {%- endif %}\n\n        from updates_source_data as source_data\n        join snapshotted_data\n            on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n        where (\n            {{ strategy.row_changed }}  {%- if strategy.hard_deletes == 'new_record' -%} or snapshotted_data.{{ columns.dbt_is_deleted }} = 'True' {% endif %}\n        )\n    )\n\n    {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n    ,\n    deletes as (\n\n        select\n            'delete' as dbt_change_type,\n            source_data.*,\n            {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n            {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n            {{ snapshot_get_time() }} as {{ columns.dbt_valid_to }},\n            snapshotted_data.{{ columns.dbt_scd_id }}\n          {%- if strategy.hard_deletes == 'new_record' -%}\n            , snapshotted_data.{{ columns.dbt_is_deleted }}\n          {%- endif %}\n        from snapshotted_data\n        left join deletes_source_data as source_data\n            on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n            where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n\n            {%- if strategy.hard_deletes == 'new_record' %}\n            and not (\n                --avoid updating the record's valid_to if the latest entry is marked as deleted\n                snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n                and snapshotted_data.{{ columns.dbt_valid_to }} is null\n            )\n            {%- endif %}\n    )\n    {%- endif %}\n\n    {%- if strategy.hard_deletes == 'new_record' %}\n        {% set snapshotted_cols = get_list_of_column_names(get_columns_in_relation(target_relation)) %}\n        {% set source_sql_cols = get_column_schema_from_query(source_sql) %}\n    ,\n    deletion_records as (\n\n        select\n            'insert' as dbt_change_type,\n            {#\n                If a column has been added to the source it won't yet exist in the\n                snapshotted table so we insert a null value as a placeholder for the column.\n             #}\n            {%- for col in source_sql_cols -%}\n            {%- if col.name in snapshotted_cols -%}\n            snapshotted_data.{{ adapter.quote(col.column) }},\n            {%- else -%}\n            NULL as {{ adapter.quote(col.column) }},\n            {%- endif -%}\n            {% endfor -%}\n            {%- if strategy.unique_key | is_list -%}\n                {%- for key in strategy.unique_key -%}\n            snapshotted_data.{{ key }} as dbt_unique_key_{{ loop.index }},\n                {% endfor -%}\n            {%- else -%}\n            snapshotted_data.dbt_unique_key as dbt_unique_key,\n            {% endif -%}\n            {{ snapshot_get_time() }} as {{ columns.dbt_valid_from }},\n            {{ snapshot_get_time() }} as {{ columns.dbt_updated_at }},\n            snapshotted_data.{{ columns.dbt_valid_to }} as {{ columns.dbt_valid_to }},\n            {{ new_scd_id }} as {{ columns.dbt_scd_id }},\n            'True' as {{ columns.dbt_is_deleted }}\n        from snapshotted_data\n        left join deletes_source_data as source_data\n            on {{ unique_key_join_on(strategy.unique_key, \"snapshotted_data\", \"source_data\") }}\n        where {{ unique_key_is_null(strategy.unique_key, \"source_data\") }}\n        and not (\n            --avoid inserting a new record if the latest one is marked as deleted\n            snapshotted_data.{{ columns.dbt_is_deleted }} = 'True'\n            and snapshotted_data.{{ columns.dbt_valid_to }} is null\n            )\n\n    )\n    {%- endif %}\n\n    select * from insertions\n    union all\n    select * from updates\n    {%- if strategy.hard_deletes == 'invalidate' or strategy.hard_deletes == 'new_record' %}\n    union all\n    select * from deletes\n    {%- endif %}\n    {%- if strategy.hard_deletes == 'new_record' %}\n    union all\n    select * from deletion_records\n    {%- endif %}\n\n\n{%- endmacro %}","depends_on":{"macros":["macro.dbt.get_snapshot_table_column_names","macro.dbt.snapshot_hash_arguments","macro.dbt.snapshot_get_time","macro.dbt.unique_key_fields","macro.dbt.equals","macro.dbt.get_dbt_valid_to_current","macro.dbt.unique_key_join_on","macro.dbt.unique_key_is_null","macro.dbt.unique_key_is_not_null","macro.dbt.get_list_of_column_names","macro.dbt.get_columns_in_relation","macro.dbt.get_column_schema_from_query"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"supported_languages":null},"macro.dbt.default__build_snapshot_table":{"name":"default__build_snapshot_table","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/helpers.sql","original_file_path":"macros/materializations/snapshots/helpers.sql","unique_id":"macro.dbt.default__build_snapshot_table","macro_sql":"{% macro default__build_snapshot_table(strategy, sql) %}\n    {% set columns = config.get('snapshot_table_column_names') or get_snapshot_table_column_names() %}\n\n    select *,\n        {{ strategy.scd_id }} as {{ columns.dbt_scd_id }},\n        {{ strategy.updated_at }} as {{ columns.dbt_updated_at }},\n        {{ strategy.updated_at }} as {{ columns.dbt_valid_from }},\n        {{ get_dbt_valid_to_current(strategy, columns) }}\n      {%- if strategy.hard_deletes == 'new_record' -%}\n        , 'False' as {{ columns.dbt_is_deleted }}\n      {% endif -%}\n    from (\n        {{ sql }}\n    ) sbq\n\n{% endmacro %}","depends_on":{"macros":["macro.dbt.get_snapshot_table_column_names","macro.dbt.get_dbt_valid_to_current"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.unique_key_join_on":{"name":"unique_key_join_on","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/helpers.sql","original_file_path":"macros/materializations/snapshots/helpers.sql","unique_id":"macro.dbt.unique_key_join_on","macro_sql":"{% macro unique_key_join_on(unique_key, identifier, from_identifier) %}\n    {% if unique_key | is_list %}\n        {% for key in unique_key %}\n\t    {% set source_unique_key = (identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t    {% set target_unique_key = (from_identifier ~ \".dbt_unique_key_\" ~ loop.index) | trim %}\n\t    {{ equals(source_unique_key, target_unique_key) }}\n            {%- if not loop.last %} and {%- endif %}\n        {% endfor %}\n    {% else %}\n        {{ identifier }}.dbt_unique_key = {{ from_identifier }}.dbt_unique_key\n    {% endif %}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.equals"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.materialization_snapshot_default":{"name":"materialization_snapshot_default","resource_type":"macro","package_name":"dbt","path":"macros/materializations/snapshots/snapshot.sql","original_file_path":"macros/materializations/snapshots/snapshot.sql","unique_id":"macro.dbt.materialization_snapshot_default","macro_sql":"{% materialization snapshot, default %}\n\n  {%- set target_table = model.get('alias', model.get('name')) -%}\n\n  {%- set strategy_name = config.get('strategy') -%}\n  {%- set unique_key = config.get('unique_key') %}\n  -- grab current tables grants config for comparision later on\n  {%- set grant_config = config.get('grants') -%}\n\n  {% set target_relation_exists, target_relation = get_or_create_relation(\n          database=model.database,\n          schema=model.schema,\n          identifier=target_table,\n          type='table') -%}\n\n  {%- if not target_relation.is_table -%}\n    {% do exceptions.relation_wrong_type(target_relation, 'table') %}\n  {%- endif -%}\n\n\n  {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n  {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n  {% set strategy_macro = strategy_dispatch(strategy_name) %}\n  {# The model['config'] parameter below is no longer used, but passing anyway for compatibility #}\n  {# It was a dictionary of config, instead of the config object from the context #}\n  {% set strategy = strategy_macro(model, \"snapshotted_data\", \"source_data\", model['config'], target_relation_exists) %}\n\n  {% if not target_relation_exists %}\n\n      {% set build_sql = build_snapshot_table(strategy, model['compiled_code']) %}\n      {% set build_or_select_sql = build_sql %}\n      {% set final_sql = create_table_as(False, target_relation, build_sql) %}\n\n  {% else %}\n\n      {% set columns = config.get(\"snapshot_table_column_names\") or get_snapshot_table_column_names() %}\n\n      {{ adapter.assert_valid_snapshot_target_given_strategy(target_relation, columns, strategy) }}\n\n      {% set build_or_select_sql = snapshot_staging_table(strategy, sql, target_relation) %}\n      {% set staging_table = build_snapshot_staging_table(strategy, sql, target_relation) %}\n\n      -- this may no-op if the database does not require column expansion\n      {% do adapter.expand_target_column_types(from_relation=staging_table,\n                                               to_relation=target_relation) %}\n\n      {% set remove_columns = ['dbt_change_type', 'DBT_CHANGE_TYPE', 'dbt_unique_key', 'DBT_UNIQUE_KEY'] %}\n      {% if unique_key | is_list %}\n          {% for key in strategy.unique_key %}\n              {{ remove_columns.append('dbt_unique_key_' + loop.index|string) }}\n              {{ remove_columns.append('DBT_UNIQUE_KEY_' + loop.index|string) }}\n          {% endfor %}\n      {% endif %}\n\n      {% set missing_columns = adapter.get_missing_columns(staging_table, target_relation)\n                                   | rejectattr('name', 'in', remove_columns)\n                                   | list %}\n\n      {% do create_columns(target_relation, missing_columns) %}\n\n      {% set source_columns = adapter.get_columns_in_relation(staging_table)\n                                   | rejectattr('name', 'in', remove_columns)\n                                   | list %}\n\n      {% set quoted_source_columns = [] %}\n      {% for column in source_columns %}\n        {% do quoted_source_columns.append(adapter.quote(column.name)) %}\n      {% endfor %}\n\n      {% set final_sql = snapshot_merge_sql(\n            target = target_relation,\n            source = staging_table,\n            insert_cols = quoted_source_columns\n         )\n      %}\n\n  {% endif %}\n\n\n  {{ check_time_data_types(build_or_select_sql) }}\n\n  {% call statement('main') %}\n      {{ final_sql }}\n  {% endcall %}\n\n  {% set should_revoke = should_revoke(target_relation_exists, full_refresh_mode=False) %}\n  {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n  {% do persist_docs(target_relation, model) %}\n\n  {% if not target_relation_exists %}\n    {% do create_indexes(target_relation) %}\n  {% endif %}\n\n  {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n  {{ adapter.commit() }}\n\n  {% if staging_table is defined %}\n      {% do post_snapshot(staging_table) %}\n  {% endif %}\n\n  {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n  {{ return({'relations': [target_relation]}) }}\n\n{% endmaterialization %}","depends_on":{"macros":["macro.dbt.get_or_create_relation","macro.dbt.run_hooks","macro.dbt.strategy_dispatch","macro.dbt.build_snapshot_table","macro.dbt.create_table_as","macro.dbt.get_snapshot_table_column_names","macro.dbt.snapshot_staging_table","macro.dbt.build_snapshot_staging_table","macro.dbt.create_columns","macro.dbt.snapshot_merge_sql","macro.dbt.check_time_data_types","macro.dbt.statement","macro.dbt.should_revoke","macro.dbt.apply_grants","macro.dbt.persist_docs","macro.dbt.create_indexes","macro.dbt.post_snapshot"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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  {% set limit = config.get('limit') %}\n\n  {% set sql_with_limit %}\n    {{ get_limit_subquery_sql(sql, limit) }}\n  {% endset %}\n\n  {% if should_store_failures() %}\n\n    {% set identifier = model['alias'] %}\n    {% set old_relation = adapter.get_relation(database=database, schema=schema, identifier=identifier) %}\n\n    {% set store_failures_as = config.get('store_failures_as') %}\n    -- if `--store-failures` is invoked via command line and `store_failures_as` is not set,\n    -- config.get('store_failures_as', 'table') returns None, not 'table'\n    {% if store_failures_as == none %}{% set store_failures_as = 'table' %}{% endif %}\n    {% if store_failures_as not in ['table', 'view'] %}\n        {{ exceptions.raise_compiler_error(\n            \"'\" ~ store_failures_as ~ \"' is not a valid value for `store_failures_as`. \"\n            \"Accepted values are: ['ephemeral', 'table', 'view']\"\n        ) }}\n    {% endif %}\n\n    {% set target_relation = api.Relation.create(\n        identifier=identifier, schema=schema, database=database, type=store_failures_as) -%} %}\n\n    {% if old_relation %}\n        {% do adapter.drop_relation(old_relation) %}\n    {% endif %}\n\n    {% call statement(auto_begin=True) %}\n        {{ get_create_sql(target_relation, sql_with_limit) }}\n    {% endcall %}\n\n    {% do relations.append(target_relation) %}\n\n    {# Since the test failures have already been saved to the database, reuse that result rather than querying again #}\n    {% set main_sql %}\n        select *\n        from {{ target_relation }}\n    {% endset %}\n\n    {{ adapter.commit() }}\n\n  {% else %}\n\n      {% set main_sql = sql_with_limit %}\n\n  {% endif %}\n\n  {% set fail_calc = config.get('fail_calc') %}\n  {% set warn_if = config.get('warn_if') %}\n  {% set error_if = config.get('error_if') %}\n\n  {% call statement('main', fetch_result=True) -%}\n\n    {# The limit has already been included above, and we do not want to duplicate it again. We also want to be safe for macro overrides treating `limit` as a required parameter. #}\n    {{ get_test_sql(main_sql, fail_calc, warn_if, error_if, limit=none)}}\n\n  {%- endcall %}\n\n  {{ return({'relations': relations}) }}\n\n{%- endmaterialization -%}","depends_on":{"macros":["macro.dbt.get_limit_subquery_sql","macro.dbt.should_store_failures","macro.dbt.statement","macro.dbt.get_create_sql","macro.dbt.get_test_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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  {% do create_indexes(intermediate_relation) %}\n\n  -- cleanup\n  {% if existing_relation is not none %}\n     /* Do the equivalent of rename_if_exists. 'existing_relation' could have been dropped\n        since the variable was first set. */\n    {% set existing_relation = load_cached_relation(existing_relation) %}\n    {% if existing_relation is not none %}\n        {{ adapter.rename_relation(existing_relation, backup_relation) }}\n    {% endif %}\n  {% endif %}\n\n  {{ adapter.rename_relation(intermediate_relation, target_relation) }}\n\n  {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n  {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n  {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n  {% do persist_docs(target_relation, model) %}\n\n  -- `COMMIT` happens here\n  {{ adapter.commit() }}\n\n  -- finally, drop the existing/backup relation after the commit\n  {{ drop_relation_if_exists(backup_relation) }}\n\n  {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n  {{ return({'relations': [target_relation]}) }}\n{% endmaterialization %}","depends_on":{"macros":["macro.dbt.load_cached_relation","macro.dbt.make_intermediate_relation","macro.dbt.make_backup_relation","macro.dbt.drop_relation_if_exists","macro.dbt.run_hooks","macro.dbt.statement","macro.dbt.get_create_table_as_sql","macro.dbt.create_indexes","macro.dbt.should_revoke","macro.dbt.apply_grants","macro.dbt.persist_docs"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.default__get_merge_sql":{"name":"default__get_merge_sql","resource_type":"macro","package_name":"dbt","path":"macros/materializations/models/incremental/merge.sql","original_file_path":"macros/materializations/models/incremental/merge.sql","unique_id":"macro.dbt.default__get_merge_sql","macro_sql":"{% macro default__get_merge_sql(target, source, unique_key, dest_columns, incremental_predicates=none) -%}\n    {%- set predicates = [] if incremental_predicates is none else [] + incremental_predicates -%}\n    {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n    {%- set merge_update_columns = config.get('merge_update_columns') -%}\n    {%- set merge_exclude_columns = config.get('merge_exclude_columns') -%}\n    {%- set update_columns = get_merge_update_columns(merge_update_columns, merge_exclude_columns, dest_columns) -%}\n    {%- set sql_header = config.get('sql_header', none) -%}\n\n    {% if unique_key %}\n        {% if unique_key is sequence and unique_key is not mapping and unique_key is not string %}\n            {% for key in unique_key %}\n                {% set this_key_match %}\n                    DBT_INTERNAL_SOURCE.{{ key }} = DBT_INTERNAL_DEST.{{ key }}\n                {% endset %}\n                {% do predicates.append(this_key_match) %}\n            {% endfor %}\n        {% else %}\n            {% set source_unique_key = (\"DBT_INTERNAL_SOURCE.\" ~ unique_key) | trim %}\n\t    {% set target_unique_key = (\"DBT_INTERNAL_DEST.\" ~ unique_key) | trim %}\n\t    {% set unique_key_match = equals(source_unique_key, target_unique_key) | trim %}\n            {% do predicates.append(unique_key_match) %}\n        {% endif %}\n    {% else %}\n        {% do predicates.append('FALSE') %}\n    {% endif %}\n\n    {{ sql_header if sql_header is not none }}\n\n    merge into {{ target }} as DBT_INTERNAL_DEST\n        using {{ source }} as DBT_INTERNAL_SOURCE\n        on {{\"(\" ~ predicates | join(\") and (\") ~ \")\"}}\n\n    {% if unique_key %}\n    when matched then update set\n        {% for column_name in update_columns -%}\n            {{ column_name }} = DBT_INTERNAL_SOURCE.{{ column_name }}\n            {%- if not loop.last %}, {%- endif %}\n        {%- endfor %}\n    {% endif %}\n\n    when not matched then insert\n        ({{ dest_cols_csv }})\n    values\n        ({{ dest_cols_csv }})\n\n{% endmacro %}","depends_on":{"macros":["macro.dbt.get_quoted_csv","macro.dbt.get_merge_update_columns","macro.dbt.equals"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"supported_languages":null},"macro.dbt.default__get_delete_insert_merge_sql":{"name":"default__get_delete_insert_merge_sql","resource_type":"macro","package_name":"dbt","path":"macros/materializations/models/incremental/merge.sql","original_file_path":"macros/materializations/models/incremental/merge.sql","unique_id":"macro.dbt.default__get_delete_insert_merge_sql","macro_sql":"{% macro default__get_delete_insert_merge_sql(target, source, unique_key, dest_columns, incremental_predicates) -%}\n\n    {%- set dest_cols_csv = get_quoted_csv(dest_columns | map(attribute=\"name\")) -%}\n\n    {% if unique_key %}\n        {% if unique_key is string %}\n        {% set unique_key = [unique_key] %}\n        {% endif %}\n\n        {%- set unique_key_str = unique_key|join(', ') -%}\n\n        delete from {{ target }} as DBT_INTERNAL_DEST\n        where ({{ unique_key_str }}) in (\n            select distinct {{ unique_key_str }}\n            from {{ source }} as DBT_INTERNAL_SOURCE\n        )\n        {%- if incremental_predicates %}\n            {% for predicate in incremental_predicates %}\n                and {{ predicate }}\n            {% endfor %}\n        {%- endif -%};\n\n    {% endif %}\n\n    insert into {{ target }} ({{ dest_cols_csv }})\n    (\n        select {{ dest_cols_csv }}\n        from {{ source }}\n    )\n\n{%- endmacro %}","depends_on":{"macros":["macro.dbt.get_quoted_csv"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.materialization_incremental_default":{"name":"materialization_incremental_default","resource_type":"macro","package_name":"dbt","path":"macros/materializations/models/incremental/incremental.sql","original_file_path":"macros/materializations/models/incremental/incremental.sql","unique_id":"macro.dbt.materialization_incremental_default","macro_sql":"{% materialization incremental, default -%}\n\n  -- relations\n  {%- set existing_relation = load_cached_relation(this) -%}\n  {%- set target_relation = this.incorporate(type='table') -%}\n  {%- set temp_relation = make_temp_relation(target_relation)-%}\n  {%- set intermediate_relation = make_intermediate_relation(target_relation)-%}\n  {%- set backup_relation_type = 'table' if existing_relation is none else existing_relation.type -%}\n  {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%}\n\n  -- configs\n  {%- set unique_key = config.get('unique_key') -%}\n  {%- set full_refresh_mode = (should_full_refresh()  or existing_relation.is_view) -%}\n  {%- set on_schema_change = incremental_validate_on_schema_change(config.get('on_schema_change'), default='ignore') -%}\n\n  -- the temp_ and backup_ relations should not already exist in the database; get_relation\n  -- will return None in that case. Otherwise, we get a relation that we can drop\n  -- later, before we try to use this name for the current operation. This has to happen before\n  -- BEGIN, in a separate transaction\n  {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation)-%}\n  {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%}\n   -- grab current tables grants config for comparision later on\n  {% set grant_config = config.get('grants') %}\n  {{ drop_relation_if_exists(preexisting_intermediate_relation) }}\n  {{ drop_relation_if_exists(preexisting_backup_relation) }}\n\n  {{ run_hooks(pre_hooks, inside_transaction=False) }}\n\n  -- `BEGIN` happens here:\n  {{ run_hooks(pre_hooks, inside_transaction=True) }}\n\n  {% set to_drop = [] %}\n\n  {% set incremental_strategy = config.get('incremental_strategy') or 'default' %}\n  {% set strategy_sql_macro_func = adapter.get_incremental_strategy_macro(context, incremental_strategy) %}\n\n  {% if existing_relation is none %}\n      {% set build_sql = get_create_table_as_sql(False, target_relation, sql) %}\n      {% set relation_for_indexes = target_relation %}\n  {% elif full_refresh_mode %}\n      {% set build_sql = get_create_table_as_sql(False, intermediate_relation, sql) %}\n      {% set relation_for_indexes = intermediate_relation %}\n      {% set need_swap = true %}\n  {% else %}\n    {% do run_query(get_create_table_as_sql(True, temp_relation, sql)) %}\n    {% set relation_for_indexes = temp_relation %}\n    {% set contract_config = config.get('contract') %}\n    {% if not contract_config or not contract_config.enforced %}\n      {% do adapter.expand_target_column_types(\n               from_relation=temp_relation,\n               to_relation=target_relation) %}\n    {% endif %}\n    {#-- Process schema changes. Returns dict of changes if successful. Use source columns for upserting/merging --#}\n    {% set dest_columns = process_schema_changes(on_schema_change, temp_relation, existing_relation) %}\n    {% if not dest_columns %}\n      {% set dest_columns = adapter.get_columns_in_relation(existing_relation) %}\n    {% endif %}\n\n    {#-- Get the incremental_strategy, the macro to use for the strategy, and build the sql --#}\n    {% set incremental_predicates = config.get('predicates', none) or config.get('incremental_predicates', none) %}\n    {% set strategy_arg_dict = ({'target_relation': target_relation, 'temp_relation': temp_relation, 'unique_key': unique_key, 'dest_columns': dest_columns, 'incremental_predicates': incremental_predicates }) %}\n    {% set build_sql = strategy_sql_macro_func(strategy_arg_dict) %}\n\n  {% endif %}\n\n  {% call statement(\"main\") %}\n      {{ build_sql }}\n  {% endcall %}\n\n  {% if existing_relation is none or existing_relation.is_view or should_full_refresh() %}\n    {% do create_indexes(relation_for_indexes) %}\n  {% endif %}\n\n  {% if need_swap %}\n      {% do adapter.rename_relation(target_relation, backup_relation) %}\n      {% do adapter.rename_relation(intermediate_relation, target_relation) %}\n      {% do to_drop.append(backup_relation) %}\n  {% endif %}\n\n  {% set should_revoke = should_revoke(existing_relation, full_refresh_mode) %}\n  {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n\n  {% do persist_docs(target_relation, model) %}\n\n  {{ run_hooks(post_hooks, inside_transaction=True) }}\n\n  -- `COMMIT` happens here\n  {% do adapter.commit() %}\n\n  {% for rel in to_drop %}\n      {% do adapter.drop_relation(rel) %}\n  {% endfor %}\n\n  {{ run_hooks(post_hooks, inside_transaction=False) }}\n\n  {{ return({'relations': [target_relation]}) }}\n\n{%- endmaterialization %}","depends_on":{"macros":["macro.dbt.load_cached_relation","macro.dbt.make_temp_relation","macro.dbt.make_intermediate_relation","macro.dbt.make_backup_relation","macro.dbt.should_full_refresh","macro.dbt.incremental_validate_on_schema_change","macro.dbt.drop_relation_if_exists","macro.dbt.run_hooks","macro.dbt.get_create_table_as_sql","macro.dbt.run_query","macro.dbt.process_schema_changes","macro.dbt.statement","macro.dbt.create_indexes","macro.dbt.should_revoke","macro.dbt.apply_grants","macro.dbt.persist_docs"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.materialization_clone_default":{"name":"materialization_clone_default","resource_type":"macro","package_name":"dbt","path":"macros/materializations/models/clone/clone.sql","original_file_path":"macros/materializations/models/clone/clone.sql","unique_id":"macro.dbt.materialization_clone_default","macro_sql":"{%- materialization clone, default -%}\n\n  {%- set relations = {'relations': []} -%}\n\n  {%- if not defer_relation -%}\n      -- nothing to do\n      {{ log(\"No relation found in state manifest for \" ~ model.unique_id, info=True) }}\n      {{ return(relations) }}\n  {%- endif -%}\n\n  {%- set existing_relation = load_cached_relation(this) -%}\n\n  {%- if existing_relation and not flags.FULL_REFRESH -%}\n      -- noop!\n      {{ log(\"Relation \" ~ existing_relation ~ \" already exists\", info=True) }}\n      {{ return(relations) }}\n  {%- endif -%}\n\n  {%- set other_existing_relation = load_cached_relation(defer_relation) -%}\n\n  -- If this is a database that can do zero-copy cloning of tables, and the other relation is a table, then this will be a table\n  -- Otherwise, this will be a view\n\n  {% set can_clone_table = can_clone_table() %}\n\n  {%- if other_existing_relation and other_existing_relation.type == 'table' and can_clone_table -%}\n\n      {%- set target_relation = this.incorporate(type='table') -%}\n      {% if existing_relation is not none and not existing_relation.is_table %}\n        {{ log(\"Dropping relation \" ~ existing_relation.render() ~ \" because it is of type \" ~ existing_relation.type) }}\n        {{ drop_relation_if_exists(existing_relation) }}\n      {% endif %}\n\n      -- as a general rule, data platforms that can clone tables can also do atomic 'create or replace'\n      {% if target_relation.database == defer_relation.database and\n            target_relation.schema == defer_relation.schema and\n            target_relation.identifier == defer_relation.identifier %}\n        {{ log(\"Target relation and defer relation are the same, skipping clone for relation: \" ~ target_relation.render()) }}\n      {% else %}\n        {% call statement('main') %}\n            {{ create_or_replace_clone(target_relation, defer_relation) }}\n        {% endcall %}\n      {% endif %}\n      {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %}\n      {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %}\n      {% do persist_docs(target_relation, model) %}\n\n      {{ return({'relations': [target_relation]}) }}\n\n  {%- else -%}\n\n      {%- set target_relation = this.incorporate(type='view') -%}\n\n      -- reuse the view materialization\n      -- TODO: support actual dispatch for materialization macros\n      -- Tracking ticket: https://github.com/dbt-labs/dbt-core/issues/7799\n      {% set search_name = \"materialization_view_\" ~ adapter.type() %}\n      {% if not search_name in context %}\n          {% set search_name = \"materialization_view_default\" %}\n      {% endif %}\n      {% set materialization_macro = context[search_name] %}\n      {% set relations = materialization_macro() %}\n      {{ return(relations) }}\n\n  {%- endif -%}\n\n{%- endmaterialization -%}","depends_on":{"macros":["macro.dbt.load_cached_relation","macro.dbt.can_clone_table","macro.dbt.drop_relation_if_exists","macro.dbt.statement","macro.dbt.create_or_replace_clone","macro.dbt.should_revoke","macro.dbt.apply_grants","macro.dbt.persist_docs"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__generate_database_name"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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_databend.databend__drop_relation"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__rename_relation"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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.default__drop_materialized_view"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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.default__refresh_materialized_view"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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.default__get_alter_materialized_view_as_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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    {\"<change_category>\": [{\"action\": \"<name>\", \"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.default__get_materialized_view_configuration_changes"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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.default__get_create_materialized_view_as_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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.default__drop_table"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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.default__get_rename_table_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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_databend.databend__create_table_as"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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.default__drop_view"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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.default__get_rename_view_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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_databend.databend__create_view_as"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__dateadd"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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.default__listagg"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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.default__datediff"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.equals":{"name":"equals","resource_type":"macro","package_name":"dbt","path":"macros/utils/equals.sql","original_file_path":"macros/utils/equals.sql","unique_id":"macro.dbt.equals","macro_sql":"{% macro equals(expr1, expr2) %}\n    {{ return(adapter.dispatch('equals', 'dbt') (expr1, expr2)) }}\n{%- endmacro %}","depends_on":{"macros":["macro.dbt.default__equals"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt.default__equals":{"name":"default__equals","resource_type":"macro","package_name":"dbt","path":"macros/utils/equals.sql","original_file_path":"macros/utils/equals.sql","unique_id":"macro.dbt.default__equals","macro_sql":"{% macro default__equals(expr1, expr2) -%}\n{%- if adapter.behavior.enable_truthy_nulls_equals_macro.no_warn %}\n    case when (({{ expr1 }} = {{ expr2 }}) or ({{ expr1 }} is null and {{ expr2 }} is null))\n        then 0\n        else 1\n    end = 0\n{%- else -%}\n    ({{ expr1 }} = {{ expr2 }})\n{%- endif %}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__any_value"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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.default__split_part"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__create_schema"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__drop_schema"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__current_timestamp"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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.default__current_timestamp_backcompat"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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.default__current_timestamp_backcompat"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.make_temp_relation":{"name":"make_temp_relation","resource_type":"macro","package_name":"dbt","path":"macros/adapters/relation.sql","original_file_path":"macros/adapters/relation.sql","unique_id":"macro.dbt.make_temp_relation","macro_sql":"{% macro make_temp_relation(base_relation, suffix='__dbt_tmp') %}\n  {#-- This ensures microbatch batches get unique temp relations to avoid clobbering --#}\n  {% if suffix == '__dbt_tmp' and model.batch %}\n    {% set suffix = suffix ~ '_' ~ model.batch.id %}\n  {% endif %}\n\n  {{ return(adapter.dispatch('make_temp_relation', 'dbt')(base_relation, suffix)) }}\n{% endmacro %}","depends_on":{"macros":["macro.dbt_databend.databend__make_temp_relation"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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_databend.databend__truncate_relation"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__get_or_create_relation"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.collect_freshness_custom_sql":{"name":"collect_freshness_custom_sql","resource_type":"macro","package_name":"dbt","path":"macros/adapters/freshness.sql","original_file_path":"macros/adapters/freshness.sql","unique_id":"macro.dbt.collect_freshness_custom_sql","macro_sql":"{% macro collect_freshness_custom_sql(source, loaded_at_query) %}\n  {{ return(adapter.dispatch('collect_freshness_custom_sql', 'dbt')(source, loaded_at_query))}}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.default__collect_freshness_custom_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"supported_languages":null},"macro.dbt.default__collect_freshness_custom_sql":{"name":"default__collect_freshness_custom_sql","resource_type":"macro","package_name":"dbt","path":"macros/adapters/freshness.sql","original_file_path":"macros/adapters/freshness.sql","unique_id":"macro.dbt.default__collect_freshness_custom_sql","macro_sql":"{% macro default__collect_freshness_custom_sql(source, loaded_at_query) %}\n  {% call statement('collect_freshness_custom_sql', fetch_result=True, auto_begin=False) -%}\n  with source_query as (\n    {{ loaded_at_query }}\n  )\n  select\n    (select * from source_query) as max_loaded_at,\n    {{ current_timestamp() }} as snapshotted_at\n  {% endcall %}\n  {{ return(load_result('collect_freshness_custom_sql')) }}\n{% endmacro %}","depends_on":{"macros":["macro.dbt.statement","macro.dbt.current_timestamp"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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_databend.databend__copy_grants"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__get_show_grant_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__get_grant_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__get_revoke_sql"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__get_dcl_statement_list"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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_databend.databend__apply_grants"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.default__get_limit_sql":{"name":"default__get_limit_sql","resource_type":"macro","package_name":"dbt","path":"macros/adapters/show.sql","original_file_path":"macros/adapters/show.sql","unique_id":"macro.dbt.default__get_limit_sql","macro_sql":"{% macro default__get_limit_sql(sql, limit) %}\n  {{ sql }}\n  {% if limit is not none %}\n  limit {{ limit }}\n  {%- endif -%}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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.default__alter_column_comment"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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.default__get_catalog_relations"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__get_catalog"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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_databend.databend__list_schemas"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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.default__check_schema_exists"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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_databend.databend__list_relations_without_caching"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__get_columns_in_relation"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.get_list_of_column_names":{"name":"get_list_of_column_names","resource_type":"macro","package_name":"dbt","path":"macros/adapters/columns.sql","original_file_path":"macros/adapters/columns.sql","unique_id":"macro.dbt.get_list_of_column_names","macro_sql":"\n\n{%- macro get_list_of_column_names(columns) -%}\n  {% set col_names = [] %}\n  {% for col in columns %}\n    {% do col_names.append(col.name) %}\n  {% endfor %}\n  {{ return(col_names) }}\n{% endmacro %}","depends_on":{"macros":[]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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_databend.databend__get_columns_in_query"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.default__alter_relation_add_remove_columns":{"name":"default__alter_relation_add_remove_columns","resource_type":"macro","package_name":"dbt","path":"macros/adapters/columns.sql","original_file_path":"macros/adapters/columns.sql","unique_id":"macro.dbt.default__alter_relation_add_remove_columns","macro_sql":"{% macro default__alter_relation_add_remove_columns(relation, add_columns, remove_columns) %}\n\n  {% if add_columns is none %}\n    {% set add_columns = [] %}\n  {% endif %}\n  {% if remove_columns is none %}\n    {% set remove_columns = [] %}\n  {% endif %}\n\n  {% set sql -%}\n\n     alter {{ relation.type }} {{ relation.render() }}\n\n            {% for column in add_columns %}\n               add column {{ column.quoted }} {{ column.data_type }}{{ ',' if not loop.last }}\n            {% endfor %}{{ ',' if add_columns and remove_columns }}\n\n            {% for column in remove_columns %}\n                drop column {{ column.quoted }}{{ ',' if not loop.last }}\n            {% endfor %}\n\n  {%- endset -%}\n\n  {% do run_query(sql) %}\n\n{% endmacro %}","depends_on":{"macros":["macro.dbt.run_query"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"supported_languages":null},"macro.dbt.build_ref_function":{"name":"build_ref_function","resource_type":"macro","package_name":"dbt","path":"macros/python_model/python.sql","original_file_path":"macros/python_model/python.sql","unique_id":"macro.dbt.build_ref_function","macro_sql":"{% macro build_ref_function(model) %}\n\n    {%- set ref_dict = {} -%}\n    {%- for _ref in model.refs -%}\n        {% set _ref_args = [_ref.get('package'), _ref['name']] if _ref.get('package') else [_ref['name'],] %}\n        {%- set resolved = ref(*_ref_args, v=_ref.get('version')) -%}\n\n        {#\n            We want to get the string of the returned relation by calling .render() in order to skip sample/empty\n            mode rendering logic. However, people override the default ref macro, and often return a string instead\n            of a relation (like the ref macro does by default). Thus, to make sure we dont blow things up, we have\n            to ensure the resolved relation has a .render() method.\n        #}\n        {%- if resolved.render is defined and resolved.render is callable -%}\n            {%- set resolved = resolved.render() -%}\n        {%- endif -%}\n\n        {%- if _ref.get('version') -%}\n            {% do _ref_args.extend([\"v\" ~ _ref['version']]) %}\n        {%- endif -%}\n       {%- do ref_dict.update({_ref_args | join('.'): resolve_model_name(resolved)}) -%}\n    {%- endfor -%}\n\ndef ref(*args, **kwargs):\n    refs = {{ ref_dict | tojson }}\n    key = '.'.join(args)\n    version = kwargs.get(\"v\") or kwargs.get(\"version\")\n    if version:\n        key += f\".v{version}\"\n    dbt_load_df_function = kwargs.get(\"dbt_load_df_function\")\n    return dbt_load_df_function(refs[key])\n\n{% endmacro %}","depends_on":{"macros":["macro.dbt.resolve_model_name"]},"description":"","meta":{},"docs":{"show":true,"node_color":null},"patch_path":null,"arguments":[],"created_at":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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":0,"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"}},"exposures":{},"metrics":{},"groups":{},"selectors":{},"disabled":{},"parent_map":{"model.pingcap_lakehouse.stg_data_foundation_finance_salesforce_account":["source.pingcap_lakehouse.data_foundation_finance.salesforce_account"],"model.pingcap_lakehouse.stg_cloud_revenue":["source.pingcap_lakehouse.data_foundation_finance.monthly_cloud_revrec"],"model.pingcap_lakehouse.stg_dates":[],"model.pingcap_lakehouse.stg_metadb_billing2_invoices":["source.pingcap_lakehouse.metadb.billing2_invoices"],"model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec":["seed.pingcap_lakehouse.org_monthly_bill_confirmation_for_revrec"],"model.pingcap_lakehouse.stg_salesforce_opportunity":["source.pingcap_lakehouse.nexuscrm.opportunity"],"model.pingcap_lakehouse.stg_salesforce_org":["source.pingcap_lakehouse.nexuscrm.org__c"],"model.pingcap_lakehouse.stg_salesforce_product":["source.pingcap_lakehouse.nexuscrm.product2"],"model.pingcap_lakehouse.stg_salesforce_order_item":["source.pingcap_lakehouse.nexuscrm.order_product"],"model.pingcap_lakehouse.stg_salesforce_account":["source.pingcap_lakehouse.nexuscrm.account"],"model.pingcap_lakehouse.stg_salesforce_order":["source.pingcap_lakehouse.nexuscrm.order"],"model.pingcap_lakehouse.stg_cloud_tenants":["source.pingcap_lakehouse.bq_warehouse.cloud_tenants"],"model.pingcap_lakehouse.stg_salesforce_revenue":["source.pingcap_lakehouse.salesforce.revenue"],"model.pingcap_lakehouse.customers":["model.pingcap_lakehouse.customer_surrogate_keys","model.pingcap_lakehouse.salesforce_accounts","model.pingcap_lakehouse.stg_cloud_tenants","model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec"],"model.pingcap_lakehouse.customer_surrogate_keys":["model.pingcap_lakehouse.salesforce_accounts","model.pingcap_lakehouse.salesforce_orgs","model.pingcap_lakehouse.stg_cloud_tenants"],"model.pingcap_lakehouse.date_spine":["model.pingcap_lakehouse.stg_dates"],"model.pingcap_lakehouse.salesforce_orders":["model.pingcap_lakehouse.salesforce_opportunities","model.pingcap_lakehouse.stg_salesforce_order","model.pingcap_lakehouse.stg_salesforce_order_item"],"model.pingcap_lakehouse.salesforce_order_daily_view":["model.pingcap_lakehouse.date_spine","model.pingcap_lakehouse.salesforce_orders","model.pingcap_lakehouse.salesforce_revrec","model.pingcap_lakehouse.stg_salesforce_order_item","model.pingcap_lakehouse.stg_salesforce_product"],"model.pingcap_lakehouse.salesforce_revrec":["model.pingcap_lakehouse.stg_salesforce_revenue"],"model.pingcap_lakehouse.cloud_revenue":["model.pingcap_lakehouse.stg_cloud_revenue"],"model.pingcap_lakehouse.salesforce_opportunities":["model.pingcap_lakehouse.stg_salesforce_opportunity"],"model.pingcap_lakehouse.salesforce_org_monthly_revrec":["model.pingcap_lakehouse.customer_surrogate_keys","model.pingcap_lakehouse.customers","model.pingcap_lakehouse.salesforce_orgs","model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec","model.pingcap_lakehouse.stg_metadb_billing2_invoices","seed.pingcap_lakehouse.payment_type_mapping"],"model.pingcap_lakehouse.salesforce_orgs":["model.pingcap_lakehouse.stg_salesforce_org"],"model.pingcap_lakehouse.salesforce_accounts":["model.pingcap_lakehouse.stg_data_foundation_finance_salesforce_account","model.pingcap_lakehouse.stg_salesforce_account"],"test.pingcap_lakehouse.parity_order_daily_view_vs_taskflow":["model.pingcap_lakehouse.salesforce_order_daily_view"],"test.pingcap_lakehouse.parity_vs_taskflow":["model.pingcap_lakehouse.salesforce_org_monthly_revrec"],"seed.pingcap_lakehouse.payment_type_mapping":[],"seed.pingcap_lakehouse.org_monthly_bill_confirmation_for_revrec":[],"source.pingcap_lakehouse.data_foundation_finance.monthly_cloud_revrec":[],"source.pingcap_lakehouse.data_foundation_finance.salesforce_account":[],"source.pingcap_lakehouse.metadb.billing2_invoices":[],"source.pingcap_lakehouse.nexuscrm.org__c":[],"source.pingcap_lakehouse.nexuscrm.account":[],"source.pingcap_lakehouse.nexuscrm.order":[],"source.pingcap_lakehouse.nexuscrm.opportunity":[],"source.pingcap_lakehouse.nexuscrm.order_product":[],"source.pingcap_lakehouse.nexuscrm.product2":[],"source.pingcap_lakehouse.bq_warehouse.cloud_tenants":[],"source.pingcap_lakehouse.salesforce.revenue":[]},"child_map":{"model.pingcap_lakehouse.stg_data_foundation_finance_salesforce_account":["model.pingcap_lakehouse.salesforce_accounts"],"model.pingcap_lakehouse.stg_cloud_revenue":["model.pingcap_lakehouse.cloud_revenue"],"model.pingcap_lakehouse.stg_dates":["model.pingcap_lakehouse.date_spine"],"model.pingcap_lakehouse.stg_metadb_billing2_invoices":["model.pingcap_lakehouse.salesforce_org_monthly_revrec"],"model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec":["model.pingcap_lakehouse.customers","model.pingcap_lakehouse.salesforce_org_monthly_revrec"],"model.pingcap_lakehouse.stg_salesforce_opportunity":["model.pingcap_lakehouse.salesforce_opportunities"],"model.pingcap_lakehouse.stg_salesforce_org":["model.pingcap_lakehouse.salesforce_orgs"],"model.pingcap_lakehouse.stg_salesforce_product":["model.pingcap_lakehouse.salesforce_order_daily_view"],"model.pingcap_lakehouse.stg_salesforce_order_item":["model.pingcap_lakehouse.salesforce_order_daily_view","model.pingcap_lakehouse.salesforce_orders"],"model.pingcap_lakehouse.stg_salesforce_account":["model.pingcap_lakehouse.salesforce_accounts"],"model.pingcap_lakehouse.stg_salesforce_order":["model.pingcap_lakehouse.salesforce_orders"],"model.pingcap_lakehouse.stg_cloud_tenants":["model.pingcap_lakehouse.customer_surrogate_keys","model.pingcap_lakehouse.customers"],"model.pingcap_lakehouse.stg_salesforce_revenue":["model.pingcap_lakehouse.salesforce_revrec"],"model.pingcap_lakehouse.customers":["model.pingcap_lakehouse.salesforce_org_monthly_revrec"],"model.pingcap_lakehouse.customer_surrogate_keys":["model.pingcap_lakehouse.customers","model.pingcap_lakehouse.salesforce_org_monthly_revrec"],"model.pingcap_lakehouse.date_spine":["model.pingcap_lakehouse.salesforce_order_daily_view"],"model.pingcap_lakehouse.salesforce_orders":["model.pingcap_lakehouse.salesforce_order_daily_view"],"model.pingcap_lakehouse.salesforce_order_daily_view":["test.pingcap_lakehouse.parity_order_daily_view_vs_taskflow"],"model.pingcap_lakehouse.salesforce_revrec":["model.pingcap_lakehouse.salesforce_order_daily_view"],"model.pingcap_lakehouse.cloud_revenue":[],"model.pingcap_lakehouse.salesforce_opportunities":["model.pingcap_lakehouse.salesforce_orders"],"model.pingcap_lakehouse.salesforce_org_monthly_revrec":["test.pingcap_lakehouse.parity_vs_taskflow"],"model.pingcap_lakehouse.salesforce_orgs":["model.pingcap_lakehouse.customer_surrogate_keys","model.pingcap_lakehouse.salesforce_org_monthly_revrec"],"model.pingcap_lakehouse.salesforce_accounts":["model.pingcap_lakehouse.customer_surrogate_keys","model.pingcap_lakehouse.customers"],"test.pingcap_lakehouse.parity_order_daily_view_vs_taskflow":[],"test.pingcap_lakehouse.parity_vs_taskflow":[],"seed.pingcap_lakehouse.payment_type_mapping":["model.pingcap_lakehouse.salesforce_org_monthly_revrec"],"seed.pingcap_lakehouse.org_monthly_bill_confirmation_for_revrec":["model.pingcap_lakehouse.stg_google_sheets_org_monthly_bill_confirmation_for_revrec"],"source.pingcap_lakehouse.data_foundation_finance.monthly_cloud_revrec":["model.pingcap_lakehouse.stg_cloud_revenue"],"source.pingcap_lakehouse.data_foundation_finance.salesforce_account":["model.pingcap_lakehouse.stg_data_foundation_finance_salesforce_account"],"source.pingcap_lakehouse.metadb.billing2_invoices":["model.pingcap_lakehouse.stg_metadb_billing2_invoices"],"source.pingcap_lakehouse.nexuscrm.org__c":["model.pingcap_lakehouse.stg_salesforce_org"],"source.pingcap_lakehouse.nexuscrm.account":["model.pingcap_lakehouse.stg_salesforce_account"],"source.pingcap_lakehouse.nexuscrm.order":["model.pingcap_lakehouse.stg_salesforce_order"],"source.pingcap_lakehouse.nexuscrm.opportunity":["model.pingcap_lakehouse.stg_salesforce_opportunity"],"source.pingcap_lakehouse.nexuscrm.order_product":["model.pingcap_lakehouse.stg_salesforce_order_item"],"source.pingcap_lakehouse.nexuscrm.product2":["model.pingcap_lakehouse.stg_salesforce_product"],"source.pingcap_lakehouse.bq_warehouse.cloud_tenants":["model.pingcap_lakehouse.stg_cloud_tenants"],"source.pingcap_lakehouse.salesforce.revenue":["model.pingcap_lakehouse.stg_salesforce_revenue"]},"group_map":{},"saved_queries":{},"semantic_models":{},"unit_tests":{}}
