Migre dados do Amazon Redshift para o AnalyticDB for PostgreSQL utilizando o Alibaba Cloud Data Online Migration ou a ferramenta ossimport.
Pré-requisitos
Instância de origem do Amazon Redshift.
Bucket do Amazon S3 para exportação de dados da instância do Amazon Redshift.
Alibaba Cloud Object Storage Service (OSS) ativado. Para mais informações sobre o OSS, consulte {{XREF_0}}.
-
Bucket do OSS criado. Para mais informações, consulte {{XREF_1}}.
NotaRecomendamos criar o bucket do OSS na mesma região da sua instância do AnalyticDB for PostgreSQL para simplificar a importação de dados no banco de dados.
Crie uma instância do AnalyticDB for PostgreSQL. Para informações sobre como selecionar especificações de instância, consulte {{XREF_2}}.
Seleção de especificações
Selecione as especificações da instância de destino do AnalyticDB for PostgreSQL com base nas especificações da instância de origem do Amazon Redshift.
Uma instância do Amazon Redshift consiste em um nó líder e vários nós de computação.
O nó líder equivale ao nó coordenador do AnalyticDB for PostgreSQL. Ele se comunica com clientes, analisa consultas, elabora planos de execução e distribui tarefas para os nós de computação.
Nó de computação: Equivale a um nó Segment no AnalyticDB for PostgreSQL e consiste em várias fatias de nó. Cada fatia de nó corresponde a um único nó Segment no AnalyticDB for PostgreSQL, sendo responsável pelo armazenamento de dados e pela computação de consultas.
Para determinar as especificações adequadas dos nós do AnalyticDB for PostgreSQL, faça a correspondência com as especificações de cada fatia de nó na instância de origem do Amazon Redshift.
Exemplo
A instância de origem do Amazon Redshift contém quatro nós de computação, e cada nó possui duas fatias. Cada fatia tem 2 núcleos, 16 GB de memória e 1 TB de armazenamento.
Com base nessas especificações, selecione oito nós segment ao criar a instância do AnalyticDB for PostgreSQL. Para cada nó segment, escolha a especificação de 2 núcleos e 16 GB e defina a capacidade de armazenamento como 1.000 GB.
Para mais informações sobre como criar uma instância do AnalyticDB for PostgreSQL, consulte {{XREF_4}}.
Recomendamos selecionar ESSD como tipo de disco de armazenamento. Um ESSD oferece melhor desempenho de I/O do que um Ultra Disk.
Procedimento
Etapa 1: Exportar dados do Amazon Redshift
Utilize o comando UNLOAD para exportar os dados. Para mais informações, consulte a documentação do UNLOAD.
A sintaxe do comando UNLOAD é a seguinte:
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
AUTHORIZATION
[ option [ ... ] ]
WHERE option IS
{ [ FORMAT [ AS ] ] CSV | PARQUET
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| REGION [AS] 'Amazon-region' }
Ao exportar dados, recomenda-se usar o formato FORMAT AS PARQUET ou CSV.
Para aumentar a eficiência da exportação e gerar mais fragmentos de arquivo, ative a exportação paralela usando PARALLEL ON.
Use o parâmetro MAXFILESIZE para gerar múltiplos segmentos de arquivo. Defina o número de segmentos como um múltiplo inteiro do número de nós na sua instância do AnalyticDB for PostgreSQL para melhorar a eficiência da importação paralela via tabela externa do OSS.
Etapa 2: Sincronizar dados para o Alibaba Cloud OSS
Sincronize os dados utilizando um dos dois métodos: Data Online Migration ou a ferramenta ossimport.
Data Online Migration
Faça login no console do Alibaba Cloud Data Transport.
-
Crie um endereço de dados de origem e um endereço de dados de destino para a sincronização.
No painel de navegação à esquerda, escolha .
Clique em Create Data Address para criar um endereço de origem.
-
No painel Create Data Address, configure os seguintes parâmetros e clique em OK.
Parâmetro
Obrigatório
Descrição
Name
Sim
-
O nome deve ter entre 3 e 63 caracteres.
-
O nome pode conter letras minúsculas, dígitos, hifens (-) e sublinhados (_). O nome diferencia maiúsculas de minúsculas.
-
O nome não pode começar com hífen (-) ou sublinhado (_).
Type
Sim
Selecione AWS S3.
Domain name
Sim
Insira o endpoint do serviço AWS S3. Os endpoints estão listados em Amazon S3 endpoints.
AccessKeyId
Sim
Insira a chave de acesso do usuário IAM. Esta chave autentica o acesso de leitura aos dados de origem.
SecretAccessKey
Sim
Bucket
Sim
Insira o nome do bucket de origem do AWS S3.
NotaO nome do bucket não pode começar ou terminar com espaços, quebras de linha ou tabulações.
Prefix
Não
Especifique um prefixo para migrar um subconjunto dos dados.
-
Se especificado, apenas os dados sob esse prefixo serão migrados. O prefixo não deve começar com barra (/), mas deve terminar com uma.
-
Se você omitir este parâmetro, todos os dados do bucket serão migrados.
Tunnel
Não
Selecione o nome do canal a ser usado.
Importante-
Este parâmetro é necessário apenas ao migrar dados por meio de uma conexão Express Connect ou VPN, ou ao migrar dados de um sistema de armazenamento autogerenciado.
-
É obrigatório associar um agente se o destino for um sistema de arquivos local ou se a migração utilizar uma conexão dedicada, por exemplo, para um ambiente de cloud financeira ou Apsara Stack.
Agent
Não
Selecione o nome do agente a ser usado.
Importante-
Este parâmetro é necessário apenas ao migrar dados por meio de uma conexão Express Connect ou VPN, ou ao migrar dados de um sistema de armazenamento autogerenciado.
-
É possível selecionar no máximo 200 agentes para um canal especificado.
-
Clique em Create Data Address novamente para criar um endereço de destino.
-
No painel Create Data Address, configure os seguintes parâmetros e clique em OK.
Parâmetro
Obrigatório
Descrição
Data Type
Sim
Tipo do endereço de dados de destino. Selecione OSS.
Data Name
Sim
Nome do endereço de dados de origem. Deve ter entre 3 e 63 caracteres e não pode conter caracteres especiais, exceto hifens (-) e sublinhados (_).
Data Region
Sim
Região onde reside o endereço de dados de destino.
Enable Transfer Acceleration
Não
Se desejar usar o Data Online Migration junto com o recurso de aceleração de transferência do Object Storage Service (OSS), ative a aceleração de transferência para os buckets. Esse recurso entra em vigor 30 minutos após a ativação. Após ativá-lo, aguarde 30 minutos antes de criar uma tarefa de migração.
ImportanteAo utilizar o recurso de aceleração de transferência para acessar seus buckets do OSS, taxas adicionais de aceleração de transferência são cobradas. Para mais informações, consulte {{XREF_5}}.
OSS Endpoint
Sim
Endpoint do endereço de dados de destino. Selecione um endpoint com base na região onde o endereço de destino reside. Para mais informações, consulte {{XREF_6}}.
NotaAo migrar dados de serviços de cloud de terceiros para o OSS, é necessário acessar o OSS através de um endpoint público pela Internet.
Access Key Id and Access Key Secret
Sim
Par de AccessKey do usuário RAM utilizado para gravar dados no endereço de destino. O OSS usa esse par para verificar se o usuário RAM tem permissões de gravação no endereço de dados de destino.
OSS Bucket
Sim
Bucket do OSS para o qual os dados serão migrados.
OSS Prefix
Não
Prefixo do endereço de dados de destino.
-
Se você especificar um prefixo, os dados de origem serão migrados para o diretório especificado. O valor não pode começar com barra (/) e deve terminar com uma barra (/). Exemplo:
data/to/oss/. -
Se nenhum prefixo for especificado, os dados de origem serão migrados para o diretório raiz do bucket de destino.
ImportanteSe o nome de um arquivo de origem começar com barra (/), será obrigatório especificar um prefixo do OSS ao definir o endereço de dados de destino. Caso contrário, a tarefa de migração falhará. Por exemplo, se o nome do arquivo a ser migrado for /test/test.png, você deverá especificar um prefixo como oss/. Após a conclusão da migração, o nome do arquivo mudará de /test/test.png para oss//test/test.png.
-
-
Crie uma tarefa de migração online.
No painel de navegação à esquerda, escolha .
Clique em Create Data Migration Task.
No painel Create Data Migration Task, leia os termos de serviço, selecione I understand the preceding terms and want to activate Data Transport e clique em Next.
Na caixa de diálogo Charges, clique em Create.
-
Na aba Configure Task, configure os seguintes parâmetros e clique em Next.
Parâmetro
Obrigatório
Descrição
Job Name
Sim
Nome do endereço de dados de origem. Deve ter entre 3 e 63 caracteres e não pode conter caracteres especiais, exceto hifens (-) e sublinhados (_).
Source Data Address
Sim
Endereço de dados de origem criado anteriormente.
Destination Data Address
Sim
Endereço de dados de destino criado anteriormente.
Specified Directory
Não
Diretórios nos quais os arquivos e subdiretórios serão migrados ou não. Valores válidos:
-
Do not filter: migra todos os dados do endereço de origem.
-
Exclude: não migra os arquivos ou subdiretórios nos diretórios especificados.
Por exemplo, para migrar todos os diretórios dentro de
root_dir/, excetoroot_dir/bad_sub1/eroot_dir/bad_sub2/, selecione esta opção e especifiquebad_sub1/ebad_sub2/. -
Contain: migra apenas os arquivos e subdiretórios nos diretórios especificados.
Por exemplo, para migrar apenas
root_dir/good_sub1/eroot_dir/good_sub2/dentro deroot_dir/, selecione esta opção e especifiquegood_sub1/egood_sub2/.
Nota-
Um nome de diretório pode conter apenas dígitos e letras. O uso de caracteres especiais pode causar falha na tarefa de migração.
-
Um nome de diretório não pode começar com barra (/) ou barra invertida (\), nem conter barras duplas (//), pontos duplos (..) ou aspas duplas ("). A string composta por todos os nomes de diretórios especificados não pode exceder 10 KB.
-
Um nome de diretório deve terminar com barra (/). Por exemplo, você pode especificar
docs/como nome do diretório. -
É possível especificar até 20 diretórios do tipo Exclude ou Contain.
Migration Type
Sim
Modo de migração de dados. Valores válidos:
-
Full: O sistema migra todos os dados do endereço de origem para o destino. É necessário configurar o parâmetro Start Time Point of File. O sistema migra todos os dados cuja última modificação seja posterior ao horário especificado. Após a migração completa, a tarefa é encerrada.
Se houver alterações nos dados de origem após a conclusão da tarefa, envie outra tarefa para migrar todos os dados. Nesse caso, o sistema migrará apenas os dados alterados.
-
Incremental: O sistema executa tarefas de migração com base nos valores definidos para Migration Interval e Migration Times.
-
Configure o parâmetro Start Time Point of File. Na primeira migração, o sistema transfere todos os dados modificados após o horário especificado. Concluída a primeira etapa, a migração incremental ocorre conforme o intervalo definido em Migration Interval. Em cada ciclo incremental, apenas os dados criados ou modificados entre o início da migração anterior e o início da atual são transferidos.
-
Se o parâmetro Migration Times for definido como N, uma migração completa será executada uma vez, seguida de (N - 1) migrações incrementais.
Por exemplo, se a hora atual for 08:00 de 10 de março de 2019, e você definir Migration Interval como 1, Migration Times como 5 e Start Time Point of File como 08:00 de 5 de março de 2019: na primeira execução, o sistema migra todos os arquivos modificados entre 08:00 de 5 de março e 08:00 de 10 de março. Supondo que essa etapa leve uma hora, a segunda migração começará às 10:00 de 10 de março (uma hora de processo + uma hora de intervalo). A segunda migração transferirá arquivos modificados entre 08:00 e 10:00 de 10 de março. A tarefa total consistirá em uma migração completa e quatro incrementais.
-
ImportanteAntes do início da migração completa ou incremental, o sistema compara os arquivos de origem e destino. Se houver arquivos com o mesmo nome, o arquivo de destino será sobrescrito quando uma das seguintes condições for atendida:
-
Os valores de Content-Type dos arquivos de origem e destino são diferentes.
-
A última modificação do arquivo de origem é mais recente que a do arquivo de destino.
-
O tamanho do arquivo de origem difere do tamanho do arquivo de destino.
Start Time Point of File
Sim
Horário para filtrar os dados a serem migrados. O sistema migra dados criados ou modificados após esse momento. Valores válidos:
-
All: migra todos os arquivos.
-
Assign: migra apenas arquivos criados ou modificados após o horário especificado.
Por exemplo, se definido como 08:00:00 de 1º de novembro de 2018, apenas arquivos criados ou modificados após esse momento serão migrados.
Migration Interval
Parâmetro obrigatório se Migration Type for definido como Incremental.
Valor padrão: 1. Valor máximo: 24. Unidade: horas.
Migration Times
Parâmetro obrigatório se Migration Type for definido como Incremental.
Valor padrão: 1. Valor máximo: 30.
File Overwrite Method
Sim
Método usado para processar arquivos de origem com o mesmo nome de arquivos no destino. Valores válidos:
-
LastModified: Se houver coincidência de nomes, o sistema compara a propriedade LastModified dos arquivos.
-
Se a modificação do arquivo de origem for mais recente que a do destino, o arquivo de origem será migrado e sobrescreverá o de destino.
-
Se a modificação do arquivo de origem for anterior à do destino, o arquivo de origem não será migrado e o de destino será mantido.
-
Se ambos tiverem a mesma data de modificação, o sistema verifica as propriedades Size e Content-Type.
Se Size e Content-Type forem idênticos, o arquivo de origem não será migrado. Se houver diferença em pelo menos uma dessas propriedades, o arquivo de origem será migrado e sobrescreverá o de destino.
-
-
Condition: Em caso de nomes iguais, o sistema compara LastModified, Size e Content-Type.
-
Se todas as propriedades forem idênticas, o arquivo de origem não será migrado.
-
Se houver diferença em qualquer propriedade, o arquivo de origem será migrado e sobrescreverá o de destino.
-
-
All: Se houver coincidência de nomes, o sistema não faz comparações e sobrescreve diretamente o arquivo de destino com o de origem.
-
No: Se houver coincidência de nomes, o sistema não faz comparações e ignora o arquivo de origem na migração.
Aviso-
Ao selecionar Condition ou LastModified, arquivos mais antigos podem sobrescrever arquivos mais recentes.
-
Ao selecionar Condition ou LastModified, certifique-se de que os arquivos de origem possuam valores válidos para LastModified, Size e Content-Type. Caso contrário, a política de sobrescrita pode falhar e os dados podem não ser migrados conforme esperado.
-
-
-
Na aba Performance Tuning, na seção Data Estimation, insira o Size of Data to Be Migrated e o Number of Files to Be Migrated.
NotaPara garantir uma migração tranquila, estime os dados com a maior precisão possível. Para mais informações, consulte {{XREF_7}}.
-
Opcional: Na aba Performance Tuning, na seção Bandwidth Throttling, defina Time Range (Hour) e Max Bandwidth e clique em Add.
NotaPara evitar impactos nos seus negócios online, recomendamos definir o Time Range (Hour) e a Max Bandwidth para migração com base nos horários de pico e fora de pico do seu negócio.
Clique em Create e aguarde a conclusão da tarefa de migração.
ossimport
-
Baixe e instale o ossimport no modo standalone. Para mais informações, consulte {{XREF_8}}.
A estrutura de arquivos do ossimport no modo standalone é a seguinte:
ossimport ├── bin │ └── ossimport2.jar # A full JAR that includes Master, Worker, TaskTracker, and Console modules ├── conf │ ├── local_job.cfg # Job configuration file │ └── sys.properties # System runtime parameter configuration file ├── console.bat # Windows command-line interface (CLI) for distributed task submission ├── console.sh # Linux CLI for distributed task submission ├── import.bat # One-click import on Windows. Runs the migration task configured in conf/local_job.cfg, including startup, migration, validation, and retries. ├── import.sh # One-click import on Linux. Runs the migration task configured in conf/local_job.cfg, including startup, migration, validation, and retries. ├── logs # Log directory └── README.md # Documentation. We strongly recommend that you read this file *before use*. -
Configure o ossimport no modo standalone.
Modifique os seguintes parâmetros no arquivo de configuração conf/local_job.cfg.
srcType=s3 srcAccessKey=<Amazon AccessKey ID> srcSecretKey=<Amazon AccessKey Secret> srcDomain=<Domain name of the Amazon S3 region> srcBucket=<Name of the Amazon S3 bucket> destAccessKey=<Alibaba Cloud AccessKey ID> destSecretKey=<Alibaba Cloud AccessKey Secret> destDomain=<Endpoint of the OSS region> destBucket=<Name of the OSS bucket> destPrefix= isSkipExistFile=truePara mais informações sobre a configuração do ossimport, consulte {{XREF_9}}.
Execute o ossimport para sincronizar dados com o OSS. Para mais informações sobre o ossimport no modo standalone, consulte {{XREF_10}}.
Etapa 3: Criar tabelas de destino
Crie tabelas de destino na instância do AnalyticDB for PostgreSQL com a mesma estrutura das tabelas de origem do Amazon Redshift. Para a sintaxe de criação de tabelas, consulte {{XREF_11}}.
Se precisar modificar definições DDL para objetos como schemas, tabelas, funções e views, consulte {{XREF_12}}.
Etapa 4: Importar dados do OSS
Importe dados para o AnalyticDB for PostgreSQL usando o comando COPY ou uma tabela externa do OSS:
Para importar dados do OSS usando o comando COPY, consulte {{XREF_13}}.
Para importar dados do OSS usando uma tabela externa do OSS, consulte {{XREF_14}}.
Conversão de sintaxe DDL
A sintaxe DDL do Amazon Redshift difere da sintaxe do AnalyticDB for PostgreSQL. Converta as seguintes instruções DDL antes da migração.
Criar schema
Crie um schema com base na sintaxe do AnalyticDB for PostgreSQL. Veja um exemplo abaixo:
CREATE SCHEMA schema1 AUTHORIZATION xxxpoc;
GRANT ALL ON SCHEMA schema1 TO xxxpoc;
GRANT ALL ON SCHEMA schema1 TO public;
COMMENT ON SCHEMA model IS 'for xxx migration poc test';
CREATE SCHEMA oss_external_table AUTHORIZATION xxxpoc;
Criar função
AnalyticDB for PostgreSQL não é compatível com algumas funções SQL do Amazon Redshift. Personalize ou reescreva essas funções. Por exemplo:
-
Substitua
CONVERT_TIMEZONE(a,b,c)pela seguinte instrução:timezone(b, timezone(a,c)) -
Substitua
GETDATE()pela seguinte instrução:current_timestamp(0)::timestamp -
Substitua ou otimize uma função definida pelo usuário (UDF). Abaixo está um exemplo de função no Redshift:
CREATE OR REPLACE FUNCTION public.f_jdate(dt timestamp WITHOUT time zone) RETURNS character varying AS ' from datetime import timedelta, datetime if dt.hour < 4: d = timedelta(days=-1) dt = dt + d return str(dt.date())' LANGUAGE plpythonu IMMUTABLE; COMMIT;Use a seguinte instrução para substituir a função acima:
to_char(a - interval '4 hour', 'yyyy-mm-dd') -
Outras funções padrão do Amazon Redshift.
Consulte a documentação do PostgreSQL sobre Funções e Operadores para ajudar a modificar ou implementar funções incompatíveis entre o Amazon Redshift e o AnalyticDB for PostgreSQL. Exemplos de funções incompatíveis incluem:
Criar tabela
-
Modifique o nome da tabela
O comprimento máximo de um nome de tabela no Amazon Redshift é de 127 bytes, enquanto no AnalyticDB for PostgreSQL o padrão é 63 bytes. Encurte quaisquer nomes de objetos (como tabelas, funções ou views) que excedam esse limite.
-
Modifique o algoritmo de compressão
Remova
ENCODE XXXda instruçãoCREATE TABLEdo Amazon Redshift e substitua pela seguinte cláusula:WITH (COMPRESSTYPE={ZLIB|ZSTD|RLE_TYPE|NONE})Para informações sobre os algoritmos de compressão suportados pelo AnalyticDB for PostgreSQL, consulte {{XREF_15}}.
-
Modifique a chave de distribuição
O Amazon Redshift suporta três estilos de distribuição. Modifique a chave de distribuição conforme as regras a seguir:
EVEN: substitua por
DISTRIBUTED RANDOMLY.KEY: substitua por
DISTRIBUTED BY (column, [ ... ] ).ALL: substitua por
DISTRIBUTED REPLICATED.
-
Modifique a chave de ordenação
Remova a opção COMPOUND ou INTERLEAVED da cláusula de chave de ordenação do Amazon Redshift
[ COMPOUND | INTERLEAVED ] SORTKEY (column_name [, ...] ) ]e substitua pela seguinte cláusula:ORDER BY (column, [ ... ])
Veja alguns exemplos abaixo:
-
Exemplo 1
Instrução
CREATE TABLEno Amazon Redshift:CREATE TABLE schema1.table1 ( filed1 VARCHAR(100) ENCODE lzo, filed2 INTEGER DISTKEY, filed3 INTEGER, filed4 BIGINT ENCODE lzo, filed5 INTEGER ) INTERLEAVED SORTKEY ( filed1, filed2 );Instrução
CREATE TABLEconvertida no AnalyticDB for PostgreSQL:CREATE TABLE schema1.table1 ( filed1 VARCHAR(100) , filed2 INTEGER, filed3 INTEGER, filed4 BIGINT, filed5 INTEGER ) WITH(APPENDONLY=true,ORIENTATION=column,COMPRESSTYPE=zstd) DISTRIBUTED BY (filed2) ORDER BY (filed1, filed2); -- Sort SORT schema1.table1; MULTISORT schema1.table1; -
Exemplo 2
Instrução
CREATE TABLEno Amazon Redshift, incluindo as opções ENCODE e SORTKEY:CREATE TABLE schema2.table2 ( filed1 VARCHAR(50) ENCODE lzo, filed2 VARCHAR(50) ENCODE lzo, filed3 VARCHAR(20) ENCODE lzo, ) DISTSTYLE EVEN INTERLEAVED SORTKEY ( filed1 );Instrução
CREATE TABLEconvertida no AnalyticDB for PostgreSQL:CREATE TABLE schema2.table2 ( filed1 VARCHAR(50), filed2 VARCHAR(50), filed3 VARCHAR(20) ) WITH(APPENDONLY=true, ORIENTATION=column, COMPRESSTYPE=zstd) DISTRIBUTED randomly ORDER BY (filed1); -- Sort SORT schema2.table2; MULTISORT schema2.table2;NotaPara mais informações sobre chaves de ordenação, consulte {{XREF_16}}.
Criar view
Converta a instrução CREATE VIEW do Amazon Redshift em uma instrução SQL compatível com a sintaxe do AnalyticDB for PostgreSQL. As regras de conversão são semelhantes às do CREATE TABLE.
A cláusula WITH NO SCHEMA BINDING não é suportada.
Documentos relacionados
Para informações sobre migração automática, consulte {{XREF_17}}.