はじめに
iOSエンジニアのoukaです。 最近、電気ヒーターがいきなり光り輝いて壊れてしまいました。 猫になってこたつで丸くなりたい今日このごろです。
さて、弊社では毎週、営業開発MTGという営業チームと開発チームの共有MTGを行っています。 そこでは、DBやSalesforceの各データをデータ可視化サービスであるRe:dashを利用してサービスの数値をひと目で見れるようにしています。
収益物件.comアプリではCloud Firestoreに一部データがあるので、今回はFirestoreのデータをRe:dashで表示するための方法を書きます。
手順
FirestoreのデータをRedashで見るためには以下のフローが必要です。
Firestore->GoogleCloudStorage(GCS)->BigQuery->Redash
以下の順番で説明していきます。
- FireStoreのエクスポートを使ってGCSにアップロードする
- BigQueryでGCSのデータを読み込む
- RedashとBigQueryのデータを連携させる
事前に必要なこと
- GCPのプロジェクトに対する課金(Blazeプラン)が有効になっていること
- プロジェクトの権限が
Owner
、もしくは以下の権限を持っていること- Cloud Firestore:
Cloud Datastore Owner
、もしくはCloud Datastore Import Export
- Cloud Storage:
Storage Admin
- Cloud Firestore:
FireStoreからGoogleCloudStorageへエクスポートする
FirestoreのデータをGCSにエクスポートする方法は、Cloud Firestore API(REST、RPC)とgcloudコマンドラインツールを利用する方法がありますが、今回はgcloudを利用します。 こちらよりsdkをインストールします。 https://cloud.google.com/sdk/docs/quickstart-macos?hl=ja
インストールしたらログインします。
gcloud auth login
ログインできたら以下のコマンドを叩くことでGCSにエクスポートされます。
gcloud beta firestore export gs://[バケット名]/backups/hoge --collection-ids=hogecollection,fugasubcollection
BigQueryでFirestoreのデータを読み込ませるためには--collection-ids
フラグを指定して、特定のコレクションをエクスポートしておく必要があります。加えて、コレクションを指定してもサブコレクションはエクスポートされないので、サブコレクションも指定しておきます。
常に最新のデータを分析するにはこれを定期的に行う必要がありそうですね。
BigQueryでGCSのデータを読み込む
BigQueryのブラウザコンソールで操作します。
データセットを作成
データセット IDを入力して作成する。
テーブルを作成
- テーブルの作成元:
Google Cloud Storage
- GCS バケットからファイルを選択:
all_namespaces_all_kinds.export_metadata
ファイル - ファイル形式 :
Cloud Datastore バックアップ
- テーブル名を入力
クエリエディタでSQLを書いて出力してみる
FROMに [リソース名].[データセット名].[テーブル名]
の形式でソースを指定する。
SELECT
*
FROM
`[リソース名].[データセット名].[テーブル名]`
LIMIT
100
クエリ結果に出力されたらOKです。
RedashとBigQueryのデータを連携させる
DataSourceの設定
DataSource->New DataSourceからBigQueryを選択。
- Name、ProjectID、JSON Key Fileを入力
- LoadSchemaにチェック
- Use Standard SQLにチェック
以上を入力してSaveボタンを押す。
NewQueryからNameで指定したデータソースを選択、先程BigQueryで書いたクエリを入力してExecuteして期待通り出力されたらOK。
おわりに
今回は手動でFirestoreのデータをCloud StorageにエクスポートしてBigQueryで読み込みましたが、Cloud Scheduler、Cloud Pub/Sub、Cloud Functionを駆使することによって自動で定期的にBigQueryに読み込むこともできそうです。(https://qiita.com/kurikei/items/ece7f6a21115494386c9)
よりユーザーにとって有益なサービスを提供できるように、サービスのデータを分析してどんどん改善していきたいです。
参考
https://firebase.google.com/docs/firestore/manage-data/export-import?hl=ja