Slide 1

Slide 1 text


 dbt testを導入した話
 
 開発部 インターン生
 永井 僚


Slide 2

Slide 2 text

2
 はじめに

Slide 3

Slide 3 text

Confidential © CREATIVE SURVEY こんな方に向けてお話しします 「データ基盤⽴ち上げたばかり、やることが多くてデータ品質に腰を据えて取 り掛かる時間が無い…」 というデータエンジニアの⽅向けにお話しします ※また前提として、データウェアハウスにSnowflakeを利⽤しています

Slide 4

Slide 4 text

© 2023 CREATIVE SURVEY INC. All Rights Reserved. 自己紹介 永井僚 クリエイティブサーベイ株式会社 開発部インターン生 2019年4月明治大学総合数理学部入学 2023年4月同大学院先端数理科学研究科入学 2023年1月よりエンジニアインターン1号として現職 2025年4月Sansan株式会社入社予定

Slide 5

Slide 5 text

Confidential © CREATIVE SURVEY データチームの紹介 是枝 達也     ⼤澤秀⼀     永井 僚 

Slide 6

Slide 6 text

Confidential © CREATIVE SURVEY データ分析基盤のアーキテクチャ


Slide 7

Slide 7 text

Confidential © CREATIVE SURVEY 目次 1. dbt test導⼊背景 2. dbt testによるデータ取り込み品質の取り組み a. Snowflakeの便利関数を使った類似度推定テスト(カスタムGenericテスト) b. Genericテストの適⽤ 3. dbt 開発tips 4. まとめ

Slide 8

Slide 8 text

8
 1. dbt test導⼊背景

Slide 9

Slide 9 text

GENBAで データ品質に関する 課題があった

Slide 10

Slide 10 text

そもそも データ品質の向上‧担保まで ⼿が回ってない

Slide 11

Slide 11 text

Confidential © CREATIVE SURVEY 理由その1:データエンジニアが3⼈だけ(うち、専業1⼈) 内訳:専業1⼈, SRE兼業1⼈, インターン⽣1⼈ 永井(発表者) 是枝さん ⼤澤さん

Slide 12

Slide 12 text

Confidential © CREATIVE SURVEY 理由その2:データ基盤⽴ち上げてまだ⼀年少々 データの品質以外にもやること沢⼭

Slide 13

Slide 13 text

Confidential © CREATIVE SURVEY 理由その3:データ品質業務の特性 他業務と⽐べてすぐに価値が出にくいため、優先度下がりがち(な印象)

Slide 14

Slide 14 text

データ品質はやった⽅がいいが 優先度が低くなっていた

Slide 15

Slide 15 text

Confidential © CREATIVE SURVEY データ品質をチェックするきっかけ - dbtのIncremental Modelでインフラコストの削減ができないか調査して いた時のこと > 洗い替えから増分更新にしたい > Incremental Modelのstrategy(merge)ってやつが良さげ - 試しに⽇次更新のIncremental Modelのパイプラインを構築した

Slide 16

Slide 16 text

Confidential © CREATIVE SURVEY データ品質をチェックするきっかけ - データソースであるRDSのsnapshotとIncremental Modelの間にデータずれが発⽣ > データずれの原因 - 私のデータの仕様の認識不⾜ - dbt Incremental Modelの理解不⾜ > strategy(merge)は論理削除に対しデータソース側は物理削除 > snapshotよりIncremental Modelのレコード数が多い事態に - Modelの改修によるコスト削減より、データ品質に関するニーズが⾼まる →データ品質保証のためdbt test導⼊へ

Slide 17

Slide 17 text

17
 2. dbt testによるデータ品質活動

Slide 18

Slide 18 text

Confidential © CREATIVE SURVEY データ品質に取り掛かるまでにやること多い - modelのデータ品質をdbt testでどのくらい保証できるのか試したい - データ品質というと広いので、データを取り込む際の品質について考えていく > > - 今回dbt testで⽬指すこと RDSデータをSnowflakeへ取り込む前後でデータずれがないかテストする

Slide 19

Slide 19 text

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つ以上のセットの類似性の推定』」

Slide 20

Slide 20 text

Confidential © CREATIVE SURVEY 類似度推定テスト(カスタムGenericテスト) - このテストの良いところ > データ同⼠の類似度を測ることができる > 実⾏時間が対象テーブルのカラム数に依存し ないところ - カラム数の多さに実⾏時間の増加を受けるこ となく、類似度を測定できる

Slide 21

Slide 21 text

Confidential © CREATIVE SURVEY 類似度推定テストの効果と発⾒ - 効果 > 37分程度でデータソース(約91.8億レコード)の類 似度をチェック出来るように - 発⾒ > testに失敗する怪しいmodelを⾒つけるきっかけに > ⼿軽に対象データの品質担保に使えそう

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

23
 3. dbt開発 tips

Slide 24

Slide 24 text

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向けっぽい) - テストを継続的に⾏うためのテストやメタ情報のカバレッジのチェックや可視化に使える

Slide 25

Slide 25 text

25
 4. まとめ

Slide 26

Slide 26 text

Confidential © CREATIVE SURVEY まとめ データ品質の向上‧担保を⾏うコストや時間が⾜りない⽅へ - ⼿始めに類似度推定テストやってみるのはいかがでしょうか - dbtのコミュニティはとても活発なので、パッケージをどんどん活⽤しよう チームとしての今後の展望 - elementaryの導⼊など、さらなるデータ品質の向上‧担保へ向けた取り組 みをしていく

Slide 27

Slide 27 text

No content