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 compile
或 dbt 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() %}
现在,我的代码已修复 :)
我正在使用 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 compile
或 dbt run
时, table 还不存在于数据库中。但是, 编译和 运行 都会检查数据库对象是否存在,否则会抛出错误。因此,无论我使用 {% if execute %}
我调用了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() %}
现在,我的代码已修复 :)