Trabaja con conexiones

Descripción general

La Federación de Cloud SQL en BigQuery permite que BigQuery consulte datos que se encuentran en Cloud SQL en tiempo real, sin copiarlos ni moverlos. La Federación de consultas admite instancias de MySQL (segunda generación) y PostgreSQL en Cloud SQL.

Puedes realizar las siguientes tareas luego de la configuración inicial única a fin de crear un recurso de conexión en BigQuery:

Crea un recurso de conexión

Para obtener instrucciones detalladas sobre cómo configurar un recurso de conexión, consulta Configura conexiones de base de datos de Cloud SQL.

Consulta un recurso de conexión

Cuando se establece una conexión con una instancia de Cloud SQL, puedes ejecutar consultas federadas con una función nueva: EXTERNAL_QUERY(). Visita Sintaxis de consultas federadas para obtener más información y consultas de muestra.

Consulta otra base de datos a través del mismo recurso de conexión

Cuando creas una conexión a una instancia de Cloud SQL, debes especificar una base de datos, un nombre de usuario y una contraseña en esa instancia. Si las mismas credenciales del usuario son válidas para otras bases de datos en la instancia de Cloud SQL, ese usuario puede consultarlas por medio del mismo recurso de conexión.

Obtén información sobre un recurso de conexión

Luego de crear un recurso de conexión, puedes obtener información sobre su configuración. La configuración incluye los valores que proporcionaste cuando creaste la transferencia.

Permisos necesarios

Para obtener información sobre un recurso de conexión, se requiere el permiso bigquery.connections.get. Las siguientes funciones predefinidas de la administración de identidades y accesos (IAM) ya incluyen el permiso bigquery.connections.get:

  • bigquery.admin
  • bigquery.connection.admin
  • bigquery.connection.user

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.

Visualiza un recurso de conexión

Console

  1. Para ver el estado de los recursos de la conexión, ve a la página de BigQuery en Cloud Console.

    Ir a la página de BigQuery

  2. Los recursos de conexión se enumerarán en el nivel superior de tu proyecto, en un grupo llamado External connections (Conexiones externas). Haz clic en una conexión para ver información sobre ese recurso de conexión, como connection ID y Cloud SQL instance ID.

    Ver recursos de conexión

bq

Ingresa el comando bq show y proporciona la marca de conexión --connection. Se requiere el connection_id completamente calificado.

    bq show --connection project.location.connection_id

Por ejemplo, mediante el siguiente comando, se obtiene información sobre un recurso de conexión llamado my_new_connection en un proyecto que tiene el ID federation-test y se ubica en la región us.

    bq show --connection federation-test.us.my_new_connection

API

Usa el método projects.locations.connections.get en la sección de referencia de la API de REST.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

import com.google.cloud.bigquery.connection.v1.Connection;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigquery.connection.v1.GetConnectionRequest;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import java.io.IOException;

// Sample to get connection
public class GetConnection {

  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";
    getConnection(projectId, location, connectionId);
  }

  public static void getConnection(String projectId, String location, String connectionId)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ConnectionName name = ConnectionName.of(projectId, location, connectionId);
      GetConnectionRequest request =
          GetConnectionRequest.newBuilder().setName(name.toString()).build();
      Connection response = client.getConnection(request);
      System.out.println("Connection info retrieved successfully :" + response.getName());
    }
  }
}

Enumera todos los recursos de conexión

Permisos necesarios

Para enumerar todos los recursos de conexión en un proyecto, se requieren los permisos bigquery.connections.list. Las siguientes funciones predefinidas de IAM ya incluyen el permiso bigquery.connections.list:

  • bigquery.admin
  • bigquery.connection.admin
  • bigquery.connection.user

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.

Enumera los recursos de conexión

Para enumerar todos los recursos de conexión de un proyecto, sigue estos pasos:

Console

  1. Para ver el estado de un recurso de la conexión, ve a la página de BigQuery en Cloud Console.

    Ir a la página de BigQuery

  2. Los recursos de conexión se enumerarán en el nivel superior de tu proyecto, en un grupo llamado External connections (Conexiones externas).

    Ver recursos de conexión

bq

Ingresa el comando bq show y proporciona la marca de conexión --connection. Se requiere el connection_id completamente calificado.

    bq ls --connection --project_id=[project_id] --location=[location]

Por ejemplo, mediante el siguiente comando, se enumeran los recursos de conexión en un proyecto que tiene el ID federation-test y se ubica en la región us.

    bq ls --connection --project_id=bigquery-federation-test --location=us

API

Usa el método projects.locations.connections.list en la sección de referencia de la API de REST.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

import com.google.cloud.bigquery.connection.v1.ListConnectionsRequest;
import com.google.cloud.bigquery.connection.v1.LocationName;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import java.io.IOException;

// Sample to get list of connections
public class ListConnections {

  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";
    listConnections(projectId, location);
  }

  public static void listConnections(String projectId, String location) throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      LocationName parent = LocationName.of(projectId, location);
      int pageSize = 10;
      ListConnectionsRequest request =
          ListConnectionsRequest.newBuilder()
              .setParent(parent.toString())
              .setPageSize(pageSize)
              .build();
      client
          .listConnections(request)
          .iterateAll()
          .forEach(con -> System.out.println("Connection Id :" + con.getName()));
    }
  }
}

Comparte un recurso de conexión

Permisos necesarios

Si deseas permitir que otro usuario use un recurso de la conexión para consultas federadas de Cloud SQL, el usuario bigquery.admin puede otorgar las dos funciones diferentes en IAM.

Usuario de conexión de BigQuery

La función bigquery.connection.user está dirigida a usuarios que necesitan ejecutar consultas con el recurso de conexión.

Esta función de IAM incluye los siguientes permisos:

  • bigquery.connections.get
  • bigquery.connections.list
  • bigquery.connections.use
  • bigquery.connections.getIamPolicy

Administrador de conexión de BigQuery

La función bigquery.connection.admin está dirigida a usuarios que necesitan administrar recursos de conexión.

Esta función de IAM incluye los mismos permisos que bigquery.connection.user, además de permisos adicionales para crear, actualizar y borrar recursos de conexión existente y también establecer políticas de IAM en recursos de conexión.

  • bigquery.connections.create
  • bigquery.connections.update
  • bigquery.connections.setIamPolicy
  • bigquery.connections.delete

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.

Comparte un recurso de conexión

Console

  1. Para compartir un recurso de la conexión, ve a la página de BigQuery en Cloud Console.

    Ir a la página de BigQuery

  2. Los recursos de conexión se enumerarán en el nivel superior de tu proyecto, en un grupo llamado External connections (Conexiones externas). Haz clic en una conexión para ver información sobre ese recurso de conexión.

    Ver recursos de conexión

  3. Haz clic en el botón SHARE CONNECTION (COMPARTIR CONEXIÓN) para ver el panel de permisos de ese recurso de conexión.

    Botón Compartir conexión

  4. En el panel Connection permissions (Permisos de la conexión), los usuarios con la función BigQuery Admin (Administrador de BigQuery) o BigQuery Connection Admin (Administrador de conexión de BigQuery) pueden compartir el recurso de conexión con otros usuarios si agregan o editan los permisos de los otros usuarios.

    Compartir recursos de conexión

  5. Haga clic en Listo.

bq

Por el momento, no puedes compartir un recurso con la herramienta de línea de comandos de bq. Si deseas compartir un recurso de la conexión, usa Cloud Console o el método de la API de la conexiones de BigQuery para compartir una conexión.

API

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

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

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);
  }

  public 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");
    }
  }
}

Edita o actualiza un recurso de conexión

Cuando se agrega el recurso de conexión, puedes editarlo. Puedes editar la mayoría de los campos propagados durante la creación del recurso de conexión, incluidas las credenciales de nombre de usuario.

Una conexión usa las credenciales del usuario que la creó. Si necesitas cambiar el usuario que está conectado a un recurso de conexión, puedes actualizar las credenciales del usuario. Esto es útil si el usuario que creó la conexión ya no está en tu organización.

No puedes editar los siguientes elementos de un recurso de conexión:

  • Tipo de conexión
  • ID de la conexión
  • Ubicación

Permisos necesarios

La actualización de un recurso de conexión requiere el permiso bigquery.connections.update.

Las siguientes funciones predefinidas de IAM ya incluyen el permiso bigquery.connections.update:

  • bigquery.admin
  • bigquery.connection.admin

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.

Edita un recurso de conexión

Para editar una conexión, sigue estos pasos:

Console

  1. En Cloud Console, ve a la página de BigQuery.

    Ir a la página de BigQuery

  2. Los recursos de conexión se enumerarán en el nivel superior de tu proyecto, en un grupo llamado External connections (Conexiones externas). Haz clic en una conexión para ver información sobre ese recurso de conexión.

    Ver recursos de conexión

  3. Haz clic en el botón EDIT CONNECTION (EDITAR CONEXIÓN) para ver el panel de edición de ese recurso de conexión.

    Botón Editar conexión

  4. Edita cualquier campo que se muestre, incluidas las credenciales del usuario.

    Editar el recurso de conexión

  5. Haga clic en Save.

bq

Ingresa el comando bq update y proporciona la marca de conexión --connection. Se requiere el connection_id completamente calificado.

    bq update --connection --connection_type='CLOUD_SQL'
   --properties='{"instanceId" : "instance",
   "database" : "db", "type" : "MYSQL" }'
   --connection_credential='{"username":"u", "password":"p"}'
   project.location.connection_id

Por ejemplo, mediante el siguiente comando, se actualizan los recursos de conexión en un proyecto con el ID federation-test y el ID de conexión test-mysql.

    bq update --connection --connection_type='CLOUD_SQL'
   --properties='{"instanceId" : "federation-test:us-central1:new-mysql",
   "database" : "imdb2", "type" : "MYSQL" }'
   --connection_credential='{"username":"my_username",
   "password":"my_password"}' federation-test.us.test-mysql

API

Consulta el método projects.locations.connections.patch en la sección de referencia de la API de REST y proporciona una instancia del recurso de connection.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

import com.google.cloud.bigquery.connection.v1.Connection;
import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigquery.connection.v1.UpdateConnectionRequest;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update connection
public class UpdateConnection {

  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";
    String description = "MY_DESCRIPTION";
    Connection connection = Connection.newBuilder().setDescription(description).build();
    updateConnection(projectId, location, connectionId, connection);
  }

  public static void updateConnection(
      String projectId, String location, String connectionId, Connection connection)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ConnectionName name = ConnectionName.of(projectId, location, connectionId);
      FieldMask updateMask = FieldMaskUtil.fromString("description");
      UpdateConnectionRequest request =
          UpdateConnectionRequest.newBuilder()
              .setName(name.toString())
              .setConnection(connection)
              .setUpdateMask(updateMask)
              .build();
      Connection response = client.updateConnection(request);
      System.out.println("Connection updated successfully :" + response.getDescription());
    }
  }
}

Borra un recurso de conexión

Puedes borrar un recurso de conexión si tienes los permisos adecuados para hacerlo.

Permisos necesarios

Para borrar un recurso de conexión, se requiere el permiso bigquery.connections.delete.

Las siguientes funciones predefinidas de IAM ya incluyen el permiso bigquery.connections.delete:

  • bigquery.admin
  • bigquery.connection.admin

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.

Borra un recurso de conexión

Para borrar una conexión, sigue estos pasos:

Console

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

    Ir a la página de BigQuery

  2. Los recursos de conexión se enumerarán en el nivel superior de tu proyecto, en un grupo llamado External connections (Conexiones externas). Haz clic en una conexión para ver información sobre ese recurso de conexión.

    Ver recursos de conexión

  3. Haz clic en el botón DELETE CONNECTION (BORRAR CONEXIÓN) para ver el panel de eliminación de ese recurso de conexión.

    Botón Borrar conexión

  4. En el cuadro de diálogo Delete connection? (¿Deseas borrar la conexión?), ingresa delete para confirmar tu intención.

    Borrar recurso de conexión

  5. Haz clic en BORRAR.

bq

Ingresa el comando bq rm y proporciona la marca de conexión --connection. Se requiere el connection_id completamente calificado.

    bq rm --connection project.location.connection_id

Por ejemplo, mediante el siguiente comando, se actualizan los recursos de conexión en un proyecto con el ID federation-test y el ID de conexión test-mysql.

    bq rm --connection federation-test.us.test-mysql

API

Consulta el método projects.locations.connections.delete en la sección de referencia de la API de REST.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java que se encuentran en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

import com.google.cloud.bigquery.connection.v1.ConnectionName;
import com.google.cloud.bigquery.connection.v1.DeleteConnectionRequest;
import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient;
import java.io.IOException;

// Sample to delete a connection
public class DeleteConnection {

  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 connectionName = "MY_CONNECTION_NAME";
    deleteConnection(projectId, location, connectionName);
  }

  public static void deleteConnection(String projectId, String location, String connectionName)
      throws IOException {
    try (ConnectionServiceClient client = ConnectionServiceClient.create()) {
      ConnectionName name = ConnectionName.of(projectId, location, connectionName);
      DeleteConnectionRequest request =
          DeleteConnectionRequest.newBuilder().setName(name.toString()).build();
      client.deleteConnection(request);
      System.out.println("Connection deleted successfully");
    }
  }
}