■ はじめに
DBT の pre-hook/post-hook について学んだのでメモ
目次
【1】公式ドキュメント 【2】Hooks 1)pre-hook 2)post-hook 【3】サンプル 例1:モデルのバックアップ作成
【1】公式ドキュメント
* 以下、参照。
https://docs.getdbt.com/docs/build/hooks-operations
https://docs.getdbt.com/reference/resource-configs/pre-hook-post-hook
【2】Hooks
* 実行前・後のイベントハンドラ
1)pre-hook
* model作成直前にクエリを実行できる * seedやsnapshotでも使用可能 * SQL文だけでなく、Macroなども呼び出すことは可能
2)post-hook
* model作成直後にクエリを実行できる * seedやsnapshotでも使用可能 * SQL文だけでなく、Macroなども呼び出すことは可能
【3】サンプル
例1:モデルのバックアップ作成
* dbt run すれば、モデル作成後、 そのテーブルのバックアップ(_bk)を作成される => pre_hook の DROP は実際にはやっちゃだめだけど。
models/customers.sql
{{ config( alias='hello', schema='demo_schema', database='sample_db', materialized='table', pre_hook=["{{ clean_backup('customers') }}"], post_hook=["{{ backup('customers') }}"] ) }} select 1 as id, 'Mike' as name, '{{ var("remark", "hello_world") }}' as remark, now() as insert_at
macros/clean_backup.sql
{%- macro clean_backup(table_name) %} DROP TABLE IF EXISTS {{ table_name }}_bk {% endmacro %}
macros/backup.sql
{%- macro backup(table_name) %} CREATE TABLE IF NOT EXISTS {{ table_name }}_bk AS SELECT * FROM {{ table_name }} {% endmacro %}
参考文献
https://dev.classmethod.jp/articles/dbt-hooks/
関連記事
dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt ~ 基本編 / Model ~
https://dk521123.hatenablog.com/entry/2023/11/25/231128
dbt ~ 基本編 / Seed ~
https://dk521123.hatenablog.com/entry/2023/11/20/230946
dbt ~ 基本編 / Source ~
https://dk521123.hatenablog.com/entry/2023/12/08/111012
dbt ~ Macro ~
https://dk521123.hatenablog.com/entry/2023/11/29/003751
dbt ~ ドキュメント化 / dbt docs ~
https://dk521123.hatenablog.com/entry/2023/12/10/125512
dbt ~ aliases ~
https://dk521123.hatenablog.com/entry/2023/12/13/031018