Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

データの信頼性を支える仕組みと技術

chanyou0311
November 09, 2024

 データの信頼性を支える仕組みと技術

「オープンセミナー2024@広島 − XRE エンジニアを支える組織」での登壇資料です。
https://osh.connpass.com/event/324736/

chanyou0311

November 09, 2024
Tweet

More Decks by chanyou0311

Other Decks in Technology

Transcript

  1. Yu Nakamura - chanyou • スタートアップでデータエンジニアとして交通データ分析基盤 の構築‧運⽤を経験 • その後、株式会社タイミーの DRE

    チームにジョイン • モデリング済みのデータを各種ツールに送出する Reverse ETL の実装などを担当 • 広島在住。趣味はおうち Kubernetes クラスタ • YAPC::Hiroshima 2024 のスタッフなど • オープンセミナー2022@広島 に登壇も
  2. タイミーの実績 スキマ バイト No.1 ※1 ※2 [調査⽅法]インターネット調査 [調査期間]2024 年 2

    ⽉ 9 ⽇~11 ⽇ [調査概要]スキマバイトアプリサービスの実態調査 [調査委託先]株式会社マクロミル ※3 2024年9⽉時点 ※4 2024年9⽉時点 利⽤率 ‧リピート率 ※1 ※2 導⼊事業者数 136,000企業 ワーカー数 900万⼈ ※4 ※3
  3. タイミーのデータ基盤の歴史 2018 アプリ リリース DWH (BigQuery)へ データ集約 2020 Looker導入 &

    dbt導入 2021 2022 2023 2024 データモデリング をLookerからdbt へ移行 data streamに よるCDC導入 / exposureによる アウトプットの 管理 ガバナンスの強化 DREの数 (正社員ベース) 1 1 1 -> 2 2 -> 4 4 -> 6 AEの数 (正社員ベース) 1 -> 2 2 1
  4. dbt ⼊⾨ • 実際に体験してみる ◦ Repository: chanyou0311/data-reliability-engineering-demo • dbt-core と接続先に応じたアダプタを

    pip でインストールする • 今回はローカル分析⽤DBの DuckDB を使う • インストール後 dbt init コマンドでプロジェクトを初期化できる
  5. dbt モデル • SQLファイル ◦ dbt ではモデルと呼ぶ。変換内容を定義する ◦ Jinja テンプレートで拡張されており、他のモデルの結果を参照できる

    ◦ dbt が依存関係を解決してくれて、SELECT の結果をテーブルやビューと して保存する • YAMLファイル ◦ モデルのメタデータを定義する
  6. dbt を実⾏してみる • 事前にデータを DuckDB にロードしておく ◦ データウェアハウスへのデータ投⼊は dbt のスコープ外

    • dbt build コマンドを実⾏するだけ ◦ DuckDB にテーブルが⽣成される • ドキュメントの⽣成もできる ◦ dbt docs generate ◦ dbt docs serve
  7. dbt を使い込むと • ディメンショナル‧モデリングという、分析に特化したモデリング⼿法がある ◦ モデリング済みのテーブルを Looker や Tableau に接続すると、SQLが書

    けなくても分析やダッシュボードの作成ができる • タイミーでは1000以上のモデルを管理している ◦ モデルをレイヤリングして秩序を保つ必要がある
  8. データの信頼性とは • 信頼できるデータ = 品質が担保されているデータ • タイミーで重視しているデータ品質の評価軸 特性 意味 完全性

    データが⽋損していないか 適時性 必要な時にすぐにデータを参照できるか ⼀意性 データが重複していないか ⼀貫性 型‧タイムゾーン‧表記揺れなど、値の書式や意味が統⼀されているか
  9. 信頼性の⾼め⽅、守り⽅ • 信頼性が低下する要因を排除しよう • 可能な限りテストをやっていこう 特性 意味 完全性 データが⽋損していないか 適時性

    必要な時にすぐにデータを参照できるか ⼀意性 データが重複していないか ⼀貫性 型‧タイムゾーン‧表記揺れなど、値の書式や意味が統⼀されているか
  10. 不安定なデータを JSON Lines 化して安全に扱う ⼿⼊⼒CSVのような、壊れやすいデータソースを扱いたいとき • 各レコードを JSON ⽂字列に変換して、ワンカラムとしてまとめる •

    BigQuery にロードする • dbt モデルで JSON ⽂字列をパースして、列として抽出する 存在しない列を SELECT しても null として抽出できる
  11. dbt によるデータテスト 実際のテーブルデータに対するテスト • Generic data tests ◦ スキーマファイルにテストを定義できる ◦

    列に対して UNIQUE や NOT NULL の検証 ◦ 別モデルの外部キーを持つか、離散値の検証 • Singular data tests ◦ テスト⽤の任意のSQLファイルを作成して、結果が0⾏であることを検証 できる
  12. 信頼性の⾼め⽅、守り⽅ 特性 信頼性の守り⽅ 完全性 転送前後の⾏数⽐較 dbt によるデータテスト 適時性 不安定なデータの JSON

    Lines 化(パイプライン停⽌を避ける) dbt によるデータ鮮度チェック ⼀意性 dbt によるデータテスト ⼀貫性 dbt による⼀貫した指標の定義 dbt によるユニットテスト