---
title: 【Snowflake×dbt】レコードの削除
description: "dbtの hook を使用してレコードを削除する方法を解説します。\ndbt (data build tool) は、データパイプラインを構築するためのツールです。新しいレコードと更新されたレコードのみを変換して読み込む機能もあり、incrementalモデル を使用して実装できます。しかし、dbtのモデルファイルはSELECT文しか記述できないので、レコードを削除する場合、dbtの hook を使用する必要があります。"
image: https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-01-06-09-5805-PM.png
---

![INSIGHT LAB](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png?width=400&height=110&name=INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png)

![INSIGHT LAB](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF.png?width=400&height=110&name=INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF.png)

[![お問い合わせ](https://hubspot-no-cache-na2-prod.s3.amazonaws.com/cta/default/5935783/c64a7bb0-e32a-499b-851b-b4e7a66da275.png)](https://hubspot-cta-redirect-na2-prod.s3.amazonaws.com/cta/redirect/5935783/c64a7bb0-e32a-499b-851b-b4e7a66da275)

<https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-delete-record#tmpmodule_159357067471898>

- [Snowflakeとは](https://service.insight-lab.co.jp/snowflake)
- [SNOWFLAKEナレッジ](https://knowledge.insight-lab.co.jp/snowflake)
- [お役立ち資料](https://download.insight-lab.co.jp/snowflake/download)

###### 2 分で読むことができます

# [【Snowflake×dbt】レコードの削除](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-delete-record)

 執筆者 [橋口](https://knowledge.insight-lab.co.jp/snowflake/author/橋口) 更新日時 2022年12月20日

###### Topics: [DWH](https://knowledge.insight-lab.co.jp/snowflake/tag/dwh) [データパイプライン](https://knowledge.insight-lab.co.jp/snowflake/tag/データパイプライン) [snowflake](https://knowledge.insight-lab.co.jp/snowflake/tag/snowflake) [dbt](https://knowledge.insight-lab.co.jp/snowflake/tag/dbt)

![【Snowflake×dbt】レコードの削除](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-01-06-09-5805-PM.png)

 目次

## dbtとは

dbt (data build tool) は、データパイプラインを構築するためのツールです。データの前処理（ELT）におけるTransform（変換）を担当し、SELECT文を記述するだけでデータウェアハウス内のデータを変換できます。

また、新しいレコードと更新されたレコードのみを変換して読み込む機能もあり、incrementalモデル を使用して実装できます。

しかし、dbtのモデルファイルはSELECT文しか記述できないので、レコードを削除する場合、dbtの **hook** を使用する必要があります。

Snowflakeとdbtの環境構築に関してはこちらを参照ください：[https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-environmental-preparation](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-environmental-preparation)

## incrementalモデルについて

テーブルを継続的に更新する際、扱うデータが大きいと、テーブルの再生成に毎回と大幅な計算コスト、実行時間を費やすことになります。

そのためdbtには、変換するデータを制限するモデルタイプ：**incrementalモデル**が存在します。incrementalモデルを使用すると、モデルが最後に実行されてから更新されたレコードを指定して、テーブルを段階的に構築することができます。

公式 : [https://docs.getdbt.com/docs/build/incremental-models](https://docs.getdbt.com/docs/build/incremental-models)

## hookについて

hookはさまざまなタイミングで実行できるSQLステートメントを追加できます。

- pre-hook : モデルが構築される前に実行されます。
- post-hook : モデルが構築された後に実行されます。
- on-run-start : dbt run、dbt seedまたはdbt snapshotの開始時に実行
- on-run-end : dbt run、dbt seedまたはdbt snapshotの最後に実行

"dbt run" 後の順序としては以下のようなイメージ。

![](https://knowledge.insight-lab.co.jp/hubfs/dbt_sequence-png-2.png)

Hookは全モデルに適用する dbt\_project.yml と、単一のモデルに適用する config どちらでも利用できます。今回は config に post\_hook を設定してDELETE文を使用してみようと思います。

## 実行

今回は以下のデータ使って hook を使ったモデルの動作確認をしてみます。

![](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-01-06-09-5805-PM.png)

実行するモデルはこちら。

![](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-12-35-45-4448-PM.png)

post\_hook に DELETE条件として「挿入日時が最新より古いもの」、SELECT文に ft\_post の結果から code, name に加えて insert\_timestamp として挿入日時を取得、is\_incremental() に増分の条件として 「code の値が前回より大きい値」を設定しています。

ちなみに ft\_post の結果には上のデータが入っています。

というわけでまず初回実行。

![](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-01-09-02-3035-PM.png)

元データにある CODE と NAME に追加で、CURRENT\_TIMESTAMP で挿入日時を追加しています。

次に元データにデータを追加して、再度実行してみます。

![](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-12-33-07-0667-PM.png)

実行結果。

![](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-12-34-10-1579-PM.png)

追加したデータのみ INSERT されていることが確認できました。

処理の内容を確認してみると、、、

![](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-12-38-53-5055-PM.png)

![](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-11-2022-12-38-01-8003-PM.png)

SELECT文のあとにDELETE文が実行されており、DELETE文をdbtで使用することができました。

## まとめ

今回は、 code と name という数値と文字列のカラムしかない単純なデータを使用して、最新データのみ残すような設定にしていましたが、DELETEの条件を変更して、数か月分など特定の期間のみデータを保持するような設定にして使用することもできます。

hook に関するより詳しい情報については、dbt公式ドキュメントを参照ください。

pre-hook & post-hook : [https://docs.getdbt.com/reference/resource-configs/pre-hook-post-hook](https://docs.getdbt.com/reference/resource-configs/pre-hook-post-hook)

Snowflakeを体験してみませんか？

INSIGHT LABではSnowflake紹介セミナーを定期開催しています。Snowflakeの製品紹介だけでなく、デモンストレーションを通してSnowflakeのシンプルなUI操作や処理パフォーマンスの高さを体感いただけます。

[![詳細はこちら](https://hubspot-no-cache-na2-prod.s3.amazonaws.com/cta/default/5935783/0d0b0d86-fdb7-4351-ab14-d482c854defc.png)](https://hubspot-cta-redirect-na2-prod.s3.amazonaws.com/cta/redirect/5935783/0d0b0d86-fdb7-4351-ab14-d482c854defc)

- [Tweet](https://twitter.com/share)

#### 執筆者 [橋口](https://knowledge.insight-lab.co.jp/snowflake/author/橋口)

###### [前の投稿](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-dbt-packages)

[![【Snowflake×dbt】dbt の Packages を使ってみた](https://knowledge.insight-lab.co.jp/hubfs/image-png-Dec-15-2022-11-38-44-7037-AM.png)](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-dbt-packages)

###### [【Snowflake×dbt】dbt の Packages を使ってみた](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-dbt-packages)

###### [次の投稿](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-test-full-match)

[![【Snowflake×dbt】モデルで更新されたテーブル・ビューが完全一致しているかを検証するテスト](https://knowledge.insight-lab.co.jp/hubfs/dbt_logo.png)](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-test-full-match)

###### [【Snowflake×dbt】モデルで更新されたテーブル・ビューが完全一致しているかを検証するテスト](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-test-full-match)

RECOMMEND こちらの記事も人気です。

<https://knowledge.insight-lab.co.jp/snowflake/pricing>

###### 4 分で読むことができます。

##### [Snowflakeの料金体系｜クレジットと費用最適化のポイントをご紹介](https://knowledge.insight-lab.co.jp/snowflake/pricing)

###### 2021年 6月 28日

<https://knowledge.insight-lab.co.jp/snowflake/dbt-data-pipeline>

###### 12 分で読むことができます。

##### [【Snowflake×dbt】データパイプライン構築](https://knowledge.insight-lab.co.jp/snowflake/dbt-data-pipeline)

###### 2022年 6月 17日

<https://knowledge.insight-lab.co.jp/snowflake/snowflake-vs-treasuredata>

###### 5 分で読むことができます。

##### [【禁断の比較？】SnowflakeとTreasure Dataを比べてみました](https://knowledge.insight-lab.co.jp/snowflake/snowflake-vs-treasuredata)

###### 2021年 5月 24日

<https://knowledge.insight-lab.co.jp/snowflake/snowsight-executive-dashboard>

###### 1 分で読むことができます。

##### [Snowsightでどこまでできるか！？限界に挑戦！](https://knowledge.insight-lab.co.jp/snowflake/snowsight-executive-dashboard)

###### 2023年 12月 14日

<https://knowledge.insight-lab.co.jp/snowflake/-snowflake-streamlit-in-snowflake-introduce>

###### 5 分で読むことができます。

##### [【Snowflake】新機能「Streamlit in Snowflake」とは何者か！？](https://knowledge.insight-lab.co.jp/snowflake/-snowflake-streamlit-in-snowflake-introduce)

###### 2023年 9月 21日

<https://knowledge.insight-lab.co.jp/snowflake/-snowflake-rag-prototype>

###### 11 分で読むことができます。

##### [【Snowflake】SQLと標準関数のみでRAGシステムをサクッと構築（プロトタイプ編）](https://knowledge.insight-lab.co.jp/snowflake/-snowflake-rag-prototype)

###### 2024年 5月 28日

##### 運営会社

運営会社

- [会社概要](https://insight-lab.co.jp/about/)
- [お問い合わせ](https://contact.insight-lab.co.jp/main)

##### メニュー

メニュー

- [Snowflakeとは](https://service.insight-lab.co.jp/snowflake)
- [Snowflakeナレッジ](https://knowledge.insight-lab.co.jp/snowflake)
- [お役立ち資料](https://download.insight-lab.co.jp/snowflake/download)

[![INSIGHT LAB](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png?width=200&height=55&name=INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png "INSIGHT LAB")](https://www.insight-lab.co.jp/)

- [プライバシーポリシー](https://www.insight-lab.co.jp/privacy.html)

Copyright © 2020 INSIGHT LAB, Inc.

<https://twitter.com/INSIGHTLAB_INC><https://www.youtube.com/channel/UCOKNKiO4uuza4NioSZpBMhg>