我们使用DBT来管理我们的数据管道。我们也使用postgres作为我们的数据库。我正在通过查询(而不是在dbt中)创建一些物化视图,看起来每当我们运行dbt run --full-refresh时,它都会删除这些物化视图。知道为什么,以及如何不删除实例化视图吗?
发布于 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/
发布于 2021-01-12 00:18:23
正如前面的回答所述,当表因级联而被删除时,物化视图将被删除。
通向更高正常运行时间的桥梁是让表充当正在重建的dbt表的副本,然后在重建时删除和更新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 %}https://stackoverflow.com/questions/61900980
复制相似问题