【dbt】dbt ~ Hooks ~

■ はじめに

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