Earth Engine i BigQuery

Ten dokument zawiera wskazówki dotyczące integracji Google Earth Engine (EE) z BigQuery (BQ) na potrzeby wydajnej analizy geoprzestrzennej. Obejmuje on przenoszenie danych między tymi platformami, kwestie związane ze skutecznością, ograniczenia i wpływ na koszty.

Co to jest BigQuery?

BigQuery to w pełni zarządzana, bezserwerowa hurtownia danych Google, która umożliwia skalowalne analizy petabajtów danych. Jest ona najlepsza w przypadku szybkich zapytań SQL i obsługuje dane geoprzestrzenne.

Kiedy warto korzystać z BigQuery lub Earth Engine?

BigQuery Earth Engine
Typ danych głównie uporządkowane, analityczne dane wektorowe; Obsługuje operacje geoprzestrzenne na danych GEOGRAPHY. Głównie dane rastrowe, ale obsługuje też dane wektorowe.
Przetwarzam Zapytania oparte na SQL zoptymalizowane pod kątem dużych agregacji i złączeń. Ścisła integracja z systemami uczącymi się BigQuery. Interfejsy API JavaScript i Python do przetwarzania i analizy rasterów, w tym zaawansowanych algorytmów geoprzestrzennych i systemów uczących się.
Skaluj Przechowywanie i analiza danych na skalę petabajtów. Skoncentruj się na przetwarzaniu danych tabelarycznych. Przechowywanie i analiza danych na skalę petabajtów. Skupienie się na analizie geoprzestrzennej z ograniczeniami w zakresie przetwarzania danych wektorów.
Przypadki użycia Gromadzenie danych, systemy analityczne, analityka geoprzestrzenna na podstawie dużych zbiorów danych wektorowych. Analiza geoprzestrzenna, teledetekcja, monitoring środowiska, uczenie maszynowe na podstawie danych rastrowych.

Dane wektorowe i rasterowe

Dane wektorowe to punkty, linie i wielokąty na powierzchni Ziemi. W BigQuery dane wektorowe są przechowywane przy użyciu typu danych GEOGRAPHY, a w Earth Engine są to obiekty ee.Geometry.

Dane rastrowe to siatki pikseli. Earth Engine jest zoptymalizowany pod kątem obsługi i przetwarzania dużych zbiorów danych rastrowych.

Zalety korzystania z obu systemów

Skalowalność BigQuery umożliwia pracę z ogromnymi zbiorami danych tablicowych, które mogą być trudne do przetworzenia tylko w Earth Engine. Earth Engine może natomiast przeprowadzać zaawansowane wzbogacanie danych i przekształcanie wektorów w rastery, co nie jest możliwe w BigQuery.

Earth Engine obsługuje szerszy zakres funkcji i danych geoprzestrzennych niż BigQuery, ale BigQuery ma znacznie bogatszą integrację z innymi narzędziami i usługami.

Przenoszenie danych Earth Engine do BigQuery

Earth Engine może eksportować dane bezpośrednio do BigQuery na potrzeby dalszej analizy i integracji z innymi zbiorami danych.

Export.table.toBigQuery()

Użyj funkcji Export.table.toBigQuery(), aby uruchomić asynchroniczne zadania eksportu, które zapisują wyniki obliczeń Earth Engine w BigQuery. Zadania Earth Engine można wyświetlać i sterować nimi w widoku Zadania w konsoli Google Cloud lub w Edytorze kodu 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()
      

Więcej informacji znajdziesz w dokumentacji funkcji.

Interfejsy API synchroniczne

W Earth Engine nie ma bezpośredniego łącznika umożliwiającego synchroniczne zapisywanie danych bezpośrednio w BigQuery. Aby przesyłać dane do BigQuery strumieniowo, możesz użyć biblioteki klienta BigQuery w wybranym języku (Python, Java, Go itp.) lub interfejsu RPC Storage API do przesyłania danych w czasie rzeczywistym lub w czasie zbliżonym do rzeczywistego.

Temat Szczegóły
Wymagania wstępne W projekcie musi być włączony interfejs BigQuery API i BigQuery Storage API.
Uprawnienia Musisz mieć uprawnienia do zapisu w docelowym zbiorze danych BigQuery oraz uprawnienia do tworzenia zadań w docelowym projekcie. Szczegółowe informacje znajdziesz na liście wymaganych uprawnień. Szczegółowe informacje o zarządzaniu uprawnieniami znajdziesz w dokumentacji dotyczącej kontroli dostępu w BigQuery.
Ceny Za korzystanie z BigQuery, w tym za przechowywanie i analizę danych Earth Engine, które wyeksportujesz do BigQuery, będą naliczane opłaty. Szczegółowe informacje znajdziesz w cenniku eksportu danych z Earth Engine do BigQuery.
Limity Wygenerowane dane muszą pasować do modelu tabeli BigQuery z dodatkowym limitem 8 MB na wiersz. Zapoznaj się też z zestawem znanych problemów dotyczących eksportowania danych Earth Engine do BigQuery.

bezpośrednie wczytywanie danych z BigQuery;

Funkcja ee.FeatureCollection.loadBigQueryTable() wczytuje dane bezpośrednio z tabeli BigQuery bez ich przekształcania w 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())
      
Temat Szczegóły
Wymagania wstępne W projekcie musi być włączony interfejs BigQuery API i BigQuery Storage API.
Uprawnienia Oprócz standardowych ról i uprawnień musisz mieć dostęp do odczytu docelowej tabeli BigQuery oraz uprawnienia do tworzenia sesji odczytu w docelowym projekcie. Wymagane są te konkretne uprawnienia BigQuery: - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create Więcej informacji o zarządzaniu uprawnieniami znajdziesz w dokumentacji dotyczącej kontroli dostępu w BigQuery.
Ceny Jeśli korzystasz z projektu zarejestrowanego do komercyjnego korzystania z Earth Engine, nie będziesz ponosić dodatkowych kosztów Earth Engine związanych z odczytywaniem tabeli BigQuery, ale poniesiesz koszty związane z przetwarzaniem danych w Earth Engine według stawki ECU. Dokładny schemat cen zależy od abonamentu Earth Engine. Jeśli korzystasz z projektu zarejestrowanego do użytku niekomercyjnego, nie poniesiesz żadnych opłat za odczytywanie danych z BigQuery w Earth Engine. Mimo że nie zapłacisz za korzystanie z BigQuery, BigQuery jako usługa komercyjna wymaga powiązania z projektem konta rozliczeniowego. Więcej informacji o kontach rozliczeniowych znajdziesz w dokumentacji dotyczącej włączania, wyłączania i zmieniania rozliczeń. UWAGA: w ramach prywatnego wglądu możesz też zostać obciążony opłatą za strumieniowe przesyłanie danych do BigQuery.
Limity Filtry kolekcji cech są wysyłane do BigQuery i tam stosowane. BigQuery ma limit rozmiaru dla otrzymanych klauzul filtra. Jeśli zobaczysz komunikat o błędzie „Filtr jest za duży”, rozważ uproszczenie filtra. Jednym z częstych powodów przekroczenia tego limitu może być skomplikowana geometria użyta w wywołaniu funkcji .filterBounds() w Earth Engine.

Uruchamianie zapytań BigQuery z Earth Engine

Funkcja ee.FeatureCollection.runBigQuery() powoduje przeprowadzenie obliczeń w BigQuery w celu przeanalizowania zapytania SQL bezpośrednio w tabelach BigQuery i pobrania wyników jako FeatureCollection w 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())
      

Koszty

Aby korzystać z tej funkcji, musisz mieć konto rozliczeniowe.

Earth Engine

Jeśli korzystasz z projektu zarejestrowanego do komercyjnego wykorzystania Earth Engine, nie ponosisz dodatkowych kosztów Earth Engine związanych z uruchamianiem tabeli BigQuery, ale poniesiesz koszty związane z przetwarzaniem danych w Earth Engine w czasie EECU. Dokładny schemat cen zależy od abonamentu Earth Engine.

Jeśli korzystasz z projektu zarejestrowanego na potrzeby niekomercyjnych zastosowań, nie poniesiesz żadnych opłat za odczytywanie danych z BigQuery w Earth Engine.

BigQuery

Ta metoda powoduje naliczanie opłat za BigQuery na podstawie Twojego planu cenowego (na żądanie lub z przedziałami). Jeśli masz rezerwację BigQuery, korzystanie z tej metody nie spowoduje dodatkowych opłat na żądanie.

Temat Szczegóły
Wymagania wstępne Aby korzystać z tej funkcji, musisz mieć konto rozliczeniowe i włączony interfejs BigQuery API.
Uprawnienia Upewnij się, że konto usługi Earth Engine ma wymagane uprawnienia do korzystania z BigQuery i Earth Engine. Dane logowania użytkownika używane do uwierzytelniania muszą mieć uprawnienia bigquery.jobs.create i bigquery.jobs.get. Szczegółowe informacje o zarządzaniu uprawnieniami znajdziesz w dokumentacji dotyczącej kontroli dostępu w BigQuery.
Ceny Ta metoda powoduje naliczanie opłat za BigQuery na podstawie Twojego planu cenowego (na żądanie lub z przedziałami). Jeśli masz rezerwację BigQuery, korzystanie z tej metody nie spowoduje dodatkowych opłat na żądanie. Jeśli korzystasz z projektu zarejestrowanego do komercyjnego korzystania z Earth Engine, nie ponosisz dodatkowych kosztów Earth Engine związanych z uruchamianiem tabeli BigQuery, ale poniesiesz koszty związane z przetwarzaniem danych w Earth Engine w czasie korzystania z EECU. Dokładny schemat cen zależy od abonamentu Earth Engine. Jeśli korzystasz z projektu zarejestrowanego na potrzeby niekomercyjnych zastosowań, nie będziesz ponosić żadnych opłat za odczytywanie danych z BigQuery w Earth Engine.

Wyniki

Oprócz optymalizacji zapytań w BigQuery wydajność zwracania wyników do Earth Engine zależy od rozmiaru wyników (czyli ilości bajtów odczytanych z BigQuery) i złożoności uzyskanych geometrii.

Filtry

Sprawdzone metody filtrowania:

  • filtrowanie wczesne i częste: stosuj filtry jak najwcześniej w łańcuchu przetwarzania danych, najlepiej w zapytaniach SQL w BigQuery. Pozwala to zmniejszyć ilość danych przesyłanych i przetwarzanych przez Earth Engine.
  • Zwiększ selektywność: twórz filtry, które wybierają mniejszy, bardziej szczegółowy podzbiór danych. Unikaj zbyt szerokich filtrów, które zwracają niepotrzebne dane.
  • Łączenie filtrów: użyj kilku warunków filtra, aby skutecznie zawęzić wyniki.
  • Uprość: w miarę możliwości dziel skomplikowane filtry na prostsze warunki, aby uniknąć przekroczenia limitu 1 MB rozmiaru ciągu filtra.
  • Gromadzenie: zapytania geoprzestrzenne mogą być bardziej wydajne w przypadku kolumn zagregowanych.
  • Filtrowanie w BigQuery: aby zmniejszyć rozmiar danych, zawsze lepiej jest przeprowadzić wstępne filtrowanie w BigQuery przed dalszym przetwarzaniem w Earth Engine. Jeśli nie jest to możliwe, zastosuj dodatkowe filtry jako filtry końcowe w skrypcie Earth Engine po załadowaniu danych z BigQuery.

Ograniczenia systemowe

  • Limit rozmiaru tabeli 400 GB
    • Earth Engine nie pozwala na odczytywanie tabel większych niż 400 GB.
  • 10 GB rozmiaru tabeli pośredniej
    • Każdy wynik zapytania może mieć maksymalnie 10 GB. Aby zapytanie było bardziej selektywne, wybieraj tylko niezbędne kolumny, na przykład przez dodanie klauzul LIMITWHERE.
    • Earth Engine nakłada limit na ilość danych skanowanych w BigQuery.
  • Limit rozmiaru ciągu filtra po przekształceniu: 1 MB
    • Złożone filtry mogą powodować, że długie ciągi znaków filtra przekraczają limit.
  • Limity czasu
    • Earth Engine stosuje limity czasu dla zapytań, które mogą się różnić w zależności od domeny (np. zbiorcze, online).
  • Limity BigQuery

Kontrola kosztów

Przenoszenie danych między BigQuery a Earth Engine zwykle nie wiąże się z bezpośrednimi kosztami. Jednak rozmiar przesyłanych danych może wpływać na koszty przetwarzania zarówno w BigQuery, jak i w Earth Engine.

Jeśli zapytanie wymaga przetwarzania po stronie BigQuery, będzie obciążać konto BigQuery zgodnie z konfiguracją BigQuery.

Jeśli zapytanie wymaga przetwarzania w Earth Engine i Twój projekt jest zarejestrowany do użytku komercyjnego, zostaną naliczone opłaty za czas przetwarzania w Earth Engine według konfiguracji rozliczeniowej Earth Engine.

Logi i debugowanie

Operacje odczytu

Podczas odczytu danych z BigQuery za pomocą funkcji ee.FeatureCollection.loadBigQueryTable() odpowiednia operacja nie jest rejestrowana w BigQuery jako zadanie. Oznacza to, że możesz zobaczyć inne szczegóły rejestrowania (np. dzienniki kontrolne Cloud), które nie mają odpowiednich zadań odczytu BigQuery.

Historia zapytań

Zapytania wykonywane za pomocą funkcji ee.FeatureCollection.runBigQuery() są rejestrowane w historii zapytań BigQuery w projekcie. Do historii zapytań możesz uzyskać dostęp w interfejsie BigQuery w konsoli Cloud.