En esta página, se explica cómo usar Data Boost de Spanner cuando ejecutas consultas federadas desde BigQuery a una base de datos de Spanner. Con Data Boost, las consultas federadas se ejecutan con un impacto mínimo en las cargas de trabajo existentes de la instancia de Spanner aprovisionada. Las consultas de Data Boost de BigQuery a una base de datos de Spanner pueden unir datos de BigQuery con datos de Spanner.
Puedes ejecutar consultas federadas desde BigQuery a Spanner con Data Boost a través de uno de los siguientes métodos:
- Ejecuta una consulta federada de Data Boost, que usa la función de consulta federada
EXTERNAL_QUERY. - Usa Data Boost con conjuntos de datos externos.
La federación de Spanner permite que BigQuery consulte datos que se encuentran en Spanner en tiempo real, sin copiarlos ni moverlos. Para obtener más información sobre las consultas federadas de Spanner, consulta Consultas federadas de Spanner. Para obtener información sobre Data Boost, consulta la descripción general de Data Boost.
Antes de comenzar
Antes de ejecutar consultas federadas con Data Boost, debes completar las siguientes tareas:
Crea una instancia y una base de datos de Spanner
Si no tienes una instancia ni una base de datos de Spanner, sigue los pasos que se indican en Crea y consulta una base de datos con la consola de Google Cloud para crearlas.
Habilita la API de BigQuery Connection
La API de conexión de BigQuery te permite administrar conexiones de BigQuery a fuentes de datos externas, como una base de datos de Spanner.
-
Enable the BigQuery connection API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Para obtener más información, consulta la API de conexión de BigQuery en la documentación de BigQuery.
Otorga permisos de IAM para Data Boost a los principales
Se deben otorgar los siguientes permisos a una principal para ejecutar consultas federadas con Data Boost:
spanner.instances.get: Te permite obtener la configuración de una instancia.spanner.databases.useDataBoost: Te permite usar los recursos de procesamiento de Spanner Data Boost para procesar consultas particionadas.
Para obtener más información sobre los permisos de Spanner, consulta Permisos de Identity and Access Management (IAM).
Para otorgar estos permisos obligatorios, te recomendamos que uses el rol de IAM de Cloud
Spanner Database Reader With DataBoost (roles/spanner.databaseReaderWithDataBoost). Puedes agregar ese rol a cualquier principal que necesite ejecutar consultas federadas con Data Boost. Para obtener más información sobre los roles predefinidos en Spanner, consulta Roles predefinidos. Para aprender a crear un rol de IAM personalizado, consulta Crea un rol personalizado.
Ejecuta una consulta federada de Data Boost
Para ejecutar una consulta de Data Boost desde BigQuery a una fuente externa, necesitas una conexión de BigQuery a la fuente externa y el ID de la conexión. Cuando ejecutas una consulta federada de Spanner con Data Boost, la fuente externa es una base de datos de Spanner. Después de crear tu ID de conexión, BigQuery lo usa para ejecutar una consulta de Data Boost de una base de datos de Spanner.
Usa una de las siguientes opciones para crear un ID de conexión de BigQuery y, luego, usa el ID de conexión para ejecutar una consulta de Data Boost desde BigQuery:
Comienza en Spanner: Crea el ID de conexión externa de BigQuery en la consola de Spanner. Después de que se cree tu ID de conexión en la consola de Spanner, se te redireccionará a la consola de BigQuery para ejecutar una consulta federada de Data Boost en una base de datos de Spanner.
Comienza en BigQuery: Crea el ID de conexión externa de Data Boost en la consola de BigQuery o con la herramienta de línea de comandos
bq. Después de crear el ID de conexión, permanecerás en la consola de BigQuery para ejecutar una consulta federada de Data Boost en una base de datos de Spanner.
Comienza en Spanner para ejecutar una consulta de Data Boost
Para ejecutar una consulta federada de Data Boost desde Spanner Studio, haz lo siguiente:
Ve a la página Instancias de Spanner en laGoogle Cloud consola.
En la consola, se muestra una lista de tus instancias de Spanner.
Selecciona una instancia de Spanner y, luego, una base de datos.
En la página Descripción general de la base de datos, en el menú de navegación, haz clic en Spanner Studio.
Haz clic en Ver en BigQuery.
En el diálogo Ver en BigQuery, ingresa un ID de conexión.
El ID de conexión se usa para crear una nueva conexión externa de BigQuery a tu base de datos de Spanner. Para hacer referencia a tu conexión externa, usa el siguiente patrón:
PROJECT-ID.LOCATION.CONNECTION-IDSe produce un error si el ID ya existe.
Completa el resto del cuadro de diálogo y haz lo siguiente:
- Selecciona Leer datos en paralelo.
- Selecciona Usar Data Boost de Spanner.
Haz clic en Ver en BigQuery.
BigQuery Studio se abrirá con la siguiente consulta:
SELECT * FROM EXTERNAL_QUERY("PROJECT-ID.LOCATION.CONNECTION-ID", "SELECT * FROM INFORMATION_SCHEMA.TABLES;");Puedes reemplazarla por tu consulta federada. Por ejemplo, puedes hacer una consulta similar a la del siguiente ejemplo. En este ejemplo, se realiza una consulta federada desde una tabla llamada
ordersen una base de datos de Spanner y se unen los resultados con una tabla de BigQuery llamadamydataset.customers.SELECT c.customer_id, c.name, rq.first_order_date FROM mydataset.customers AS c LEFT OUTER JOIN EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id GROUP BY c.customer_id, c.name, rq.first_order_date;
Comienza en BigQuery para ejecutar una consulta de Data Boost
Para crear una conexión de datos externa desde BigQuery a una base de datos de Spanner y usar esa conexión para ejecutar una consulta federada de Data Boost desde BigQuery, selecciona una de las siguientes opciones:
Console
Ve a Crea conexiones de Spanner en la documentación de BigQuery y sigue las instrucciones de la pestaña Consola.
En el panel Fuente de datos externa, haz lo siguiente:
- Selecciona Leer datos en paralelo.
- Selecciona Usar Data Boost de Spanner.
bq
Ve a Crea conexiones de Spanner en la documentación de BigQuery y sigue las instrucciones de la pestaña bq*.
Establece las siguientes propiedades de conexión en
true:useParallelismuseDataBoost
En el siguiente ejemplo, se usa el comando bq
mk para crear una conexión nueva llamada my_connection con las dos propiedades requeridas para Data Boost:
bq mk --connection --connection_type='CLOUD_SPANNER' --location='us' \
--properties='{"database":"projects/my-project/instances/my-instance/databases/my-database", "useParallelism":true, "useDataBoost": true}' my_connection
Usa Data Boost con conjuntos de datos externos
Para ejecutar una consulta de Data Boost desde BigQuery a Spanner como una fuente externa, puedes crear un conjunto de datos externo (también conocido como conjunto de datos federado) en BigQuery que esté vinculado a una base de datos existente de GoogleSQL o PostgreSQL en Spanner.
Usa una conexión CLOUD_RESOURCE
De forma predeterminada, los conjuntos de datos externos de Spanner usan credenciales de usuario final (EUC), lo que requiere que los usuarios tengan acceso directo a sus bases de datos de Spanner. Los usuarios pueden consultar estos conjuntos de datos si tienen acceso otorgado en Spanner.
De manera opcional, los conjuntos de datos externos de Spanner pueden usar una conexión CLOUD_RESOURCE para interactuar con tu base de datos de Spanner, de modo que puedas proporcionar a un usuario acceso a los datos de Spanner a través de BigQuery, sin darle acceso directo a la base de datos de Spanner.
Debido a que la cuenta de servicio de la conexión CLOUD_RESOURCE controla la recuperación de datos de Spanner, solo tienes que otorgar a los usuarios acceso al conjunto de datos externo de Spanner.
Esta delegación de acceso separa el acceso a las tablas de Spanner de los conjuntos de datos externos y el acceso directo a las tablas subyacentes de Spanner.
Se usa una conexión de recurso de Cloud asociada con una cuenta de servicio para conectarse a Spanner.
Los usuarios pueden consultar estas tablas de Spanner desde conjuntos de datos externos, incluso si no tienen acceso otorgado en Spanner.
Antes de crear conjuntos de datos externos de Spanner con una conexión de CLOUD_RESOURCE, haz lo siguiente:
Crear una conexión
Puedes crear o usar una conexión CLOUD_RESOURCE existente para conectarte a Spanner. Asegúrate de crear la conexión en la misma ubicación en la que planeas crear tu conjunto de datos externo de Spanner.
Console
Ve a la página de BigQuery.
En el panel de la izquierda, haz clic en Explorar:

Si no ves el panel izquierdo, haz clic en Expand left pane para abrirlo.
En el panel Explorador, expande el nombre de tu proyecto y, luego, haz clic en Conexiones.
En la página Connections, haz clic en Create connection.
En Tipo de conexión, elige Modelos remotos de Vertex AI, funciones remotas, BigLake y Spanner (Cloud Resource).
En el campo ID de conexión, ingresa un nombre para tu conexión.
En Tipo de ubicación, selecciona una ubicación para tu conexión. La conexión debe estar ubicada junto con tus otros recursos, como los conjuntos de datos.
Haz clic en Crear conexión.
Haz clic en Ir a la conexión.
En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.
bq
En un entorno de línea de comandos, crea una conexión:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
El parámetro
--project_idanula el proyecto predeterminado.Reemplaza lo siguiente:
REGION: tu región de conexiónPROJECT_ID: El ID de tu proyecto de Google CloudCONNECTION_ID: Es un ID para tu conexión.
Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.
Solución de problemas: Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
El resultado es similar a lo siguiente:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta las bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Spanner, consulta las bibliotecas cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Terraform
Usa el recurso google_bigquery_connection.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
En el siguiente ejemplo, se crea una conexión de recursos de Cloud llamada my_cloud_resource_connection en la región US:
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud , completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf, por ejemplo,main.tf. En este instructivo, el archivo se denominamain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tfrecién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgradepara usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yescuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto Google Cloud para ver los resultados. En la consola de Google Cloud , navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Después de crear la conexión, ábrela y, en el panel Información de conexión, copia el ID de la cuenta de servicio. Necesitas este ID cuando configuras los permisos para la conexión. Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.
Configura el acceso
Debes otorgar a la cuenta de servicio asociada con la conexión nueva acceso de lectura a tu instancia o base de datos de Spanner. Se recomienda usar el rol de IAM predefinido de lector de bases de datos de Cloud Spanner con Data Boost (roles/spanner.databaseReaderWithDataBoost).
Sigue estos pasos para otorgar acceso a los roles a nivel de la base de datos para la cuenta de servicio que copiaste anteriormente de la conexión:
Ve a la página Instancias de Spanner.
Haz clic en el nombre de la instancia que contiene tu base de datos para ir a la página Detalles de la instancia.
En la pestaña Descripción general, selecciona la casilla de verificación de tu base de datos.
Aparecerá el panel de información.Haz clic en Agregar principal.
En el panel Agregar principales, en Principales nuevas, ingresa el ID de cuenta de servicio que copiaste antes.
En el campo Selecciona un rol, elige Rol de lector de bases de datos de Cloud Spanner con DataBoost.
Haz clic en Guardar.
Crea un conjunto de datos externo
Para crear un conjunto de datos externo, haz lo siguiente:
Console
Abre la página de BigQuery en la Google Cloud consola.
En el panel de la izquierda, haz clic en Explorar.

Si no ves el panel izquierdo, haz clic en Expandir panel izquierdo para abrirlo.
En el panel Explorador, selecciona el proyecto en el que deseas crear el conjunto de datos.
Haz clic en Ver acciones y, luego, en Crear conjunto de datos.
En la página Crear conjunto de datos, haz lo siguiente:
- En ID de conjunto de datos, ingresa un nombre único para el conjunto de datos.
- En Tipo de ubicación, elige una ubicación para el conjunto de datos, como
us-central1o la multirregiónus. Después de crear un conjunto de datos, la ubicación no se puede cambiar. En External Dataset, haz lo siguiente:
- Marca la casilla junto a Vínculo a un conjunto de datos externo.
- En Tipo de conjunto de datos externo, selecciona
Spanner. - En Fuente externa, ingresa el identificador completo de tu base de datos de Spanner en el siguiente formato:
projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Por ejemplo:projects/my_project/instances/my_instance/databases/my_database. - De manera opcional, en Rol de la base de datos, ingresa el nombre de un rol de base de datos de Spanner. Para obtener más información, consulta los roles de la base de datos que se usan para crear conexiones de Spanner.
- De manera opcional, marca la casilla junto a Usar una conexión de Cloud Resource para crear el conjunto de datos externo con una conexión.
Deja el resto de la configuración predeterminada como está.
Haz clic en Crear conjunto de datos.
SQL
Usa la declaración del lenguaje de definición de datos CREATE EXTERNAL SCHEMA (DDL).
En la consola de Google Cloud , ve a la página BigQuery.
En el editor de consultas, escribe la siguiente oración:
CREATE EXTERNAL SCHEMA DATASET_NAME OPTIONS ( external_source = 'SPANNER_EXTERNAL_SOURCE', location = 'LOCATION'); /* Alternatively, create with a connection: */ CREATE EXTERNAL SCHEMA DATASET_NAME WITH CONNECTION
PROJECT_ID.LOCATION.CONNECTION_NAMEOPTIONS ( external_source = 'SPANNER_EXTERNAL_SOURCE', location = 'LOCATION');Reemplaza lo siguiente:
DATASET_NAME: el nombre de tu conjunto de datos nuevo en BigQuery.SPANNER_EXTERNAL_SOURCE: Es el nombre completo y calificado de la base de datos de Spanner, con un prefijo que identifica la fuente, en el siguiente formato:google-cloudspanner://[DATABASE_ROLE@]/projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Por ejemplo,google-cloudspanner://admin@/projects/my_project/instances/my_instance/databases/my_databaseogoogle-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database.LOCATION: la ubicación del conjunto de datos nuevo en BigQuery, por ejemplo,us-central1. Después de crear un conjunto de datos, no puedes cambiar su ubicación.CONNECTION_NAME: Es el nombre de la conexión de tu recurso de Cloud (opcional).
Haz clic en Ejecutar.
Si deseas obtener información sobre cómo ejecutar consultas, visita Ejecuta una consulta interactiva.
bq
En un entorno de línea de comandos, crea un conjunto de datos externo con el comando bq mk:
bq --location=LOCATION mk --dataset \ --external_source SPANNER_EXTERNAL_SOURCE \ DATASET_NAME
También puedes crear una conexión de la siguiente manera:
bq --location=LOCATION mk --dataset \ --external_source SPANNER_EXTERNAL_SOURCE \ --connection_id PROJECT_ID.LOCATION.CONNECTION_NAME \ DATASET_NAME
Reemplaza lo siguiente:
LOCATION: la ubicación del conjunto de datos nuevo en BigQuery, por ejemplo,us-central1. Después de crear un conjunto de datos, no puedes cambiar su ubicación. Puedes configurar un valor de ubicación predeterminado con el archivo.bigqueryrc.SPANNER_EXTERNAL_SOURCE: Es el nombre completo y calificado de la base de datos de Spanner, con un prefijo que identifica la fuente, en el siguiente formato:google-cloudspanner://[DATABASE_ROLE@]/projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Por ejemplo,google-cloudspanner://admin@/projects/my_project/instances/my_instance/databases/my_databaseogoogle-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database.DATASET_NAME: el nombre de tu conjunto de datos nuevo en BigQuery. Para crear un conjunto de datos en un proyecto que no sea el predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato:PROJECT_ID:DATASET_NAME.CONNECTION_NAME: Es el nombre de la conexión de tu recurso de Cloud (opcional).
Terraform
Usa el recurso google_bigquery_dataset.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
En el siguiente ejemplo, se crea un conjunto de datos externo de Spanner:
Para aplicar tu configuración de Terraform en un proyecto de Google Cloud , completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell
-
Establece el proyecto Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf, por ejemplo,main.tf. En este instructivo, el archivo se denominamain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tfrecién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgradepara usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yescuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu proyecto Google Cloud para ver los resultados. En la consola de Google Cloud , navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
API
Llama al método datasets.insert con un recurso de conjunto de datos y un campo externalDatasetReference definidos para tu base de datos de Spanner.
Ten en cuenta que los nombres de las tablas en los conjuntos de datos externos no distinguen mayúsculas de minúsculas.
Cuando creas los conjuntos de datos externos con una conexión CLOUD_RESOURCE, debes tener el permiso bigquery.connections.delegate (disponible a través del rol Connection Admin de BigQuery) en la conexión que usan los conjuntos de datos externos.
Crea una vista materializada no incremental basada en tablas de un conjunto de datos externo
Antes de continuar, debes crear el conjunto de datos externo subyacente de Spanner con una conexión de CLOUD_RESOURCE.
Puedes crear vistas materializadas no incrementales que hagan referencia a tablas de conjuntos de datos externos de Spanner con la opción allow_non_incremental_definition.
En el siguiente ejemplo, se usa una tabla de conjunto de datos externa de Spanner básica:
/* You must create the spanner_external_dataset with a CLOUD_RESOURCE connection. */ CREATE MATERIALIZED VIEW sample_dataset.sample_spanner_mv OPTIONS ( enable_refresh = true, refresh_interval_minutes = 60, max_staleness = INTERVAL "24" HOUR, allow_non_incremental_definition = true) AS SELECT COUNT(*) cnt FROM spanner_external_dataset.spanner_table;
Solo las vistas materializadas no incrementales de BigQuery pueden tener tablas de conjuntos de datos externos de Spanner como tablas base.
Si la última actualización de una vista materializada no incremental se produjo fuera del intervalo max_staleness, la consulta lee las tablas del conjunto de datos externo de Spanner base. Obtén más información sobre las vistas materializadas no incrementales de BigQuery.
¿Qué sigue?
- Obtén más información sobre Data Boost en la descripción general de Data Boost
- Cómo usar Data Boost en tus aplicaciones
- Supervisa el uso de Data Boost
- Supervisa y administra el uso de la cuota de Data Boost
- Obtén más información sobre el conjunto de datos externo de Spanner.
- Obtén más información para crear vistas materializadas sobre conjuntos de datos externos de Spanner.