【发布时间】:2021-05-09 17:02:00
【问题描述】:
我们正在考虑使用 dbt 来管理我们的 PostgreSQL 数据仓库中的模型。由于 dbt 模型是 SQL 选择语句,因此似乎没有明显的或记录在案的方法来指定特定列应具有索引。
我们如何在 dbt 模型上指定列索引?
【问题讨论】:
标签: postgresql dbt
我们正在考虑使用 dbt 来管理我们的 PostgreSQL 数据仓库中的模型。由于 dbt 模型是 SQL 选择语句,因此似乎没有明显的或记录在案的方法来指定特定列应具有索引。
我们如何在 dbt 模型上指定列索引?
【问题讨论】:
标签: postgresql dbt
It looks like 索引手动作业:
确保为常用的列创建索引 连接或 where 子句。
【讨论】:
我自己遇到了这个确切的问题,并为此用例制作了以下软件包:
在您的 packages.yml 文件中包含以下内容:
packages:
- package: sgoley/postgres_utils
version: 0.2.0
然后您可以运行dbt deps,dbt 包管理器将在您的项目中本地project_dir/dbt_modules/postgres_utils 下设置相关宏。
之后,table 模型可以有一个索引或唯一索引,使用 posthook 构建,例如:
{{
config({
"post-hook": [
"{{ postgres_utils.index(this, 'id')}}",
],
})
}}
当然,如果您将其添加到视图模型中,您的 dbt run 会抛出错误。
随时在项目 repo 上提出其他请求、提交或更多内容:
github: sgoley/dbt-postgres-utils
我正在开发的其他功能是:
index 和uindex 函数的语法转换为“创建或替换”【讨论】:
来自dbt docs:
{{ config(
materialized = 'table',
indexes=[
{'columns': ['column_a'], 'type': 'hash'},
{'columns': ['column_a', 'column_b'], 'unique': True},
]
)}}
select ...
【讨论】: