現場データサイエンティスト奮闘記

とある企業で働くデータサイエンティストの日々のアウトプット

肥大化したBigQueryの管理にデータレイク・データマートの考え方が使えるのではないか

はじめに

前提として、筆者は事業会社でいくつかのwebサービスを運営している会社にいます。
アクセスログなど日々山のようなデータが蓄積され、しかも複数のプロダクトを管理しているので、なかなかにデータの管理が煩雑になりがちという状況です。
この改善策としてデータレイクとデータマートの考え方が使えるのではないかという話です。

悩みの内容

データが豊富かつ大量にある悩みとしては、

  • 最初に1つのGCPプロジェクトを作成してそこにデータを入れていたが、他のプロダクトのデータもそこに入れていったために1つのプロジェクトに全プロダクトのデータが放り込まれている
    • 権限管理はプロジェクトごとで行っているので、自チーム以外のプロダクトのデータも見れてしまう
    • 情報漏えい等の観点から言うとアクセス制御はなるべく細かくしておきたい
  • 生データばかりなのでSQLクエリを書くなどしていちいち加工する必要が出てくる
    • 分析者は慣れているもののサービス開発においては億劫でしかない
    • 統計情報をサービスに活用したいと思ってもしづらい

などの問題があります。これをデータレイクとデータマートの考え方でなんとかしようというものです。

データレイク・データマートとは?

データレイク・データマートとはデータの扱い方の概念です。

概念の説明としては、こちらの記事

がわかりやすかったです。
一部抜粋ですが、データレイクについては、

データレイクはビッグデータを扱うためのストレージ(ファイル置き場)です。

データマートについては、

データマート(DM)とは「データベースの用途の名前」です。
データマートの用途は、同じく「分析用途で使われるデータベース」ではあるものの、「データの市場(いちば)」という表現がなされます。

とのことです。

雑多にデータを置いておくのがデータレイクで、前処理など加工して使いやすくしたものをデータレイクと呼んでいます。

データレイク・データマートの概念をBigQueryに当てはめる

提案としては、

  • データレイク:1つのプロジェクトに雑多にデータを放り込む
  • データマート:用途ごとにプロジェクトを作成して、それぞれのBigQueryにビューやテーブルを作成

という感じかなと。
詳細には以下のような運用が良いのではと思っています。

最初に作ったとりあえずのプロジェクトをデータレイクとして、引き続き様々なデータを保存するものとします。
このプロジェクトはデータを扱う限られた者のみにアクセス権を付与してデータアクセス権限を絞ります。

一方、プロダクトごとで分析などの用途で使うものについては別のプロジェクトを作成して、そのBigQuery上に前処理済みテーブルやビューを作成します。
このプロジェクトをデータマートとして利用します。プロジェクトを適切な権限の範囲で作成することで権限の管理が可能です。
また、統計処理されたデータなどのみをデータマート上に置いておけば不要な個人情報などは排除されるのでセキュリティ上の安心感も増すのではないでしょうか。

肥大化しすぎたBigQueryの管理方法としてこの概念を活用するのはアリなのでは?という話でした。