🔖
【dbt Docs】Building a dbt Project - Hooks & Operations
Hooks & Operations
Related documentation
Assumed knowledge
Getting started
効果的なデータベース管理では、次のように追加のSQLステートメントを実行する必要がある場合があります。
- テーブル/ビューに対する特権の付与
- UDFの作成
- RedshiftでテーブルをVacuum
- Redshift Spectrum外部テーブルでのパーティションの作成
- SnowflakeのWarehouseの再開/一時停止/サイズの変更
- SnowflakeでPipeを更新する
- SnowflakeでShareを作成する
- Snowflakeでデータベースのクローンを作成する
dbtは、バージョン管理を行い、dbtプロジェクトの一部としてこれらのステートメントを実行するための2つの異なるインターフェース(フックと操作)を提供します。
Hooks
フックは、さまざまな時間に実行されるSQLのスニペットです。
-
pre-hook
:モデル、シード、またはスナップショットが作成される前に実行されます。 -
post-hook
:モデル、シード、またはスナップショットが構築された後に実行されます。 -
on-run-start
:開始時に実行dbt run
、dbt seed
またはdbt snapshot
-
on-run-end
:最後に実行dbt run
、dbt seed
またはdbt snapshot
フックは、dbt_project.yml
ファイルで定義されています。pre-hook
もpost-hook
もconfig
ブロックで定義できる。
dbt_project.yml
on-run-end:
- "grant usage on {{ target.schema }} to role reporter"
models:
+post-hook:
- "grant select on {{ this }} to role reporter"
models/<model_name>.sql
{{ config(
post_hook=[
"grant select on {{ this }} to role reporter"
]
) }}
select ...
Operations
操作は、コマンドコマンドを使用して実行できるマクロです。そのため、操作は実際にはdbtプロジェクト内の個別のリソースではありません。これらは、モデルを実行せずにマクロを呼び出すための便利な方法にすぎません。run-operation
macros/grant_select.sql
{% macro grant_select(role) %}
{% set sql %}
grant usage on schema {{ target.schema }} to role {{ role }};
grant select on all tables in schema {{ target.schema }} to role {{ role }};
grant select on all views in schema {{ target.schema }} to role {{ role }};
{% endset %}
{% do run_query(sql) %}
{% do log("Privileges granted", info=True) %}
{% endmacro %}
このマクロを操作として呼び出すには、を実行しdbt run-operation grant_select --args '{role: reporter}'ます。
$ dbt run-operation grant_select --args '{role: reporter}'
Running with dbt=0.16.1
Privileges granted
Discussion