Cloud Firestore のエクスポートからのデータの読み込み

Google BigQuery では、Cloud Firestore マネージド インポートおよびエクスポート サービスを使用して作成された Cloud Firestore のエクスポートからのデータを読み込むことができます。マネージド インポートおよびエクスポート サービスにより、Cloud Firestore ドキュメントが Cloud Storage バケットにエクスポートされます。その後、エクスポートされたデータを BigQuery テーブルに読み込むことができます。

必要な権限

BigQuery にデータを読み込む場合は、新規または既存の BigQuery のテーブルやパーティションにデータを読み込むためのプロジェクト レベルまたはデータセット レベルの権限が必要です。Cloud Storage からデータを読み込む場合は、データが格納されているバケットへのアクセス権も必要です。

BigQuery の権限

Cloud Storage から BigQuery にデータを読み込む場合は、プロジェクト レベルまたはデータセット レベルで bigquery.dataOwner または bigquery.dataEditor の役割が付与されている必要があります。どちらの役割もユーザーとグループに、新しいテーブルへのデータの読み込みや、既存のテーブルへのデータの追加または上書きを行う権限を付与します。

プロジェクト レベルで役割を付与した場合、プロジェクト内のすべてのデータセットのテーブルにデータを読み込む権限がユーザーまたはグループに与えられます。データセット レベルで役割を付与した場合、ユーザーまたはグループは、そのデータセット内のテーブルにのみデータを読み込むことができます。

データセット アクセスの構成の詳細については、データセットへのアクセス制御の割り当てをご覧ください。BigQuery での IAM 役割の詳細については、アクセス制御をご覧ください。

Cloud Storage の権限

Cloud Storage バケットからデータを読み込むには、プロジェクト レベルまたはその個々のバケットの storage.objects.get 権限が付与されている必要があります。URI のワイルドカードを使用する場合は、storage.objects.list 権限も必要です。

事前定義された IAM 役割 storage.objectViewer を付与すると、storage.objects.get 権限と storage.objects.list 権限が与えられます。

制限事項

Cloud Firestore のエクスポートから BigQuery にデータを読み込む場合は、次の制限事項に注意してください。

  • データセットは、エクスポート ファイルを含む Cloud Storage バケットと同じリージョンまたはマルチリージョン ロケーションに存在する必要があります。
  • 指定できる Cloud Storage URI は 1 つのみで、URI ワイルドカードは使用できません。
  • Cloud Firestore のエクスポートを正しく読み込むには、エクスポート データ内のドキュメントが一貫したスキーマを共有する必要があります。
  • 新しいテーブルを作成してデータを保存したり、既存のテーブルを上書きしたりすることはできますが、Cloud Firestore のエクスポート データを既存のテーブルに追加することはできません。
  • Cloud Firestore のエクスポートを BigQuery に読み込む場合は、エクスポート コマンドcollection-ids フィルタを指定する必要があります。コレクション ID フィルタを指定せずにエクスポートされたデータは、BigQuery に読み込むことができません。

Cloud Firestore のエクスポート サービスデータの読み込み

Cloud Firestore のエクスポート メタデータ ファイルからデータを読み込むには、BigQuery ウェブ UI、bq コマンドライン ツール、または API を使用します。

UI やコマンドで Cloud Datastore の用語が使用されることがありますが、次の手順は Cloud Firestore のエクスポート ファイルにも対応しています。Cloud Firestore と Cloud Datastore のエクスポート形式は同じです。

従来のウェブ UI

  1. BigQuery ウェブ UI に移動します。
    BigQuery ウェブ UI に移動
  2. ナビゲーション パネルでデータセットにカーソルを合わせて下矢印アイコン 下矢印アイコン画像 をクリックし、[Create new table] をクリックします。
  3. [Create Table] ページの [Source Data] セクションで、次の操作を行います。

    • [Create from source] をオンのままにします。
    • [Location] で [Google Cloud Storage] を選択し、ソース フィールドに Cloud Storage URI を入力します。Cloud Storage バケットは、データセットと同じロケーションになければなりません。Cloud Firestore エクスポート ファイルの URI の末尾は [KIND_COLLECTION_ID].export_metadata にします。たとえば default_namespace_kind_Book.export_metadata です。この例では、Book はコレクション ID、default_namespace_kind_Book は Cloud Firestore によって生成されたファイル名です。

      [KIND_COLLECTION_ID] が Cloud Storage URI で指定されていることを確認します。[KIND_COLLECTION_ID] を指定せずに URI を指定すると、次のエラーが表示されます。does not contain valid backup metadata. (error code: invalid)

    • [File format] で [Cloud Datastore Backup] を選択します。Cloud Firestore の場合、適切なオプションは Cloud Datastore Backup です。Cloud Firestore と Cloud Datastore のエクスポート形式は同じです。

  4. [Create Table] ページの [Destination Table] セクションで、次の操作を行います。

    • [Table name] で、適切なデータセットを選択し、BigQuery で作成するテーブルの名前をテーブル名のフィールドに入力します。
    • [Table type] が [Native table] に設定されていることを確認します。
  5. [Schema] セクションでは、何もする必要はありません。スキーマは Cloud Firestore のエクスポートから推定されます。

  6. [Options] セクションで該当する項目を選択します。既存のテーブルを上書きする場合は、[Write preference] を [Overwrite table] に設定します。
  7. [Create Table] をクリックします。

コマンドライン

source_formatDATASTORE_BACKUP に設定した bq load コマンドを使用します。--location フラグを指定してロケーションを設定します。既存のテーブルを上書きする場合は、--replace フラグを追加します。

特定のフィールドのみを読み込むには、--projection_fields フラグを使用します。

bq --location=[LOCATION] load --source_format=[FORMAT] [DATASET].[TABLE] [PATH_TO_SOURCE]

ここで

  • [LOCATION] はロケーションです。データが US または EU のマルチリージョン ロケーションにある場合は、--location フラグを省略できます。たとえば、BigQuery を東京リージョンで使用している場合は、このフラグの値を asia-northeast1 に設定します。.bigqueryrc ファイルを使用してロケーションのデフォルト値を設定できます。
  • [FORMAT]DATASTORE_BACKUP です。Cloud Firestore の場合、適切なオプションは Cloud Datastore Backup です。Cloud Firestore と Cloud Datastore のエクスポート形式は同じです。
  • [DATASET] は、データを読み込むテーブルを含むデータセットです。
  • [TABLE] は、データを読み込むテーブルです。テーブルが存在しない場合は、新規に作成されます。
  • [PATH_TO_SOURCE]Cloud Storage URI です。

たとえば次のコマンドは、Cloud Firestore のエクスポート ファイル gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadatabook_data という名前のテーブルに読み込みます。 mybucketmydatasetUS マルチリージョン ロケーションに存在します。

bq --location=US load --source_format=DATASTORE_BACKUP mydataset.book_data gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata

API

API を使用して Cloud Firestore のエクスポート データを読み込むには、次のプロパティを設定します。

  1. Google Cloud Storage のソースデータを指す読み込みジョブを作成します。

  2. ジョブリソースjobReference セクションにある location プロパティにロケーションを指定します。

  3. ソース URI は、完全修飾された gs://[BUCKET]/[OBJECT] 形式にする必要があります。ファイル(オブジェクト)名の末尾は、[KIND_NAME].export_metadata にする必要があります。Cloud Firestore のエクスポートに使用できる URI は 1 つのみで、ワイルドカードは使用できません。

  4. configuration.load.sourceFormat プロパティを DATASTORE_BACKUP に設定してデータ形式を指定します。Cloud Firestore の場合、適切なオプションは Cloud Datastore Backup です。Cloud Firestore と Cloud Datastore のエクスポート形式は同じです。

  5. 特定のフィールドのみを読み込むには、projectionFields プロパティを設定します。

  6. 既存のテーブルを上書きする場合は、configuration.load.writeDisposition プロパティを WRITE_TRUNCATE に設定して書き込み処理を指定します。

Cloud Firestore のオプション

BigQuery が Cloud Firestore のエクスポート データを解析する方法を変更するには、次のオプションを指定します。

CSV のオプション ウェブ UI のオプション CLI のフラグ BigQuery API のプロパティ 説明
Projection フィールド なし --projection_fields projectionFields (オプション)Cloud Firestore のエクスポートから読み込むドキュメント フィールドを示すカンマ区切りリスト。デフォルトでは、BigQuery はすべてのフィールドを読み込みます。フィールド名では大文字と小文字が区別されます。また、フィールドはエクスポート内に存在する必要があります。map.foo などのマップ フィールド内にフィールドパスを指定することはできません。
許可されている不良レコード数 Number of errors allowed --max_bad_records maxBadRecords (省略可)BigQuery がジョブの実行時に無視できる不良レコードの最大数。不良レコードの数がこの値を超えると、ジョブの結果内で「無効」エラーが返されます。デフォルト値は 0 で、すべてのレコードが有効である必要があります。

データ型の変換

BigQuery は、Cloud Firestore のエクスポート ファイル内の各ドキュメントのデータを BigQuery のデータ型に変換します。次の表に、変換前と変換後のデータ型を示します。

Cloud Firestore のデータ型 BigQuery のデータ型
配列 RECORD
ブール値 BOOLEAN
参照 RECORD
日時 TIMESTAMP
地図 RECORD
浮動小数点数 FLOAT
地理的座標

RECORD


[{"lat","FLOAT"},
 {"long","FLOAT"}]
        
整数 INTEGER
文字列 STRING(64 KB で切り捨て)

Firestore のキーのプロパティ

Cloud Firestore の各ドキュメントには、ドキュメント ID やドキュメント パスなどの情報を含む一意のキーが設定されています。次の表に示すように、BigQuery はキーに対して RECORD データ型を作成し(STRUCT とも呼ばれます)、それぞれの情報をネストされたフィールドに入れます。

キーのプロパティ 説明 BigQuery のデータ型
__key__.app Cloud Firestore アプリの名前。 STRING
__key__.id ドキュメントの ID、または null__key__.name が設定されている場合)。 INTEGER
__key__.kind ドキュメントのコレクション ID。 STRING
__key__.name ドキュメントの名前、または null__key__.id が設定されている場合)。 STRING
__key__.namespace Cloud Firestore はカスタム名前空間をサポートしていません。デフォルトの名前空間は空白の文字列で表されます。 STRING
__key__.path ドキュメントのパス: ドキュメントとルート コレクションからのコレクション ペアのシーケンス(例: "Country", "USA", "PostalCode", 10011, "Route", 1234)。 STRING
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。