Búsquedas globales
Las consultas globales te permiten ejecutar consultas en SQL que hacen referencia a datos almacenados en más de una región.
Por ejemplo, puedes ejecutar una consulta global que una una tabla ubicada en us-central1 con una tabla ubicada en europe-central2. En este documento, se explica cómo habilitar y ejecutar consultas globales en tu proyecto.
Antes de comenzar
Verifica que las búsquedas globales estén habilitadas para tu proyecto y asegúrate de tener los permisos necesarios para ejecutarlas.
Habilita las búsquedas globales
Para habilitar las consultas globales en tu proyecto u organización, usa la declaración ALTER PROJECT SET OPTIONS o la declaración ALTER ORGANIZATION SET OPTIONS para cambiar la configuración predeterminada.
- Para ejecutar consultas globales en una región, establece el argumento
enable_global_queries_executionentrueen esa región para un proyecto en el que se ejecute la consulta. - Para permitir que las consultas globales copien datos de una región, establece el argumento
enable_global_queries_data_accessentrueen esa región para un proyecto en el que se almacenan los datos. - Las consultas globales se pueden ejecutar en un proyecto y extraer datos de otras regiones de otro proyecto.
En el siguiente ejemplo, se muestra cómo modificar estos parámetros de configuración a nivel del proyecto. Supongamos que deseas ejecutar consultas globales en la región REGION_1 del proyecto PROJECT_1_ID y extraer datos de la región REGION_2 del proyecto PROJECT_2_ID:
ALTER PROJECT `PROJECT_1_ID` SET OPTIONS ( `region-REGION_1.enable_global_queries_execution` = true ); ALTER PROJECT `PROJECT_2_ID` SET OPTIONS ( `region-REGION_2.enable_global_queries_data_access` = true );
Reemplaza lo siguiente:
PROJECT_1_ID: Es el nombre del proyecto en el que se ejecutarán las consultas globales.REGION_1: Es la región en la que se ejecutarán las búsquedas globales.PROJECT_2_ID: Es el nombre del proyecto desde el que las consultas globales extraerán datos.REGION_2: Es la región desde la que las búsquedas globales extraerán datos.
El cambio puede tardar varios minutos en aplicarse.
Permiso necesario
Para ejecutar una búsqueda global, debes tener el permiso bigquery.jobs.createGlobalQuery.
El rol de administrador de BigQuery es el único rol predefinido que contiene este permiso. Para otorgar permiso para ejecutar consultas globales sin otorgar el rol de administrador de BigQuery, sigue estos pasos:
- Crea un rol personalizado, por ejemplo, "Ejecutor de consultas globales de BigQuery".
- Agrega
bigquery.jobs.createGlobalQuerya este rol. - Asigna este rol a los usuarios o las cuentas de servicio seleccionados.
Consulta los datos
Para ejecutar una consulta global, escribe una consulta en SQL como lo harías si tus datos estuvieran en una sola ubicación. Si los datos a los que hace referencia la consulta se almacenan en más de una ubicación, BigQuery intenta ejecutar una consulta global. En algunos casos, BigQuery selecciona automáticamente la ubicación de la consulta. De lo contrario, debes especificar la ubicación en la que se ejecutará la consulta. Los datos a los que hace referencia la consulta y que no residen en la ubicación seleccionada se copian a esa ubicación.
En el siguiente ejemplo, se ejecuta como una consulta global que une tablas de dos conjuntos de datos diferentes almacenados en dos ubicaciones diferentes:
SELECT id, tr_date, product_id, price FROM us_dataset.transactions
UNION ALL
SELECT id, tr_date, product_id, price FROM europe_dataset.transactions
Selección automática de ubicación
En los siguientes casos, la ubicación en la que se debe ejecutar una búsqueda se determina automáticamente y no se puede cambiar:
- Las consultas de lenguaje de modificación de datos (sentencias
INSERT,UPDATEyDELETE) siempre se ejecutan en una ubicación de la tabla de destino. - Las consultas del lenguaje de definición de datos, como la instrucción
CREATE TABLE AS SELECT, siempre se ejecutan en la ubicación en la que se crea o modifica un recurso. - Las consultas con una tabla de destino especificada siempre se ejecutan en la ubicación en la que se encuentra la tabla de destino.
Elige una ubicación
En general, tú decides dónde se ejecutan tus búsquedas globales. Para tomar esa decisión, considera lo siguiente:
Las consultas globales copian temporalmente los datos de una ubicación a otra. Si tu organización tiene requisitos de residencia de datos y no quieres que los datos de la ubicación A salgan de esa ubicación, establece la ubicación de la consulta en A.
Para minimizar la cantidad de datos transferidos entre ubicaciones y reducir el costo de la consulta, ejecútala en la región en la que se almacena la mayor parte de los datos consultados.
Imagina que tienes una tienda en línea y mantienes una lista de tus productos en la ubicación us-central1, pero las transacciones se realizan en la región us-south1. Si hay más transacciones que productos en tu catálogo, debes ejecutar la consulta en la región us-south1.
Información sobre las búsquedas globales
Para ejecutar consultas globales de manera eficiente y rentable, es importante comprender el mecanismo detrás de su ejecución.
Para usar datos que residen en diferentes ubicaciones, se deben replicar en una sola ubicación. A continuación, se muestra una abstracción del flujo de trabajo de consultas global que lleva a cabo BigQuery:
- Determina dónde se debe ejecutar la búsqueda, ya sea desde la declaración del usuario o automáticamente. Esta ubicación se denomina ubicación principal, y todas las demás ubicaciones a las que hace referencia la búsqueda son remotas.
- Ejecuta una subconsulta en cada región remota para recopilar los datos necesarios para finalizar la consulta en la región principal.
- Copiar estos datos de ubicaciones remotas a la ubicación principal
- Guarda los datos en tablas temporales en la ubicación principal durante 8 horas.
- Ejecuta una consulta final con todos los datos recopilados en la ubicación principal.
- Devuelve los resultados de la búsqueda.
BigQuery intenta minimizar la cantidad de datos transferidos entre regiones. Considera el siguiente ejemplo:
SET @@location = 'EU';
SELECT
t1.col1, t2.col2
FROM
eu_dataset.table1 t1
JOIN us_dataset.table2 t2 using col3
WHERE
t2.col4 = 'ABC'
BigQuery no necesita replicar toda la tabla t2 de EE.UU. a la UE.
Es suficiente transferir solo las columnas solicitadas (col2 y col3) y solo las filas que coinciden con la condición WHERE (t2.col4 = 'ABC'). Sin embargo, estos mecanismos, conocidos como pushdowns, dependen de la estructura de la consulta y, a veces, la cantidad de datos transferidos puede ser grande.
Te recomendamos que pruebes las consultas globales en un pequeño subconjunto de datos y confirmes que los datos solo se transfieren cuando es necesario.
Observabilidad
Para ver el texto de la consulta que se envió a la región remota, consulta el historial de trabajos. El trabajo remoto tiene el mismo ID de trabajo que la búsqueda original, con un sufijo _xregion adicional.
Cómo desactivar las búsquedas globales
Para inhabilitar las búsquedas globales en tu proyecto u organización, usa ALTER PROJECT SET OPTIONS statement o ALTER ORGANIZATION SET OPTIONS statement para cambiar la configuración predeterminada.
- Para desactivar las búsquedas globales en una región, establece el argumento
enable_global_queries_executionenfalseoNULLen esa región. - Para prohibir que las consultas globales copien datos de una región, establece el argumento
enable_global_queries_data_accessenfalseoNULLen esa región.
En el siguiente ejemplo, se muestra cómo inhabilitar las búsquedas globales a nivel del proyecto:
ALTER PROJECTPROJECT_IDSET OPTIONS ( `region-REGION.enable_global_queries_execution` = false, `region-REGION.enable_global_queries_data_access` = false );
Reemplaza lo siguiente:
PROJECT_ID: Es el nombre del proyecto que se modificará.REGION: Es el nombre de la región en la que se inhabilitarán las búsquedas globales.
El cambio puede tardar varios minutos en aplicarse.
Precios
El costo de una búsqueda global consta de los siguientes componentes:
- El costo de procesamiento de cada subconsulta en ubicaciones remotas, según tu modelo de precios en esas ubicaciones
- El costo de procesamiento de la búsqueda final en la región en la que se ejecuta, según tu modelo de precios en esa región
- El costo de copiar datos entre diferentes ubicaciones, según los precios de replicación de datos
- El costo de almacenar los datos copiados de las regiones remotas a la región principal (durante 8 horas), según los precios de almacenamiento
Cuotas
Para obtener información sobre las cuotas relacionadas con las consultas globales, consulta Trabajos de consulta.
Limitaciones
- Los detalles de ejecución y el gráfico de ejecución de una consulta no muestran la cantidad de bytes procesados y transferidos desde ubicaciones remotas. Esta información aparece en los trabajos de copia que puedes encontrar en tu historial de trabajos. El ID de trabajo de un trabajo de copia creado por una consulta global tiene el ID de trabajo de la consulta como prefijo.
- Las consultas globales no son compatibles con el modo de zona de pruebas
- Las consultas globales generan una latencia mayor que las consultas de una sola región debido al tiempo que se requiere para transferir datos entre regiones.
- Las búsquedas globales no usan ninguna caché para evitar la transferencia de datos entre regiones.
- No puedes consultar seudocolumnas, como
_PARTITIONTIME, con consultas globales. - No puedes consultar columnas con nombres de columna flexibles con consultas globales.
- Cuando haces referencia a las columnas de una tabla de BigLake en una cláusula
WHERE, no puedes usar literalesRANGEniINTERVAL. - No se admiten las vistas autorizadas ni las rutinas autorizadas globales (cuando una vista o una rutina en una ubicación está autorizada para acceder a un conjunto de datos en otra ubicación).
- No se admiten las vistas materializadas sobre consultas globales.
- Si tu consulta global hace referencia a columnas
STRUCT, no se aplican pushdowns a ninguna subconsulta remota. Para optimizar el rendimiento, considera crear una vista en la región remota que filtre las columnasSTRUCTy muestre solo los campos necesarios como columnas individuales. - Las consultas globales no se ejecutan de forma atómica. En los casos en que la replicación de datos se realiza correctamente, pero la consulta general falla, se te facturará la replicación de datos.
- Las tablas temporales creadas en regiones remotas como parte de la ejecución de consultas globales solo se encriptan con claves de encriptación administradas por el cliente (CMEK) si una clave CMEK configurada para encriptar los resultados de la consulta global (ya sea a nivel de la tabla, el conjunto de datos o el proyecto) es global. Para garantizar que las tablas temporales remotas siempre estén protegidas con CMEK, establece una clave de KMS predeterminada para el proyecto que ejecuta consultas globales en la región remota.
- Las consultas globales no se admiten en Assured Workloads.
- En una consulta global, puedes consultar un máximo de 10 tablas por región.