Upgrade to Pro — share decks privately, control downloads, hide ads and more …

dbt testを導入した話

dbt testを導入した話

2024年5月8日(水) GENBA #3 〜DREの現場〜に弊社インターン生永井が発表した際の資料です。

・イベントタイトル
GENBA #3 〜DREの現場〜
https://timeedev.connpass.com/event/315605/

・永井 発表タイトル
dbt testを導入した話

CREATIVE SURVEY Inc.

May 09, 2024
Tweet

More Decks by CREATIVE SURVEY Inc.

Other Decks in Business

Transcript

  1. © 2023 CREATIVE SURVEY INC. All Rights Reserved. 自己紹介 永井僚

    クリエイティブサーベイ株式会社 開発部インターン生 2019年4月明治大学総合数理学部入学 2023年4月同大学院先端数理科学研究科入学 2023年1月よりエンジニアインターン1号として現職 2025年4月Sansan株式会社入社予定
  2. Confidential © CREATIVE SURVEY 目次 1. dbt test導⼊背景 2. dbt

    testによるデータ取り込み品質の取り組み a. Snowflakeの便利関数を使った類似度推定テスト(カスタムGenericテスト) b. Genericテストの適⽤ 3. dbt 開発tips 4. まとめ
  3. Confidential © CREATIVE SURVEY データ品質をチェックするきっかけ - dbtのIncremental Modelでインフラコストの削減ができないか調査して いた時のこと >

    洗い替えから増分更新にしたい > Incremental Modelのstrategy(merge)ってやつが良さげ - 試しに⽇次更新のIncremental Modelのパイプラインを構築した
  4. Confidential © CREATIVE SURVEY データ品質をチェックするきっかけ - データソースであるRDSのsnapshotとIncremental Modelの間にデータずれが発⽣ > データずれの原因

    - 私のデータの仕様の認識不⾜ - dbt Incremental Modelの理解不⾜ > strategy(merge)は論理削除に対しデータソース側は物理削除 > snapshotよりIncremental Modelのレコード数が多い事態に - Modelの改修によるコスト削減より、データ品質に関するニーズが⾼まる →データ品質保証のためdbt test導⼊へ
  5. Confidential © CREATIVE SURVEY dbt testでやったこと - RDSデータのsnapshotとmodelの類似度を測るカスタムGenericテストの作成 > Snowflakeの関数

    MinhashとAPPROXIMATE_SIMILARITYを利⽤ - サンプルコードや内部的な動作は参考記事を参照 - Minhashで作成するハッシュ関数の数など、関数のパラメータはドキュメントの推奨値をそ のまま使⽤ - Generic tests(汎⽤テスト)の適⽤ > modelなどのリソースにテストを設定するyml(プロパティ)に書きこんでいく > 始めから⽤意されているGenericテストがある - unique, not_null, accepted_values, relationships 「参考:Snowflake Document 『2つ以上のセットの類似性の推定』」
  6. Confidential © CREATIVE SURVEY 類似度推定テスト(カスタムGenericテスト) - このテストの良いところ > データ同⼠の類似度を測ることができる >

    実⾏時間が対象テーブルのカラム数に依存し ないところ - カラム数の多さに実⾏時間の増加を受けるこ となく、類似度を測定できる
  7. Confidential © CREATIVE SURVEY 類似度推定テストの効果と発⾒ - 効果 > 37分程度でデータソース(約91.8億レコード)の類 似度をチェック出来るように

    - 発⾒ > testに失敗する怪しいmodelを⾒つけるきっかけに > ⼿軽に対象データの品質担保に使えそう
  8. Confidential © CREATIVE SURVEY どこまでGenericテスト(汎⽤テスト)するべきか - ⼀度ほぼ全てのカラムにGenericテストを適⽤した - 結果 >

    ⼗中⼋九成功するテストや、ビジネスキー以外に対するテストは、テストを⾏う効果が感じづら く、それよりもコストの⽅が気になった - どの程度のカラムに適⽤すべき? > チームで会話した結果、ビジネス要件を満たす最低限のデータ品質を担保するためにテストする > ビジネスキーに絞ってunique, not_nullを適⽤することにした - Genericテストをやって学んだこと > データ品質要件とデータ量や複雑なテストから⽣じるインフラコストはトレードオフ > 重要なのは何のために⾏うテストか、やればいいものではない
  9. Confidential © CREATIVE SURVEY dbtのpackageの情報収集に役⽴つdbt Package hub - dbt Package

    hub > 今回model作成時に利⽤した便利パッケージ:dbt_snow_mask - その中でも気になっているパッケージ > elementary - 可観測性レポート、dbt testによる異常検出、dbt_artifact、Slackアラート、データリネージ 可視化 > dbt_utils - 含まれるテスト17個(ver1.1.1時点) > dbt_expectations - 含まれるテスト62個(ver0.10.3時点) > dbt_meta_testing & dbt-coverage(後者はdbt core向けっぽい) - テストを継続的に⾏うためのテストやメタ情報のカバレッジのチェックや可視化に使える