Migrar esquemas e dados do Amazon Redshift

Neste documento, descrevemos o processo de migração de dados do Amazon Redshift para o BigQuery usando endereços IP públicos.

É possível usar o serviço de transferência de dados do BigQuery para copiar seus dados de um data warehouse do Amazon Redshift para o BigQuery. Esse serviço usa agentes de migração no GKE e aciona uma operação de descarregamento do Amazon Redshift para uma área de preparo em um bucket do Amazon S3. Depois, o serviço de transferência envia seus dados do bucket do Amazon S3 para o BigQuery.

Veja no diagrama a seguir o fluxo geral dos dados entre um data warehouse do Amazon Redshift e o BigQuery durante uma migração.

Fluxo de trabalho da migração do Amazon Redshift para o BigQuery.

Se você quiser transferir dados da instância do Amazon Redshift por uma nuvem privada virtual (VPC), em endereços IP particulares, consulte Como migrar dados do Amazon Redshift com VPC.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs BigQuery and BigQuery Data Transfer Service.

    Ative as APIs

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative as APIs BigQuery and BigQuery Data Transfer Service.

    Ative as APIs

Definir as permissões necessárias

Antes de criar uma transferência do Amazon Redshift:

  1. Verifique se o principal que cria a transferência tem as seguintes permissões no projeto onde está o job de transferência:

    • Permissões bigquery.transfers.update para criar a transferência
    • Permissões bigquery.datasets.get e bigquery.datasets.update no conjunto de dados de destino

    O papel predefinido roles/bigquery.admin do Identity and Access Management (IAM) inclui as permissões bigquery.transfers.update, bigquery.datasets.update e bigquery.datasets.get. Para mais informações sobre os papéis do IAM no serviço de transferência de dados do BigQuery, consulte o controle de acesso.

  2. Consulte a documentação do Amazon S3 para garantir que você tenha configurado as permissões necessárias para ativar a transferência. No mínimo, os dados de origem do Amazon S3 precisam ter a política AmazonS3ReadOnlyAccess gerenciada pelo AWS aplicada a eles.

Criar um conjunto de dados

Crie um conjunto de dados do BigQuery para armazenar os dados. Não é necessário criar tabelas.

Conceder acesso ao cluster do Amazon Redshift

Siga as instruções disponíveis em Configurar regras de entrada para clientes SQL para colocar os endereços IP a seguir na lista de permissões. Inclua na lista de permissões os endereços IP que correspondem à localização do seu conjunto de dados ou todos os endereços IP na tabela abaixo. Esses endereços IP de propriedade do Google são reservados para migrações de dados do Amazon Redshift.

Locais regionais

Descrição da região Nome da região Endereços IP
América
Columbus, Ohio us-east5 34.162.72.184
34.162.173.185
34.162.205.205
34.162.81.45
34.162.182.149
34.162.59.92
34.162.157.190
34.162.191.145
Dallas us-south1 34.174.172.89
34.174.40.67
34.174.5.11
34.174.96.109
34.174.148.99
34.174.176.19
34.174.253.135
34.174.129.163
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 Angeles 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
Norte da Virgínia 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
Oregon 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 do Sul 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
Berlim europe-west10 34.32.28.80
34.32.31.206
34.32.19.49
34.32.33.71
34.32.15.174
34.32.23.7
34.32.1.208
34.32.8.3
Finlândia 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
Frankfurt 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
Madri europe-southwest1 34.175.99.115
34.175.186.237
34.175.39.130
34.175.135.49
34.175.1.49
34.175.95.94
34.175.102.118
34.175.166.114
Milão europe-west8 34.154.183.149
34.154.40.104
34.154.59.51
34.154.86.2
34.154.182.20
34.154.127.144
34.154.201.251
34.154.0.104
Países Baixos 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
Paris europe-west9 34.163.76.229
34.163.153.68
34.155.181.30
34.155.85.234
34.155.230.192
34.155.175.220
34.163.68.177
34.163.157.151
Turim europe-west12 34.17.15.186
34.17.44.123
34.17.41.160
34.17.47.82
34.17.43.109
34.17.38.236
34.17.34.223
34.17.16.47
Varsóvia 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
Zurique 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
Ásia-Pacífico
Délhi 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
Jacarta 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
Mumbai 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
Seul 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
Polônia 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
Sydney 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
Taiwan 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
Tóquio 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
Oriente Médio
Damã me-central2 34.166.20.177
34.166.10.104
34.166.21.128
34.166.19.184
34.166.20.83
34.166.18.138
34.166.18.48
34.166.23.171
Doha me-central1 34.18.48.121
34.18.25.208
34.18.38.183
34.18.33.25
34.18.21.203
34.18.21.80
34.18.36.126
34.18.23.252
Tel Aviv me-west1 34.165.184.115
34.165.110.74
34.165.174.16
34.165.28.235
34.165.170.172
34.165.187.98
34.165.85.64
34.165.245.97
África
Johannesburgo africa-south1 34.35.11.24
34.35.10.66
34.35.8.32
34.35.3.248
34.35.2.113
34.35.5.61
34.35.7.53
34.35.3.17

Locais multirregionais

Descrição multirregional Nome multirregional Endereços IP
Data centers dentro de estados membro da União Europeia1 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
Data centers nos 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 Os dados localizados na multirregião EU não são armazenados nos data centers europe-west2 (Londres) ou europe-west6 (Zurique).

Conceder acesso ao bucket do Amazon S3

É necessário ter um bucket do Amazon S3 para usar como área de teste para transferir os dados do Amazon Redshift para o BigQuery. Para instruções detalhadas, consulte a documentação da Amazon.

  1. Recomendamos que você crie um usuário do IAM dedicado à Amazon e conceda a ele acesso somente leitura ao Amazon Redshift e acesso para leitura e gravação ao Amazon S3. Para concluir essa etapa, aplique as políticas a seguir:

    Permissões de migração do Amazon Redshift

  2. Crie um par de chaves de acesso do usuário do IAM para o Amazon.

Configurar controle de carga de trabalho com uma fila de migração separada

Opcionalmente, é possível definir uma fila do Amazon Redshift para a migração de forma a limitar e separar os recursos usados no processo. É possível configurar essa fila de migração com uma contagem máxima de consultas de simultaneidade. Em seguida, é possível associar um determinado grupo de usuários de migração à fila e usar essas credenciais ao configurar o processo de transferência de dados para o BigQuery. O serviço de transferência tem acesso apenas à fila de migração.

Coletar informações de transferência

Reúna as informações necessárias para configurar a migração com o serviço de transferência de dados do BigQuery:

  • Siga estas instruções para encontrar o URL de JDBC.
  • Encontre o nome e a senha de um usuário com as permissões adequadas para seu banco de dados do Amazon Redshift.
  • Siga as instruções em Conceder acesso ao bucket do Amazon S3 para receber um par de chaves de acesso da AWS.
  • Encontre o URI do bucket do Amazon S3 que você quer usar para a transferência. Recomendamos que você configure uma política de Ciclo de vida para esse bucket, evitando cobranças desnecessárias. O prazo de validade recomendado é de 24 horas, para que haja tempo suficiente para transferir todos os dados para o BigQuery.

Avaliar os dados

Como parte da transferência de dados, o serviço de transferência de dados do BigQuery grava dados do Amazon Redshift no Cloud Storage como arquivos CSV. Se esses arquivos contiverem o caractere ASCII 0, não poderão ser carregados no BigQuery. Sugerimos que você avalie seus dados para determinar se isso pode ser um problema para você. Se for o caso, é possível contornar isso exportando os dados para o Amazon S3 como arquivos Parquet e, em seguida, importando esses arquivos usando o serviço de transferência de dados do BigQuery. Para mais informações, consulte Visão geral das transferências do Amazon S3.

Configurar uma transferência do Amazon Redshift

Selecione uma das seguintes opções:

Console

  1. No Console do Google Cloud, acesse a página BigQuery.

    Vá para BigQuery

  2. Clique em Transferências de dados.

  3. Clique em Criar transferência.

  4. Na seção Tipo de origem, selecione Migração: Amazon Redshift na lista Origem.

  5. Na seção Nome da configuração de transferência, insira um nome para a transferência, como My migration, no campo Nome de exibição. Esse nome pode ter qualquer valor que identifique facilmente a transferência, caso seja necessário modificá-la no futuro.

  6. Na seção Configurações de destino, escolha o conjunto de dados criado, na lista Conjunto de dados.

  7. Na seção Detalhes da fonte de dados, faça o seguinte:

    1. Em URL de conexão de JDBC para Amazon Redshift, forneça o URL de JDBC para acessar o cluster do Amazon Redshift.
    2. Em Nome de usuário do seu banco de dados, digite o nome de usuário do banco de dados do Amazon Redshift que você quer migrar.
    3. Em Senha do seu banco de dados, insira a respectiva senha.

    4. Em ID da chave de acesso e Chave de acesso do secret, insira o par de chaves de acesso obtido em Conceder acesso ao bucket do S3.

    5. Em URI do Amazon S3, insira o URI do bucket do S3 que será utilizada como área de preparo.

    6. Em Esquema do Amazon Redshift, insira o esquema que você está migrando.

    7. Em Padrões de nome da tabela, especifique um nome ou padrão que corresponda aos nomes das tabelas no esquema. Use expressões regulares para especificar o padrão no formato: <table1Regex>;<table2Regex>. Esse padrão precisa seguir a sintaxe de expressão típica de Java. Exemplo:

      • lineitem;ordertb corresponde às tabelas chamadas lineitem e ordertb.
      • .* corresponde a todas as tabelas.

      Deixe esse campo vazio para migrar todas as tabelas do esquema especificado.

    8. Em VPC e intervalo de IP reservado, deixe o campo em branco.

  8. No menu Conta de serviço, selecione uma conta de serviço nas contas de serviço associadas ao seu projeto do Google Cloud. É possível associar uma conta de serviço à transferência em vez de usar suas credenciais de usuário. Para mais informações sobre o uso de contas de serviço com transferências de dados, consulte Usar contas de serviço.

  9. Opcional: na seção Opções de notificação, faça o seguinte:

    1. Clique no botão para ativar as notificações por e-mail. Quando você ativa essa opção, o administrador de transferência recebe uma notificação por e-mail se uma execução de transferência falhar.
    2. Em Selecionar um tópico do Pub/Sub, escolha o nome do tópico ou clique em Criar um tópico. Essa opção configura notificações de execução do Pub/Sub da sua transferência.
  10. Clique em Save.

  11. O Console do Google Cloud exibe todos os detalhes de configuração da transferência, incluindo um Nome de recurso para ela.

bq

Digite o comando bq mk e forneça a sinalização de criação da transferência --transfer_config. As sinalizações a seguir também são obrigatórias:

  • --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 \
    --service_account_name=service_account \
    --params='parameters'

Em que:

  • project_id é o ID do projeto no Google Cloud. Se --project_id não for especificado, o projeto padrão será usado.
  • data_source é a fonte de dados: redshift.
  • dataset é o conjunto de dados de destino do BigQuery para a configuração da transferência.
  • name é o nome de exibição da configuração de transferência. O nome da transferência pode ser qualquer valor que permita identificá-la facilmente, caso precise modificá-la mais tarde.
  • service_account: é o nome da conta de serviço usado para autenticar a transferência. A conta de serviço precisa pertencer ao mesmo project_id usado para criar a transferência e ter todas as permissões necessárias.
  • parameters contém os parâmetros da configuração da transferência criada no formato JSON. Por exemplo, --params='{"param":"param_value"}'.

Os parâmetros necessários em uma configuração de transferência do Amazon Redshift são:

  • jdbc_url: o URL de conexão do JDBC é usado para localizar o cluster do Amazon Redshift;
  • database_username: o nome de usuário para acessar o banco de dados e descarregar tabelas especificadas;
  • database_password: a senha usada com o nome de usuário para acessar seu banco de dados e descarregar tabelas especificadas;
  • access_key_id: o ID da chave de acesso para assinar as solicitações feitas para a AWS;
  • secret_access_key: a chave de acesso secreta usada com o ID da chave de acesso para assinar as solicitações feitas para a AWS;
  • s3_bucket: o URI do Amazon S3 que começa com "s3://" e especifica um prefixo de arquivos temporários a serem usados;
  • redshift_schema: o esquema do Amazon Redshift que contém todas as tabelas a serem migradas;
  • table_name_patterns: os padrões de nome de tabela separados por um ponto e vírgula (;), que são expressões regulares correspondentes às tabelas a serem migradas. Se não for fornecido, todas as tabelas no esquema do banco de dados serão migradas.

Por exemplo, com o comando a seguir, você cria uma transferência do Amazon Redshift chamada My Transfer, com um conjunto de dados de destino mydataset e um projeto com o ID 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

Use o método projects.locations.transferConfigs.create e forneça uma instância do recurso TransferConfig.

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

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

Cotas e limites

O BigQuery tem uma cota de carregamento de 15 TB para cada job de carregamento de cada tabela. Internamente, o Amazon Redshift compacta os dados da tabela. Portanto, o tamanho da tabela exportada será maior do que o informado pelo Amazon Redshift. Se estiver planejando migrar uma tabela com mais de 15 TB, entre em contato com o Cloud Customer Care primeiro.

Usar esse serviço pode gerar custos não previstos pelo Google. Consulte as páginas de preços do Amazon Redshift e do Amazon S3 para mais detalhes.

Devido ao modelo de consistência do Amazon S3, é possível que alguns arquivos não sejam incluídos na transferência para o BigQuery.

A seguir