自动将新列添加到增量(或其他类型)

Sha*_*yHa 6 snowflake-cloud-data-platform dbt

对于我试图解决的新 DBT 用例,我需要一些智慧。我对 DBT 很陌生,不确定什么是最有效的 DBT 方法。我们使用雪花作为 DWH。

问题

我们有很多使用 DBT 管理的增量模型。最近,我们需要向所有模型添加一个新列。最有效的 DBT 方法是什么?我们应该覆盖增量宏脚本吗?(我为雪花找到了这个。)我认为最后的手段是将新列手动添加到每个模型。

Hal*_*Ali 5

你可以--full-refresh所有增量模型或在 dbt 之外执行此架构迁移。

--full-refresh如果可以的话我建议使用。由于--full-refresh重建表,它会处理架构更改和新列的历史值。

在当前版本的 dbt 上v0.21.0,引入了一个新的增量设置,on_schema_change. 您可以将其设置为append_new_columns

引用文档中的一些相关部分:

dbt 版本 v0.21.0 中的新 on_schema_change 配置 现在可以将增量模型配置为包含可选的 on_schema_change 参数,以便在增量模型列更改时启用额外控制。这些选项使 dbt 能够在架构发生更改的情况下继续运行增量模型,从而减少 --full-refresh 场景并节省查询成本。

append_new_columns:将新列追加到现有表中。请注意,此设置不会从现有表中删除新数据中不存在的列。

注意: on_schema_change 行为都不会为新添加的列回填旧记录中的值。如果您需要填充这些值,我们建议运行手动更新,或触发 --full-refresh。

如果--full-refresh不是一个选项或者您使用的是较旧的 dbt 版本,那么您的架构迁移将必须手动完成。

步骤是:

  1. 通过更改表添加新列alter table my_incremental_table add column new_column_name data_type
  2. 运行更新查询以水合新列
  3. 编辑 dbt 模型以my_incremental_table添加new_column_name到选择查询的列列表的末尾

这会起作用,因为 dbt 是无状态的,但由于这是手动操作,如果可以避免的话,我不建议这样做。

另请注意,如果您使用该on_schema_change方法,您仍然需要手动回填新列。