In diesem Dokument finden Sie eine Anleitung zur Einbindung von Google Earth Engine (EE) in BigQuery (BQ) für effiziente raumbezogene Analysen. Sie enthält Informationen zur Datenübertragung zwischen den beiden Plattformen, zu Leistungsüberlegungen, Einschränkungen und Kostenfolgen.
Was ist BigQuery?
BigQuery ist das vollständig verwaltete, serverlose Data Warehouse von Google, mit dem sich skalierbare Analysen von Petabytes an Daten durchführen lassen. Sie eignet sich hervorragend für schnelle SQL-Abfragen und unterstützt raumbezogene Daten.
Wann sollte ich BigQuery oder Earth Engine verwenden?
| BigQuery | Earth Engine | |
|---|---|---|
| Datentyp | Vorwiegend strukturierte, analytische Vektordaten. Unterstützt geospatiale Vorgänge auf GEOGRAPHY-Daten. |
Vorwiegend Rasterdaten, aber auch Vektordaten werden unterstützt. |
| In Bearbeitung | SQL-basierte Abfragen, optimiert für große Aggregationen und Joins. Umfassende Integration in BQ-Maschinelles Lernen | JavaScript- und Python-APIs für die Rasterverarbeitung und ‑analyse, einschließlich erweiterter raumbezogener Algorithmen und maschinelles Lernen. |
| Skalieren | Speichern und analysieren von Daten im Petabytebereich Konzentrieren Sie sich auf die Verarbeitung tabellarischer Daten. | Speichern und analysieren von Daten im Petabytebereich Der Schwerpunkt liegt auf raumbezogenen Analysen, wobei die Verarbeitung von Vektordaten eingeschränkt ist. |
| Anwendungsfälle | Data-Warehouse-Prozess, Business Intelligence und geospatiale Analysen großer Vektordatensätze. | Geospatiale Analysen, Fernerkundung, Umweltmonitoring, maschinelles Lernen auf Rasterdaten. |
Vektor- und Rasterdaten
Vektordaten sind Punkte, Linien und Polygone auf der Erdoberfläche. In BigQuery werden Vektordaten mit dem Datentyp GEOGRAPHY gespeichert. In Earth Engine sind dies ee.Geometry-Objekte.
Rasterdaten sind projizierte Pixelraster. Earth Engine ist für die Verarbeitung großer Rasterdatensätze optimiert.
Vorteile der Verwendung beider Systeme
Dank der Skalierbarkeit von BigQuery können Sie mit riesigen tabellarischen Datensätzen arbeiten, die sich nur schwer in der Earth Engine verarbeiten lassen. Die Earth Engine bietet außerdem umfangreiche Möglichkeiten zur Datenanreicherung und zur Vektor-zu-Raster-Verarbeitung, die in BigQuery nicht möglich sind.
Earth Engine unterstützt eine größere Bandbreite an geospatialen Funktionen und Daten als BigQuery. BigQuery bietet jedoch eine viel umfassendere Integration in andere Tools und Dienste.
Earth Engine-Daten in BigQuery verschieben
In Earth Engine können Daten zur weiteren Analyse und Einbindung in andere Datensätze direkt nach BigQuery exportiert werden.
Export.table.toBigQuery()
Verwenden Sie die Funktion Export.table.toBigQuery(), um asynchrone Exportjobs auszulösen, die die Ergebnisse der Earth Engine-Berechnung in BigQuery schreiben. Diese Earth Engine-Aufgaben können in der Aufgabenansicht in der Cloud Console oder im Earth Engine-Code-Editor aufgerufen und gesteuert werden.
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()
Weitere Informationen finden Sie in der vollständigen Funktionsweise.
Synchrone APIs
In Earth Engine gibt es keinen direkten Connector, mit dem Daten synchron direkt in BigQuery geschrieben werden können. Sie können die BigQuery-Clientbibliothek für Ihre bevorzugte Sprache (z. B. Python, Java oder Go) verwenden, um Daten in BigQuery zu streamen, oder die RPC Storage API für die Echtzeit- oder nahezu Echtzeit-Datenübertragung.
| Thema | Details |
|---|---|
| Vorbereitung | Für das Projekt müssen die BigQuery API und die BigQuery Storage API aktiviert sein. |
| Berechtigungen | Sie benötigen Schreibzugriff auf das Ziel-BigQuery-Dataset und die Berechtigung zum Erstellen von Jobs im Zielprojekt. Weitere Informationen finden Sie in der Liste der erforderlichen Berechtigungen. Ausführliche Informationen zum Verwalten von Berechtigungen finden Sie in der Dokumentation zur Zugriffssteuerung in BigQuery. |
| Preise | Für die Nutzung von BigQuery fallen Gebühren an, einschließlich der Speicherung und Analyse aller Earth Engine-Daten, die Sie nach BigQuery exportieren. Weitere Informationen finden Sie unter Preise für den Export von Earth Engine-Daten nach BigQuery. |
| Limits | Die resultierenden Daten müssen zum Tabellenmodell von BigQuery passen und dürfen eine zusätzliche Grenze von 8 MB pro Zeile nicht überschreiten. Weitere Informationen finden Sie unter Bekannte Probleme beim Exportieren von Earth Engine-Daten nach BigQuery. |
Daten direkt aus BigQuery laden
Mit der Funktion ee.FeatureCollection.loadBigQueryTable() werden Daten direkt aus der BigQuery-Tabelle geladen, ohne sie innerhalb von BigQuery zu transformieren.
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())
| Thema | Details |
|---|---|
| Vorbereitung | Für das Projekt müssen die BigQuery API und die BigQuery Storage API aktiviert sein. |
| Berechtigungen | Zusätzlich zu den Standardrollen und ‑berechtigungen benötigen Sie Lesezugriff auf die Ziel-BigQuery-Tabelle und die Berechtigung zum Erstellen von Lesesitzungen im Zielprojekt. Folgende BigQuery-Berechtigungen sind erforderlich: - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create Ausführliche Informationen zum Verwalten von Berechtigungen finden Sie in der Dokumentation zur Zugriffssteuerung in BigQuery. |
| Preise | Wenn Sie ein Projekt verwenden, das für die kommerzielle Nutzung von Earth Engine registriert ist, fallen beim Lesen einer BigQuery-Tabelle keine zusätzlichen Earth Engine-Kosten an. Es entstehen jedoch Kosten für die Verarbeitung der Daten in Earth Engine, die auf der EECU-Zeit basieren. Das genaue Preismodell richtet sich nach Ihrem Earth Engine-Abo. Wenn Sie ein Projekt verwenden, das für die nicht kommerzielle Nutzung registriert ist, fallen keine Kosten für das Lesen von Daten aus BigQuery in Earth Engine an. Auch wenn Sie für die Nutzung von BigQuery nichts bezahlen, ist für BigQuery als kommerzielles Produkt ein verknüpftes Abrechnungskonto für Ihr Projekt erforderlich. Weitere Informationen zu Rechnungskonten finden Sie in der Dokumentation zum Aktivieren, Deaktivieren oder Ändern der Abrechnung. HINWEIS: In der privaten Vorschau werden Ihnen möglicherweise auch Kosten für das Streaming von BigQuery-Daten in Rechnung gestellt. |
| Limits | Filter für die Feature-Sammlung werden an BigQuery gesendet und dort angewendet. In BigQuery gilt ein Größenlimit für empfangene Filterklauseln. Wenn die Fehlermeldung „Filter zu groß“ angezeigt wird, sollten Sie den Filter vereinfachen. Eine häufige Ursache für das Erreichen dieses Limits ist eine komplizierte Geometrie, die im .filterBounds()-Aufruf in Earth Engine verwendet wird. |
BigQuery-Abfragen aus Earth Engine ausführen
Die Funktion ee.FeatureCollection.runBigQuery() löst eine BigQuery-Berechnung aus, um eine SQL-Abfrage direkt anhand von BigQuery-Tabellen zu bewerten und die Ergebnisse als Earth Engine-FeatureCollection abzurufen.
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())
Kosten
Für die Nutzung dieser Funktion ist ein Rechnungskonto erforderlich.
Earth Engine
Wenn Sie ein Projekt verwenden, das für die kommerzielle Nutzung der Earth Engine registriert ist, fallen für die Ausführung einer BigQuery-Tabelle keine zusätzlichen Earth Engine-Kosten an. Für die Verarbeitung der Daten in der Earth Engine fallen jedoch Kosten in EECU-Minuten an. Das genaue Preisschema richtet sich nach Ihrem Earth Engine-Abo.
Wenn Sie ein Projekt verwenden, das für die nicht kommerzielle Nutzung registriert ist, fallen keine Kosten für das Lesen von Daten aus BigQuery in Earth Engine an.
BigQuery
Bei dieser Methode fallen BigQuery-Gebühren gemäß Ihrem Preismodell (On-Demand oder mit Slots) an. Wenn Sie eine BigQuery-Reservierung haben, entstehen Ihnen bei Verwendung dieser Methode keine zusätzlichen On-Demand-Gebühren.
| Thema | Details |
|---|---|
| Vorbereitung | Für die Verwendung dieser Funktion ist ein Abrechnungskonto erforderlich und die BigQuery API muss aktiviert sein. |
| Berechtigungen | Das Earth Engine-Dienstkonto muss die erforderlichen Berechtigungen für die Verwendung von BigQuery und Earth Engine haben.
Die zur Authentifizierung verwendeten Nutzeranmeldedaten müssen die Berechtigungen bigquery.jobs.create und bigquery.jobs.get haben.
Ausführliche Informationen zum Verwalten von Berechtigungen finden Sie in der Dokumentation zur Zugriffssteuerung in BigQuery. |
| Preise | Bei dieser Methode fallen BigQuery-Gebühren gemäß Ihrem Preisplan (On-Demand oder mit Slots) an. Wenn Sie eine BigQuery-Reservierung haben, fallen bei Verwendung dieser Methode keine zusätzlichen On-Demand-Gebühren an. Wenn Sie ein Projekt verwenden, das für die kommerzielle Nutzung von Earth Engine registriert ist, fallen für das Ausführen einer BigQuery-Tabelle keine zusätzlichen Earth Engine-Kosten an. Es fallen jedoch Kosten für die Verarbeitung der Daten in Earth Engine an, die auf der EECU-Zeit basieren. Das genaue Preismodell richtet sich nach Ihrem Earth Engine-Abo. Wenn Sie ein Projekt verwenden, das für die nicht kommerzielle Nutzung registriert ist, fallen keine Kosten für das Lesen von Daten aus BigQuery in Earth Engine an. |
Leistung
Neben der Abfrageoptimierung in BigQuery hängt die Leistung der Rückgabe der Ergebnisse an Earth Engine von der Größe der Ergebnisse (d. h. der Anzahl der aus BigQuery gelesenen Byte) und der Komplexität der resultierenden Geometrien ab.
Filter
Best Practices für das Filtern:
- Filter früh und oft anwenden: Wenden Sie Filter so früh wie möglich in der Datenverarbeitungspipeline an, idealerweise in Ihren BigQuery-SQL-Abfragen. Dadurch wird die Menge der von Earth Engine übertragenen und verarbeiteten Daten reduziert.
- Selektivität erhöhen: Erstellen Sie Filter, mit denen eine kleinere, spezifischere Datenmenge ausgewählt wird. Vermeiden Sie zu weit gefasste Filter, die unnötige Daten abrufen.
- Filter kombinieren: Sie können mehrere Filterbedingungen kombinieren, um die Ergebnisse effektiv einzugrenzen.
- Vereinfachen: Wenn möglich, sollten Sie komplexe Filter in einfachere Bedingungen unterteilen, um das Limit von 1 MB für die Größe des Filterstrings nicht zu überschreiten.
- Clustering: Geospatiale Abfragen können bei verketteten Spalten leistungsfähiger sein.
- Filtern Sie vorzugsweise in BigQuery: Um die Datenmenge zu reduzieren, sollten Sie die anfängliche Filterung in BigQuery vornehmen, bevor Sie die Daten in Earth Engine weiterverarbeiten. Wenn das nicht möglich ist, können Sie zusätzliche Filter als Nachfilter in Ihrem Earth Engine-Script anwenden, nachdem Sie Daten aus BigQuery geladen haben.
Systemweite Limits
- Tabellengrößenlimit von 400 GB
- In Earth Engine können keine Tabellen mit einer Größe von mehr als 400 GB gelesen werden.
- 10 GB Zwischentabellengröße
- Jedes Abfrageergebnis ist auf 10 GB beschränkt. Sie können die Abfrage selektiver gestalten, indem Sie nur die erforderlichen Spalten auswählen, z. B. durch Hinzufügen von
LIMIT- undWHERE-Klauseln. - In Earth Engine ist die Menge der in BigQuery gescannten Daten begrenzt.
- Jedes Abfrageergebnis ist auf 10 GB beschränkt. Sie können die Abfrage selektiver gestalten, indem Sie nur die erforderlichen Spalten auswählen, z. B. durch Hinzufügen von
- Größenbeschränkung von 1 MB für Filterstrings nach der Transformation
- Komplexe Filter können zu großen Filterstrings führen, die das Limit überschreiten.
- Zeitlimits
- In Earth Engine werden Zeitüberschreitungen für Abfragen angewendet, die je nach Bereich (z.B. Batch, Online) variieren können.
- BigQuery-Limits
- Weitere Informationen zu Einschränkungen für Abfragejobs finden Sie in der BigQuery-Kontingentdokumentation.
Kostenkontrolle
Das Verschieben von Daten zwischen BigQuery und Earth Engine ist in der Regel nicht mit direkten Kosten verbunden. Die Größe der übertragenen Daten kann jedoch sowohl die Verarbeitungskosten in BigQuery als auch in Earth Engine beeinflussen.
Wenn für eine Abfrage eine Verarbeitung auf BigQuery-Seite erforderlich ist, fallen BigQuery-Gebühren gemäß Ihrer BigQuery-Konfiguration an.
Wenn eine Abfrage eine Verarbeitung in der Earth Engine umfasst und Ihr Projekt für die kommerzielle Nutzung registriert ist, fallen gemäß Ihrer Earth Engine-Abrechnungskonfiguration Earth Engine-EECU-Zeitgebühren an.
Protokolle und Fehlerbehebung
Lesevorgänge
Wenn Sie Daten mit ee.FeatureCollection.loadBigQueryTable() aus BigQuery lesen, wird der entsprechende Vorgang nicht explizit als Job in BigQuery protokolliert. Das bedeutet, dass möglicherweise andere Protokolldetails (z. B. Cloud-Audit-Logs) angezeigt werden, für die keine entsprechenden BigQuery-Lesejobs vorhanden sind.
Abfrageverlauf
Mit ee.FeatureCollection.runBigQuery() ausgeführte Abfragen werden im BigQuery-Abfrageverlauf Ihres Projekts protokolliert. Sie können über die BigQuery-Benutzeroberfläche in der Cloud Console auf Ihren Abfrageverlauf zugreifen.