Google bigquery 加载BigQuery表时,变量作为dbt中的分区日期
在尝试使用增量模式加载分区表时,我遇到了一些问题。每个分区都是基于作为参数传递的执行日期变量创建的。 由于某些原因,新分区总是使用CurrentDate作为分区值生成。即使变量作为参数作为不同的日期值传递。 我已经定义了一个宏来格式化通过命令行传递的变量。 请在下面找到宏的代码:Google bigquery 加载BigQuery表时,变量作为dbt中的分区日期,google-bigquery,partition,dbt,Google Bigquery,Partition,Dbt,在尝试使用增量模式加载分区表时,我遇到了一些问题。每个分区都是基于作为参数传递的执行日期变量创建的。 由于某些原因,新分区总是使用CurrentDate作为分区值生成。即使变量作为参数作为不同的日期值传递。 我已经定义了一个宏来格式化通过命令行传递的变量。 请在下面找到宏的代码: {% macro formatted_date(execution_date) %} {% set execution_date_obj = modules.datetime.datetime.strptime(e
{% macro formatted_date(execution_date) %}
{% set execution_date_obj = modules.datetime.datetime.strptime(execution_date|string, "%Y%m%d") %}
{{ return(execution_date_obj.strftime("%Y-%m-%d")) }}
{% endmacro %}
下面是我如何定义用于加载表的dbt模型:
{{config(alias='unipr_salesforce',
materialized = 'incremental',
partitions = [formatted_date(var('execution_date'))]
)}}
最后,这是用于运行dbt模型的命令,您可以在其中看到用作参数的变量:
unipr-subscription-pipeline toledanof$ dbt run --target dev --profiles-dir ./ --vars 'execution_date : "20210310"'
每次运行dbt模型时,生成的分区都对应于CurrentDate,而与执行日期值无关。
有人知道这种行为的可能原因吗?谢谢大家! 您尝试做的事情似乎有几个问题:
insert\u overwrite
。当您没有明确指定策略时,dbt默认为merge
,它扫描整个表以决定更新什么和插入什么(我认为需要您在配置中指定一个unique_key
){{
config(
materialized='incremental',
partition_by={'field': 'current_date', 'data_type': 'date'},
incremental_strategy='insert_overwrite',
partitions=[formatted_date(var('execution_date'))]
)
}}
非常感谢您的回复。其思想不是按字段划分,而是按摄取时间划分。我已经使用materialized='table'创建了一个目标分区表。这样,dbt会根据伪列_PARTITIONDATE自动对表进行分区。但是,我们希望使用materialized='incremental',到目前为止,我还无法对其进行分类。