Ejecutar consultas federadas con Data Boost

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:

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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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:

  1. 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.

  2. 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:

  1. Ve a la página Instancias de Spanner en la consola deGoogle Cloud .

    Ir a la página Instancias

    En la consola se muestra una lista de tus instancias de Spanner.

  2. Selecciona una instancia de Spanner y, a continuación, una base de datos.

  3. En la página Resumen de la base de datos, en el menú de navegación, haga clic en Spanner Studio.

  4. Haz clic en Ver en BigQuery.

  5. 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-ID
    

    Se produce un error si el ID ya existe.

  6. Rellena el resto del cuadro de diálogo y haz lo siguiente:

    • Selecciona Leer datos en paralelo.
    • Selecciona Usar Spanner Data Boost.
  7. 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 orders en una base de datos de Spanner y se unen los resultados con una tabla de BigQuery llamada mydataset.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

  1. Ve a Crear conexiones de Spanner en la documentación de BigQuery y sigue las instrucciones de la pestaña Consola.

  2. En el panel Fuente de datos externa, haz lo siguiente:

    • Selecciona Leer datos en paralelo.
    • Selecciona Usar Spanner Data Boost.

bq

  1. Ve a Crear conexiones de Spanner en la documentación de BigQuery y sigue las instrucciones de la pestaña bq*.

  2. Asigna el valor true a las siguientes propiedades de conexión:

    • useParallelism
    • useDataBoost

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.

Selecciona una de las opciones siguientes:

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel de la izquierda, haga clic en Explorador:

    Botón resaltado del panel Explorador.

    Si no ves el panel de la izquierda, haz clic en Ampliar panel de la izquierda para abrirlo.

  3. En el panel Explorador, despliega el nombre de tu proyecto y haz clic en Conexiones.

  4. En la página Conexiones, haz clic en Crear conexión.

  5. En Tipo de conexión, elija Modelos remotos de Vertex AI, funciones remotas, BigLake y Spanner (recurso de Cloud).

  6. En el campo ID de conexión, introduce un nombre para la conexión.

  7. 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.

  8. Haz clic en Crear conexión.

  9. Haz clic en Ir a la conexión.

  10. En el panel Información sobre la conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.

bq

  1. 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_id anula el proyecto predeterminado.

    Haz los cambios siguientes:

    • REGION: tu región de conexión
    • PROJECT_ID: tu ID de proyecto Google Cloud
    • CONNECTION_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...
    
  2. 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.

import google.api_core.exceptions
from google.cloud import bigquery_connection_v1

client = bigquery_connection_v1.ConnectionServiceClient()


def create_connection(
    project_id: str,
    location: str,
    connection_id: str,
):
    """Creates a BigQuery connection to a Cloud Resource.

    Cloud Resource connection creates a service account which can then be
    granted access to other Google Cloud resources for federated queries.

    Args:
        project_id: The Google Cloud project ID.
        location: The location of the connection (for example, "us-central1").
        connection_id: The ID of the connection to create.
    """

    parent = client.common_location_path(project_id, location)

    connection = bigquery_connection_v1.Connection(
        friendly_name="Example Connection",
        description="A sample connection for a Cloud Resource.",
        cloud_resource=bigquery_connection_v1.CloudResourceProperties(),
    )

    try:
        created_connection = client.create_connection(
            parent=parent, connection_id=connection_id, connection=connection
        )
        print(f"Successfully created connection: {created_connection.name}")
        print(f"Friendly name: {created_connection.friendly_name}")
        print(
            f"Service Account: {created_connection.cloud_resource.service_account_id}"
        )

    except google.api_core.exceptions.AlreadyExists:
        print(f"Connection with ID '{connection_id}' already exists.")
        print("Please use a different connection ID.")
    except Exception as e:
        print(f"An unexpected error occurred while creating the connection: {e}")

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.

const {ConnectionServiceClient} =
  require('@google-cloud/bigquery-connection').v1;
const {status} = require('@grpc/grpc-js');

const client = new ConnectionServiceClient();

/**
 * Creates a new BigQuery connection to a Cloud Resource.
 *
 * A Cloud Resource connection creates a service account that can be granted access
 * to other Google Cloud resources.
 *
 * @param {string} projectId The Google Cloud project ID. for example, 'example-project-id'
 * @param {string} location The location of the project to create the connection in. for example, 'us-central1'
 * @param {string} connectionId The ID of the connection to create. for example, 'example-connection-id'
 */
async function createConnection(projectId, location, connectionId) {
  const parent = client.locationPath(projectId, location);

  const connection = {
    friendlyName: 'Example Connection',
    description: 'A sample connection for a Cloud Resource',
    // The service account for this cloudResource will be created by the API.
    // Its ID will be available in the response.
    cloudResource: {},
  };

  const request = {
    parent,
    connectionId,
    connection,
  };

  try {
    const [response] = await client.createConnection(request);

    console.log(`Successfully created connection: ${response.name}`);
    console.log(`Friendly name: ${response.friendlyName}`);

    console.log(`Service Account: ${response.cloudResource.serviceAccountId}`);
  } catch (err) {
    if (err.code === status.ALREADY_EXISTS) {
      console.log(`Connection '${connectionId}' already exists.`);
    } else {
      console.error(`Error creating connection: ${err.message}`);
    }
  }
}

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:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

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

  1. Abre Cloud Shell.
  2. 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).

  1. 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 denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.tf que 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.

  3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
  4. Guarda los cambios.
  5. 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

  1. 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.

  2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply

    Espera hasta que Terraform muestre el mensaje "Apply complete!".

  3. 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:

  1. Ve a la página Instancias de Spanner.

    Ir a la página de instancias

  2. Haga clic en el nombre de la instancia que contiene su base de datos para ir a la página Detalles de la instancia.

  3. En la pestaña Resumen, selecciona la casilla de tu base de datos.
    Aparecerá el panel de información.

  4. Haz clic en Añadir principal.

  5. En el panel Añadir principales, en Principales nuevos, introduce el ID de la cuenta de servicio que has copiado anteriormente.

  6. En el campo Seleccionar un rol, selecciona Lector de bases de datos de Cloud Spanner con rol DataBoost.

  7. Haz clic en Guardar.

Crear un conjunto de datos externo

Para crear un conjunto de datos externo, sigue estos pasos:

Consola

  1. Abre la página de BigQuery en la Google Cloud consola.

    Ir a la página de BigQuery

  2. En el panel de la izquierda, haz clic en Explorador:

    Botón resaltado del panel Explorador.

    Si no ves el panel de la izquierda, haz clic en Ampliar panel de la izquierda para abrirlo.

  3. En el panel Explorador, selecciona el proyecto en el que quieras crear el conjunto de datos.

  4. Haz clic en Ver acciones y, a continuación, en Crear conjunto de datos.

  5. 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-central1 o multirregión us. 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.

  6. Haz clic en Crear conjunto de datos.

SQL

Usa la CREATE EXTERNAL SCHEMAinstrucción del lenguaje de definición de datos (DDL).

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. 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_NAME
      OPTIONS (
        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_database o google-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.

  3. 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_database o google-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:

resource "google_bigquery_dataset" "default" {
  dataset_id    = "my_external_dataset"
  friendly_name = "My external dataset"
  description   = "This is a test description."
  location      = "US"
  external_dataset_reference {
    # The full identifier of your Spanner database.
    external_source = "google-cloudspanner:/projects/my_project/instances/my_instance/databases/my_database"
    # Must be empty for a Spanner external dataset.
    connection = ""
  }
}

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

  1. Abre Cloud Shell.
  2. 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).

  1. 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 denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.tf que 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.

  3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
  4. Guarda los cambios.
  5. 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

  1. 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.

  2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply

    Espera hasta que Terraform muestre el mensaje "Apply complete!".

  3. 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