向 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.
我 运行 自己解决了这个问题,并为这个用例制作了以下包:
- 安装
在您的 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
将引发错误。
请随时在项目存储库中提出其他请求、提交或更多信息:
github: sgoley/dbt-postgres-utils
我正在开发的其他功能是:
- 将
index
和 uindex
函数的语法转换为“创建或替换”
- 指定索引类型(btree、hash 等)
来自dbt docs:
{{ config(
materialized = 'table',
indexes=[
{'columns': ['column_a'], 'type': 'hash'},
{'columns': ['column_a', 'column_b'], 'unique': True},
]
)}}
select ...
我们正在考虑使用 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.
我 运行 自己解决了这个问题,并为这个用例制作了以下包:
- 安装
在您的 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
将引发错误。
请随时在项目存储库中提出其他请求、提交或更多信息:
github: sgoley/dbt-postgres-utils
我正在开发的其他功能是:
- 将
index
和uindex
函数的语法转换为“创建或替换” - 指定索引类型(btree、hash 等)
来自dbt docs:
{{ config(
materialized = 'table',
indexes=[
{'columns': ['column_a'], 'type': 'hash'},
{'columns': ['column_a', 'column_b'], 'unique': True},
]
)}}
select ...