Earth Engine et BigQuery

Ce document fournit des conseils sur l'intégration de Google Earth Engine (EE) à BigQuery (BQ) pour une analyse géospatiale efficace. Il couvre le transfert de données entre les deux plates-formes, les considérations sur les performances, les limites et les implications en termes de coûts.

Qu'est-ce que BigQuery ?

BigQuery est l'entrepôt de données sans serveur entièrement géré de Google, qui permet une analyse évolutive de pétaoctets de données. Il excelle dans les requêtes SQL à grande vitesse et est compatible avec les données géospatiales.

Quand dois-je utiliser BigQuery ou Earth Engine ?

BigQuery Earth Engine
Type de données Données vectorielles analytiques principalement structurées. Compatible avec les opérations géospatiales sur les données GEOGRAPHY. Principalement des données raster, mais également des données vectorielles.
Traitement Requêtes basées sur SQL, optimisées pour les agrégations et les jointures à grande échelle. Intégration approfondie avec le machine learning BQ. API JavaScript et Python pour le traitement et l'analyse des rasters, y compris des algorithmes géospatiaux avancés et du machine learning.
Échelle Stockage et analyse à l'échelle du pétaoctet Concentrez-vous sur le traitement des données tabulaires. Stockage et analyse à l'échelle du pétaoctet Se concentrer sur l'analyse géospatiale, avec des limites sur l'échelle de traitement des données vectorielles
Cas d'utilisation Entreposage de données, intelligence métier, analyse géospatiale sur de grands ensembles de données vectoriels Analyse géospatiale, télédétection, surveillance de l'environnement, machine learning sur les données raster.

Données vectorielles et matricielles

Les données vectorielles sont des points, des lignes et des polygones sur la surface de la Terre. Dans BigQuery, les données vectorielles sont stockées à l'aide du type de données GEOGRAPHY. Dans Earth Engine, il s'agit d'objets ee.Geometry.

Les données raster sont des grilles de pixels projetées. Earth Engine est optimisé pour la gestion et le traitement de grands ensembles de données raster.

Avantages de l'utilisation des deux systèmes

La scalabilité de BigQuery vous permet de travailler avec des ensembles de données tabulaires volumineux qui peuvent être difficiles à traiter uniquement dans Earth Engine. Earth Engine peut également alimenter un enrichissement à grande échelle et un traitement vectoriel-raster qui ne sont pas possibles dans BigQuery.

Earth Engine est compatible avec un plus grand nombre de fonctions et de données géospatiales que BigQuery, mais BigQuery offre une intégration beaucoup plus riche avec d'autres outils et services.

Migrer des données Earth Engine vers BigQuery

Earth Engine peut exporter des données directement vers BigQuery pour une analyse plus approfondie et une intégration à d'autres ensembles de données.

Export.table.toBigQuery()

Utilisez la fonction Export.table.toBigQuery() pour déclencher des tâches d'exportation asynchrones qui écrivent les résultats du calcul Earth Engine dans BigQuery. Vous pouvez afficher et contrôler ces tâches Earth Engine dans la vue des tâches de la console Cloud ou dans l'éditeur de code 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()
      

Pour en savoir plus, consultez la documentation complète sur les fonctions.

API synchrones

Aucun connecteur direct n'existe dans Earth Engine pour écrire des données de manière synchrone directement dans BigQuery. Vous pouvez utiliser la bibliothèque cliente BigQuery pour votre langage de prédilection (Python, Java, Go, etc.) pour diffuser des données dans BigQuery, ou utiliser l'API RPC Storage pour le transfert de données en temps réel ou quasi en temps réel.

Thème Détails
Prérequis L'API BigQuery et l'API BigQuery Storage doivent être activées dans le projet.
Autorisations Vous devez disposer d'un accès en écriture sur l'ensemble de données BigQuery cible et d'une autorisation pour créer des tâches dans le projet cible. Pour en savoir plus, consultez la liste des autorisations requises. Pour en savoir plus sur la gestion des autorisations, consultez la documentation sur le contrôle des accès dans BigQuery.
Tarifs Des frais vous seront facturés pour votre utilisation de BigQuery, y compris le stockage et l'analyse de toutes les données Earth Engine que vous exportez vers BigQuery. Pour en savoir plus, consultez la page Tarification de l'exportation d'Earth Engine vers BigQuery.
Limites Les données obtenues doivent correspondre au modèle de table de BigQuery, avec une limite supplémentaire de 8 Mo par ligne. Consultez également l'ensemble des problèmes connus liés à l'exportation de données Earth Engine vers BigQuery.

Charger directement des données depuis BigQuery

La fonction ee.FeatureCollection.loadBigQueryTable() charge les données directement à partir de la table BigQuery sans les transformer dans 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())
      
Thème Détails
Prérequis L'API BigQuery et l'API BigQuery Storage doivent être activées dans le projet.
Autorisations En plus des rôles et autorisations standards, vous devez disposer d'un accès en lecture à la table BigQuery cible et d'une autorisation pour créer des sessions de lecture dans le projet cible. Les autorisations BigQuery spécifiques requises sont les suivantes : - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create Pour en savoir plus sur la gestion des autorisations, consultez la documentation sur le contrôle des accès BigQuery.
Tarifs Si vous utilisez un projet enregistré pour une utilisation commerciale d'Earth Engine, aucun coût supplémentaire d'Earth Engine n'est associé à la lecture d'une table BigQuery, mais des coûts liés au temps d'exécution de l'ECU sont facturés pour le traitement des données dans Earth Engine. Le système de tarification exact est déterminé par votre forfait Earth Engine. Si vous utilisez un projet enregistré pour un usage non commercial, aucuns frais ne vous seront facturés pour lire des données BigQuery dans Earth Engine. Même si vous ne payez pas l'utilisation de BigQuery, en tant que produit commercial, BigQuery nécessite un compte de facturation associé à votre projet. Pour en savoir plus sur les comptes de facturation, consultez la documentation sur l'activation, la désactivation ou la modification de la facturation. REMARQUE: Dans la version bêta privée, vous pouvez également être facturé pour le streaming de données BigQuery.
Limites Les filtres de collection d'éléments géographiques sont envoyés à BigQuery et y sont appliqués. BigQuery applique une limite de taille aux clauses de filtre reçues. Si le message d'erreur "Filtre trop volumineux" s'affiche, envisagez de simplifier le filtre. Une géométrie complexe utilisée dans l'appel .filterBounds() dans Earth Engine peut être une source courante de dépassement de cette limite.

Exécuter des requêtes BigQuery à partir d'Earth Engine

La fonction ee.FeatureCollection.runBigQuery() déclenche un calcul BigQuery afin d'évaluer une requête SQL directement sur des tables BigQuery et de récupérer les résultats sous la forme d'un FeatureCollection 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())
      

Coûts

Vous devez disposer d'un compte de facturation pour utiliser cette fonctionnalité.

Earth Engine

Si vous utilisez un projet enregistré pour une utilisation commerciale d'Earth Engine, aucun coût Earth Engine supplémentaire n'est associé à l'exécution d'une table BigQuery, mais des coûts liés au temps d'exécution en EECU sont facturés pour le traitement des données dans Earth Engine. Le plan tarifaire exact est déterminé par votre forfait Earth Engine.

Si vous utilisez un projet enregistré pour un usage non commercial, aucuns frais ne vous seront facturés pour lire des données BigQuery dans Earth Engine.

BigQuery

Cette méthode entraîne des frais BigQuery en fonction de votre forfait (à la demande ou avec des emplacements). Si vous disposez d'une réservation BigQuery, cette méthode ne génère pas de frais à la demande supplémentaires.

Thème Détails
Prérequis Vous devez disposer d'un compte de facturation pour utiliser cette fonction, et l'API BigQuery doit être activée.
Autorisations Assurez-vous que le compte de service Earth Engine dispose des autorisations nécessaires pour utiliser à la fois BigQuery et Earth Engine. Les identifiants utilisateur utilisés pour l'authentification doivent disposer des autorisations bigquery.jobs.create et bigquery.jobs.get. Pour en savoir plus sur la gestion des autorisations, consultez la documentation sur le contrôle des accès dans BigQuery.
Tarifs Cette méthode entraîne des frais BigQuery en fonction de votre forfait (à la demande ou avec des emplacements). Si vous disposez d'une réservation BigQuery, cette méthode ne génère pas de frais à la demande supplémentaires. Si vous utilisez un projet enregistré pour une utilisation commerciale d'Earth Engine, aucun coût Earth Engine supplémentaire n'est associé à l'exécution d'une table BigQuery, mais des coûts liés au temps d'exécution en EECU sont facturés pour le traitement des données dans Earth Engine. Le schéma tarifaire exact est déterminé par votre forfait Earth Engine. Si vous utilisez un projet enregistré pour un usage non commercial, aucuns frais ne vous seront facturés pour lire des données BigQuery dans Earth Engine.

Performances

En plus de l'optimisation des requêtes dans BigQuery, les performances de la restitution des résultats dans Earth Engine dépendent de la taille des résultats (c'est-à-dire de la quantité d'octets lus à partir de BigQuery) et de la complexité des géométries générées.

Filtres

Voici quelques bonnes pratiques pour le filtrage:

  • Filtrage précoce et fréquent: appliquez des filtres le plus tôt possible dans le pipeline de traitement des données, idéalement dans vos requêtes SQL BigQuery. Cela réduit la quantité de données transférées et traitées par Earth Engine.
  • Augmentez la sélectivité: créez des filtres qui sélectionnent un sous-ensemble de données plus petit et plus spécifique. Évitez les filtres trop larges qui récupèrent des données inutiles.
  • Combiner des filtres: utilisez plusieurs conditions de filtre en même temps pour affiner efficacement les résultats.
  • Simplifiez: lorsque cela est possible, décomposez les filtres complexes en conditions plus simples pour éviter de dépasser la limite de 1 Mo pour la taille de la chaîne de filtre.
  • Clustering: les requêtes géospatiales peuvent être plus performantes que les colonnes groupées.
  • Privilégiez le filtrage dans BigQuery: pour réduire la taille des données, il est toujours préférable d'effectuer le filtrage initial dans BigQuery avant tout autre traitement dans Earth Engine. Lorsque cela n'est pas possible, appliquez des filtres supplémentaires en tant que post-filtres dans votre script Earth Engine après avoir chargé des données à partir de BigQuery.

Limites à l'échelle du système

  • Limite de taille de table de 400 Go
    • Earth Engine ne permet pas de lire des tables de plus de 400 Go.
  • Tailles de tables intermédiaires de 10 Go
    • Chaque résultat de requête est limité à 10 Go. Rendez votre requête plus sélective en ne choisissant que les colonnes nécessaires, par exemple en ajoutant des clauses LIMIT et WHERE.
    • Earth Engine limite la quantité de données analysées dans BigQuery.
  • Limite de 1 Mo pour la taille de la chaîne de filtre après transformation
    • Les filtres complexes peuvent entraîner des chaînes de filtres volumineuses qui dépassent la limite.
  • Délais avant expiration
    • Earth Engine applique des délais avant expiration aux requêtes, qui peuvent varier en fonction du domaine (par exemple, traitement par lot, en ligne).
  • Limites de BigQuery

Maîtrise des coûts

Le transfert de données entre BigQuery et Earth Engine n'entraîne généralement pas de coûts directs. Toutefois, la taille des données transférées peut avoir une incidence sur les coûts de traitement dans BigQuery et Earth Engine.

Si une requête implique un traitement côté BigQuery, des frais BigQuery seront facturés en fonction de votre configuration BigQuery.

Si une requête implique un traitement dans Earth Engine et que votre projet est enregistré pour un usage commercial, des frais Earth Engine basés sur le temps d'utilisation des EECU vous seront facturés, conformément à votre configuration de facturation Earth Engine.

Journaux et débogage

Opérations de lecture

Lorsque vous lisez des données à partir de BigQuery à l'aide de ee.FeatureCollection.loadBigQueryTable(), l'opération correspondante n'est pas explicitement journalisée en tant que tâche dans BigQuery. Cela signifie que vous pouvez voir d'autres détails de journalisation (comme les journaux d'audit Cloud) qui n'ont pas de tâches de lecture BigQuery correspondantes.

Query history

Les requêtes exécutées à l'aide de ee.FeatureCollection.runBigQuery() sont enregistrées dans l'historique des requêtes BigQuery de votre projet. Vous pouvez accéder à l'historique de vos requêtes via l'UI BigQuery dans la console Cloud.