dbt post 挂钩关系 "my_table" 不存在

dbt post hook relation "my_table" does not exist

我正在使用 dbt 构建一些模型。

我有一个模型所以-

SELECT
  COALESCE(
    col1, col2
  ) AS col,
  ....
FROM
  {{ source(
    'db',
    'tbl'
  ) }}
  WHERE ....

此模型有一个调用宏的配置部分

{{- config(
  post_hook = [macro()],
  materialized='table'
) -}}

在宏中我使用 {% if execute %} 并且我还登录以检查执行值 {{ log('Calling update macro with exec value = ' ~ execute) }}

当我 运行 dbt compile 我不希望宏根据 documentation 触发。但是,它确实将执行设置为 true 触发更新并导致错误,因为 table 不存在。我是否遗漏了什么或者这是一个 dbt 错误?我很困惑!

这是日志中的一行 - 2021-09-15 20:48:16.864555 (Thread-1): Calling update macro with exec value = True

..错误是 relation "schema.my_table" does not exist

感谢任何人的指点,谢谢

好的,这就是我对 dbt 的了解。

当您第一次 dbt compiledbt run 时, table 还不存在于数据库中。但是, 编译和 运行 都会检查数据库对象是否存在,否则会抛出错误。因此,无论我使用 {% if execute %}

,我在宏中的 select 都失败了

我调用了adapter.get_relation()来检查table是否存在-

{%- set source_relation = adapter.get_relation(
        database=this.database ,
        schema=this.schema,
        identifier=this.name) -%}

并使用了检查条件 -

{% set table_exists=source_relation is not none  %}

对于增量 运行,修复更容易 -

{% if execute and is_incremental() %}

现在,我的代码已修复 :)