freeeの開発情報ポータルサイト

データマートの民主化を目指して〜BIツール・Salesforceとの連携、セキュリティと利活用のバランスをいかにとるか〜

freeeでデータエンジニアをしている島袋(@KSKSKSKS2)です。

freeeのデータ基盤チームでは、データマートを作成、管理するための仕組みを自作しているのですが、データマートを起点としてさらにfreee社内でデータの活用が進むことを目指して、前四半期にいくつか機能追加を行いました。

データマートとは、データ基盤上に集計済みのデータをテーブルとして置いておくことにより、よく使われるデータを再利用しやすくしたものです。freeeでは、BIツールでの集計結果の可視化用途などで主に利用しています。

この記事では、新たに3つ追加したデータマートの機能追加として、どういうものを作ったのか、どのような狙いで作ったのかを、ご紹介したいと思います。

freeeでのデータマート作成環境

データマートは一般的に、BIツールでの集計結果の可視化、外部ツールへロードするためのデータの整形などに利用されることが多いと思いますが、freeeでもご多分に漏れず、データマートをこれらの用途に利用しています。

freeeでは、作成方法や管理者が不明のデータマートが発生しないように、データマートのSQLおよび作成フローをコードで管理し、digdagのワークフローとして実行するための「マート基盤」を自作しています。

利用者が「マート基盤」の設定を管理しているリポジトリにPRを出して、データマート作成用SQLの追加・更新、マート作成フローの設定の更新を行う運用をとっています。これにより、誰かいつ作ったか、どのようなSQLで作ったか、特定の時点ではどのような設定で作られているかわかるため、データマートで参照しているテーブルの仕様変更を促したり、データさえそろえば特定日時点のデータマートを再現できるようになっています。

また、「マート基盤」越しにしかデータマートを作成できないようにすることにより、管理されていないテーブルの発生や、本来権限のあるメンバーしか見えてはいけないデータが、その権限を持たないユーザーでも見えるテーブルとして実体化されないようにしています。

設定によって、複数のテーブルをシーケンシャルに作成したり、テーブルの単純な洗替えだけでなく incremental な更新もサポートしたりと、様々な設定ができるようになっています。

データマート構成図
データマート構成図

BIツールからデータマートを作成できる機能

なぜ作ったのか

既存のマート基盤では、gitを中心に運用フローが組まれていることもあり、gitに慣れるハードルが高い、GitHubアカウントをもたないfreeeのメンバーが気軽に利用できない、との声をもらっていました。

また、テーブルを実体化するまでに、運用上データ基盤チームのレビューをはさむ必要が発生するため、実体化したいタイミングですぐに実体化できない、という意見もありました。

どんな機能か

そこで、freee内で広く利用されているBIツールであるRedashのGUI上で、データマートの設定と反映を行えるように実装しました。

freeeではRedashをメインのBIツールとして利用しており、Redashの実行結果をスプレッドシートに流し込むアドオンを作成したり、Redashで作成したクエリのSQLを内部サービスで参照したりなど、これまでもRedashを起点にデータ活用が進められてきました。

本機能もこの流れにのって、Redashでクエリを作成するのに合わせて、データマートをいつ更新するかの設定もRedashのGUI上から行えるようにしました。

クエリと合わせて、設定およびその設定を更新した人を記録し、その履歴を残しておくことにより、管理上必要な情報はgit管理のもの同様残るように工夫もしています。

Redash上に作成したデータマート設定ダイアログ
データマート設定ダイアログ

データマート化したテーブルをSalesforceにロードできる機能

なぜ作ったのか

freeeでは、主にセールスやサクセス、サポートのオペレーションツールとしてSalesforceを広く活用しています。そのため、Salesforce上のレポート機能をこれらのチームでは常用しているのですが、DWH環境とは異なり、大きなデータや多様なデータを組み合わせて集計を行うことが難しいという制約があります。

また、ユーザーのプロダクトの利用状況などは基本的にはSalesforceに連携はしていないため、利用状況を元にユーザーに対して何かしらのアプローチを取ろうと思うと、一度スプレッドシートなどにデータをもっていって、突合させる必要がありました。

どんな機能か

そこで、データマート化したテーブルをSalesforceの特定オブジェクトに書き込む機能を実装しました。

freee社内でのSalesforce利用の制約上オブジェクトは複数のデータマート間で共通させているため、Salesforceに持っていけるデータや、Salesforceで作成できるレポートにはいくつか制限がありますが、ある程度汎用的に集計済みのデータをSalesforceに取り込むことができるようにしました。

また、データマートを定期更新する仕組みと組み合わせてSalesforceにデータを反映することにより、Salesforce上のレポートも自動で最新の状態が反映できるようにしました。

センシティブなデータを集計した結果をデータマート化できる機能

なぜ作ったのか

freeeでは、社内で発生する様々なデータに対して、どのくらいの公開範囲で見えて良いデータなのかを定義し運用しています。

データ基盤では、利用できるデータは部署の垣根なく社内で広く利用できるように運用していますが、事業上当然そうはいかないようなデータも存在し、そのようなデータは一部のメンバーのみがクエリを発行できるように管理しています。

今までの「マート基盤」では、権限上見えてはいけないメンバーがデータを閲覧できるようになることを防ぐため、このようなデータをソースにしてデータマートを作成することができないようにしていました。

しかし、データ活用が進むに連れ、上記のようなデータをセキュリティ上問題ないように集計した結果を、BIツールで可視化したい、広く結果を共有したい、というニーズが出てくるようになっていました。

どんな機能か

そこで、利用者が作成したクエリを元に、データ基盤チームしか閲覧できない環境にテーブルが作成され、そこで機械的なチェックと人力チェックを実施し、問題ないと判断されたクエリのみをデータマート化できる機能を実装しました。

問題ないとなった場合は、通常のデータマートと同様に広く利用できるテーブルとして実体化されますが、機械的なセキュリティーチェックが常に走り、問題ない状態かが確認され続けるようにしました。

おわりに

以上、データ利用促進のために、前四半期で開発してきたデータマート関連機能の紹介でした。freeeのデータ基盤チームでは、今後もさらなるデータ利用促進のため、機能開発や施策を進めていきたいと考えています。

freeeでは、一緒に働いてくれる仲間を募集しています。ぜひこの記事を読んでご興味もって頂いた方は、カジュアル面談から実施できますので、お気軽にご応募ください。

データ基盤チームでもメンバーを募集していますので、freeeのデータ基盤をより進化させていただける方のご応募をお待ちしております!