gpt4 book ai didi

google-bigquery - 如何使用 DBT 在 BigQuery 中对表进行分区

转载 作者:行者123 更新时间:2023-12-05 04:36:05 25 4
gpt4 key购买 nike

我是 DBT 的新手,之前一直在使用 Airflow 进行数据转换。

在 Airflow 中有一个名为 {{ ds }} 的变量,它以 YYYY-MM-DD{{ ds_nodash } 的形式表示逻辑日期} 表示此形式的逻辑日期 YYYYMMDD。然后我可以设置一个类似这样的任务:

my_task = BigQueryOperator(
task_id='t_my_task',
sql= """ SELECT * FROM my_table where my_date="{{ ds }}" """,
destination_dataset_table='my_project.my_dataset.my_table_new${{ ds_nodash }}',
write_disposition='WRITE_TRUNCATE',
dag=dag
)

这意味着我正在运行第三行给出的 SQL 查询,这将覆盖第四行的表。在 Airflow 界面中,如果我重新运行,只说“2022-01-11”这一天,那么它会在该日期自动覆盖该分区。

我正在尝试找出如何在 DBT 中执行相同的操作。

最佳答案

使用 DBT,您可以使用 incremental model 来做到这一点.

在 dbt 中,您使用 SQL 语句描述您想要的数据,您选择的物化决定了它在您的仓库中的物化方式:

  • 短暂的物化:CTE 将是短暂的,
  • 表具体化:BQ 表,但每次重新运行 DBT 项目时,它都会被删除并重新创建(不适合大表)
  • 查看具体化: View ...
  • 和增量模型

使用增量模型,您基本上有一个大表,您可以在其中插入新行。此具体化允许您添加规则,例如“从表 source_table 中插入行,其中时间戳 >= 今天”。

在您的情况下,使用 DBT + BigQuery,您有 2 个选项:mergeinsert+ overwrite,但根据您的描述,您会希望使用后者。

您需要在模型的开头包含此内容:

{{
config(
materialized='incremental',
incremental_strategy='insert_overwrite',
...
)
}}

引用你可以去therethere .

关于google-bigquery - 如何使用 DBT 在 BigQuery 中对表进行分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70893303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com