見出し画像

非エンジニアが簡易的なデータ分析環境作ってみた話:Firestore x Bigquery x Redash①

こんにちは。Crezitの矢部です。
非エンジニアが〜シリーズの続編を書いてみました。前回はBASE時代にSQLを使えるようになった話でしたが、そこから約1年半の歳月を経て、進化した姿をお届けしたいと思います。


現在弊社が運用しているモバイルクレジット「CREZIT」のデータ分析できるように簡易的なデータ分析環境を整えてみたので、その過程とTipsを備忘録としてシェアしたいと思います。

CREZITの環境について

今のCREZITは完全にFirebase依存のサーバーレスなアーキテクチャになっています。DBにはFirestoreをもちろんフル活用しており、SQLを叩いてデータをカジュアル/自由度高く分析するのが難しいなと個人的に感じていました。

今回はエンジニアにCSV吐き出してもらったり、GASでスプレッドシートに書き出すなどといった手間をかけず、簡易的に、自由度高くSQL書いてデータ分析できる環境を整えたいなと行動開始しました。

初期方針

ざっくり調べたところ、FirestoreのExtensionでExport Collections to BigQueryというBigqueryにデータを流せる便利ツールがありました。とりあえずこれ使ってBQにデータ流しつづければよさそう!ということで方針としては下記にしました。

1. FirestoreからExport Collections to BigQueryでデータの変更を自動でBQに更新し続ける。
2. Bigqueryで直接SQLを叩くのではなく、redash経由でクエリーを書いてグラフとかビジュアライズしていく。


直面した課題①

FirebaseのExtensionsはすごく便利で、一度collection(subcollectionも指定可能)を指定しさえすれば、その後のデータ更新をリアルタイムにBigqueryに流してくれます。詳細については下記URLへ。

無事にExportが自動化されたのですが、ここで問題が発生しました。

あ、これすでに存在するデータどうやってがっちゃんこするんや、、、

このExtensionの素晴らしい特徴は、指定したCollection以下のドキュメントの更新を全て自動で取得してくれる点なのですが、私がこの機能を知ったのは既にサービスの運用を始めた後のことでした。
既に存在するデータについてどうやってもみれないとう課題①に直面してしまったのです。

>>解決策
困っていたところ、前職BASEでインターンとして一緒に働いていた@_moricho_さんが助けてくれました。(まじ感謝....) 下記に既存ドキュメントをExentsionできたchangelogに流すスクリプトが用意されていました。


Overview
The import script (fs-bq-import-collection) can read all existing documents in a Cloud Firestore collection and insert them into the raw changelog table created by the Export Collections to BigQuery extension. The import script adds a special changelog for each document with the operation of IMPORT and the timestamp of epoch. This ensures that any operation on an imported document supersedes the import record.You may pause and resume the import script from the last batch at any point.

これによって、Collectionに既に存在したドキュメントをまるっとBQに流しこむことに成功しました。

直面した課題②

ようやく完成かと思ったのですが、ここで一つ大きな問題が発生しました。それはSubcollectionを吐き出しが上記のScriptだとできないということです。おそらく一部コードをいじれば対応できるのだと思うのですが、流石に僕には理解できませんでした、、、、、、

>> 解決策

色々と悩んだのですが、弊社のタイミングとしては施策の結果データを細かく分析し続けるというよりはスポットで数値を追ったり、多くてもDailyでの分析がメインなため、最終的な結論としてはExtensionを使わずに一度CloudStorageにデータをExportし、都度Bigqueryに流し込むというやり方に変更しました。こちらの記事で書かれている内容です。

CloudStrageにデータがExportされてきたら、それをトリガーにしてGoogle APIs Node.jsでBQに流すといった形です。CloudFunctionをデプロイすれば、あとは下記のコマンドの末尾に対象のcollection名をいれて叩くだけで、Firestore => CloudStorage => Bigqueryの流れが完成します。

gcloud firestore export gs://[PROJECT_ID]-backups-firestore --collection-ids='users','xxx','yyy'

Firestore => CloudStorageの部分だけマニュアルなままでいますが、これもスケジューラーを組んで自動化するなどもちろんできます。(自分ではまだできないので勉強中)

以上で一通りのFirestoreのデータをBQに流しむところまで完了しました。あとはRedashをGCE上に構築して、データソースとしてBQを設定すれば出来上がりです。

次回はRedashの構築と、Firestoreのデータをクエリーする上でのつまづいた点について書いてみようと思います。


参考記事

①Redashの環境構築

②Export Collections to Bigqueryについて

③Firestoreについて


この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
Crezit, Inc. | 消費者信用とインターネット | 人の想像力や可能性を広げていく事業を作りたいです。