首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBT full refresh删除我的所有实例化视图。Postgres

问DBT full refresh删除我的所有实例化视图。Postgres
EN

Stack Overflow用户
提问于 2020-05-20 05:21:35
回答 2查看 1.2K关注 0票数 1

我们使用DBT来管理我们的数据管道。我们也使用postgres作为我们的数据库。我正在通过查询(而不是在dbt中)创建一些物化视图,看起来每当我们运行dbt run --full-refresh时,它都会删除这些物化视图。知道为什么,以及如何不删除实例化视图吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-23 21:34:00

这个答案来自DBT的克莱尔。

如果实例化视图依赖于上游表,则它们将被drop table my_table cascade语句删除

这是DBT的杰克说的。"postgres视图/物化视图是绑定的。没有选择退出,即使在相同的dbt运行中重新创建它们也会导致它不可用。“

https://www.postgresql.org/docs/9.3/rules-materializedviews.html https://docs.getdbt.com/

票数 2
EN

Stack Overflow用户

发布于 2021-01-12 00:18:23

正如前面的回答所述,当表因级联而被删除时,物化视图将被删除。

通向更高正常运行时间的桥梁是让表充当正在重建的dbt表的副本,然后在重建时删除和更新dbt表。

重建表时的停机时间可能值得知道何时重建表的确定性行为,而不是让物化视图在长时间的重建过程中消失。

这是我为解决这个问题而编写的宏。它在单个事务中创建一个名称略有不同的新表,允许100%的正常运行时间。

代码语言:javascript
复制
{% macro create_table(table_name) %}

{% set sql %}
    BEGIN;
    DROP TABLE IF EXISTS {{ table_name[:-4]}};
    CREATE TABLE {{ table_name[:-4]}} AS SELECT * FROM {{ table_name }};

    COMMIT;
{% endset %}

{% do run_query(sql) %}
{% do log(table_name+" table created", info=True) %}
{% endmacro %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61900980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档