データの信頼性を支える仕組みと技術
by
chanyou0311
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
2024/11/09 Yu Nakamura - chanyou データの信頼性を⽀える仕組みと技術 @chanyou0311
Slide 2
Slide 2 text
Yu Nakamura - chanyou ● スタートアップでデータエンジニアとして交通データ分析基盤 の構築‧運⽤を経験 ● その後、株式会社タイミーの DRE チームにジョイン ● モデリング済みのデータを各種ツールに送出する Reverse ETL の実装などを担当 ● 広島在住。趣味はおうち Kubernetes クラスタ ● YAPC::Hiroshima 2024 のスタッフなど ● オープンセミナー2022@広島 に登壇も
Slide 3
Slide 3 text
タイミーとは 3 「働きたい時間」と「働いてほしい時間」を マッチングするスキマバイトサービス 従来の「求⼈サイト」でも「派遣」でもない
Slide 4
Slide 4 text
タイミーの特徴 4
Slide 5
Slide 5 text
タイミーの実績 スキマ バイト No.1 ※1 ※2 [調査⽅法]インターネット調査 [調査期間]2024 年 2 ⽉ 9 ⽇~11 ⽇ [調査概要]スキマバイトアプリサービスの実態調査 [調査委託先]株式会社マクロミル ※3 2024年9⽉時点 ※4 2024年9⽉時点 利⽤率 ‧リピート率 ※1 ※2 導⼊事業者数 136,000企業 ワーカー数 900万⼈ ※4 ※3
Slide 6
Slide 6 text
目次 ● タイミーにおけるデータ基盤の変遷 ● dbt の概要 ● データ基盤における信頼性とは ● データの信頼性を⽀える仕組みと技術 ● データ基盤の課題とこれから
Slide 7
Slide 7 text
1 タイミーにおける データ基盤の変遷
Slide 8
Slide 8 text
タイミーの従業員数の増加 タイミーでは、2019年から2023年時点で、従業員数が86人→1000人規模まで増加した。
Slide 9
Slide 9 text
タイミーのデータ基盤の歴史 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
Slide 10
Slide 10 text
アーキテクチャ(2022年頃)
Slide 11
Slide 11 text
アーキテクチャ(いま)
Slide 12
Slide 12 text
アーキテクチャ(2022年頃) Forward ETL Aggregate 活⽤ / Reverse ETL
Slide 13
Slide 13 text
アーキテクチャ(いま) Forward ETL Aggregate 活⽤ / Reverse ETL
Slide 14
Slide 14 text
2 dbt の概要
Slide 15
Slide 15 text
dbt とは Aggregate
Slide 16
Slide 16 text
dbt とは ● オープンソースのデータ変換ツール ● アナリスト中⼼の領域にソフトウェアエンジニアリングの⽂化を持ち込んだ ○ バージョン管理、モジュール化、CI/CDとの統合、ドキュメント⽣成 ○ アナリティクスエンジニアと呼ばれるロールが誕⽣したほど ● dbt によって変換処理の信頼性が⾼まった
Slide 17
Slide 17 text
dbt ⼊⾨ ● 実際に体験してみる ○ Repository: chanyou0311/data-reliability-engineering-demo ● dbt-core と接続先に応じたアダプタを pip でインストールする ● 今回はローカル分析⽤DBの DuckDB を使う ● インストール後 dbt init コマンドでプロジェクトを初期化できる
Slide 18
Slide 18 text
コンセプト ● dbt_project.yml, profiles.yml ○ 設定ファイル ● models/*.sql ○ モデルファイル ● models/*.yml ○ スキーマファイル
Slide 19
Slide 19 text
dbt モデル ● SQLファイル ○ dbt ではモデルと呼ぶ。変換内容を定義する ○ Jinja テンプレートで拡張されており、他のモデルの結果を参照できる ○ dbt が依存関係を解決してくれて、SELECT の結果をテーブルやビューと して保存する ● YAMLファイル ○ モデルのメタデータを定義する
Slide 20
Slide 20 text
dbt を実⾏してみる ● 事前にデータを DuckDB にロードしておく ○ データウェアハウスへのデータ投⼊は dbt のスコープ外 ● dbt build コマンドを実⾏するだけ ○ DuckDB にテーブルが⽣成される ● ドキュメントの⽣成もできる ○ dbt docs generate ○ dbt docs serve
Slide 21
Slide 21 text
デモ
Slide 22
Slide 22 text
dbt を使い込むと ● ディメンショナル‧モデリングという、分析に特化したモデリング⼿法がある ○ モデリング済みのテーブルを Looker や Tableau に接続すると、SQLが書 けなくても分析やダッシュボードの作成ができる ● タイミーでは1000以上のモデルを管理している ○ モデルをレイヤリングして秩序を保つ必要がある
Slide 23
Slide 23 text
dbt まとめ ● SQL と YAML で変換処理をコード管理できる ● 再利⽤可能なモデルでコラボレーションしやすい ● 冪等な処理で CI/CD への統合も容易にできる
Slide 24
Slide 24 text
信頼性に話を戻します
Slide 25
Slide 25 text
3 データの信頼性とは何か
Slide 26
Slide 26 text
データの信頼性とは ● 信頼できるデータ = 品質が担保されているデータ ● タイミーで重視しているデータ品質の評価軸 特性 意味 完全性 データが⽋損していないか 適時性 必要な時にすぐにデータを参照できるか ⼀意性 データが重複していないか ⼀貫性 型‧タイムゾーン‧表記揺れなど、値の書式や意味が統⼀されているか
Slide 27
Slide 27 text
データの信頼性を損なうとどうなるか ● 必要なときにデータが参照できない ● 誤った意思決定や機械学習モデルの精度低下を引き起こす
Slide 28
Slide 28 text
データの信頼性を損なうタイミング ● 転送パイプラインの障害 ● 変換ロジックの誤り ● 意図しないデータソースの仕様変更
Slide 29
Slide 29 text
転送パイプラインの障害 停⽌ ● 適時性を損なう
Slide 30
Slide 30 text
変換ロジックの誤り ● LEFT JOIN すべきところで INNER JOIN してレコードが減ってしまった ● ⼀意だと思った列に重複があり、 LEFT JOIN でレコードが膨れてしまった Aggregate
Slide 31
Slide 31 text
意図しないデータソースの仕様変更 ● ⼿⼊⼒スプレッドシートのような、壊れやすいデータソースを扱うとき ○ 作業していてカラム名が意図せず変わってしまった ○ 結果、dbt の SELECT で存在しないカラムを指定してコケる ● アプリケーションのテーブルやカラムが削除されてしまったとき ○ 同様に dbt で追従できずコケてしまう 停⽌ 停⽌
Slide 32
Slide 32 text
4 データの信頼性を⽀える 仕組みと技術
Slide 33
Slide 33 text
信頼性の⾼め⽅、守り⽅ ● 信頼性が低下する要因を排除しよう ● 可能な限りテストをやっていこう 特性 意味 完全性 データが⽋損していないか 適時性 必要な時にすぐにデータを参照できるか ⼀意性 データが重複していないか ⼀貫性 型‧タイムゾーン‧表記揺れなど、値の書式や意味が統⼀されているか
Slide 34
Slide 34 text
dbt による⼀貫した指標の定義 ● 例えば ワーカーの リピート率[%] の定義は? ● 分析の度にクエリ書くと定義が揺れてしまうリスクがある ● dbtモデルから参照する形を取れば、再計算不要で⼀貫した値を参照できる
Slide 35
Slide 35 text
不安定なデータを JSON Lines 化して安全に扱う ⼿⼊⼒CSVのような、壊れやすいデータソースを扱いたいとき ● 各レコードを JSON ⽂字列に変換して、ワンカラムとしてまとめる ● BigQuery にロードする ● dbt モデルで JSON ⽂字列をパースして、列として抽出する 存在しない列を SELECT しても null として抽出できる
Slide 36
Slide 36 text
データ転送前後の⾏数⽐較で完全性を守る ● RDSからBigQueryにロードするときに、⽋損がないか⾏数を⽐較する ● GitHub Actions などでスクリプトを動かて監視
Slide 37
Slide 37 text
dbt によるテスト ● データテスト ● ユニットテスト ● データ鮮度チェック
Slide 38
Slide 38 text
dbt によるデータテスト 実際のテーブルデータに対するテスト ● Generic data tests ○ スキーマファイルにテストを定義できる ○ 列に対して UNIQUE や NOT NULL の検証 ○ 別モデルの外部キーを持つか、離散値の検証 ● Singular data tests ○ テスト⽤の任意のSQLファイルを作成して、結果が0⾏であることを検証 できる
Slide 39
Slide 39 text
dbt によるユニットテスト テストデータを与えて、期待する結果となるか検証する ● 複雑なロジックや重要指標の定義が間違っていないか ● 正規表現が間違っていないか テスト駆動開発が実践できるようになった
Slide 40
Slide 40 text
dbt によるデータ鮮度のチェック 1時間に1回テーブルにインサートされるはずのに、 updated_at 列が古いままだ と怪しい… 期待するテーブルの更新頻度を記述して、ちゃんと更新されているか検証できる
Slide 41
Slide 41 text
信頼性の⾼め⽅、守り⽅ 特性 信頼性の守り⽅ 完全性 転送前後の⾏数⽐較 dbt によるデータテスト 適時性 不安定なデータの JSON Lines 化(パイプライン停⽌を避ける) dbt によるデータ鮮度チェック ⼀意性 dbt によるデータテスト ⼀貫性 dbt による⼀貫した指標の定義 dbt によるユニットテスト
Slide 42
Slide 42 text
信頼性の⾼め⽅、守り⽅
Slide 43
Slide 43 text
5 データ基盤の課題と これから
Slide 44
Slide 44 text
タイミーのデータ基盤の現状 ● Good ○ これまで紹介した⽅法により、特定のデータソースやユースケースに対 するデータの信頼性を担保しやすい環境が整っている ● More ○ データソースとユースケースが多様化する中、中央のデータチームだけ で社内のあらゆるドメインロジックや業務で期待されるデータ品質を把 握して、維持運⽤していくのが困難になりつつある
Slide 45
Slide 45 text
タイミーのデータ基盤の現状 引⽤元:[Data Mesh Manager公式サイト](https://www.datamesh-manager.com/)
Slide 46
Slide 46 text
理想形としてデータメッシュに期待 ● データメッシュとは、⼀⾔でデータ基盤のマイクロサービス化 ○ データプロダクトと呼ばれる単位でデータ基盤と開発チームを分離 ○ データプロダクト同⼠のインターフェイスとして、データコントラクト を定義 ○ 横串でプラットフォームチームが⽀える体制
Slide 47
Slide 47 text
理想形としてデータメッシュに期待 引⽤元:[Data Mesh Manager公式サイト](https://www.datamesh-manager.com/)
Slide 48
Slide 48 text
データプロダクト データプロダクト 理想形としてデータメッシュに期待 データ ソース データプロダクトのオーナー 処理 いい感じの モデル インフラ / モニタリング環境 データプロダクト DRE インフラ インフラ
Slide 49
Slide 49 text
とはいえ、⼀気に進めるのは難しい 組織体制の変更とデータ基盤のプラットフォーム化を⼀気に進めるのは難しい ● データプロダクトの開発‧運⽤のケイパビリティを持つ⽅が稀有 ○ 開発部⾨はともかく、事業部にエンジニアがいることは稀 ● データ基盤のプラットフォーム化も、上⼿くいくか不透明でリスクが⾼い ○ 銀の弾丸などない
Slide 50
Slide 50 text
特定の重要なユースケースに絞って検証していく ● データプロダクトのスコープの定義 ● データプロダクトの⼊出⼒のインターフェイスの定義 ● データプロダクトの開発の伴⾛ ● 部分的なプラットフォーム化の実施 ● データプロダクト開発⽂化の醸成 ○ 開発‧運⽤ガイドラインの⽂書化や勉強会の開催など
Slide 51
Slide 51 text
6 まとめ
Slide 52
Slide 52 text
まとめ ● データの信頼性は地道なテストの積み重ねで⾼めることができる ○ dbt の功績が⼤きい ● 多様で複雑なデータ基盤のニーズに素早く応えるには、組織体制含めた リアーキテクチャが必要そう ○ 試⾏錯誤しながら実績を積み上げていきたい
Slide 53
Slide 53 text
https://hrmos.co/pages/timee/jobs/1682251404118319115 データ基盤を通して、プロダクトと組織の成⻑を⼀緒に⽀えましょう! We're hiring!