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

日経におけるデータエンジニアリングの取り組み ~ NIKKEI Tech Talk #2

htamakos
December 09, 2022

日経におけるデータエンジニアリングの取り組み ~ NIKKEI Tech Talk #2

htamakos

December 09, 2022
Tweet

More Decks by htamakos

Other Decks in Technology

Transcript

  1. 4 Professional Data Engineer は、データを収集、変換、公開して、データに基づいて 意思決定できるようにします。 Data Engineer には、セキュリティとコンプライアンス、スケーラビリティと効率性、 信頼性と忠実性、柔軟性とポータビリティに特に重点を置いて、データ処理システムの設計、

    構築、運用化、保護、モニタリングを行う能力が必要です。 また、既存の機械学習モデルの活用、デプロイ、継続的なトレーニングができなければなりません。 https://cloud.google.com/certification/guides/data-engineer?hl=ja Google Cloud Professional Data Enginner の説明 “
  2. 5 データエンジニアリングとは...? • データに基づいて意思決定できるようにデータを収集、変換、公開する技術 • データエンジニアリングを行うエンジニアには少なくとも以下の要素が求められる ◦ データ処理システムの設計、構築、運用 ◦ モニタリング

    ◦ スケーラビリティ、効率性、信頼性 ◦ 柔軟性とポータビリティ ◦ セキュリティ ◦ コンプライアンス ◦ …etc ソフトウェアやインフラストラクチャ、セキュリティ等 幅広い知識が求められそうなものはわかるが... データエンジニアリングに必要な要素の体系的な知識領域を整理したものはないのか?
  3. 6 DAMA-DMBOK(データマネジメント知識体系ガイド) • Data Management Body Of Knowledge • DAMA

    インターナショナルという 国際的な非営利組織によって整理されたデータ マネジメントに関する知識体系本 • プロジェクトマネジメントに関する 知識体系本 PMBOK のデータ版 • “データマネジメントプロフェッショナルにとって 有益な資料かつ指針となることを目指し、デー タ管理のもっとも信頼できる入門書となるよう編 集されています” https://www.dama-japan.org/Introduction.html#DMBOK
  4. 7 DAMA ホイール図 • DMBOK において説明される データマネジメントの知識体系領域を 11 の領域で表 したもの

    • ホイール(=車輪)という言葉の通り、 Data Driven な経営を車の運転に例えたときに 安全、安心、快適な車の運転を支えるものとして 位置づけられている Data Modeling & Design Data Storage & Operations Data Security Data Integration & Interoperability Document & Content Management Reference & Master Data DWH & BI Metadata Data Governance Data Quality Data Achitecture
  5. 8 データエンジニアリングとは DMBOK で整理されているようなデータ管理に 必要な知識領域について、 ソフトウェアエンジニアリングによって課題解決するこ ともしくはそこで必要な技術のこと Data Modeling &

    Design Data Storage & Operations Data Security Data Integration & Interoperability Document & Content Management Reference & Master Data DWH & BI Metadata Data Governance Data Quality Data Achitecture セキュリティ データ処理システムの 設計、構築、運用 モニタリング コンプライアンス スケーラビリティ、 効率性、信頼性 柔軟性、ポータビリティ
  6. 9 日経におけるデータエンジニアリングの取り組み 日経においても DAMA ホイール図に表す各領域についてエンジニアリングしている その一部についてご紹介 Data Modeling & Design

    Data Storage & Operations Data Security Data Integration & Interoperability Document & Content Management Reference & Master Data DWH & BI Metadata Data Governance Data Quality Data Achitecture Atlas データ基盤改善 Atlas Datahub GitOps x Atlas Technical Support
  7. 10 Atlas: データ基盤改 善 Data Modeling & Design Data Storage

    & Operations Data Security Data Integration & Interoperability Document & Content Management Reference & Master Data DWH & BI Metadata Data Governance Data Quality Data Achitecture
  8. 11 日経のデータ基盤: Atlas と IMS Atlas と IMS という2つのシステムに別れる •

    Atlas: 行動接触記録(行動ログ)の収集、蓄積、分析を担う[SoE からのデータ連携] • IMS: 契約情報や課金情報、会員情報などを扱う [SoR からのデータ連携] 会員情報 課金履歴 法人契約 CMS AWS SoR SoE S3 Redshift 日経電子版 日経Asia 日経転職版 …etc AWS GCP データ収集 エンドポイント リアルタイム連携 バッチ連携 データ ストア BigQuery Atlas IMS バッチ連携 (一部のデータ)
  9. 12 Atlas のアーキテクチャ概要 Endpoint によって収集されたデータが、エンリッチメントによって拡充され、 Consumer によって目的別に応じて用意されたデータストアにデータが連携される AWS GCP Endpoint

    Web, Android, iOS ..etc の SDK から送られてくる ビーコンを収集する REST API サーバ Enrichment 会員情報や地理情報等 Endpoint から送られてくる データに拡張データを付与する Consumer 各種データストアへの連携や MA 連携、他システムへの リアルタイム連携を行う MA 連携、 他システムへ の連携
  10. 13 Atlas の目的別のデータストア 1秒未満 1,2時間程度 Latency Single Store (memSQL) BigQuery

    数秒〜数分 Elasticsearch カラムナー カラムナー データ構造 JSONドキュメント SQL SQL クエリー Lucene 新しいフィールドは テーブル定義の更新が必要 新しいフィールドは テーブル定義の更新が必要 一部JSON関数に頼ることも可 運用 新しいフィールドは自動で追加される Kibanaで扱うにはKibanaのインデックス更 新をすればOK
  11. 15 Atlas データ基盤改善: BigQuery ニアリアルタイム連携 概要 Atlas の BigQuery への連携をバッチ処理からストリーミング処理に変更して、

    レイテンシを1 - 2 時間から数秒 - 数分までに短縮する 数秒 ~ 数分 Atlas 目的別のデータストア
  12. 17 Atlas データ基盤改善: BigQuery ニアリアルタイム連携 旧来の連携方法の課題 • KCL の不具合によりデプロイ時に Kinesis

    のシャード読み込みのチェックポイント情報で不整 合が生じストリームの再読み込み作業が発生する場合がある • BigQuery のテーブル新規カラム追加の実装/作業が煩雑 • データパイプラインを流れるデータの整合性の検証が不十分
  13. 18 Atlas における最近の取り組み: BigQuery ニアリアルタイム連携 アーキテクチャ JSON Protobuf A Protobuf

    A Protobuf B JSON から Protobuf に 変換して GCP に連携する 処理に失敗した レコードを保持する Protobuf のデータを BigQuery のテーブルの形の Protobuf に変換する JSON Protobuf A Protobuf B Enrichment から送られてくるデータ。各種 フィールドはネストされている。 Enrichment から送られてくるデータを ネストしたままの状態で Protobuf 化したもの Protobuf A のネストしたフィールドをフラットにして、 BigQuery のテーブルのフィールドと一致させた Protobuf のデータ Storage WRITE API で BigQuery に ストリーミングインサートする Protobuf を JSON に変換し て GCS にバックアップ データ転送 x スケジュールクエリで MERGE 文を実行 メイン データパイプライン バックアップ データパイプライン
  14. 19 Atlas における最近の取り組み: BigQuery ニアリアルタイム連携 重複排除のしくみ Atlas のデータパイプライン上には AWS SQS

    や AWS Kinesis 等セマンティクスが At Least Once、つまり 「必ず 1 回以上はデータは送信するけど、重複してデータを送信する可能性がある」という性質を持つサービスを利用するため、重複排 除が必要 Storage WRITE API で BigQuery に ストリーミングインサートする Protobuf を JSON に変換し て GCS にバックアップ データ転送 x スケジュールクエリで MERGE 文を実行 Apache Beam の DeDepulicate トランスフォームの利用 • ETL 処理中に特定のキーや値を一定期間保持して重複するものを除外する • Atlas では request_id という一意なキーが存在するため、そのキーを指定 BigQuery Storage WRITE API (with Exactly Once) の利用 Exactly Once というセマンティクスで BigQuery に書き込むことができる。つまり、「必ず一 回だけ書き込む」ことが保証されるため、重複排除されたレコードが 必ず一回だけ書き込まれる。 参考: https://cloud.google.com/bigquery/docs/write-api?hl=ja それでも重複するケースを取り除くためにスケジュールクエリで 定期的に重複排除するクエリを実行する
  15. 20 Atlas における最近の取り組み: BigQuery ニアリアルタイム連携 スキーマ駆動開発 Enrichment 用の Protobuf スキーマ

    optional string er_bot_bot_name = 5 [ (source_enrichement_options) = "enriched.bot.bot_name", (gen_bq_schema.bigquery) = { require: false description: "xxxx" type_override: "string" } ] BigQuery テーブル用の Protobuf スキーマ Enrichment 用の Protobuf の Java コード BigQuery テーブル用の Protobuf の Java コード A から B に変換するための Java コード BigQuery スキーマファイル (JSON) protoc protoc (*) https://github.com/GoogleCloudPlatform/protoc-gen-bq-schema Pluggable Annotaion Processing を利用した Java コードの自動生成 テーブルのスキーマを 変更する PR を自動作成 PR マージ後 Dataflow Job のデプロイ protoc-gen-bq-schema(*) protobuf の スキーマファイルから自動生成 protobuf の定義ファイルに カスタムのオプションを設定 JSON
  16. 22 GitOps x Atlas Technical Support Data Modeling & Design

    Data Storage & Operations Data Security Data Integration & Interoperability Document & Content Management Reference & Master Data DWH & BI Metadata Data Governance Data Quality Data Achitecture
  17. 23 Atlas のデータガバナンス テーブル定義やスケジュールクエリ、データ転送、アカウント等データ管理に関わる 大部分を terraform で管理し、変更適用は(ほぼ)すべて Github 経由で行う TF

    test_ds/test_table.json [ { “name”: “col1”, “type”: “STRING”, “mode”: “REQUIRED” }, … ] variable tables { default = } “test_ds.test_table” = { description = “テスト表” } …. } } テーブルを管理する用の terraform ファイル テーブル定義用の JSON ファイル
  18. 25 Atlas Datahub Data Modeling & Design Data Storage &

    Operations Data Security Data Integration & Interoperability Document & Content Management Reference & Master Data DWH & BI Metadata Data Governance Data Quality Data Achitecture
  19. 26 メタデータ管理/ドキュメンテーションの課題 • ドキュメンテーションシステムはあったが、(歴史的経緯によって) 複数に分かれており、どれを参照するべきか利用者が迷ってしまっていた • テーブル定義を検索する仕組みはあったが、Google Cloud の Data

    Catalog API を 叩いて検索する仕組みになっており検索速度に難があった • なぜこのテーブルが作られたのかや、データ連携の仕組み、過去の障害による テーブルへの影響等各テーブルの詳細情報を記述する仕組みがない
  20. 27 Atlas Datahub とは Atlas の BigQuery のテーブル定義やデータパイプラインについて検索したり、 各種ドキュメントを参照できる内製ドキュメントシステム •

    快適な検索(バックエンド等に対するリクエストなしで検索できる仕組みを用意) • ばらばらだったドキュメンテーションシステムを統一 • 各種テーブルに対する自由記述ドキュメントを簡単に記述、参照できる
  21. 28 Atlas Datahub 仕組み • Atlas のテーブル定義等がすべて terraform で管理されているため、それらの情報を加工して 検索表示しやすいように

    SSG (Static Site Generator) で HTML を生成 • 生成された HTML を表示する nginx コンテナを CloudRun にデプロイして サーバレスで利用者にWebサイトを提供 JSON TF md JSON hcl2json remark.js HTML JSON テーブル定義やデータセットなど の情報を集約して 検索可能な情報として整理する HTML SSG Build Container Image HTML Deploy TF, JSON, MD ファイルが Github リポジトリにコミットされると Github Action で自動的にリリースされる
  22. 29 Atlas Datahub 機能 1/2 Document Pipeline Catalog Atlas の利用方法や関連するツールの使い方等

    Atlas にまつわるあらゆるドキュメントを参照できる データ転送、スケジュールクエリなどの データパイプラインのメタデータが検索ができる
  23. 30 Atlas Datahub 機能 2/2 Data Catalog テーブル詳細 BigQuery のテーブル、ビュー、マテリアライズド・ビュー、

    データセット、関数のメタデータを 検索できる マークダウンで記載されたテーブルの任意の情報を 参照できる。主にテーブルを作成した経緯や テーブルで発生したトラブルの歴史等について書かれている
  24. 32 まとめ • データエンジニアリングとは DAMA ホイール図で表される知識領域に対して エンジニアリングによって課題解決すること • 日経におけるデータエンジニアリングにおいても上記の領域において 様々な取り組みをしている

    • その中で今回は特に以下の取り組みについて説明 ◦ Atlas データ基盤の改善: BigQuery へのニアリアルタイム連携 ◦ GitOps x Atlas Technical Support ◦ Atlas Datahub