En este documento, se proporciona orientación para integrar Google Earth Engine (EE) con BigQuery (BQ) para realizar un análisis geoespacial eficiente. Abarca la transferencia de datos entre las dos plataformas, las consideraciones de rendimiento, las limitaciones y las implicaciones de costos.
¿Qué es BigQuery?
BigQuery es el almacén de datos sin servidores y completamente administrado de Google que permite el análisis escalable de petabytes de datos. Se destaca en las consultas de SQL de alta velocidad y admite datos geoespaciales.
¿Cuándo debo usar BigQuery o Earth Engine?
| BigQuery | Earth Engine | |
|---|---|---|
| Tipo de datos | Datos vectoriales analíticos y principalmente estructurados Admite operaciones
geoespaciales en datos GEOGRAPHY. |
Principalmente datos de trama, pero también admite datos vectoriales. |
| Procesando | Consultas basadas en SQL, optimizadas para las uniones y las agregaciones a gran escala Integración profunda con el aprendizaje automático de BQ. | APIs de JavaScript y Python para el procesamiento y el análisis de ráster, incluidos algoritmos geoespaciales avanzados y aprendizaje automático. |
| Escala | Almacenamiento y análisis a escala de petabytes. Enfócate en el procesamiento de datos tabulares. | Almacenamiento y análisis a escala de petabytes. Se enfoca en el análisis geoespacial, con limitaciones en la escala de procesamiento de datos vectoriales. |
| Casos de uso | Almacenamiento de datos, inteligencia empresarial y análisis geoespacial en grandes conjuntos de datos vectoriales | Análisis geoespacial, detección remota, supervisión ambiental y aprendizaje automático en datos ráster. |
Datos vectoriales y de trama
Los datos vectoriales son puntos, líneas y polígonos en la superficie de la Tierra. En BigQuery, los datos vectoriales se almacenan con el tipo de datos GEOGRAPHY. En Earth Engine, estos son objetos ee.Geometry.
Los datos de trama son cuadrículas proyectadas de píxeles. Earth Engine está optimizado para manejar y procesar grandes conjuntos de datos de trama.
Beneficios de usar ambos sistemas
La escalabilidad de BigQuery te permite trabajar con conjuntos de datos tabulares masivos que pueden ser difíciles de procesar solo en Earth Engine, y Earth Engine puede potenciar el enriquecimiento a gran escala y el procesamiento de vectores a tramas que no son posibles en BigQuery.
Earth Engine admite una gama más amplia de funciones y datos geoespaciales que BigQuery, pero BigQuery tiene una integración mucho más rica con otras herramientas y servicios.
Cómo mover datos de Earth Engine a BigQuery
Earth Engine puede exportar datos directamente a BigQuery para realizar un análisis más detallado y su integración con otros conjuntos de datos.
Export.table.toBigQuery()
Usa la función Export.table.toBigQuery() para activar trabajos de exportación asíncronos que escriben los resultados del procesamiento de Earth Engine en BigQuery. Estas tareas de Earth Engine se pueden ver y controlar desde la vista de tareas en la consola de Cloud o en el editor de código de 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()
Consulta la documentación completa de la función para obtener más información.
APIs síncronas
No existe un conector directo en Earth Engine para escribir datos de forma síncrona directamente en BigQuery. Puedes usar la biblioteca cliente de BigQuery para tu lenguaje preferido (Python, Java, Go, etc.) para transmitir datos a BigQuery, o bien usar la API de RPC Storage para la transferencia de datos en tiempo real o casi en tiempo real.
| Tema | Detalles |
|---|---|
| Requisitos previos | El proyecto debe tener habilitadas la API de BigQuery y la API de BigQuery Storage. |
| Permisos | Debes tener acceso de escritura en el conjunto de datos de BigQuery de destino y permiso para crear trabajos en el proyecto de destino. Consulta la lista de permisos necesarios para obtener información específica. Consulta la documentación de control de acceso de BigQuery para obtener información detallada sobre la administración de permisos. |
| Precios | Se generarán cargos por el uso de BigQuery, incluido el almacenamiento y el análisis de los datos de Earth Engine que exportes a BigQuery. Para obtener más información, consulta los precios de exportación de Earth Engine a BigQuery. |
| Límites | Los datos resultantes deben adaptarse al modelo de tabla de BigQuery con un límite adicional de 8 MB por fila. Consulta también el conjunto de problemas conocidos para exportar datos de Earth Engine a BigQuery. |
Carga datos directamente desde BigQuery
La función ee.FeatureCollection.loadBigQueryTable() carga datos directamente desde la tabla de BigQuery sin transformarlos dentro de 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())
| Tema | Detalles |
|---|---|
| Requisitos previos | El proyecto debe tener habilitadas la API de BigQuery y la API de BigQuery Storage. |
| Permisos | Además de los roles y permisos estándar, debes tener acceso de lectura a la tabla de BigQuery de destino y permiso para crear sesiones de lectura en el proyecto de destino. Los permisos específicos de BigQuery necesarios son los siguientes: - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create Consulta la documentación de control de acceso de BigQuery para obtener información detallada sobre la administración de permisos. |
| Precios | Si usas un proyecto registrado para el uso comercial de Earth Engine, no se generarán costos adicionales de Earth Engine asociados con la lectura de una tabla de BigQuery, pero se incurrirá en costos de tiempo de EECU relacionados con el procesamiento de los datos en Earth Engine. Tu plan de Earth Engine determina el esquema de precios exacto. Si usas un proyecto registrado para uso no comercial, no se te cobrará por leer datos de BigQuery en Earth Engine. Aunque no pagarás por el uso de BigQuery, como producto comercial, BigQuery requiere que tu proyecto tenga una cuenta de facturación asociada. Para obtener más información sobre las cuentas de facturación, consulta la documentación para habilitar, inhabilitar o cambiar la facturación. NOTA: En la vista previa privada, es posible que también se te cobre por la transmisión de datos de BigQuery. |
| Límites | Los filtros de la colección de atributos se envían a
BigQuery y se aplican allí. BigQuery tiene un límite de tamaño para las cláusulas de filtro recibidas. Si ves un mensaje de error que indica que el filtro es demasiado grande, considera simplificarlo. Una fuente común de
superación de este límite puede ser una geometría complicada
que se usa en la llamada a .filterBounds() en Earth Engine. |
Ejecuta consultas de BigQuery desde Earth Engine
La función ee.FeatureCollection.runBigQuery() activa el procesamiento de BigQuery para evaluar una consulta en SQL directamente en las tablas de BigQuery y recuperar los resultados como un FeatureCollection de 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())
Costos
Para usar esta función, es necesaria una cuenta de facturación.
Earth Engine
Si usas un proyecto registrado para el uso comercial de Earth Engine, no hay costos adicionales de Earth Engine asociados con la ejecución de una tabla de BigQuery, pero incurrirás en costos de tiempo de EECU relacionados con el procesamiento de los datos en Earth Engine. El esquema de precios exacto se determina según tu plan de Earth Engine.
Si usas un proyecto registrado para uso no comercial, no se te cobrará por leer datos de BigQuery en Earth Engine.
BigQuery
Este método genera cargos de BigQuery según tu plan de precios (según demanda o con ranuras). Si tienes una reserva de BigQuery, usar este método no generará cargos adicionales a pedido.
| Tema | Detalles |
|---|---|
| Requisitos previos | Para usar esta función, se necesita una cuenta de facturación, y la API de BigQuery debe estar habilitada. |
| Permisos | Asegúrate de que la cuenta de servicio de Earth Engine tenga los permisos necesarios para usar BigQuery y Earth Engine.
Las credenciales del usuario que se usan para la autenticación deben tener los permisos bigquery.jobs.create y bigquery.jobs.get.
Consulta la
documentación de control de acceso de BigQuery
para obtener información detallada sobre la administración de permisos. |
| Precios | Este método genera cargos de BigQuery según tu plan de precios (según demanda o con ranuras). Si tienes una reserva de BigQuery, usar este método no generará cargos adicionales a pedido. Si usas un proyecto registrado para el uso comercial de Earth Engine, no hay costos adicionales de Earth Engine asociados con la ejecución de una tabla de BigQuery, pero incurrirás en costos de tiempo de EECU relacionados con el procesamiento de los datos en Earth Engine. El esquema de precios exacto se determina según tu plan de Earth Engine. Si usas un proyecto registrado para uso no comercial, no se te cobrará por leer datos de BigQuery en Earth Engine. |
Rendimiento
Además de la optimización de consultas en BigQuery, el rendimiento de la devolución de los resultados a Earth Engine es una función del tamaño de los resultados (es decir, la cantidad de bytes leídos de BigQuery) y la complejidad de las geometrías resultantes.
Filtros
Estas son algunas de las prácticas recomendadas para filtrar:
- Filtrar los datos lo antes posible y con frecuencia: Aplica filtros lo antes posible en la canalización de procesamiento de datos, idealmente dentro de tus consultas SQL de BigQuery. Esto reduce la cantidad de datos que transfiere y procesa Earth Engine.
- Aumentar la selectividad: Crea filtros que seleccionen un subconjunto más pequeño y más específico de datos. Evita los filtros demasiado amplios que recuperan datos innecesarios.
- Combinar filtros: Usa varias condiciones de filtro en conjunto para limitar los resultados de manera eficaz.
- Simplifica: Cuando sea posible, divide los filtros complejos en condiciones más simples para evitar superar el límite de 1 MB para el tamaño de la cadena de filtro.
- Agrupamiento en clústeres: Las consultas geoespaciales pueden tener un mejor rendimiento en las columnas agrupadas.
- Preferir el filtrado en BigQuery: Para reducir el tamaño de los datos, siempre es mejor realizar el filtrado inicial en BigQuery antes de continuar con el procesamiento en Earth Engine. Cuando eso no sea posible, aplica filtros adicionales como filtros posteriores dentro de tu secuencia de comandos de Earth Engine después de cargar datos de BigQuery.
Límites de todo el sistema
- Límite de tamaño de tabla de 400 GB
- Earth Engine no permite leer tablas de más de 400 GB.
- Tamaños de tablas intermedias de 10 GB
- Cada resultado de la consulta se limita a 10 GB. Para que tu consulta sea más selectiva, elige solo las columnas necesarias, por ejemplo, agrega cláusulas
LIMITyWHERE. - Earth Engine impone un límite a la cantidad de datos analizados en BigQuery.
- Cada resultado de la consulta se limita a 10 GB. Para que tu consulta sea más selectiva, elige solo las columnas necesarias, por ejemplo, agrega cláusulas
- Límite de 1 MB para el tamaño de la cadena de filtro después de la transformación
- Los filtros complejos pueden generar cadenas de filtros grandes que superen el límite.
- Tiempos de espera
- Earth Engine aplica tiempos de espera a las consultas, que pueden variar según el reino (p.ej., por lotes o en línea).
- Límites de BigQuery
- Consulta la documentación de cuotas de BigQuery para obtener detalles sobre las limitaciones de los trabajos de consulta.
Controles de costos
Por lo general, mover datos entre BigQuery y Earth Engine no genera costos directos. Sin embargo, el tamaño de los datos transferidos puede influir en los costos de procesamiento en BigQuery y Earth Engine.
Si una consulta implica procesamiento en BigQuery, se incurrirá en cargos de BigQuery según tu configuración de BigQuery.
Si una consulta implica procesamiento en Earth Engine y tu proyecto está registrado para uso comercial, se te cobrarán cargos por tiempo de EECU de Earth Engine según la configuración de facturación de Earth Engine.
Registros y depuración
Operaciones de lectura
Cuando se leen datos de BigQuery con ee.FeatureCollection.loadBigQueryTable(), la operación correspondiente no se registra de forma explícita como un trabajo en BigQuery. Esto significa que es posible que veas otros detalles de registro (como los registros de auditoría de Cloud) que no tengan trabajos de lectura de BigQuery correspondientes.
Historial de consultas
Las consultas que se ejecutan con ee.FeatureCollection.runBigQuery() se registran en el historial de consultas de BigQuery de tu proyecto. Puedes acceder a tu historial de consultas a través de la IU de BigQuery en la consola de Cloud.