目次
- FirestoreからBigqueryへのデータストリーミング
- Stream Firestore to BigQuery の セットアップ
- Firestore内既存Documentの転送
- クレデンシャルの設定
- 転送コマンドの実行
- 転送結果の確認
- BigQueryでビューを作成
- ビューの定義
- ビューのデプロイ
- 可視化用ビューの作成
- Looker StudioにBigQueryの可視化用VIEWを追加
FirestoreからBigqueryへのデータストリーミング
Firestore consoleから Cloud Firestore Extensions の “Stream Firestore to BigQuery” を インストールすることで、Collection単位でデータストリームを構成できる。設定を完了すると、設定したCollectionの更新がBigQueryに送信されるようになる。
Stream Firestore to BigQuery の セットアップ
- FIrebaseコンソールのメニューから、Firestore Databaseを選択
- Extentionsを選択
- Stream Firestore to BigQueryを選択
- ガイダンスに従い、設定を行う
- インストールを選択
- インストール完了後、始めるを選択
- 他にデータストリームを構築するCollectionが存在する場合は、1-6の手順を繰り返す
このとき、Dataset ID に設定したBigQueryデータセットに YOUR_COLLECTION_NAMEs_raw_changelog (テーブル)、 YOUR_COLLECTION_NAMEs_raw_latest (viewテーブル) が作成され、更新情報の同期が行われるようになる
Firestore内既存Documentの転送
データパイプラインにより更新が同期されるようにはなるが、同期を開始する前に登録されていたデータはBigQueryへ転送されない。 そこで、本節に示した手順により既存のデータ転送を行う。
クレデンシャルの設定
転送コマンドを用いてBigQueryを操作するため、クレデンシャルを環境変数にsetする。現在作業中の環境により、当該操作を行うコマンドは異なるため注意すること。
Shell 環境(linux, mac)
set GOOGLE_APPLICATION_CREDENTIALS=CREDENTIALS_PATH\CREDENTIAL.json
Power Shell 環境( Windows)
$env:GOOGLE_APPLICATION_CREDENTIALS = "C:\CREDENTIALS_PATH\CREDENTIAL.json"
クレデンシャルの取得手順
- Google Cloud Platform Console にアクセスし、プロジェクトを選択
- サービスアカウントの作成 IAM と管理 > サービスアカウント > サービスアカウントの作成 をクリックし、以下の情報を設定します。
- サービスアカウント名: 任意名称(例:firestore-to-bigquery)
- 役割:
- BigQuery Data Editor: BigQuery でデータの編集、作成、削除を行うための権限
- Datastore User: Cloud Firestore データにアクセスするための権限
- Tasks Enqueuer: タスクキューを作成するための権限
- 作成 を選択
- サービスアカウントキーの作成
- 作成したサービスアカウントを選択し、キー を選択
- キーの作成 → JSON を選択してキーを作成
転送コマンドの実行
@firebaseextensions/fs-bq-import-collection コマンドを使うことでデータを転送できる
作業中の環境で @firebaseextensions/fs-bq-import-collection を利用可能とした後、以下コマンドで転送できる
npx @firebaseextensions/fs-bq-import-collection --project=YOUR_PROJECT_ID --big-query-project=YOUR_PROJECT_ID --source-collection-path=YOUR_COLLECTION_NAME --table-name-prefix=YOUR_TABLE_NAME_PREFIX --dataset-location=YOUR_DATASET_LOCATION --dataset=firestore_export --non-interactive --query-collection-group=true --batch-size=300 --multi-threaded=false --use-new-snapshot-query-syntax=true --use-emulator=false
サブコレクションの転送では --query-collection-group=true が必須
falseとすると、対象となるCollectionがサブコレクションである場合は転送が行われない
転送結果の確認
BigQueryコンソールにアクセスして転送結果を確認できる
- Bigquery Studio ‐> プロジェクト名 → firestore_export(データセット名) → xyz_raw_latestを選択
- テーブルエクスプローラのタブ → COPY TO QUERYボタン → 実行ボタンを選択
BigQueryでビューを作成
abcs_raw_changelog、 abcs_raw_latestは、firestoreのDocumentのスキーマをJSON形式で表したものであるため、分析用途では扱いにくい。そこでBigQuery上に、abc_raw_changelog、 abc_raw_latestをソースとしたViewを作成する
ビューの定義
JSONでVIEWのスキーマを定義し、abcs.jsonとして保存する
JSONで定義したVIEWの例
// abcs.json
{
"fields": [
{
"name": "content",
"type": "string"
},
{
"name": "abc_id",
"type": "string"
},
{
"fields": [
{
"name": "id",
"type": "string"
},
{
"name": "description",
"type": "string"
},
{
"fields": [
{
"name": "display_name",
"type": "string"
}
],
"name": "format",
"type": "map"
}
],
"name": "abc_addtional_info",
"type": "map"
},
{
"name": "updated_at",
"type": "timestamp"
},
{
"name": "created_at",
"type": "timestamp"
}
]
}
VIEWのスキーマを定義の保管
Firebaseのプロジェクトに関するファイルをGitHubなどに保管している場合は、bigquery_schema などのフォルダに、作成したスキーマファイルを追加しておくことで、Collection内のDocumentのフィールド構成が更新された際などに、再利用して作業しやすい
ビューのデプロイ
以下、ビューが存在する場合は削除
- BigQueryの環境名 → firestore_exportの以下を削除
- YOUR_COLLECTION_NAME_schema_YOUR_COLLECTION_NAME_latest
- YOUR_COLLECTION_NAME_schema_YOUR_COLLECTION_NAME_changelog
デプロイコマンド
npx @firebaseextensions/fs-bq-schema-views --project=YOUR_PROJECT_ID --table-name-prefix=YOUR_COLLECTION_NAME --schema-files=./bigquery_schema/YOUR_COLLECTION_NAME.json --dataset=YOUR_DATASET_NAME --non-interactive
可視化用ビューの作成
ビューは、Collectionをテーブル形式としただけであるため、Looker Studioでの可視化がしにくい場合がある。そこで、BIgQuery ConsoleからJOINなどの処理を行った可視化用のVIEWを作成する
- BIgQuery Console → YOUR_PROJECT_ID → データセット名(デフォルトはfirestore_export) → +ボタンを選択して、可視化用のVIEWを作成するSQLを入力
可視化用のVIEWを作成するSQLの例
CREATE VIEW YOUR_PROJECT_ID.firestore_export.some_tabele_for_analy AS
SELECT
a.name,
a.content,
x.name,
x.content,
x.abc_ref,
x.created_at,
x.updated_at,
FROM
`YOUR_PROJECT_ID.firestore_export.abcs_schema_abcs_latest` AS a
JOIN
`YOUR_PROJECT_ID.firestore_export.xyzs_schema_xyzs_latest` AS x
ON
a.document_id = REPLACE(x.abc_ref, 'abcs/', '')
ORDER BY
a.created_at DESC
可視化用のVIEWを定義するSQLの保管
Firebaseのプロジェクトに関するファイルをGitHubなどに保管している場合は、 /bigquery_schema/visualization_schemas などのフォルダに、SQLを追加しておくことで、フィールド構成を更新する際などにすばやく対応できる
Looker StudioにBigQueryの可視化用VIEWを追加
BigQuery上の可視化用のVIEWを、Looker Studioのデータソースとして追加する
- Looker Studioでレポートを選択
- 編集ボタンを選択
- リソース → 追加済のデータリソースの管理 → +データソースを追加 を選択
- BigQuery → マイプロジェクト → データセット名(デフォルトはfirestore_export) → 可視化用VIEWを選択