我们使用dbt来管理我们的数据管道。我们也使用postgres作为数据库。我正在通过一个查询(不是在dbt中)创建一些具体化的视图,看起来就像每次运行 dbt run --full-refresh 它放弃了那些物化的视图。你知道为什么,以及如何不放弃物化视图吗?
dbt run --full-refresh
5lhxktic1#
这个答案来自dbt的克莱尔。如果物化视图依赖于上游表,它们将被drop table my\ U table cascade语句删除这是dbt的杰克说的。”postgres视图/物化视图是绑定的。没有选择退出,即使在同一个dbt运行中重新创建它们也会导致无法使用的时段。”https://www.postgresql.org/docs/9.3/rules-materializedviews.htmlhttpshttp://docs.getdbt.com/
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 %}
2条答案
按热度按时间5lhxktic1#
这个答案来自dbt的克莱尔。
如果物化视图依赖于上游表,它们将被drop table my\ U table cascade语句删除
这是dbt的杰克说的。”postgres视图/物化视图是绑定的。没有选择退出,即使在同一个dbt运行中重新创建它们也会导致无法使用的时段。”
https://www.postgresql.org/docs/9.3/rules-materializedviews.htmlhttpshttp://docs.getdbt.com/
uurv41yg2#
如前一个答案所述,由于层叠而删除表时,将删除具体化视图。
提高正常运行时间的一个桥梁是让表充当正在重建的dbt表的副本,然后在重建时删除和更新这些表。
当表被重建时的停机时间可能值得知道表何时被重建的确定性行为,而不是在长时间的重建过程中实体化视图消失。
这是我用来解决这个问题的宏。它在单个事务中创建一个名称略有不同的新表,允许100%的正常运行时间。