将索引添加到 dbt 模型列?

问题描述

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

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

解决方法

It looks like 为手动作业编制索引:

确保为常用的列创建索引 连接或 where 子句。

,

我自己遇到了这个确切的问题,并为此用例制作了以下包:

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 等)