Búsquedas globales

Las búsquedas 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 búsquedas 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 búsquedas globales para tu proyecto o tu organización, usa la ALTER PROJECT SET OPTIONS instrucción o ALTER ORGANIZATION SET OPTIONS instrucción para cambiar la configuración predeterminada.

  • Para ejecutar búsquedas globales en una región, establece el argumento enable_global_queries_execution en true en esa región para el proyecto que ejecuta la consulta.
  • Para permitir que las búsquedas globales copien datos de una región, establece el argumento enable_global_queries_data_access en true en esa región para el proyecto que contiene los datos.
  • Cada vez que tu consulta accede a tablas remotas, se verifican estas opciones.
  • Las búsquedas globales se pueden ejecutar en un proyecto y extraer datos de otras regiones de otro proyecto.

Ejemplo: Configuración de varios proyectos

En el siguiente ejemplo, se muestra cómo ejecutar una consulta en un proyecto que accede a una tabla en otro proyecto.

Supongamos que tienes un proyecto query_project que ejecuta trabajos en la región us-central1 y deseas ejecutar una consulta que acceda a una tabla data_project.dataset.my_table ubicada en la región europe-west1:

SET @@location='us-central1';
SELECT
  *
FROM
  `query_project.dataset.my_table`
  JOIN `data_project.dataset.my_other_table` USING id;

Para que esta consulta global se ejecute correctamente, se requiere la siguiente configuración:

  1. Debes habilitar la ejecución de consultas globales en el proyecto (query_project) en la región que ejecuta una consulta global (us-central1):

    ALTER PROJECT `query_project`
    SET OPTIONS (
    `region-us-central1.enable_global_queries_execution` = TRUE
    );
  2. Debes habilitar la copia de datos mediante búsquedas globales desde el proyecto que contiene los datos (data_project) para su región (europe-west1):

    ALTER PROJECT `data_project`
    SET OPTIONS (
    `region-europe-west1.enable_global_queries_data_access` = TRUE
    );

Para crear y usar vistas que contengan tablas remotas, se aplican los mismos principios: el proyecto que ejecuta las consultas debe tener enable_global_queries_execution habilitado.

Estas operaciones ALTER PROJECT se deben ejecutar por separado, ya que hacen referencia a diferentes proyectos y regiones. El cambio puede tardar varios minutos en aplicarse.

Permiso necesario

Para ejecutar una consulta 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 permisos para ejecutar consultas globales sin otorgar el rol de administrador de BigQuery, sigue estos pasos:

  1. Crea un rol personalizado, por ejemplo, "Ejecutor de búsquedas globales de BigQuery".
  2. Agrega bigquery.jobs.createGlobalQuery a este rol.
  3. 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 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 consulta se determina automáticamente y no se puede cambiar:

  • Las consultas de lenguaje de modificación de datos (instrucciones INSERT, UPDATE y DELETE) siempre se ejecutan en una ubicación de la tabla de destino.
  • Las consultas de 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 donde 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 búsquedas globales copian datos de forma temporal de una ubicación a otra. Si tu organización tiene algún requisito de residencia de datos y no quieres que tus 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, ejecuta la consulta 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 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 búsquedas globales de una 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 ubicación. A continuación, se muestra una abstracción del flujo de trabajo de consulta global que realiza BigQuery:

  1. Determina dónde se debe ejecutar la consulta, ya sea a partir de la declaración del usuario o de forma automática. Esta ubicación se denomina ubicación principal, y todas las demás ubicaciones a las que hace referencia la consulta son remotas.
  2. Ejecuta una subconsulta en cada región remota para recopilar los datos necesarios para finalizar la consulta en la región principal.
  3. Copia estos datos de ubicaciones remotas a la ubicación principal.
  4. Guarda los datos en tablas temporales en la ubicación principal durante 8 horas.
  5. Ejecuta una consulta final con todos los datos recopilados en la ubicación principal.
  6. Muestra los resultados de la consulta.

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 con 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 búsquedas 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 consulta original con un sufijo _xregion adicional.

Desactiva las búsquedas globales

Para inhabilitar las búsquedas globales para tu proyecto o tu organización, usa la 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_execution en false o NULL en esa región.
  • Para prohibir que las búsquedas globales copien datos de una región, establece el argumento enable_global_queries_data_access en false o NULL en esa región.

En el siguiente ejemplo, se muestra cómo inhabilitar las búsquedas globales a nivel del proyecto:

ALTER PROJECT PROJECT_ID
SET OPTIONS (
  `region-REGION.enable_global_queries_execution` = false,
  `region-REGION.enable_global_queries_data_access` = false
);

Reemplaza lo siguiente:

  • PROJECT_ID: El nombre del proyecto que se modificará
  • REGION: 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 consulta global consta de los siguientes componentes:

  • El costo de procesamiento de cada subconsulta en ubicaciones remotas, según tu modelo de precios en estas ubicaciones
  • El costo de procesamiento de la consulta 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 la replicación de datos
  • El costo de almacenar datos copiados de 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 búsquedas 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 del trabajo de consulta como prefijo.
  • Las consultas globales no son compatibles con el modo de pruebas.
  • Las consultas globales no son compatibles cuando se usan extremos regionales.
  • Las búsquedas globales generan una latencia más alta que las búsquedas de una sola región debido al tiempo necesario 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 búsquedas globales.
  • No puedes consultar columnas de tipo RANGE con búsquedas globales.
  • No puedes consultar columnas con nombres de columnas flexibles con búsquedas globales.
  • No puedes consultar vistas de INFORMATION_SCHEMA desde una región remota en una consulta global.
  • No se admiten las vistas autorizadas globales ni las rutinas autorizadas (cuando una vista o rutina en una ubicación está autorizada para acceder al conjunto de datos en otra ubicación). En su lugar, crea vistas autorizadas en la región donde se encuentran tus datos y consulta las vistas autorizadas a través de búsquedas globales.
  • No se admiten las vistas materializadas sobre búsquedas 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 columnas STRUCT y muestre solo los campos necesarios como columnas individuales.
  • Las búsquedas globales no se ejecutan de forma atómica. En los casos en que la replicación de datos se realiza correctamente, pero falla la consulta general, se te factura por 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 de CMEK que se configuró para encriptar los resultados de la consulta global (ya sea a nivel de tabla, conjunto de datos o proyecto) es global. Para asegurarte de que las tablas temporales remotas siempre estén protegidas con CMEK, establece una clave de KMS predeterminada para el proyecto que ejecuta búsquedas globales en la región remota.
  • Las búsquedas globales no son compatibles con Assured Workloads.
  • Una sola consulta global puede acceder a hasta 10 tablas remotas por región.