dbt完全刷新会删除我所有的物化视图博士后

yks3o0rb  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(302)

我们使用dbt来管理我们的数据管道。我们也使用postgres作为数据库。我正在通过一个查询(不是在dbt中)创建一些具体化的视图,看起来就像每次运行 dbt run --full-refresh 它放弃了那些物化的视图。你知道为什么,以及如何不放弃物化视图吗?

5lhxktic

5lhxktic1#

这个答案来自dbt的克莱尔。
如果物化视图依赖于上游表,它们将被drop table my\ U table cascade语句删除
这是dbt的杰克说的。”postgres视图/物化视图是绑定的。没有选择退出,即使在同一个dbt运行中重新创建它们也会导致无法使用的时段。”
https://www.postgresql.org/docs/9.3/rules-materializedviews.htmlhttpshttp://docs.getdbt.com/

uurv41yg

uurv41yg2#

如前一个答案所述,由于层叠而删除表时,将删除具体化视图。
提高正常运行时间的一个桥梁是让表充当正在重建的dbt表的副本,然后在重建时删除和更新这些表。
当表被重建时的停机时间可能值得知道表何时被重建的确定性行为,而不是在长时间的重建过程中实体化视图消失。
这是我用来解决这个问题的宏。它在单个事务中创建一个名称略有不同的新表,允许100%的正常运行时间。

{% 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 %}

相关问题