【问题标题】:Add index to dbt model column?向 dbt 模型列添加索引?
【发布时间】:2021-05-09 17:02:00
【问题描述】:

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

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

【问题讨论】:

    标签: postgresql dbt


    【解决方案1】:

    It looks like 索引手动作业:

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

    【讨论】:

    • 谢谢弗兰克。我希望索引定义将包含在未来的版本中,因为我们希望将索引定义包含在修订控制之下。
    • 啊,找到了相关的功能请求:github.com/fishtown-analytics/dbt/issues/804
    • 我首先搜索了 StackOverflow 和 DBT Discourse 以获取任何建议。
    【解决方案2】:

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

    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 会抛出错误。

    随时在项目 repo 上提出其他请求、提交或更多内容:

    github: sgoley/dbt-postgres-utils

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

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

    【讨论】:

    【解决方案3】:

    来自dbt docs

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

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 2014-11-24
      • 2014-06-24
      相关资源
      最近更新 更多