向 dbt 模型列添加索引?

Add index to dbt model column?

我们正在考虑使用 dbt 来管理 PostgreSQL 数据仓库中的模型。由于 dbt 模型是 SQL select 语句,因此似乎没有明显的或记录的方式来指定特定列应具有索引。

我们如何在 dbt 模型上指定列索引?

It looks like 索引手动作业:

Make sure to create indexes for columns that are commonly used in joins or where clauses.

我 运行 自己解决了这个问题,并为这个用例制作了以下包:

dbt-postgres-utils

  1. 安装

在您的 packages.yml 文件中包含以下内容:

packages:
  - package: sgoley/postgres_utils
    version: 0.2.0

然后您可以 运行 dbt deps dbt 包管理器将在您的项目中本地设置相关宏 project_dir/dbt_modules/postgres_utils

  1. 用法

在那之后,table 模型可以有一个索引或使用 posthook 构建的唯一索引,例如:

{{
config({
    "post-hook": [
      "{{ postgres_utils.index(this, 'id')}}",
    ],
    })
}}

当然,如果您将其添加到视图模型中,您的 dbt run 将引发错误。

请随时在项目存储库中提出其他请求、提交或更多信息:

github: sgoley/dbt-postgres-utils

我正在开发的其他功能是:

  • indexuindex 函数的语法转换为“创建或替换”
  • 指定索引类型(btree、hash 等)

来自dbt docs

{{ config(
    materialized = 'table',
    indexes=[
      {'columns': ['column_a'], 'type': 'hash'},
      {'columns': ['column_a', 'column_b'], 'unique': True},
    ]
)}}

select ...