FirestoreデータをBigQueryに取り込んでみた

Google Cloud
この記事は約6分で読めます。

こんにちは!大嶋です!
みなさんはFirestore(Firebase)のデータを活用できないのかなあといった疑問を持ったことはないでしょうか?
今回はそんな疑問にお答えしていきたいと思います。

本記事でわかること

  • Stream Firestore to BigQueryとは
  • Stream Firestore to BigQueryの使い方
  • Stream Firestore to BigQueryの出力結果
  • ストリーミングと一括エクスポートの使い分け

Stream Firestore to BigQueryとは

Stream Firestore to BigQueryは、Firebaseで用意されているExtensionsの機能の一部で、FirestoreのデータをストリーミングでBigQueryにエクスポートすることができます。Firebaseのページから各設定値を入力することで、簡単にBigQueryにデータをエクスポートすることができます。

ストリーミング以外のエクスポート方法

また、Firestoreのデータを一括でエクスポートをすることも可能です。方法は少し違いますが、同じ形式で結果を得ることが可能です。

Stream Firestore to BigQueryの使い方

Stream Firestore to BigQueryは、Firebase上でインストールをすることで利用できるようになります。
実際に利用するためには大きく、以下の4つを順に進める必要があります。また、コレクションやサブコレクションごとにStream Firestore to BigQueryを1つずつインストールする必要があります。以下を進めることで、内部的にはCloud Run Functionsが作成されます。

  • お支払いの情報と利用状況を確認
  • 有効な API と作成済みのリソースの確認
  • この拡張機能に付与されたアクセス権を確認
  • 拡張機能を構成

以下は4つ目(拡張機能を構成)の入力必須な項目です。他にもオプション項目が多くありますので、実際にインストールする際にご確認ください。

項目説明
Cloud Functions location内部的に作成されるFunctions(Cloud Run関数)のロケーション
※合計5つのFunctionsが作成されます。
BigQuery Dataset locationデータセットのロケーション
BigQuery Project IDデータセットのプロジェクトID
Collection pathFirestoreのコレクションパス
※サブコレクションを設定する場合は、chatrooms/{chatid}/postsのようにドキュメントIDをワイルドカードにすることで設定可能です。
Enable logging failed exportsエクスポート失敗時のログ出力の有無
Dataset IDデータセットID
Table IDテーブルID
Use new query syntax for snapshotsスナップショットの有無

一括でエクスポートする方法

ストリーミングの場合はFirebaseのGUIから設定可能でしたが、過去分を一括でエクスポートする場合にはCUIから実行する必要があります。

npx @firebaseextensions/fs-bq-import-collection

上記スクリプトを実行し、Stream Firestore to BigQueryをインストールするときに入力が必要だった項目を対話型で入力していくことで、Firestoreの既存データをBigQueryにインポートできます。
非対話型にしたい場合は、–helpを使って詳細を確認してください。

上記スクリプトを実行することで、Stream Firestore to BigQueryと同じ形式で取り込むことが可能です。増分データのみをエクスポートすることが可能です。

また、データを一か所に集約するために、Stream Firestore to BigQueryをインストールしてストリーミングをしているorする予定の場合は、同じテーブルを利用するよう設定を進めてください。注意事項にも記載がありますが、インストール後に設定をしないと失敗する場合もあるようです。

スクリプトの詳細はこちらをご覧ください。

Stream Firestore to BigQueryの出力結果

インストール後に、対象のコレクションにドキュメントが追加されたときに、Functionsが起動し、BigQueryに出力をします。以下は出力結果のスキーマです。

フィールド名種類
timestampTIMESTAMP
event_idSTRING
document_nameSTRING
operationSTRING
dataSTRING
old_dataSTRING
document_idSTRING
path_paramsSTRING

追加されたドキュメントのデータはdata列にJSON形式で格納されます。
JSON形式になるため、BigQueryのViewを使ってデータの加工をしておくと見やすくなります。
以下のように格納されます。

{
    "date": {
        "_seconds": 1730090822,
        "_nanoseconds": 450000000
    },
    "id": "XXX",
    "item_name": "XXX",
    "price": 100,
    "quantity": 10
}

上記のようなJSON形式のデータを複数のカラムに展開するには、JSON関数を利用します。私は以下のようにJSON_EXTRACT_SCALARを利用しながら、FirestoreのデータをBigQueryのViewとして定義しました。サブコレクションがある場合は、エクスポート時にテーブルを別に作成すると、あとでViewを作成する際に便利です。

JSON_EXTRACT_SCALAR(data, '$.id') AS id

ストリーミングと一括エクスポートの使い分け

ストリーミングの場合、Functionsを使い、コレクションの数によってFunctionsの数も増えるため、毎日最新のデータを確認したいなどの要件がある場合にご利用ください。

一括エクスポートの場合、既存のデータで問題ない場合やPoCなどに向いており、作業に十分なデータ量を取得でき、リソースも作成せずに進めることができます。

まとめ

上記のように簡単にFirebaseの拡張機能のStream Firestore to BigQueryを使って、簡単にFirestoreデータをBigQueryに格納できます。BigQueryはデータの分析や可視化が容易なサービスのため、ぜひFirestoreに格納されているデータも、データ活用の対象にしてみてはいかがでしょうか。

Google および Google Cloud Platform™ service は Google LLC の商標であり、この記事は Google によって承認されたり、Google と提携したりするものではありません。

コメント

タイトルとURLをコピーしました