【问题标题】:Automatically add new column to incremental (or other type)自动将新列添加到增量(或其他类型)
【发布时间】:2022-01-20 23:48:33
【问题描述】:

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

问题

我们有很多使用 DBT 管理的增量模型。最近,我们需要为所有模型添加一个新列。最有效的 DBT 方法是什么?我们应该覆盖增量宏脚本吗? (I found this for snowflake.) 我认为最后的办法是手动将新列添加到每个模型。

【问题讨论】:

    标签: snowflake-cloud-data-platform dbt


    【解决方案1】:

    您可以--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. 编辑 my_incremental_table 的 dbt 模型,将 new_column_name 添加到选择查询的列列表的末尾

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

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

    【讨论】:

    • 谢谢@HaleemurAli。不确定我是否理解 --full-refresh 将如何帮助这种情况。另外,alter table add column,我不确定这是否是一个选项,因为我们需要添加一个 Jinja 逻辑列,例如 {% if var('id') %} '{{ var("id") }}' {% else %} null {% endif %} as id 并且因为我们有几十个我不想编辑每个 .sql 文件。我找到了这个The --full-refresh flag will force dbt to drop cascade the existing table before rebuilding it.,所以我不确定我是否要删除现有的表
    • @ShayHa,我不确定jinja-logic 列在做什么。您是否通过名为id 的CLI 传递了一个变量,并确定用于构建id 列的内容。如果是,那么我认为您可能也有不同的数据建模问题,尽管我不能确定我所拥有的信息。如果您使用的是最新版本的 dbt,则增量模型有一个新参数来控制添加列时会发生什么on_schema_change,它通过自省定义查询和数据库架构来自动更改增量模型上的架构.答案已更新。
    • 谢谢。我设法理解了如何覆盖```incremental.sql```宏,我将在那里添加我的逻辑,这样每次运行都会向所有增量模型插入另一列。
    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 2020-09-05
    • 2016-05-29
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多