BigQuery へのエクスポート

概要

Earth Engine のコンピューティング アーキテクチャは、画像(ピクセルベース)の計算を高速かつスケーラブルに行うように最適化されています。BigQuery も同様に、表形式データ(ベクター)のスケーラブルな処理に最適化されており、Earth Engine を補完する多くの機能を備えています。

ワークフローの例:

  • Earth Engine で生成されたデータに対して大規模な BigQuery 結合を実行する
  • 画像から得られた統計情報を使用してベクターデータにアノテーションを付け、BigQuery でさらに処理する
  • Earth Engine から追加可能な BigQuery テーブルにデータを定期的にエクスポートする

他にも優れたユースケースがございましたら、ぜひお聞かせください

BigQuery の基本

Earth Engine は BigQuery テーブルに書き込みます。すべてのテーブルはデータセットに含まれています。指定したデータセットが BigQuery に存在しない場合、エクスポート タスクは失敗します。詳細については、BigQuery データセットの概要をご覧ください。

データセットの作成

データセットには、名前、ストレージ リージョン、有効期限の動作など、作成時に指定できるオプションがいくつかあります(さらに高度なオプションもあります)。

データセットを作成するメカニズムはさまざまですが、簡単に始めるには Cloud コンソールを使用する方法があります。

  1. Cloud コンソールの BigQuery ページに移動します。
  2. プロンプトが表示されたら、[有効にする] をクリックして API を有効にします。
  3. [SQL ワークスペース] タブで、プロジェクトの横にあるその他メニュー()をクリックします。
  4. [データセットを作成] オプションを選択します。
  5. 設定ガイドに沿って操作します。

データセットの作成と構成に関するすべてのオプションについては、BigQuery のドキュメントをご覧ください。

権限

呼び出し元には、Earth Engine の使用に必要な標準ロールと権限に加えて、Cloud プロジェクトまたはデータセットに対する正しい BigQuery 権限も必要です。

  • bigquery.tables.get
  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.tables.delete
  • bigquery.jobs.create

次のいずれかの Identity and Access Management(IAM)事前定義ロールの組み合わせには、必要な権限が含まれています。

  • bigquery.dataEditorbigquery.jobUser
  • bigquery.dataOwnerbigquery.jobUser
  • bigquery.user
  • bigquery.admin

料金

BigQuery は有料の Google Cloud サービスであるため、BigQuery の使用に対して料金が発生します。これには、BigQuery にエクスポートした Earth Engine データの保存と分析が含まれます。

Earth Engine の BigQuery エクスポート機能の料金の詳細については、下記の料金セクションをご覧ください。

設定をエクスポート

構文

コードエディタ(JavaScript)

Export.table.toBigQuery({
  collection: features,
  table: 'myproject.mydataset.mytable',
  description: 'put_my_data_in_bigquery',
  append: true,
  overwrite: false
});

Python の設定

Python API とインタラクティブな開発での geemap の使用については、 Python 環境のページをご覧ください。

import ee
import geemap.core as geemap

Colab(Python)

task = ee.batch.Export.table.toBigQuery(
    collection=features,
    table='myproject.mydataset.mytable',
    description='put_my_data_in_bigquery',
    append=True,
    overwrite=False,
)
task.start()

スキーマの自動または手動の指定

BigQuery にテーブルが存在しない場合、Earth Engine はコレクション内の最初の ee.Feature のプロパティを使用してスキーマを特定しようとします。これは最善の推測であり、最初の特徴のスキーマが他の特徴のスキーマと異なるコレクションを作成できます。

BigQuery テーブルに特定のスキーマが必要な場合は、ターゲット スキーマを使用して空のテーブルを作成して構成します。

プロパティ名

Earth Engine の特徴のプロパティは、BigQuery の列に対応しています。Earth Engine は、名前「geo」を使用して ee.Feature ジオメトリ(「.geo」セレクタ)を BigQuery に書き込みます。

名前変更を回避するには、ee.Feature オブジェクトに有効な列名のプロパティがあり、名前が「geo」ではないことを確認します(この名前は、Earth Engine に名前のない特徴のジオメトリに使用されるため)。

プロパティ名に無効な文字が含まれていると、BigQuery の列名の制限によりエクスポートが失敗します。

型変換

Earth Engine データ(ee.Feature プロパティの値)は、可能であれば同等の BigQuery 型に変換されます。なお、null 可能性は型ではなくテーブル スキーマによって制御されます。

Earth Engine のタイプ BigQuery の型
ee.String STRING
ee.Number FLOAT または INTEGER
ee.Geometry GEOGRAPHY
ee.Date TIMESTAMP
ee.ByteString BYTES
ee.Array STRUCT<ARRAY<INT64>, ARRAY<INT64|FLOAT64>> 配列のセクションをご覧ください。
その他の ee.* タイプ サポート対象外 JSON 値のセクションをご覧ください。

配列

Earth Engine は、BigQuery の ML.DECODE_IMAGE 関数で使用される形式と同様に、マルチディメンションの ee.ArraySTRUCT<ARRAY<INT64> dimensions, ARRAY<INT64|FLOAT64> values> にエクスポートします。

構造体の最初の配列 dimensions には、Earth Engine 配列のディメンション($d_1$ ~ $d_n$)が含まれています。

構造体の 2 番目の配列 values には、多次元配列のすべての値が含まれ、単一の BigQuery 配列にフラット化されます。フラット化された配列の値の合計数は $\sum_{i=1}^n d_i$ です。元の Earth Engine 配列のインデックス $(i_i, \ldots, i_n)$ の値は、フラット化された配列のインデックスに次の値に対応します。

\[ \sum_{j=1}^n \left( i_j \cdot \prod_{k=j+1}^n d_k \right) \]

一般的なケースでは、values 配列のインデックス式は次のとおりです。

配列サイズ サイズ インデックス登録式
1 次元 d1