見出し画像

データ基盤は「データで」改善する − 中間テーブル作成の事例

メルカリAnalytics Infraチームの@__hiza__です。
この記事では、メルカリにおけるデータ基盤の整備について紹介します。

今回は、膨大な生のテーブルについてどのテーブルから中間テーブル化すると効果的か、データにもとづいて優先順位を付けた事例を説明します。

また、あわせて大規模なデータ基盤を改善する際に「データ基盤の利用状況のログ」が役立つことをお話したいと思います。

中間テーブルを作る意義

データ分析用の中間テーブルを作成する意義を簡単におさらいします。

例えば、WebサービスのRDBに入っているデータで分析を行う場合に以下のような加工をしたテーブルを用意すると分析が便利になります。

例) 生テーブルを分析に使いやすくする加工の例

  • よくjoinして利用する複数のテーブルをあらかじめjoinしておく

  • コード化された値を人が見て分かる値に変換しておく(都道府県コード01→北海道)

  • 各種命名規則を他の分析用テーブルと合わせる

  • 分析でよく使うクエリに合わせたパーティショニングを行う

このように元々のテーブル(生テーブル)を、分析用のテーブル(中間テーブル)に加工することで、より効率的に分析が行えるようになります。

すべてを一度に改善することはできない

しかし、すべての生テーブルに対して一度に中間テーブルを作成できない場合もあります。

例えばメルカリの場合、BigQuery上に1,500以上のデータセット(※)がありますので、一度にすべてを中間テーブルに加工するのは難しいです。

※テーブル数をお示ししたいところですが、_table_suffixを利用したテーブルがまだ残っていて正確に実態がカウントできないため、データセット数で表現しています。

頻繁に使われるテーブルをログで特定する

こんなときに役立つのがBigQueryの監査ログ、もしくはInformation schemaなどの「データの利用状況のログ」です。

これらのログを集計することで、BigQuery上の「どのテーブル」を「誰が」「いつ」「どんなクエリ」で参照したのか分析できます。この情報が中間テーブルを作成する優先順位を決める上で非常に役立ちます。

information schemaや監査ログの詳しい使い方については、MonotaRO様が公開している資料が参考になりますので紹介します。

例えば利用頻度が高いテーブルを特定する

このログを使って、メルカリのBigQuery上のテーブルについて、直近1ヶ月間で参照したユーザー数が多かった順のランキングTOP100を作ってみました。

利用者数TOP100 (縦軸がテーブル名, 横軸が参照したユーザー数)

あまり参照されていない大多数のテーブルと、頻繁に参照される少数のテーブルがある事が分かります。パレートの法則的な分布と言えます。

メルカリのBigQuery利用者は月間およそ800名です。その1割にあたる80名以上が参照したテーブルは20個のテーブルに限られます。(①から上の部分)

1,500のデータセットの中から何のヒントも無しに中間テーブル化を行うよりも、頻繁に使われているテーブルの中から中間テーブル化の対象を選んだ方がずっとインパクトを出しやすいと考えています。

このように、テーブルの参照回数がデータ整備の参考になることはyuzutas0さんが以下のスライドで紹介したアイデアです。こちらもぜひご覧ください。

よく使われそうなデータから中間テーブル化する

実際に、分析結果をもとに利用頻度が高いテーブルをより分析しやすい中間テーブルに加工して社内へ提供しました。

以下が作成した中間テーブルが参照された回数(job数)の日次推移です。
提供開始から3ヶ月ほどで1日あたり1,000〜2,000回参照されるようになりました。一定のニーズがある中間テーブルを作成できたことが分かります。

作成した中間テーブルの被参照回数 (色分けは気にしないでください)

データ基盤を「データを見ながら」改善する

今回は、中間テーブルを作成する際に「データの利用ログを分析して頻繁に使われているテーブルから改善していった方が効果的」という事例を紹介させていただきました。
データの利用状況のログが役立つのは、中間テーブル作成の優先順位付けのときだけではありません。メタデータの整備や、データに対するテストの作成など、他の様々な整備の優先順位付けにも役立ちます。
また、作成した中間テーブルの利用状況のモニタリングにも使えますし、古くなったデータの廃止にも役立ちます
データの利用状況のログは、データのライフサイクル全般に渡って使えるものだと言えます。

大規模にデータが利用されている環境では、直接見聞きした範囲だけでデータの利用状況を把握するのはもはや困難です。

コンシューマー向けのプロダクトを改善するためにデータが必要なように、大規模なデータ基盤を改善するのにもやはりデータが必要と言えます。

▼採用情報サイト・関連記事はこちらから

この記事が気に入ったらサポートをしてみませんか?