Conectarse a Spanner

Como administrador de BigQuery, puedes crear una conexión para acceder a los datos de Spanner. Esta conexión permite a los analistas de datos consultar datos en Spanner.

Antes de empezar

Crear conexiones de Spanner

Selecciona una de las opciones siguientes:

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, haz clic en Añadir datos.

    Se abrirá el cuadro de diálogo Añadir datos.

  3. En el panel Filtrar por, en la sección Tipo de fuente de datos, selecciona Bases de datos.

    También puede introducir Spanner en el campo Buscar fuentes de datos.

  4. En la sección Fuentes de datos destacadas, haga clic en Google Cloud Spanner.

  5. Haga clic en la tarjeta de solución Google Cloud Spanner: federación de BigQuery.

  6. En el panel Fuente de datos externa, introduce la siguiente información:

    • En Tipo de conexión, seleccione Cloud Spanner.
    • En Connection ID (ID de conexión), introduce un identificador para el recurso de conexión. Se admiten letras, números y guiones bajos.
    • En Tipo de ubicación, seleccione una ubicación (o región) de BigQuery que sea compatible con la región de su fuente de datos externa.
    • Opcional: En Nombre descriptivo, introduce un nombre descriptivo para la conexión, como My connection resource. El nombre descriptivo puede ser cualquier valor que te ayude a identificar el recurso de conexión si necesitas modificarlo más adelante.
    • Opcional: En Descripción, escribe una descripción de este recurso de conexión.
    • En Nombre de la base de datos, introduce el nombre de la base de datos de Spanner con el siguiente formato: "projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE"
    • Opcional: Para realizar lecturas paralelas, selecciona Leer datos en paralelo. Spanner puede dividir determinadas consultas en partes más pequeñas, o particiones, y obtener las particiones en paralelo. Para obtener más información, consulta Leer datos en paralelo en la documentación de Spanner. Esta opción solo está disponible para las consultas cuyo primer operador en el plan de ejecución sea un operador de unión distribuida. Otras consultas devuelven un error. Para ver el plan de ejecución de una consulta de Spanner, consulta Cómo ejecuta Spanner las consultas.
    • Opcional: En Rol de base de datos, introduce el nombre de un rol de base de datos de Spanner. Si no está vacío, esta conexión consulta Spanner con este rol de base de datos de forma predeterminada. Los usuarios de control de acceso granular de Spanner que envíen consultas a través de esta conexión deben tener acceso a este rol, que les habrá concedido su administrador, y el rol de base de datos debe tener el privilegio SELECT en todos los objetos de esquema especificados en las consultas externas. Para obtener información sobre el control de acceso pormenorizado, consulta Acerca del control de acceso pormenorizado.
    • Opcional: Para habilitar Data Boost, selecciona Usar Spanner Data Boost. Data Boost te permite ejecutar consultas analíticas y exportaciones de datos con un impacto casi nulo en las cargas de trabajo de la instancia de BigQuery aprovisionada. Para habilitar Data Boost, selecciona Data Boost y Leer datos en paralelo.
  7. Haga clic en Crear conexión.

bq

Para crear la conexión, usa el comando bq mk con la marca --connection.

bq mk --connection \
    --connection_type=CLOUD_SPANNER \
    --properties='PROPERTIES' \
    --location=LOCATION \
    --display_name='FRIENDLY_NAME' \
    --description 'DESCRIPTION' \
    CONNECTION_ID

Haz los cambios siguientes:

  • PROPERTIES: un objeto JSON con los siguientes campos:

    • "database": la base de datos de Spanner de la conexión

      Especifícalo como una cadena con el siguiente formato: "projects/PROJECT_ID/instances/INSTANCE/databases/DATABASE".

    • "use_parallelism": (opcional) si true, esta conexión realiza lecturas paralelas.

      El valor predeterminado es false. Spanner puede dividir determinadas consultas en partes más pequeñas, o particiones, y obtener las particiones en paralelo. Para obtener más información, consulta Leer datos en paralelo en la documentación de Spanner. Esta opción está restringida a las consultas cuyo primer operador en el plan de ejecución sea un operador distributed union. Otras consultas devuelven un error. Para ver el plan de ejecución de una consulta de Spanner, consulta Cómo ejecuta Spanner las consultas.

    • "database_role": (opcional) Si no está vacío, esta conexión consulta Spanner con este rol de base de datos de forma predeterminada. Los usuarios de control de acceso granular de Spanner que envíen consultas a través de esta conexión deben tener acceso a este rol, que les habrá concedido su administrador, y el rol de base de datos debe tener el privilegio SELECT en todos los objetos de esquema especificados en las consultas externas.

      Si no se especifica, la conexión se autentica con los roles predefinidos de IAM para Spanner y el principal que ejecuta consultas con esta conexión debe tener asignado el rol de IAM roles/spanner.databaseReader.

      Para obtener información sobre el control de acceso pormenorizado, consulta Acerca del control de acceso pormenorizado.

    • "useDataBoost": (Opcional) Si true, esta conexión permite a los usuarios usar Data Boost. Data Boost permite a los usuarios ejecutar consultas federadas en una capacidad de computación independiente y separada de las instancias aprovisionadas para evitar que afecte a las cargas de trabajo. Para habilitar Aumento de datos, asigna el valor true a "useDataBoost" y a "use_parallelism".true

      Para usar Data Boost, el principal que ejecute consultas con esta conexión debe tener el permiso spanner.databases.useDataBoost. Este permiso se incluye de forma predeterminada en los roles roles/spanner.admin y roles/spanner.databaseAdmin.

  • LOCATION: una ubicación de BigQuery que sea compatible con la región de tu fuente de datos externa.

  • CONNECTION_ID: identificador del recurso de conexión

    El ID de conexión puede contener letras, números y guiones bajos. Si no proporcionas un ID de conexión, BigQuery generará automáticamente un ID único.

    En el siguiente ejemplo se crea un recurso de conexión llamado my_connection_id.

    bq mk --connection \
      --connection_type='CLOUD_SPANNER' \
      --properties='{"database":"projects/my_project/instances/my_instance/databases/database1"}' \
      --project_id=federation-test \
      --location=us \
      my_connection_id

API

Llama al método CreateConnection en el servicio ConnectionService.

Compartir conexiones con usuarios

Puede conceder los siguientes roles para permitir que los usuarios consulten datos y gestionen conexiones:

  • roles/bigquery.connectionUser: permite a los usuarios usar conexiones para conectarse con fuentes de datos externas y ejecutar consultas en ellas.

  • roles/bigquery.connectionAdmin: permite a los usuarios gestionar las conexiones.

Para obtener más información sobre los roles y permisos de gestión de identidades y accesos en BigQuery, consulta el artículo sobre roles y permisos predefinidos.

Selecciona una de las opciones siguientes:

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

    Las conexiones se muestran en tu proyecto, en un grupo llamado Conexiones externas.

  2. En el panel Explorador, haga clic en el nombre del proyecto > Conexiones externas > conexión.

  3. En el panel Detalles, haz clic en Compartir para compartir una conexión. A continuación, sigue estas instrucciones:

    1. En el cuadro de diálogo Permisos de conexión, comparte la conexión con otras entidades principales añadiendo o editando entidades principales.

    2. Haz clic en Guardar.

bq

No puedes compartir una conexión con la herramienta de línea de comandos bq. Para compartir una conexión, usa la Google Cloud consola o el método de la API Connections de BigQuery.

API

Usa el método projects.locations.connections.setIAM de la sección de referencia de la API REST Connections de BigQuery y proporciona una instancia del recurso policy.

Java

Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.

import com.google.api.resourcenames.ResourceName;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import java.io.IOException;

// Sample to share connections
public class ShareConnection {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String location = "MY_LOCATION";
    String connectionId = "MY_CONNECTION_ID";
    shareConnection(projectId, location, connectionId);
  }

  static void shareConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ResourceName resource = ConnectionName.of(projectId, location, connectionId);
      Binding binding =
          Binding.newBuilder()
              .addMembers("group:example-analyst-group@google.com")
              .setRole("roles/bigquery.connectionUser")
              .build();
      Policy policy = Policy.newBuilder().addBindings(binding).build();
      SetIamPolicyRequest request =
          SetIamPolicyRequest.newBuilder()
              .setResource(resource.toString())
              .setPolicy(policy)
              .build();
      client.setIamPolicy(request);
      System.out.println("Connection shared successfully");
    }
  }
}

Siguientes pasos