dbt 在错误的字段上对 bigquery 表进行分区

问题描述

尝试将数据构建工具添加到我们的生态系统并面临标题问题。我们目前正在使用巨大的 BigQuery 表,因此我们希望每天对它们进行分区和扩展。 IDK 如果这很重要,但一切都在 docker 容器中运行。您可以通过以下方式重现它:

用于创建源表的bigquery SQL查询

create table `***.dbt_nick_test.partition_test_20210304` (
    session_date DATE,user_id STRING
);

insert into `***.dbt_nick_test.partition_test_20210304` (session_date,user_id)
values ('2021-03-04','1234'),('2021-03-04',NULL),'1235');

dbt_project.yml - 模型定义部分:

models:
        ***:
                test:
                        +schema: test

profiles.yml - 以防万一,确保一切配置正常:

***-bq:
    target: "{{ env_var('DBT_TARGET','dev') }}"
    outputs:
        dev:
            type: bigquery
            method: service-account
            project: ***
            dataset: dbt_nick_test
            threads: 4
            keyfile: /root/.dbt/bq-creds.json
            timeout_seconds: 300
            priority: interactive
            retries: 1

cat models/test/test.sql

{{
config(
    partition_by={
        "field": "session_date","data_type": "date","granularity": "day"
    },partitions=dbt.partition_range(var('dates',default=yesterday())),verbose=True
)
}}

SELECT
  session_date,user_id
FROM `***`.`dbt_nick_test`.`{{ date_sharded_table('partition_test_') }}`

昨天的宏是dbt教程的认设置。

运行 dbt -dS run -m test --vars 'dates: "20210304,20210304"' 后(一切正常)dbt 报告表创建成功。现在,转到 BigQuery,我可以看到该表实际上已创建,但它的“分区依据”字段错误 -- _PARTITIONTIME 而不是“session_date”screenshot

如果我手动创建正确分区的表,然后运行 ​​dbt run - 它会按预期工作,一切都很完美。

此外,使用 dbt 从该表创建的表也被严重分区。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)