Earth Engine e BigQuery

Questo documento fornisce indicazioni sull'integrazione di Google Earth Engine (EE) con BigQuery (BQ) per un'analisi geospaziale efficiente. Copre il trasferimento dei dati tra le due piattaforme, considerazioni sul rendimento, limitazioni e implicazioni relative ai costi.

Che cos'è BigQuery?

BigQuery è il data warehouse serverless e completamente gestito di Google che consente l'analisi scalabile di petabyte di dati. Eccelle nelle query SQL ad alta velocità e supporta i dati geospaziali.

Quando devo utilizzare BigQuery o Earth Engine?

BigQuery Earth Engine
Tipo di dati Dati vettoriali principalmente strutturati e analitici. Supporta operazioni geospaziali sui dati GEOGRAPHY. Principalmente dati raster, ma supporta anche dati vettoriali.
Elaborazione Query basate su SQL, ottimizzate per aggregazioni e join su larga scala. Integrazione completa con BigQuery Machine Learning. API JavaScript e Python per il trattamento e l'analisi di raster, inclusi algoritmi geospaziali e di machine learning avanzati.
Scala Archiviazione e analisi su scala petabyte. Concentrati sull'elaborazione di dati tabulari. Archiviazione e analisi su scala petabyte. Concentrati sull'analisi geospaziale, con limitazioni alla scala di elaborazione dei dati vettoriali.
Casi d'uso Data warehousing, business intelligence, analisi geospaziali su set di dati vettoriali di grandi dimensioni. Analisi geospaziali, rilevamento remoto, monitoraggio ambientale, machine learning su dati raster.

Dati vettoriali e raster

I dati vettoriali sono punti, linee e poligoni sulla superficie terrestre. In BigQuery, i dati vettoriali vengono archiviati utilizzando il tipo di dato GEOGRAPHY; in Earth Engine, si tratta di oggetti ee.Geometry.

I dati raster sono griglie di pixel proiettate. Earth Engine è ottimizzato per gestire ed elaborare grandi set di dati raster.

Vantaggi dell'utilizzo di entrambi i sistemi

L'elevata scalabilità di BigQuery ti consente di lavorare con set di dati tabulari di grandi dimensioni che possono essere difficili da elaborare solo in Earth Engine, mentre Earth Engine può eseguire arricchimenti su larga scala e l'elaborazione da vettore a raster che non sono possibili in BigQuery.

Earth Engine supporta una gamma più ampia di funzioni e dati geospaziali rispetto a BigQuery, ma BigQuery ha un'integrazione molto più completa con altri strumenti e servizi.

Spostare i dati di Earth Engine in BigQuery

Earth Engine può esportare i dati direttamente in BigQuery per ulteriori analisi e integrare con altri set di dati.

Export.table.toBigQuery()

Utilizza la funzione Export.table.toBigQuery() per attivare job di esportazione asincroni che scrivono i risultati del calcolo di Earth Engine in BigQuery. Queste attività di Earth Engine possono essere visualizzate e controllate dalla visualizzazione Attività nella console Cloud o nell'editor di codice di Earth Engine.

JavaScript

// Define an Earth Engine feature collection.
var features = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');

// Export the feature collection to BigQuery.
Export.table.toBigQuery({
  collection: features,
  description: 'export_to_bigquery',
  table: 'my_project.my_dataset.my_table',
  append: true,
  overwrite: false
});
      

Python

# Define an Earth Engine feature collection.
features = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017')

# Export the feature collection to BigQuery.
task = ee.batch.Export.table.toBigQuery(
  collection=features,
  description='export_to_bigquery',
  table='my_project.my_dataset.my_table',
  append=True,
  overwrite=False
)
task.start()
      

Per ulteriori informazioni, consulta la documentazione completa delle funzioni.

API sincrone

In Earth Engine non esiste un connettore diretto per scrivere in modo sincrono i dati direttamente in BigQuery. Puoi utilizzare la libreria client BigQuery per il linguaggio preferito (Python, Java, Go e così via) per inserire flussi di dati in BigQuery oppure utilizzare l'API RPC Storage per il trasferimento di dati in tempo reale o quasi.

Argomento Dettagli
Prerequisiti Nel progetto devono essere abilitate l'API BigQuery e l'API BigQuery Storage.
Autorizzazioni Devi disporre dell'accesso in scrittura al set di dati BigQuery di destinazione e dell'autorizzazione per creare job nel progetto di destinazione. Per informazioni dettagliate, consulta l'elenco delle autorizzazioni necessarie. Per informazioni dettagliate sulla gestione delle autorizzazioni, consulta la documentazione sul controllo dell'accesso di BigQuery.
Prezzi Ti verranno addebitati costi per l'utilizzo di BigQuery, inclusa l'archiviazione e l'analisi di eventuali dati di Earth Engine esportati in BigQuery. Per maggiori dettagli, consulta la pagina relativa ai prezzi dell'esportazione da Earth Engine a BigQuery.
Limiti I dati risultanti devono essere compatibili con il modello di tabella di BigQuery con un limite aggiuntivo di 8 MB per riga. Consulta anche l'insieme di problemi noti per l'esportazione dei dati di Earth Engine in BigQuery.

Caricare i dati direttamente da BigQuery

La funzione ee.FeatureCollection.loadBigQueryTable() carica i dati direttamente dalla tabella BigQuery senza trasformarli all'interno di BigQuery.

JavaScript

// Load the BigQuery table with a specified geometry column.
var features = ee.FeatureCollection.loadBigQueryTable({
  tablePath: 'my_project.my_dataset.my_table',
  geometryColumn: 'geo'
});

// Map features on the map
Map.addLayer(features);
      

Python

# Load the BigQuery table with a specified geometry column.
features = ee.FeatureCollection.loadBigQueryTable(
    tablePath='my_project.my_dataset.my_table',
    geometryColumn='geo')

print(features.first())
      
Argomento Dettagli
Prerequisiti Nel progetto devono essere abilitate l'API BigQuery e l'API BigQuery Storage.
Autorizzazioni Oltre ai ruoli e alle autorizzazioni standard, devi disporre dell'accesso in lettura alla tabella BigQuery di destinazione e dell'autorizzazione per creare sessioni di lettura nel progetto di destinazione. Le autorizzazioni BigQuery specifiche richieste sono: - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create Consulta la documentazione sul controllo dell'accesso BigQuery per informazioni dettagliate sulla gestione delle autorizzazioni.
Prezzi Se utilizzi un progetto registrato per l'utilizzo commerciale di Earth Engine, non sono associati costi aggiuntivi di Earth Engine alla lettura di una tabella BigQuery, ma dovrai sostenere costi in tempo di EECU per l'elaborazione dei dati in Earth Engine. Lo schema tariffario esatto è determinato dal tuo piano Earth Engine. Se utilizzi un progetto registrato per uso non commerciale, non ti verranno addebitati costi per la lettura dei dati da BigQuery in Earth Engine. Anche se non paghi per l'utilizzo di BigQuery, BigQuery come prodotto commerciale richiede che il tuo progetto abbia un account di fatturazione associato. Per scoprire di più sugli account fatturazione, consulta la documentazione su come attivare, disattivare o modificare la fatturazione. NOTA: in Anteprima privata, ti potrebbe essere addebitato anche il costo dello streaming dei dati di BigQuery.
Limiti I filtri delle raccolte di funzionalità vengono inviati a BigQuery e applicati lì. BigQuery ha un limite di dimensione per le clausole di filtro ricevute. Se visualizzi un messaggio di errore "Filtro troppo grande", ti consigliamo di semplificare il filtro. Un motivo comune per il superamento di questo limite può essere una geometria complessa utilizzata nella chiamata .filterBounds() in Earth Engine.

Eseguire query BigQuery da Earth Engine

La funzione ee.FeatureCollection.runBigQuery() attiva il calcolo di BigQuery per valutare una query SQL direttamente rispetto alle tabelle di BigQuery e recuperare i risultati come FeatureCollection di Earth Engine.

JavaScript

// Construct a BigQuery query.
var query = 'SELECT * FROM my_project.my_dataset.my_table WHERE area > 1000';

// Run the query and retrieve the results as a FeatureCollection.
var features = ee.FeatureCollection.runBigQuery(query);

// Print the first feature.
print(features.first());
      

Python

# Construct a BigQuery query.
query = 'SELECT * FROM my_project.my_dataset.my_table WHERE area > 1000'

# Run the query and retrieve the results as a FeatureCollection.
features = ee.FeatureCollection.runBigQuery(query)

# Print the first feature.
print(features.first())
      

Costi

Per utilizzare questa funzione è necessario un account di fatturazione.

Earth Engine

Se utilizzi un progetto registrato per l'utilizzo commerciale di Earth Engine, non sono previsti costi aggiuntivi di Earth Engine associati all'esecuzione di una tabella BigQuery, ma dovrai sostenere costi in tempo di EECU relativi all'elaborazione dei dati in Earth Engine. Lo schema di prezzi esatto è determinato dal tuo piano Earth Engine.

Se utilizzi un progetto registrato per uso non commerciale, non ti verranno addebitati costi per la lettura dei dati da BigQuery in Earth Engine.

BigQuery

Questo metodo comporta addebiti di BigQuery in base al tuo piano tariffario (on demand o con slot). Se hai una prenotazione BigQuery, l'utilizzo di questo metodo non genererà costi on demand aggiuntivi.

Argomento Dettagli
Prerequisiti Per utilizzare questa funzione è necessario un account di fatturazione e l'API BigQuery deve essere attivata.
Autorizzazioni Assicurati che il service account Earth Engine abbia le autorizzazioni necessarie per utilizzare sia BigQuery che Earth Engine. Le credenziali utente utilizzate per l'autenticazione devono disporre delle autorizzazioni bigquery.jobs.create e bigquery.jobs.get. Per informazioni dettagliate sulla gestione delle autorizzazioni, consulta la documentazione sul controllo dell'accesso di BigQuery.
Prezzi Questo metodo comporta addebiti di BigQuery in base al tuo piano tariffario (on demand o con slot). Se hai una prenotazione BigQuery, l'utilizzo di questo metodo non genererà addebiti on demand aggiuntivi. Se utilizzi un progetto registrato per l'utilizzo commerciale di Earth Engine, non sono previsti costi aggiuntivi di Earth Engine associati all'esecuzione di una tabella BigQuery, ma dovrai sostenere costi in tempo di EECU relativi all'elaborazione dei dati in Earth Engine. Lo schema di prezzi esatto è determinato dal tuo piano Earth Engine. Se utilizzi un progetto registrato per uso non commerciale, non ti verranno addebitati costi per la lettura dei dati da BigQuery in Earth Engine.

Prestazioni

Oltre all'ottimizzazione delle query in BigQuery, le prestazioni di restituzione dei risultati a Earth Engine dipendono dalle dimensioni dei risultati (ovvero dalla quantità di byte letti da BigQuery) e dalla complessità delle geometrie risultanti.

Filtri

Le best practice per i filtri includono:

  • Filtri iniziali e frequenti: applica i filtri il più presto possibile nella pipeline di elaborazione dei dati, idealmente all'interno delle query BigQuery SQL. In questo modo, si riduce la quantità di dati trasferiti ed elaborati da Earth Engine.
  • Aumenta la selettività: crea filtri che selezionano un sottoinsieme di dati più piccolo e specifico. Evita filtri troppo ampi che recuperano dati non necessari.
  • Combina i filtri: utilizza più condizioni di filtro in combinazione per restringere efficacemente i risultati.
  • Se possibile, suddividi i filtri complessi in condizioni più semplici per evitare di superare il limite di 1 MB per le dimensioni della stringa del filtro.
  • Clustering: le query geospaziali possono avere un rendimento migliore nelle colonne con clustering.
  • Preferisci il filtro in BigQuery: per ridurre le dimensioni dei dati, è sempre meglio eseguire il filtro iniziale in BigQuery prima di un'ulteriore elaborazione in Earth Engine. Se non è possibile, applica filtri aggiuntivi come post-filtri all'interno dello script di Earth Engine dopo aver caricato i dati da BigQuery.

Limiti a livello di sistema

  • Limite di dimensione della tabella di 400 GB
    • Earth Engine non consente di leggere tabelle di dimensioni superiori a 400 GB.
  • Dimensioni delle tabelle intermedie di 10 GB
    • Ogni risultato della query è limitato a 10 GB. Rendi la query più selettiva scegliendo solo le colonne necessarie, ad esempio aggiungendo clausole LIMIT e WHERE.
    • Earth Engine impone un limite alla quantità di dati sottoposti a scansione in BigQuery.
  • Limite di 1 MB per la dimensione della stringa del filtro dopo la trasformazione
    • I filtri complessi possono generare stringhe di filtri di grandi dimensioni che superano il limite.
  • Timeout
    • Earth Engine applica timeout alle query, che possono variare in base al ambito (ad es. batch, online).
  • Limiti di BigQuery

Controlli dei costi

In genere, lo spostamento dei dati tra BigQuery ed Earth Engine non comporta costi diretti. Tuttavia, le dimensioni dei dati trasferiti possono influire sui costi di elaborazione sia in BigQuery sia in Earth Engine.

Se una query prevede l'elaborazione lato BigQuery, verranno addebitati costi di BigQuery in base alla tua configurazione di BigQuery.

Se una query prevede l'elaborazione all'interno di Earth Engine e il tuo progetto è registrato per uso commerciale, ti verranno addebitati gli addebiti in base al tempo di utilizzo delle unità di calcolo di Earth Engine in base alla tua configurazione di fatturazione di Earth Engine.

Log e debug

Operazioni di lettura

Quando leggi i dati da BigQuery utilizzando ee.FeatureCollection.loadBigQueryTable(), l'operazione corrispondente non viene registrata esplicitamente come job in BigQuery. Ciò significa che potresti visualizzare altri dettagli di logging (ad esempio i log di controllo di Cloud) che non hanno job di lettura BigQuery corrispondenti.

Cronologia delle query

Le query eseguite utilizzando ee.FeatureCollection.runBigQuery() vengono registrate nella cronologia delle query di BigQuery del progetto. Puoi accedere alla cronologia delle query tramite l'interfaccia utente di BigQuery nella console Cloud.