Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

Migra el esquema y los datos desde Amazon Redshift

En este documento, se describe el proceso de migración de datos desde Amazon Redshift a BigQuery mediante direcciones IP públicas.

Puedes usar el Servicio de transferencia de datos de BigQuery para copiar tus datos de un almacén de datos de Amazon Redshift a BigQuery. El servicio involucra agentes de migración en GKE y activa una operación de descarga de Amazon Redshift a un área de etapa de pruebas en un bucket de Amazon S3. Luego, el Servicio de transferencia de datos de BigQuery transfiere los datos del bucket de Amazon S3 a BigQuery.

Este diagrama muestra el flujo general de datos entre un almacén de datos de Amazon Redshift y BigQuery durante una migración.

Flujo de trabajo de la migración de Amazon Redshift a BigQuery.

Si deseas transferir datos de tu instancia de Amazon Redshift a través de una nube privada virtual (VPC) con direcciones IP privadas, consulta Migra datos de Amazon Redshift con VPC.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las API de BigQuery and BigQuery Data Transfer Service.

    Habilita las API

  5. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  7. Habilita las API de BigQuery and BigQuery Data Transfer Service.

    Habilita las API

Establece los permisos necesarios

Antes de crear una transferencia de Amazon Redshift, haz lo siguiente:

  1. Asegúrate de que la cuenta principal que crea la transferencia tenga los siguientes permisos en el proyecto que contiene el trabajo de transferencia:

    • Los permisos bigquery.transfers.update para crear la transferencia
    • Los permisos bigquery.datasets.get y bigquery.datasets.update en el conjunto de datos de destino

    El rol predefinido roles/bigquery.admin de Identity and Access Management (IAM) incluye los permisos bigquery.transfers.update, bigquery.datasets.update y bigquery.datasets.get. Para obtener más información sobre las funciones de IAM en el Servicio de transferencia de datos de BigQuery, consulta la referencia del control de acceso.

  2. Consulta la documentación de Amazon S3 y asegúrate de tener configurados los permisos necesarios para habilitar la transferencia. Como mínimo, los datos de origen de Amazon S3 deben estar sujetos a la política administrada de AWS AmazonS3ReadOnlyAccess.

Cree un conjunto de datos

Crea un conjunto de datos de BigQuery para almacenar tus datos. No es necesario crear ninguna tabla.

Otorga acceso a tu clúster de Amazon Redshift

Sigue las instrucciones en Configura reglas entrantes para clientes SQL a fin de incluir las direcciones IP siguientes en la lista de entidades permitidas. Puedes permitir las listas de direcciones IP que corresponden a la ubicación de tu conjunto de datos o puedes incluir todas las direcciones IP de la lista de anunciantes permitidos en la siguiente tabla. Estas direcciones IP que son propiedad de Google están reservadas para las migraciones de datos de Amazon Redshift.

Ubicaciones regionales

Descripción de la región Nombre de la región Direcciones IP
América
Iowa us-central1 34.121.70.114
34.71.81.17
34.122.223.84
34.121.145.212
35.232.1.105
35.202.145.227
35.226.82.216
35.225.241.102
Las Vegas us-west4 34.125.53.201
34.125.69.174
34.125.159.85
34.125.152.1
34.125.195.166
34.125.50.249
34.125.68.55
34.125.91.116
Los Ángeles us-west2 35.236.59.167
34.94.132.139
34.94.207.21
34.94.81.187
34.94.88.122
35.235.101.187
34.94.238.66
34.94.195.77
Montreal northamerica-northeast1 34.95.20.253
35.203.31.219
34.95.22.233
34.95.27.99
35.203.12.23
35.203.39.46
35.203.116.49
35.203.104.223
Virginia del Norte us-east4 35.245.95.250
35.245.126.228
35.236.225.172
35.245.86.140
35.199.31.35
35.199.19.115
35.230.167.48
35.245.128.132
35.245.111.126
35.236.209.21
Oregón us-west1 35.197.117.207
35.199.178.12
35.197.86.233
34.82.155.140
35.247.28.48
35.247.31.246
35.247.106.13
34.105.85.54
Salt Lake City us-west3 34.106.37.58
34.106.85.113
34.106.28.153
34.106.64.121
34.106.246.131
34.106.56.150
34.106.41.31
34.106.182.92
São Paulo southamerica-east1 35.199.88.228
34.95.169.140
35.198.53.30
34.95.144.215
35.247.250.120
35.247.255.158
34.95.231.121
35.198.8.157
Santiago southamerica-west1 34.176.188.48
34.176.38.192
34.176.205.134
34.176.102.161
34.176.197.198
34.176.223.236
34.176.47.188
34.176.14.80
Carolina del Sur us-east1 35.196.207.183
35.237.231.98
104.196.102.222
35.231.13.201
34.75.129.215
34.75.127.9
35.229.36.137
35.237.91.139
Toronto northamerica-northeast2 34.124.116.108
34.124.116.107
34.124.116.102
34.124.116.80
34.124.116.72
34.124.116.85
34.124.116.20
34.124.116.68
Europa
Bélgica europe-west1 35.240.36.149
35.205.171.56
34.76.234.4
35.205.38.234
34.77.237.73
35.195.107.238
35.195.52.87
34.76.102.189
Finlandia europe-north1 35.228.35.94
35.228.183.156
35.228.211.18
35.228.146.84
35.228.103.114
35.228.53.184
35.228.203.85
35.228.183.138
Fráncfort europe-west3 35.246.153.144
35.198.80.78
35.246.181.106
35.246.211.135
34.89.165.108
35.198.68.187
35.242.223.6
34.89.137.180
Londres europe-west2 35.189.119.113
35.189.101.107
35.189.69.131
35.197.205.93
35.189.121.178
35.189.121.41
35.189.85.30
35.197.195.192
Países Bajos europe-west4 35.204.237.173
35.204.18.163
34.91.86.224
34.90.184.136
34.91.115.67
34.90.218.6
34.91.147.143
34.91.253.1
Varsovia europe-central2 34.118.72.8
34.118.45.245
34.118.69.169
34.116.244.189
34.116.170.150
34.118.97.148
34.116.148.164
34.116.168.127
Zúrich europe-west6 34.65.205.160
34.65.121.140
34.65.196.143
34.65.9.133
34.65.156.193
34.65.216.124
34.65.233.83
34.65.168.250
Asia-Pacífico
Delhi asia-south2 34.126.212.96
34.126.212.85
34.126.208.224
34.126.212.94
34.126.208.226
34.126.212.232
34.126.212.93
34.126.212.206
Hong Kong asia-east2 34.92.245.180
35.241.116.105
35.220.240.216
35.220.188.244
34.92.196.78
34.92.165.209
35.220.193.228
34.96.153.178
Yakarta asia-southeast2 34.101.79.105
34.101.129.32
34.101.244.197
34.101.100.180
34.101.109.205
34.101.185.189
34.101.179.27
34.101.197.251
Melbourne australia-southeast2 34.126.196.95
34.126.196.106
34.126.196.126
34.126.196.96
34.126.196.112
34.126.196.99
34.126.196.76
34.126.196.68
Bombay asia-south1 34.93.67.112
35.244.0.1
35.200.245.13
35.200.203.161
34.93.209.130
34.93.120.224
35.244.10.12
35.200.186.100
Osaka asia-northeast2 34.97.94.51
34.97.118.176
34.97.63.76
34.97.159.156
34.97.113.218
34.97.4.108
34.97.119.140
34.97.30.191
Seúl asia-northeast3 34.64.152.215
34.64.140.241
34.64.133.199
34.64.174.192
34.64.145.219
34.64.136.56
34.64.247.158
34.64.135.220
Singapur asia-southeast1 34.87.12.235
34.87.63.5
34.87.91.51
35.198.197.191
35.240.253.175
35.247.165.193
35.247.181.82
35.247.189.103
Sídney australia-southeast1 35.189.33.150
35.189.38.5
35.189.29.88
35.189.22.179
35.189.20.163
35.189.29.83
35.189.31.141
35.189.14.219
Taiwán asia-east1 35.221.201.20
35.194.177.253
34.80.17.79
34.80.178.20
34.80.174.198
35.201.132.11
35.201.223.177
35.229.251.28
35.185.155.147
35.194.232.172
Tokio asia-northeast1 34.85.11.246
34.85.30.58
34.85.8.125
34.85.38.59
34.85.31.67
34.85.36.143
34.85.32.222
34.85.18.128
34.85.23.202
34.85.35.192

Ubicaciones multirregionales

Descripción de la multirregión Nombre de la multirregión Direcciones IP
Centros de datos dentro de los estados miembros de la Unión Europea1 EU 34.76.156.158
34.76.156.172
34.76.136.146
34.76.1.29
34.76.156.232
34.76.156.81
34.76.156.246
34.76.102.206
34.76.129.246
34.76.121.168
Centros de datos en Estados Unidos US 35.185.196.212
35.197.102.120
35.185.224.10
35.185.228.170
35.197.5.235
35.185.206.139
35.197.67.234
35.197.38.65
35.185.202.229
35.185.200.120

1 Los datos ubicados en la multirregión EU no se almacenan en los centros de datos de europe-west2 (Londres) ni deeurope-west6 (Zúrich).

Otorga acceso a tu bucket de Amazon S3

Debes tener un bucket S3 para usarlo como área de etapa de pruebas a fin de transferir los datos de Amazon Redshift a BigQuery. Para obtener instrucciones detalladas, consulta la documentación de Amazon.

  1. Recomendamos que crees un usuario IAM dedicado de Amazon y le otorgues a ese usuario solo acceso de lectura a Amazon Redshift y acceso de lectura y escritura a S3. Para lograr este paso, puedes aplicar las siguientes políticas:

    Permisos de migración de Amazon Redshift

  2. Crea un par de claves de acceso de usuario de IAM de Amazon.

Configura cargas de trabajo con una cola de migración independiente

De manera opcional, puedesdefinir una cola de Amazon Redshift con fines de migración para limitar y separar los recursos usados en la migración. Puedes configurar esta cola de migración con un recuento máximo de consultas simultáneas. Luego, puedes asociar un grupo de usuarios de migración determinado a la cola y usar esas credenciales mediante la configuración de la migración para transferir datos a BigQuery. El servicio de transferencia solo tiene acceso a la cola de migración.

Recopila información de transferencia

Recopila la información que necesitas para configurar la migración con el Servicio de transferencia de datos de BigQuery:

  • Sigue estas instrucciones para obtener la URL de JDBC.
  • Obtén el nombre de usuario y la contraseña de un usuario con los permisos adecuados para tu base de datos de Amazon Redshift.
  • Sigue las instrucciones en Otorga acceso a tu bucket S3 para obtener un par de claves de acceso de AWS.
  • Obtén el URI del bucket de Amazon S3 que deseas usar para la transferencia. Te recomendamos que configures una política de ciclo de vida para este depósito a fin de evitar cargos innecesarios. La fecha de caducidad recomendada es de 24 horas a fin de permitir el tiempo suficiente para transferir todos los datos a BigQuery.

Configura una transferencia de Amazon Redshift

Selecciona una de las opciones siguientes:

Console

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

    Ir a BigQuery

  2. Haz clic en Transferencias de datos.

  3. Haz clic en Crear transferencia.

  4. En la sección Tipo de fuente, selecciona Migración: Amazon Redshift en la lista Origen.

  5. En la sección Transfer config name (Nombre de la configuración de transferencia), ingresa un nombre para la transferencia, como My migration, en el campo Display name (Nombre visible). El nombre que se muestra puede ser cualquier valor que te permita identificar la transferencia con facilidad si necesitas modificarla más tarde.

  6. En la sección Destination settings (Configuración de destino), elige el conjunto de datos que creaste de la lista Dataset (Conjunto de datos).

  7. En la sección Detalles de fuente de datos (Data source details), haz lo siguiente:

    1. En URL de conexión de JDBC para Redshift (JDBC connection url for Redshift), proporciona la URL de JDBC a fin de acceder a tu clúster de Amazon Redshift.
    2. En Nombre de usuario de tu base de datos, (Username of your database) ingresa el nombre de usuario de la base de datos de Amazon Redshift que deseas migrar.
    3. En Contraseña de tu base de datos (Password of your database), ingresa la contraseña de la base de datos.

    4. En ID de clave de acceso (Access key ID) y Clave de acceso secreta (Secret access key), ingresa el par de claves de acceso que obtuviste en Otorgar acceso a tu depósito S3.

    5. En URI de Amazon S3 (Amazon S3 URI), ingresa el URI del depósito S3 que usarás como área de etapa de pruebas.

    6. En Esquema de Redshift (Redshift schema), ingresa el esquema de Amazon Redshift que estás migrando.

    7. En Patrones de nombre de la tabla (Table name patterns), especifica un nombre o un patrón para hacer coincidir los nombres de tabla en el esquema. Puedes usar expresiones regulares para especificar el patrón en el formato <table1Regex>;<table2Regex>. El patrón debe seguir la sintaxis de la expresión regular de Java. Por ejemplo:

      • lineitem;ordertb coincide con las tablas llamadas lineitem y ordertb.
      • .* coincide con todas las tablas.

      Deja este campo vacío para migrar todas las tablas del esquema especificado.

    8. Para VPC y el rango de IP reservado, deja el campo en blanco.

  8. Opcional: En la sección Opciones de notificación, haz lo siguiente:

    1. Haz clic en el botón de activación para habilitar las notificaciones por correo electrónico. Cuando habilitas esta opción, el administrador de transferencias recibe una notificación por correo electrónico cuando falla una ejecución de transferencia.
    2. En Seleccionar un tema de Cloud Pub/Sub (Select a Cloud Pub/Sub topic), elige el nombre de tu tema o haz clic en Crear un tema (Create a topic). Con esta opción, se configuran las notificaciones de ejecución de Pub/Sub para tu transferencia.
  9. Haz clic en Guardar.

  10. La consola muestra todos los detalles de configuración de la transferencia, incluido un Nombre de recurso para esta transferencia.

    Confirmación de la transferencia

bq

Ingresa el comando bq mk y suministra la marca de creación de transferencias --transfer_config. También se requieren las siguientes marcas:

  • --project_id
  • --data_source
  • --target_dataset
  • --display_name
  • --params
bq mk \
    --transfer_config \
    --project_id=project_id \
    --data_source=data_source \
    --target_dataset=dataset \
    --display_name=name \
    --params='parameters'

En el ejemplo anterior, se ilustra lo siguiente:

  • project_id es tu ID del proyecto de Cloud. Si no se especifica --project_id, se usa el proyecto predeterminado.
  • data_source es la fuente de datos: redshift.
  • dataset es el conjunto de datos de destino de BigQuery para la configuración de la transferencia.
  • name es el nombre visible de la configuración de transferencia. El nombre de la transferencia puede ser cualquier valor que te permita identificarla con facilidad si necesitas modificarla más tarde.
  • parameters contiene los parámetros para la configuración de la transferencia creada en formato JSON. Por ejemplo: --params='{"param":"param_value"}'

Los parámetros necesarios para una configuración de transferencia de Amazon Redshift son:

  • jdbc_url: La URL de conexión de JDBC se usa para ubicar el clúster de Amazon Redshift.
  • database_username: El nombre de usuario para acceder a tu base de datos a fin de descargar tablas especificadas.
  • database_password: La contraseña usada con el nombre de usuario para acceder a tu base de datos a fin de descargar las tablas especificadas.
  • access_key_id: El ID de la clave de acceso para firmar las solicitudes realizadas a AWS.
  • secret_access_key: La clave de acceso secreta usada con el ID de la clave de acceso para firmar las solicitudes realizadas a AWS.
  • s3_bucket: El URI de Amazon S3 que comienza con “s3://” y especifica un prefijo para los archivos temporales que se usarán.
  • redshift_schema: El esquema de Amazon Redshift que contiene todas las tablas que se migrarán.
  • table_name_patterns: Patrones de nombre de tabla separados por un punto y coma (;). El patrón de tabla es una expresión regular para las tablas que se deben migrar. Si no se proporciona, se migrarán todas las tablas del esquema de la base de datos.

Por ejemplo, el siguiente comando crea una transferencia de Amazon Redshift llamada My Transfer con un conjunto de datos de destino llamado mydataset y un proyecto con el ID de google.com:myproject.

bq mk \
    --transfer_config \
    --project_id=myproject \
    --data_source=redshift \
    --target_dataset=mydataset \
    --display_name='My Transfer' \
    --params='{"jdbc_url":"jdbc:postgresql://test-example-instance.sample.us-west-1.redshift.amazonaws.com:5439/dbname","database_username":"my_username","database_password":"1234567890","access_key_id":"A1B2C3D4E5F6G7H8I9J0","secret_access_key":"1234567890123456789012345678901234567890","s3_bucket":"s3://bucket/prefix","redshift_schema":"public","table_name_patterns":"table_name"}'

API

Usa el método projects.locations.transferConfigs.create y suministra una instancia del recurso TransferConfig.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas 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.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create redshift transfer config
public class CreateRedshiftTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    String datasetRegion = "US";
    String jdbcUrl = "MY_JDBC_URL_CONNECTION_REDSHIFT";
    String dbUserName = "MY_USERNAME";
    String dbPassword = "MY_PASSWORD";
    String accessKeyId = "MY_AWS_ACCESS_KEY_ID";
    String secretAccessId = "MY_AWS_SECRET_ACCESS_ID";
    String s3Bucket = "MY_S3_BUCKET_URI";
    String redShiftSchema = "MY_REDSHIFT_SCHEMA";
    String tableNamePatterns = "*";
    String vpcAndReserveIpRange = "MY_VPC_AND_IP_RANGE";
    Map<String, Value> params = new HashMap<>();
    params.put("jdbc_url", Value.newBuilder().setStringValue(jdbcUrl).build());
    params.put("database_username", Value.newBuilder().setStringValue(dbUserName).build());
    params.put("database_password", Value.newBuilder().setStringValue(dbPassword).build());
    params.put("access_key_id", Value.newBuilder().setStringValue(accessKeyId).build());
    params.put("secret_access_key", Value.newBuilder().setStringValue(secretAccessId).build());
    params.put("s3_bucket", Value.newBuilder().setStringValue(s3Bucket).build());
    params.put("redshift_schema", Value.newBuilder().setStringValue(redShiftSchema).build());
    params.put("table_name_patterns", Value.newBuilder().setStringValue(tableNamePatterns).build());
    params.put(
        "migration_infra_cidr", Value.newBuilder().setStringValue(vpcAndReserveIpRange).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDatasetRegion(datasetRegion)
            .setDisplayName("Your Redshift Config Name")
            .setDataSourceId("redshift")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    createRedshiftTransfer(projectId, transferConfig);
  }

  public static void createRedshiftTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Cloud redshift transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Cloud redshift transfer was not created." + ex.toString());
    }
  }
}

Cuotas y límites

BigQuery tiene una cuota de carga de 15 TB para cada trabajo de carga por cada tabla. Por dentro, Amazon Redshift comprime los datos de la tabla, por lo que el tamaño de la tabla exportada será mayor que el tamaño de la tabla informado por Amazon Redshift. Si planeas migrar una tabla de más de 15 TB, comunícate primero con la Atención al cliente de Cloud.

Se pueden generar costos fuera de Google por el uso de este servicio. Revisa las páginas de precios de Amazon Redshift y Amazon S3 para obtener más detalles.

Debido al modelo de coherencia de Amazon S3, es posible que algunos archivos no se incluyan en la transferencia a BigQuery.

¿Qué sigue?