dbt - dbt post hook 关系“my_table”不存在
问题描述
我正在使用 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
我不希望宏根据文档触发。但是,它确实并且实际上将执行设置为 true 以触发更新并导致错误,因为表不存在。我错过了什么还是这是一个 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
第一次时,数据库中尚不存在表。但是,编译和运行都会检查 db 对象是否存在,否则会抛出错误。所以,无论我使用什么,我在宏中的选择都失败了{% if execute %}
我打电话adapter.get_relation()
来检查表是否存在 -
{%- 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() %}
现在,我的代码是固定的:)
推荐阅读
- java - 适用于所有 Android 6.0+ 设备的 Google Play 发布前报告崩溃
- java - 我的应用程序不断崩溃并抛出空对象引用,我不明白为什么?
- regex - 如何从 htaccess 规则中免除给定的路由模式
- java - XPath 评估的撒克逊表示
- c# - ASP.NET Core 省略的 SameSite Cookie 属性
- neo4j - 在neo4j中将具有字母数字名称的节点名称转换为数字
- python-3.x - 如何在同一图中绘制水平图和垂直图?
- python - 根据每个组的第一个元素从列表列表中收集元素
- ios - 更改 NavigationView 标题 SwiftUI 的颜色
- swift - Swift 在位置服务中杀死了应用程序获取数据?