En esta página se explica cómo usar Spanner Data Boost al ejecutar 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 de la instancia de Spanner aprovisionada. Las consultas de Data Boost de BigQuery a una base de datos de Spanner pueden combinar datos de BigQuery con datos de Spanner.
Puedes ejecutar consultas federadas de BigQuery a Spanner mediante Data Boost con uno de los siguientes métodos:
- Ejecuta una consulta de Data Boost federada, que usa la
EXTERNAL_QUERYfunción de consulta federada. - Usar Data Boost con conjuntos de datos externos
La federación de Spanner permite a BigQuery consultar datos alojados en Spanner en tiempo real, sin tener que copiarlos ni transferirlos. 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 el resumen de Data Boost.
Antes de empezar
Para poder ejecutar consultas federadas con Data Boost, debes completar las siguientes tareas:
Crear 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 el artículo Crear y consultar una base de datos con la consola Google Cloud para crearlas.
Habilitar la API de conexión de BigQuery
La API de conexión de BigQuery te permite gestionar 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.
Conceder permisos de gestión de identidades y accesos para Data Boost a las entidades
Se debe conceder a un principal los siguientes permisos 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 computación de Spanner Data Boost para procesar consultas particionadas.
Para obtener más información sobre los permisos de Spanner, consulta Permisos de gestión de identidades y accesos (IAM).
Para conceder estos permisos obligatorios, te recomendamos que uses el rol de gestión de identidades y accesos Cloud
Spanner Database Reader With DataBoost
(roles/spanner.databaseReaderWithDataBoost). Puede añadir 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 el artículo Roles predefinidos. Para saber cómo crear un rol de IAM personalizado, consulta el artículo Crear un rol personalizado.
Ejecutar una consulta de Data Boost federada
Para ejecutar una consulta de Data Boost desde BigQuery a una fuente externa, necesita 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. Una vez que hayas creado el ID de conexión, BigQuery lo usará para ejecutar una consulta de Data Boost en una base de datos de Spanner.
Usa una de las siguientes opciones para crear un ID de conexión de BigQuery y, a continuación, usa ese ID para ejecutar una consulta de Data Boost desde BigQuery:
Empieza en Spanner: crea el ID de conexión externa de BigQuery en la consola de Spanner. Una vez que se haya creado el ID de conexión en la consola de Spanner, se le redirigirá a la consola de BigQuery para ejecutar una consulta federada de Data Boost en una base de datos de Spanner.
Empieza 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.
Empezar 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 la consola deGoogle Cloud .
En la consola se muestra una lista de tus instancias de Spanner.
Selecciona una instancia de Spanner y, a continuación, una base de datos.
En la página Resumen de la base de datos, en el menú de navegación, haga clic en Spanner Studio.
Haz clic en Ver en BigQuery.
En el cuadro de diálogo Ver en BigQuery, introduzca un ID de conexión.
El ID de conexión se usa para crear una 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.
Rellena el resto del cuadro de diálogo y haz lo siguiente:
- Selecciona Leer datos en paralelo.
- Selecciona Usar Spanner Data Boost.
Haz clic en Ver en BigQuery.
BigQuery Studio se abre con la siguiente consulta:
SELECT * FROM EXTERNAL_QUERY("PROJECT-ID.LOCATION.CONNECTION-ID", "SELECT * FROM INFORMATION_SCHEMA.TABLES;");Puedes sustituirla por tu consulta federada. Por ejemplo, puedes hacer una consulta similar a la siguiente. En este ejemplo se hace 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;
Empezar en BigQuery para ejecutar una consulta de Data Boost
Para crear una conexión de datos externa de BigQuery a una base de datos de Spanner y usar esa conexión para ejecutar una consulta de Data Boost federada desde BigQuery, selecciona una de las siguientes opciones:
Consola
Ve a Crear 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 Spanner Data Boost.
bq
Ve a Crear conexiones de Spanner en la documentación de BigQuery y sigue las instrucciones de la pestaña bq*.
Asigna el valor
truea las siguientes propiedades de conexión:useParallelismuseDataBoost
En el siguiente ejemplo, se usa el comando bq
mk para crear una conexión llamada my_connection con las dos propiedades obligatorias de 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
Usar Data Boost con conjuntos de datos externos
Para ejecutar una consulta de Data Boost de BigQuery a Spanner como 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 de GoogleSQL o PostgreSQL de Spanner.
Usar 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 concedido en Spanner.
De forma 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.
Como la cuenta de servicio de la conexión CLOUD_RESOURCE se encarga de obtener los datos de Spanner, solo tienes que conceder acceso a los usuarios al conjunto de datos externo de Spanner.
Esta delegación de acceso desacopla el acceso a las tablas de Spanner de los conjuntos de datos externos y del acceso directo a las tablas de Spanner subyacentes.
Se usa una conexión de recursos de Cloud asociada a una cuenta de servicio para conectarse a Spanner.
Los usuarios pueden consultar estas tablas de Spanner desde conjuntos de datos externos aunque no tengan acceso concedido en Spanner.
Antes de crear conjuntos de datos externos de Spanner con una conexión CLOUD_RESOURCE, haz lo siguiente:
Crear una conexión
Puedes crear o usar una CLOUD_RESOURCEconexión
para conectarte a Spanner. Asegúrate de crear la conexión en la misma ubicación en la que vayas a crear tu conjunto de datos externo de Spanner.
Consola
Ve a la página BigQuery.
En el panel de la izquierda, haga clic en Explorador:

Si no ves el panel de la izquierda, haz clic en Ampliar panel de la izquierda para abrirlo.
En el panel Explorador, despliega el nombre de tu proyecto y haz clic en Conexiones.
En la página Conexiones, haz clic en Crear conexión.
En Tipo de conexión, elija Modelos remotos de Vertex AI, funciones remotas, BigLake y Spanner (recurso de Cloud).
En el campo ID de conexión, introduce un nombre para la conexión.
En Tipo de ubicación, selecciona una ubicación para tu conexión. La conexión debe estar ubicada junto a otros recursos, como conjuntos de datos.
Haz clic en Crear conexión.
Haz clic en Ir a la conexión.
En el panel Información sobre la 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.Haz los cambios siguientes:
REGION: tu región de conexiónPROJECT_ID: tu ID de proyecto Google CloudCONNECTION_ID: 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 a la conexión.
Solución de problemas: si aparece 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...
Obtén y copia el ID de la cuenta de servicio para usarlo en un paso posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
El resultado debería ser similar al siguiente:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Python
Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta Bibliotecas de cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Node.js
Para saber cómo instalar y usar la biblioteca de cliente de Spanner, consulta Bibliotecas de cliente de Spanner.
Para autenticarte en Spanner, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Terraform
Usa el recurso google_bigquery_connection.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar la autenticación para bibliotecas de 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 la configuración de Terraform en un Google Cloud proyecto, sigue los pasos que se indican en las siguientes secciones.
Preparar Cloud Shell
- Abre Cloud Shell.
-
Define el Google Cloud proyecto predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tienes que ejecutar este comando una vez por proyecto y puedes hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
Preparar 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 en él. El nombre del archivo debe tener la extensión
.tf. Por ejemplo,main.tf. En este tutorial, el archivo se denominamain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tfque acabas de crear.También puedes copiar el código de GitHub. Se recomienda usar esta opción cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por cada directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yesen la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para comprobar que Terraform los ha creado o actualizado.
Después de crear la conexión, ábrela y, en el panel Información de la conexión, copia el ID de la cuenta de servicio. Necesitarás este ID cuando configures los permisos de la conexión. Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia a la conexión.
Configurar el acceso
Debe dar a la cuenta de servicio asociada a la nueva conexión acceso de lectura a su instancia o base de datos de Spanner. Te recomendamos que uses el rol de gestión de identidades y accesos predefinido Lector de bases de datos de Cloud Spanner con Data Boost (roles/spanner.databaseReaderWithDataBoost).
Sigue estos pasos para conceder acceso a los roles a nivel de base de datos a la cuenta de servicio que has copiado anteriormente de la conexión:
Ve a la página Instancias de Spanner.
Haga clic en el nombre de la instancia que contiene su base de datos para ir a la página Detalles de la instancia.
En la pestaña Resumen, selecciona la casilla de tu base de datos.
Aparecerá el panel de información.Haz clic en Añadir principal.
En el panel Añadir principales, en Principales nuevos, introduce el ID de la cuenta de servicio que has copiado anteriormente.
En el campo Seleccionar un rol, selecciona Lector de bases de datos de Cloud Spanner con rol DataBoost.
Haz clic en Guardar.
Crear un conjunto de datos externo
Para crear un conjunto de datos externo, sigue estos pasos:
Consola
Abre la página de BigQuery en la Google Cloud consola.
En el panel de la izquierda, haz clic en Explorador:

Si no ves el panel de la izquierda, haz clic en Ampliar panel de la izquierda para abrirlo.
En el panel Explorador, selecciona el proyecto en el que quieras crear el conjunto de datos.
Haz clic en Ver acciones y, a continuación, en Crear conjunto de datos.
En la página Crear conjunto de datos, haz lo siguiente:
- En ID del conjunto de datos, introduce 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 multirregiónus. Una vez que hayas creado un conjunto de datos, no podrás cambiar su ubicación. En Conjunto de datos externo, haga lo siguiente:
- Marca la casilla situada junto a Enlazar a un conjunto de datos externo.
- En Tipo de conjunto de datos externo, seleccione
Spanner. - En External source (Fuente externa), introduce el identificador completo de tu base de datos de Spanner con el siguiente formato:
projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE. Por ejemplo:projects/my_project/instances/my_instance/databases/my_database. - Opcionalmente, en Rol de base de datos, introduce el nombre de un rol de base de datos de Spanner. Para obtener más información, consulta los roles de base de datos que se usan para crear conexiones de Spanner.
- Opcionalmente, marca la casilla situada junto a Usar una conexión de recurso de Cloud para crear el conjunto de datos externo con una conexión.
Deja el resto de los ajustes predeterminados como están.
Haz clic en Crear conjunto de datos.
SQL
Usa la CREATE EXTERNAL SCHEMAinstrucción del lenguaje de definición de datos (DDL).
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucció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');Haz los cambios siguientes:
DATASET_NAME: el nombre del nuevo conjunto de datos en BigQuery.SPANNER_EXTERNAL_SOURCE: el nombre completo y cualificado 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 nuevo conjunto de datos en BigQuery. Por ejemplo,us-central1. Una vez que hayas creado un conjunto de datos, no podrás cambiar su ubicación.- (Opcional)
CONNECTION_NAME: el nombre de tu conexión de recursos de Cloud.
Haz clic en Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
bq
En un entorno de línea de comandos, cree 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:
bq --location=LOCATION mk --dataset \ --external_source SPANNER_EXTERNAL_SOURCE \ --connection_id PROJECT_ID.LOCATION.CONNECTION_NAME \ DATASET_NAME
Haz los cambios siguientes:
LOCATION: la ubicación del nuevo conjunto de datos en BigQuery. Por ejemplo,us-central1. Una vez que hayas creado un conjunto de datos, no podrás cambiar su ubicación. Puedes definir un valor de ubicación predeterminado mediante el archivo.bigqueryrc.SPANNER_EXTERNAL_SOURCE: el nombre completo y cualificado 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 del nuevo conjunto de datos en BigQuery. Para crear un conjunto de datos en un proyecto que no sea el predeterminado, añade el ID del proyecto al nombre del conjunto de datos con el siguiente formato:PROJECT_ID:DATASET_NAME.- (Opcional)
CONNECTION_NAME: el nombre de tu conexión de recursos de Cloud.
Terraform
Usa el
recurso google_bigquery_dataset.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar la autenticación para bibliotecas de cliente.
En el siguiente ejemplo se crea un conjunto de datos externo de Spanner:
Para aplicar la configuración de Terraform en un Google Cloud proyecto, sigue los pasos que se indican en las siguientes secciones.
Preparar Cloud Shell
- Abre Cloud Shell.
-
Define el Google Cloud proyecto predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tienes que ejecutar este comando una vez por proyecto y puedes hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
Preparar 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 en él. El nombre del archivo debe tener la extensión
.tf. Por ejemplo,main.tf. En este tutorial, el archivo se denominamain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tfque acabas de crear.También puedes copiar el código de GitHub. Se recomienda usar esta opción cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por cada directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yesen la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para comprobar que Terraform los ha creado o actualizado.
API
Llama al
método datasets.insert
con un recurso de conjunto de datos definido
y el campo externalDatasetReference
de tu base de datos de Spanner.
Ten en cuenta que los nombres de las tablas de los conjuntos de datos externos no distinguen entre mayúsculas y minúsculas.
Cuando creas conjuntos de datos externos con una conexión CLOUD_RESOURCE, debes tener el permiso bigquery.connections.delegate (disponible en el rol Administrador de conexiones de BigQuery) en la conexión que usan los conjuntos de datos externos.
Crear una vista materializada no incremental basada en tablas de un conjunto de datos externo
Antes de continuar, debes crear el conjunto de datos externo de Spanner subyacente mediante una CLOUD_RESOURCEconexión.
Puede crear vistas materializadas no incrementales que hagan referencia a tablas de conjuntos de datos externos de Spanner mediante la opción allow_non_incremental_definition.
En el siguiente ejemplo se usa una tabla de conjunto de datos externo de Spanner base:
/* 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. Consulta más información sobre las vistas materializadas no incrementales de BigQuery.
Siguientes pasos
- Consulta información sobre Data Boost en el resumen de Data Boost.
- Usar Data Boost en tus aplicaciones
- Monitorizar el uso de Data Boost
- Monitorizar y gestionar el uso de la cuota de Datos extra
- Más información sobre los conjuntos de datos externos de Spanner
- Más información sobre cómo crear vistas materializadas en conjuntos de datos externos de Spanner