Este documento oferece orientações sobre como integrar o Google Earth Engine (EE) ao BigQuery (BQ) para uma análise geoespacial eficiente. Ele abrange a transferência de dados entre as duas plataformas, considerações de desempenho, limitações e implicações de custos.
O que é o BigQuery?
O BigQuery é um data warehouse sem servidor e totalmente gerenciado do Google que possibilita análises escalonáveis em petabytes de dados. Ele se destaca em consultas SQL de alta velocidade e oferece suporte a dados geoespaciais.
Quando devo usar o BigQuery ou o Earth Engine?
| BigQuery | Earth Engine | |
|---|---|---|
| Tipo de dado | Principalmente dados vetoriais analíticos
estruturados. Oferece suporte a operações geoespaciais em dados GEOGRAPHY. |
Principalmente dados raster, mas também aceita dados vetoriais. |
| Processando | Consultas baseadas em SQL, otimizadas para agregações e mesclagens em grande escala. Integração total com o Machine Learning do BQ. | APIs JavaScript e Python para processamento e análise de raster, incluindo algoritmos geoespaciais avançados e aprendizado de máquina. |
| Escala | Armazenamento e análise em escala de petabytes. Concentre-se no processamento de dados tabulares. | Armazenamento e análise em escala de petabytes. Foco na análise geoespacial, com limitações na escala de processamento de dados vetoriais. |
| Casos de uso | Armazenamento de dados, inteligência de negócios, análises geoespaciais em grandes conjuntos de dados vetoriais. | Análise geoespacial, sensoriamento remoto, monitoramento ambiental, machine learning em dados raster. |
Dados vetoriais e rasterizados
Os dados vetoriais são pontos, linhas e polígonos na superfície da Terra. No
BigQuery, os dados vetoriais são armazenados usando o tipo de dados GEOGRAPHY. No Engine da
Terra, eles são objetos ee.Geometry.
Os dados raster são grades de pixels projetadas. O Earth Engine é otimizado para processar e gerenciar grandes conjuntos de dados raster.
Benefícios do uso dos dois sistemas
A capacidade de escalonamento do BigQuery permite trabalhar com conjuntos de dados tabulares enormes que podem ser difíceis de processar apenas no Earth Engine. Além disso, o Earth Engine pode oferecer enriquecimento em grande escala e processamento de vetor para raster que não são possíveis no BigQuery.
O Earth Engine oferece suporte a uma variedade maior de funções e dados geoespaciais do que o BigQuery, mas o BigQuery tem uma integração muito mais rica com outras ferramentas e serviços.
Mover dados do Earth Engine para o BigQuery
O Earth Engine pode exportar dados diretamente para o BigQuery para análise e integração com outros conjuntos de dados.
Export.table.toBigQuery()
Use a função Export.table.toBigQuery() para acionar jobs de exportação assíncrona que gravam os resultados da computação do Earth Engine no BigQuery. Essas tarefas do Earth
Engine podem ser visualizadas e controladas na visualização de tarefas no console do Cloud ou no Editor de código do 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()
Consulte a documentação completa da função para mais informações.
APIs síncronas
Não há um conector direto no Earth Engine para gravar dados de forma síncrona no BigQuery. Você pode usar a biblioteca de cliente do BigQuery para sua linguagem preferida (Python, Java, Go etc.) para fazer streaming de dados no BigQuery ou usar a API Storage RPC para transferência de dados em tempo real ou quase real.
| Tópico | Detalhes |
|---|---|
| Pré-requisitos | O projeto precisa ter a API BigQuery e a API BigQuery Storage ativadas. |
| Permissões | Você precisa ter acesso de gravação ao conjunto de dados do BigQuery de destino e permissão para criar trabalhos no projeto de destino. Consulte a lista de permissões necessárias para detalhes. Consulte a documentação sobre o controle de acesso do BigQuery para informações detalhadas sobre como gerenciar permissões. |
| Preços | Você vai receber taxas pelo uso do BigQuery, incluindo armazenamento e análise de todos os dados do Earth Engine exportados para o BigQuery. Para saber mais, consulte os preços de exportação do Earth Engine para o BigQuery. |
| Limites | Os dados resultantes precisam se ajustar ao modelo de tabela do BigQuery com um limite adicional de 8 MB por linha. Consulte também o conjunto de problemas conhecidos para exportar dados do Earth Engine para o BigQuery. |
Carregar dados do BigQuery diretamente
A função ee.FeatureCollection.loadBigQueryTable() carrega dados diretamente da tabela do BigQuery sem transformá-los no 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())
| Tópico | Detalhes |
|---|---|
| Pré-requisitos | O projeto precisa ter a API BigQuery e a API BigQuery Storage ativadas. |
| Permissões | Além das permissões e funções padrão, é necessário ter acesso de leitura na tabela do BigQuery de destino e permissão para criar sessões de leitura no projeto de destino. As permissões específicas do BigQuery necessárias são: - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create Consulte a documentação do controle de acesso do BigQuery para informações detalhadas sobre como gerenciar permissões. |
| Preços | Se você estiver usando um projeto registrado para uso comercial do Earth Engine, não haverá custos adicionais associados à leitura de uma tabela do BigQuery, mas você vai incorrer em custos de tempo de EECU relacionados ao processamento dos dados no Earth Engine. O esquema de preços exato é determinado pelo seu plano do Earth Engine. Se você estiver usando um projeto registrado para uso não comercial, não vai incorrer em cobranças para ler dados do BigQuery no Earth Engine. Embora você não pague pelo uso do BigQuery, o BigQuery, como um produto comercial, exige que seu projeto tenha uma conta de faturamento associada. Para saber mais sobre contas de faturamento, consulte a documentação para ativar, desativar ou mudar o faturamento. OBSERVAÇÃO: na visualização particular, também pode haver cobrança pelo streaming de dados do BigQuery. |
| Limites | Os filtros de coleção de atributos são enviados e aplicados no BigQuery. O BigQuery tem um limite de tamanho para cláusulas de filtro recebidas. Se uma mensagem de erro "filtro muito grande" aparecer, simplifique o filtro. Uma fonte comum de
atingir esse limite pode ser uma geometria complicada
usada na chamada .filterBounds() no Earth Engine. |
Executar consultas do BigQuery no Earth Engine
A função ee.FeatureCollection.runBigQuery() aciona a computação do BigQuery para avaliar uma consulta SQL diretamente nas tabelas do BigQuery e extrair os resultados como um FeatureCollection do 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())
Custos
É necessário ter uma conta de faturamento para usar essa função.
Earth Engine
Se você estiver usando um projeto registrado para uso comercial do Earth Engine, não haverá custos adicionais associados à execução de uma tabela do BigQuery, mas você vai incorrer em custos de tempo de EECU relacionados ao processamento dos dados no Earth Engine. O esquema de preços exato é determinado pelo seu plano do Earth Engine.
Se você estiver usando um projeto registrado para uso não comercial, não vai gerar custos para ler dados do BigQuery no Earth Engine.
BigQuery
Esse método gera cobranças do BigQuery com base no seu plano de preços (sob demanda ou com slots). Se você tiver uma reserva do BigQuery, o uso desse método não vai gerar cobranças sob demanda adicionais.
| Tópico | Detalhes |
|---|---|
| Pré-requisitos | É necessário ter uma conta de faturamento para usar essa função, e a API BigQuery precisa estar ativada. |
| Permissões | Verifique se a conta de serviço do Earth Engine tem as permissões necessárias para usar o BigQuery e o Earth Engine.
As credenciais do usuário usadas para autenticação precisam ter as
permissões bigquery.jobs.create e bigquery.jobs.get.
Consulte a documentação sobre o controle de acesso do BigQuery para informações detalhadas sobre como gerenciar permissões. |
| Preços | Esse método gera cobranças do BigQuery com base no seu plano de preços (sob demanda ou com slots). Se você tiver uma reserva do BigQuery, o uso desse método não vai gerar cobranças sob demanda adicionais. Se você estiver usando um projeto registrado para uso comercial do Earth Engine, não haverá custos adicionais associados à execução de uma tabela do BigQuery, mas você vai incorrer em custos de tempo de EECU relacionados ao processamento dos dados no Earth Engine. O esquema de preços exato é determinado pelo seu plano do Earth Engine. Se você estiver usando um projeto registrado para uso não comercial, não vai gerar custos financeiros pela leitura de dados do BigQuery no Earth Engine. |
Desempenho
Além da otimização de consultas no BigQuery, o desempenho de retorno dos resultados para o Earth Engine é uma função do tamanho dos resultados (ou seja, a quantidade de bytes lidos do BigQuery) e da complexidade das geometrias resultantes.
Filtros
As práticas recomendadas para filtragem incluem:
- Filtragem antecipada e frequente: aplique filtros o mais cedo possível no pipeline de processamento de dados, de preferência nas consultas SQL do BigQuery. Isso reduz a quantidade de dados transferidos e processados pelo Earth Engine.
- Aumente a seletividade: crie filtros que selecionem um subconjunto de dados menor e mais específico. Evite filtros muito amplos que extraem dados desnecessários.
- Combinar filtros: use várias condições de filtro em conjunto para restringir os resultados de maneira eficaz.
- Simplifique: sempre que possível, divida filtros complexos em condições mais simples para evitar o limite de 1 MB do tamanho da string de filtro.
- Agrupamento: as consultas geoespaciais podem ter melhor desempenho em colunas agrupadas.
- Prefira a filtragem no BigQuery: para reduzir o tamanho dos dados, é sempre melhor realizar a filtragem inicial no BigQuery antes de continuar o processamento no Earth Engine. Quando isso não for possível, aplique outros filtros como pós-filtros no script do Earth Engine após carregar dados do BigQuery.
Limites do sistema
- Limite de 400 GB para o tamanho da tabela
- O Earth Engine não permite a leitura de tabelas com mais de 400 GB.
- Tamanhos de tabela intermediários de 10 GB
- Cada resultado de consulta é limitado a 10 GB. Para tornar a consulta mais seletiva,
escolha apenas as colunas necessárias, por exemplo, adicionando cláusulas
LIMITeWHERE. - O Earth Engine impõe um limite à quantidade de dados verificados no BigQuery.
- Cada resultado de consulta é limitado a 10 GB. Para tornar a consulta mais seletiva,
escolha apenas as colunas necessárias, por exemplo, adicionando cláusulas
- Limite de 1 MB para o tamanho da string de filtro após a transformação
- Filtros complexos podem resultar em strings de filtro grandes que excedem o limite.
- Tempos limite
- O Earth Engine aplica timeouts a consultas, que podem variar dependendo do domínio (por exemplo, lote, on-line).
- Limites do BigQuery
- Consulte a documentação de cotas do BigQuery para saber mais sobre as limitações de jobs de consulta.
Controle de custos
Mover dados entre o BigQuery e o Earth Engine geralmente não gera custos diretos. No entanto, o tamanho dos dados transferidos pode influenciar os custos de processamento no BigQuery e no Earth Engine.
Se uma consulta envolver processamento no BigQuery, ela vai gerar cobranças de acordo com a configuração do BigQuery.
Se uma consulta envolver processamento no Earth Engine e seu projeto estiver registrado para uso comercial, você vai incorrer em cobranças de tempo de EECU do Earth Engine de acordo com a configuração de faturamento do Earth Engine.
Registros e depuração
Operações de leitura
Ao ler dados do BigQuery usando
ee.FeatureCollection.loadBigQueryTable(), a operação correspondente não é
registrada explicitamente como um job no BigQuery. Isso significa que você pode encontrar outros detalhes de registro (como registros de auditoria do Cloud) que não têm jobs de leitura do BigQuery correspondentes.
Histórico de consultas
As consultas executadas usando ee.FeatureCollection.runBigQuery() são registradas no histórico de consultas do BigQuery do seu projeto. Você pode acessar o histórico de consultas pela
interface do BigQuery no console do Cloud.