概要
Earth Engine のコンピューティング アーキテクチャは、画像(ピクセルベース)の計算を高速かつスケーラブルに行うように最適化されています。BigQuery も同様に、表形式データ(ベクター)のスケーラブルな処理に最適化されており、Earth Engine を補完する多くの機能を備えています。
ワークフローの例:
- Earth Engine で生成されたデータに対して大規模な BigQuery 結合を実行する
- 画像から得られた統計情報を使用してベクターデータにアノテーションを付け、BigQuery でさらに処理する
- Earth Engine から追加可能な BigQuery テーブルにデータを定期的にエクスポートする
他にも優れたユースケースがございましたら、ぜひお聞かせください。
BigQuery の基本
Earth Engine は BigQuery テーブルに書き込みます。すべてのテーブルはデータセットに含まれています。指定したデータセットが BigQuery に存在しない場合、エクスポート タスクは失敗します。詳細については、BigQuery データセットの概要をご覧ください。
データセットの作成
データセットには、名前、ストレージ リージョン、有効期限の動作など、作成時に指定できるオプションがいくつかあります(さらに高度なオプションもあります)。
データセットを作成するメカニズムはさまざまですが、簡単に始めるには Cloud コンソールを使用する方法があります。
- Cloud コンソールの BigQuery ページに移動します。
- プロンプトが表示されたら、[有効にする] をクリックして API を有効にします。
- [SQL ワークスペース] タブで、プロジェクトの横にあるその他メニュー()をクリックします。
- [データセットを作成] オプションを選択します。
- 設定ガイドに沿って操作します。
データセットの作成と構成に関するすべてのオプションについては、BigQuery のドキュメントをご覧ください。
権限
呼び出し元には、Earth Engine の使用に必要な標準ロールと権限に加えて、Cloud プロジェクトまたはデータセットに対する正しい BigQuery 権限も必要です。
bigquery.tables.getbigquery.tables.createbigquery.tables.updateDatabigquery.tables.deletebigquery.jobs.create
次のいずれかの Identity and Access Management(IAM)事前定義ロールの組み合わせには、必要な権限が含まれています。
bigquery.dataEditor+bigquery.jobUserbigquery.dataOwner+bigquery.jobUserbigquery.userbigquery.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 });
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.Array を STRUCT<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 |