模型配置

你可以使用 config() 宏来实现更细粒度且更强大的模型控制。

config() 的特点

1. 物化设置

config() 宏使用户能够决定模型在分析数据库中的物化方式,常见的物化策略包括:

  • Table(表):模型以表的形式创建。

  • View(视图):模型以视图的形式创建。

  • Incremental(增量):模型以增量方式构建,仅更新自上次运行以来的新数据,提高大数据集的处理效率。

2. 主键和分区设置

使用 config() 宏定义的配置可以继承或覆盖其他位置(如模型的元数据)中定义的设置。用户可以在 config() 宏中定义多种配置,包括:

  • 为增量模型设置主键(unique key)。

  • 指定增量策略(incremental strategy)。

  • 指定分区(partition)。

不同数据库类型可以使用的 config 配置项有所差异,详见 数据库特定配置

3. 配置示例

config() 配置一般放置在模型代码的开头,例如:

-- models/model_name.sql
{{ config(
    materialized='incremental',
    unique_key='id'
) }}

SELECT *
FROM {{ ref('source_table') }}

配置增量模型

config() 宏的一个常见用途是定义数据模型的增量策略。

增量(Incremental) 是一种物化方式,每次运行时仅更新新增数据。相比于全量更新的表(Table),增量模型能够减少数据转换所需的时间和资源,适用于周期性更新的大数据集。

在模型的元数据面板中,你可以指定物化选项为 incremental。默认情况下,此选项采用 追加(append) 的方式,每次构建时仅向表中追加新数据,可能会导致重复数据的写入。

因此,你可以指定以下配置来实现按主键字段增量更新:

  • unique_key:定义数据的唯一标识符,实际运行时会根据主键字段的取值是否已存在,来决定插入新记录还是更新现有记录。

  • incremental_strategy:处理增量更新的方式,常见策略包括:

    • merge:基于唯一键更新现有记录并插入新记录。

    • append:仅追加新记录,不更新现有记录。

    • insert_overwrite:根据指定条件覆盖现有记录。

  • is_incremental():用于筛选在运行过程中应增量更新的数据。你可以借助此语法指定增量更新的数据范围

示例:

orders(订单)表中,我们可以实现增量物化,使其仅处理自上次运行以来新增或更新的订单,以减少处理时间并确保表数据保持最新:

{{ config(
    materialized='incremental',
    unique_key='id',
    incremental_strategy='merge'
) }}

SELECT *  
FROM {{ source("public", "raw_orders") }}  
{% if is_incremental() %}  -- 仅处理新记录
    WHERE ordered_at >= (SELECT MAX(ordered_at) FROM {{ this }})
{% endif %}

数据库特定配置

由于不同数据库平台在优化数据处理方面采用不同的方法,因此某些配置是专门为特定平台设计和应用的。有关这些平台特定配置和行为的详细信息,请参考 PLATFORM SPECIFIC 文档。

Last updated