我在 dbt 中创建了这个模型,并使用以下分区配置:
{{ config(
materialized='incremental',
incremental_strategy='append',
partitioned_by=["year('sale_date')", "month('sale_date')", "day('sale_date')"],
schema='ga_public_sale',
pre_hook = [
"""{% if is_incremental() %}
delete from {{this}}
where
sale_date >= current_date - interval '90' day
{% endif %}
"""
]
) }}
SELECT
sale_tend.transaction_number
, sale_tend.sale_date
, sale_tend.store_code
, sale_tend.transaction_index
, sale_tend.row_key
, sale_tend.sale_currency
, sale_tend.transaction_type_code
, sale_tend.transaction_type_group
, sale_tend.tender_number
, sale_tend.tender_type_code
, sale_tend.tender_amount
, sale_tend.tender_currency
, sale_tend.tender_code
, sale_tend.closure_cashier_code cashier_code
, sale_tend.consumer_code
, tender_type_text.tender_type_desc
, tender_type.tender_type_group_code
, tender_type_group_text.tender_type_group_desc
FROM
((((ga_curated_sale.car_sale_transaction sale_tend
LEFT JOIN ga_curated_customer.car_store_profile store_profile ON (sale_tend.store_code = store_profile.store_code))
LEFT JOIN ga_curated_tender.car_tender_type_text tender_type_text ON ((store_profile.profile_code = tender_type_text.profile_code) AND (sale_tend.tender_type_code = tender_type_text.tender_type_code) AND (tender_type_text.language = 'E')))
LEFT JOIN ga_curated_tender.car_tender_type tender_type ON ((store_profile.profile_code = tender_type.profile_code) AND (sale_tend.tender_type_code = tender_type.tender_type_code)))
LEFT JOIN ga_curated_tender.car_tender_type_group_text tender_type_group_text ON ((store_profile.profile_code = tender_type_group_text.profile_code) AND (tender_type.tender_type_group_code = tender_type_group_text.tender_type_group_code) AND (tender_type_group_text.language = 'E')))
WHERE (((sale_tend.transaction_type_code = '1001') OR (sale_tend.transaction_type_code = '1004')) AND (sale_tend.record_type_code = 21) AND (NOT (sale_tend.task_canceled_flg IN ('X'))))
{% if is_incremental() %}
AND sale_date >= current_date - interval '90' day
{% endif %}
列 sale_dat 是日期,我收到此错误“INVALID_TABLE_PROPERTY:无法解析分区值:无效的分区字段声明:年份(\u0027sale_date\u0027)。”
我尝试更改partitioned_by的一些配置,但仍然没有结果
基于错误描述和分区上的 dbt 文档。
partitioned_by 应为特定字段,因此模型定义应为。
{{ config(
materialized='incremental',
incremental_strategy='append',
partitioned_by=["year", "month", "day"],
schema='ga_public_sale',
pre_hook = [
"""{% if is_incremental() %}
delete from {{this}}
where
sale_date >= current_date - interval '90' day
{% endif %}
"""
]
) }}
SELECT
year(sale_tend.sale_date) as year
, month(sale_tend.sale_date) as month
, day(sale_tend.sale_date) as day
, sale_tend.transaction_number
, sale_tend.sale_date
, sale_tend.store_code
, sale_tend.transaction_index
, sale_tend.row_key
, sale_tend.sale_currency
, sale_tend.transaction_type_code
, sale_tend.transaction_type_group
, sale_tend.tender_number
, sale_tend.tender_type_code
, sale_tend.tender_amount
, sale_tend.tender_currency
, sale_tend.tender_code
, sale_tend.closure_cashier_code cashier_code
, sale_tend.consumer_code
, tender_type_text.tender_type_desc
, tender_type.tender_type_group_code
, tender_type_group_text.tender_type_group_desc
FROM
((((ga_curated_sale.car_sale_transaction sale_tend
LEFT JOIN ga_curated_customer.car_store_profile store_profile ON (sale_tend.store_code = store_profile.store_code))
LEFT JOIN ga_curated_tender.car_tender_type_text tender_type_text ON ((store_profile.profile_code = tender_type_text.profile_code) AND (sale_tend.tender_type_code = tender_type_text.tender_type_code) AND (tender_type_text.language = 'E')))
LEFT JOIN ga_curated_tender.car_tender_type tender_type ON ((store_profile.profile_code = tender_type.profile_code) AND (sale_tend.tender_type_code = tender_type.tender_type_code)))
LEFT JOIN ga_curated_tender.car_tender_type_group_text tender_type_group_text ON ((store_profile.profile_code = tender_type_group_text.profile_code) AND (tender_type.tender_type_group_code = tender_type_group_text.tender_type_group_code) AND (tender_type_group_text.language = 'E')))
WHERE (((sale_tend.transaction_type_code = '1001') OR (sale_tend.transaction_type_code = '1004')) AND (sale_tend.record_type_code = 21) AND (NOT (sale_tend.task_canceled_flg IN ('X'))))
{% if is_incremental() %}
AND sale_date >= current_date - interval '90' day
{% endif %}