Usando o Amazon S3 como fonte para AWS DMS - AWS Database Migration Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando o Amazon S3 como fonte para AWS DMS

Você pode migrar dados de um bucket do Amazon S3 usando. AWS DMS Para fazer isso, conceda acesso a um bucket do Amazon S3 que contenha um ou mais arquivos de dados. Neste bucket do S3, inclua um arquivo JSON que descreve o mapeamento entre os dados e as tabelas de banco de dados referentes aos dados nesses arquivos.

Os arquivos de dados de origem devem estar presentes no bucket do Amazon S3 para que a carga máxima seja iniciada. Especifique o nome do bucket utilizando o parâmetro bucketName.

Os arquivos de dados de origem podem estar nos seguintes formatos:

Para arquivos de dados de origem no formato de valores separados por vírgula (.csv), nomeie-os usando a seguinte convenção de nomenclatura. Nessa convenção, schemaName é o esquema de origem, e tableName é o nome de uma tabela dentro desse esquema.

/schemaName/tableName/LOAD001.csv /schemaName/tableName/LOAD002.csv /schemaName/tableName/LOAD003.csv ...

Por exemplo, suponha que os arquivos de dados estejam no mybucket, no seguinte caminho do Amazon S3.

s3://mybucket/hr/employee

No momento do carregamento, AWS DMS presume que o nome do esquema de origem é hr e que o nome da tabela de origem é. employee

Além disso bucketName (o que é obrigatório), você pode, opcionalmente, fornecer um bucketFolder parâmetro para especificar onde AWS DMS procurar arquivos de dados no bucket do Amazon S3. Continuando com o exemplo anterior, se você bucketFolder definir comosourcedata, AWS DMS lê os arquivos de dados no caminho a seguir.

s3://mybucket/sourcedata/hr/employee

É possível especificar o delimitador de coluna, o delimitador de linha, o indicador de valor nulo e outros parâmetros utilizando os atributos de conexão adicionais. Para ter mais informações, consulte Configurações de endpoint para o Amazon S3 como fonte para AWS DMS.

É possível especificar o proprietário do bucket e evitar o corte utilizando a configuração ExpectedBucketOwner do endpoint do Amazon S3, conforme mostrado a seguir. Ao fazer uma solicitação para testar uma conexão ou executar uma migração, o S3 verifica o ID da conta do proprietário do bucket em relação ao parâmetro especificado.

--s3-settings='{"ExpectedBucketOwner": "AWS_Account_ID"}'

Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS

Além dos arquivos de dados, você também deve fornecer uma definição de tabela externa. Uma definição de tabela externa é um documento JSON que descreve como AWS DMS interpretar os dados do Amazon S3. O tamanho máximo deste documento é 2 MB. Se você criar um endpoint de origem usando o AWS DMS Management Console, poderá inserir o JSON diretamente na caixa de mapeamento de tabelas. Se você usar o AWS Command Line Interface (AWS CLI) ou a AWS DMS API para realizar migrações, poderá criar um arquivo JSON para especificar a definição da tabela externa.

Suponha que você tem um arquivo de dados que inclui o seguinte.

101,Smith,Bob,2014-06-04,New York 102,Smith,Bob,2015-10-08,Los Angeles 103,Smith,Bob,2017-03-13,Dallas 104,Smith,Bob,2017-03-13,Dallas

Veja a seguir um exemplo de definição de tabela externa para esses dados.

{ "TableCount": "1", "Tables": [ { "TableName": "employee", "TablePath": "hr/employee/", "TableOwner": "hr", "TableColumns": [ { "ColumnName": "Id", "ColumnType": "INT8", "ColumnNullable": "false", "ColumnIsPk": "true" }, { "ColumnName": "LastName", "ColumnType": "STRING", "ColumnLength": "20" }, { "ColumnName": "FirstName", "ColumnType": "STRING", "ColumnLength": "30" }, { "ColumnName": "HireDate", "ColumnType": "DATETIME" }, { "ColumnName": "OfficeLocation", "ColumnType": "STRING", "ColumnLength": "20" } ], "TableColumnsTotal": "5" } ] }

Os elementos neste documento JSON são os seguintes:

TableCount: o número de tabelas de origem. Neste exemplo, há somente uma tabela.

Tables: uma matriz que consiste em um mapa JSON por tabela de origem. Neste exemplo, há somente um mapa. Cada mapa consiste nos seguintes elementos:

  • TableName: o nome da tabela de origem.

  • TablePath: o caminho no bucket do Amazon S3 em que o AWS DMS pode encontrar o arquivo de carga máxima de dados. Se um valor bucketFolder for especificado, esse valor será pré-associado ao caminho.

  • TableOwner: o nome do esquema desta tabela.

  • TableColumns: uma matriz de um ou mais mapas, cada um dos quais descrevendo uma coluna na tabela de origem:

    • ColumnName: o nome de uma coluna na tabela de origem.

    • ColumnType: o tipo de dados da coluna. Para tipos de dados válidos, consulte Tipos de dados de origem do Amazon S3.

    • ColumnLength: o número de bytes nesta coluna. O comprimento máximo da coluna é limitado a 2147483647 bytes (2.047 MegaBytes), pois uma fonte S3 não oferece suporte ao modo FULL LOB. ColumnLengthé válido para os seguintes tipos de dados:

      • BYTE

      • STRING

    • ColumnNullable: um valor booleano que será true, se esta coluna puder conter valores NULL (padrão=false).

    • ColumnIsPk: um valor booleano que será true, se esta coluna fizer parte da chave primária (padrão=false).

    • ColumnDateFormat: o formato de data de entrada para uma coluna com os tipos DATE, TIME e DATETIME e utilizado para analisar uma string de dados em um objeto de data. Os possíveis valores incluem:

      - YYYY-MM-dd HH:mm:ss - YYYY-MM-dd HH:mm:ss.F - YYYY/MM/dd HH:mm:ss - YYYY/MM/dd HH:mm:ss.F - MM/dd/YYYY HH:mm:ss - MM/dd/YYYY HH:mm:ss.F - YYYYMMdd HH:mm:ss - YYYYMMdd HH:mm:ss.F
  • TableColumnsTotal: o número total de colunas. Esse número deve corresponder ao número de elementos no array TableColumns.

Se você não especificar o contrário, AWS DMS presume que ColumnLength seja zero.

nota

Nas versões compatíveis do AWS DMS, os dados de origem do S3 também podem conter uma coluna de operação opcional como a primeira coluna antes do valor da TableName coluna. Essa coluna de operação identifica a operação (INSERT) utilizada para migrar os dados para um endpoint de destino do S3 durante a carga máxima.

Se presente, o valor dessa coluna é o caractere inicial da palavra-chave de operação INSERT (I). Se especificado, essa coluna geralmente indica que a origem do S3 foi criada pelo DMS como um destino do S3 durante uma migração anterior.

Nas versões do DMS anteriores a 3.4.2, essa coluna não estava presente nos dados de origem do S3 criados em uma carga máxima do DMS anterior. Adicionar essa coluna aos dados de destino do S3 permite que o formato de todas as linhas gravadas no destino do S3 seja consistente se forem gravadas durante uma carga máxima ou durante uma carga de CDC. Para obter mais informações sobre as opções de formatação de dados de destino do S3, consulte Indicar operações de banco de dados de origem em dados migrados do S3.

Para obter uma coluna do tipo NUMERIC, especifique a precisão e a escala. Precision é o número total de dígitos em um número, e scale é o número de dígitos à direita do ponto decimal. Você utiliza os elementos ColumnPrecision e ColumnScale para isso, como mostrado a seguir.

... { "ColumnName": "HourlyRate", "ColumnType": "NUMERIC", "ColumnPrecision": "5" "ColumnScale": "2" } ...

Para uma coluna do tipo DATETIME com dados que contêm segundos fracionários, especifique a escala. A Escala é o número de dígitos dos segundos fracionários e pode variar de 0 a 9. Você utiliza o elemento ColumnScale para isso, conforme mostrado a seguir.

... { "ColumnName": "HireDate", "ColumnType": "DATETIME", "ColumnScale": "3" } ...

Se você não especificar o contrário, AWS DMS assume que ColumnScale é zero e trunca os segundos fracionários.

Utilizar a CDC com o Amazon S3 como origem do AWS DMS

Depois de AWS DMS realizar um carregamento completo de dados, ele pode, opcionalmente, replicar as alterações de dados no endpoint de destino. Para fazer isso, você carrega arquivos de captura de dados alterados (arquivos CDC) no seu bucket do Amazon S3. AWS DMS lê esses arquivos CDC quando você os carrega e, em seguida, aplica as alterações no endpoint de destino.

Os arquivos de CDC são nomeados como segue:

CDC00001.csv CDC00002.csv CDC00003.csv ...
nota

Para replicar com êxito os arquivos CDC na pasta de dados de alteração, faça upload em ordem léxica (sequencial). Por exemplo, faça upload do arquiva CDC00002.csv antes do arquiva CDC00003.csv. Caso contrário, CDC00002.csv será ignorado e não será replicado se carregado depois da CDC00003.csv. No entanto, o arquiva CDC00004.csv será replicado com êxito se carregado depois da CDC00003.csv.

Para indicar onde AWS DMS encontrar os arquivos, especifique o cdcPath parâmetro. Continuando o exemplo anterior, se você definir cdcPath como changedata, o AWS DMS lerá os arquivos de CDC no seguinte caminho.

s3://mybucket/changedata

Se você definir cdcPath como changedata e bucketFolder como myFolder, o AWS DMS lerá os arquivos de CDC no caminho a seguir.

s3://mybucket/myFolder/changedata

Os registros em um arquivo de CDC são formatados da seguinte forma:

  • Operação: a operação de alteração a ser executada: INSERT ou I, UPDATE ou U ou DELETE ou D. Esses valores de caractere e palavras-chave não fazem distinção entre maiúsculas e minúsculas.

    nota

    Nas AWS DMS versões suportadas, AWS DMS pode identificar a operação a ser executada para cada registro de carga de duas maneiras. AWS DMS pode fazer isso a partir do valor da palavra-chave do registro (por exemplo,INSERT) ou do caractere inicial da palavra-chave (por exemplo,I). Nas versões anteriores, AWS DMS reconhecia a operação de carregamento somente a partir do valor completo da palavra-chave.

    Nas versões anteriores do AWS DMS, o valor completo da palavra-chave era gravado para registrar os dados do CDC. Além disso, as versões anteriores gravavam o valor da operação para qualquer destino do S3 utilizando apenas a inicial da palavra-chave.

    O reconhecimento de ambos os formatos permite AWS DMS lidar com a operação, independentemente de como a coluna de operação é gravada para criar os dados de origem do S3. Essa abordagem é compatível com a utilização de dados de destino do S3 como origem para uma migração posterior. Com essa abordagem, você não precisa alterar o formato de nenhum valor inicial de palavra-chave que aparece na coluna da operação de origem do S3 posterior.

  • Nome da tabela: o nome da tabela de origem.

  • Nome do esquema: o nome do esquema de origem.

  • Dados: uma ou mais colunas que representam os dados a serem alterados.

Veja a seguir um exemplo de arquivo de CDC para uma tabela chamada employee.

INSERT,employee,hr,101,Smith,Bob,2014-06-04,New York UPDATE,employee,hr,101,Smith,Bob,2015-10-08,Los Angeles UPDATE,employee,hr,101,Smith,Bob,2017-03-13,Dallas DELETE,employee,hr,101,Smith,Bob,2017-03-13,Dallas

Pré-requisitos ao usar o Amazon S3 como fonte para AWS DMS

Para usar o Amazon S3 como fonte AWS DMS, seu bucket S3 de origem deve estar na mesma AWS região da instância de replicação do DMS que migra seus dados. Além disso, a conta da AWS que você utiliza para a migração deve ter acesso de leitura ao bucket de origem. Para a AWS DMS versão 3.4.7 e superior, o DMS deve acessar o bucket de origem por meio de um VPC endpoint ou de uma rota pública. Para obter informações sobre VPC endpoints, consulte. Configurar endpoints da VPC como endpoints de origem e de destino do AWS

A função AWS Identity and Access Management (IAM) atribuída à conta de usuário usada para criar a tarefa de migração deve ter o seguinte conjunto de permissões.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

A função AWS Identity and Access Management (IAM) atribuída à conta de usuário usada para criar a tarefa de migração deve ter o seguinte conjunto de permissões se o controle de versão estiver habilitado no bucket do Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "S3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::mybucket*/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucket*" ] } ] }

Limitações ao usar o Amazon S3 como fonte para AWS DMS

As limitações a seguir se aplicam ao utilizar o Amazon S3 como origem:

  • Não ative o versionamento para o S3. Se o versionamento do S3 for necessário, utilize políticas de ciclo de vida para excluir ativamente as versões antigas. Caso contrário, é possível encontrar falhas na conexão de teste de endpoint devido ao tempo limite de uma chamada list-object do S3. Para criar uma política de ciclo de vida para um bucket do S3, consulte Gerenciar o ciclo de vida do armazenamento. Para excluir a versão de um objeto do S3, consulte Excluir versões de objetos de um bucket com versionamento ativado.

  • Um bucket do S3 ativado para VPC (VPC do gateway) é compatível com as versões 3.4.7 e superiores.

  • O MySQL converte o tipo de dados em. time string Para ver os valores do tipo de time dados no MySQL, defina a coluna na tabela de destino como string e defina a configuração do modo de preparação da tabela de destino da tarefa como Truncar.

  • AWS DMS usa o tipo de BYTE dados internamente para dados em ambos os tipos BYTE de BYTES dados.

  • Os endpoints de origem do S3 não oferecem suporte ao recurso de recarga de tabela do DMS.

  • AWS DMS não suporta o modo LOB completo com o Amazon S3 como fonte.

As seguintes limitações se aplicam ao usar arquivos no formato Parquet no Amazon S3 como fonte:

  • As datas entram MMYYYYDD ou não DDMMYYYY são suportadas pelo recurso de particionamento de data do S3 Parquet Source.

Configurações de endpoint para o Amazon S3 como fonte para AWS DMS

É possível utilizar as configurações do endpoint para configurar o banco de dados de origem do Amazon S3 de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de origem usando o AWS DMS console ou usando o create-endpoint comando no AWS CLI, com a sintaxe --s3-settings '{"EndpointSetting": "value", ...}' JSON.

A tabela a seguir mostra as configurações de endpoint que é possível utilizar com o Amazon S3 como origem.

Opção Descrição
BucketFolder

(Opcional) Um nome da pasta no bucket do S3. Se o atributo de origem for fornecido, os arquivos de dados de origem e os arquivos da CDC serão lidos no caminho s3://myBucket/bucketFolder/schemaName/tableName/ e s3://myBucket/bucketFolder/ respectivamente. Se esse atributo não for especificado, o caminho utilizado será schemaName/tableName/.

'{"BucketFolder": "sourceData"}'

BucketName

O nome do bucket do S3.

'{"BucketName": "myBucket"}'

CdcPath A localização dos arquivos da CDC. Esse atributo é necessário quando uma tarefa captura dados de alterações; caso contrário, ele é opcional. Se CdcPath estiver presente, AWS DMS lê os arquivos CDC desse caminho e replica as alterações de dados no endpoint de destino. Para ter mais informações, consulte Utilizar a CDC com o Amazon S3 como origem do AWS DMS.

'{"CdcPath": "changeData"}'

CsvDelimiter

O delimitador utilizado para separar colunas nos arquivos de origem. O padrão é uma vírgula. Veja a seguir um exemplo.

'{"CsvDelimiter": ","}'

CsvNullValue

Uma string definida pelo usuário que é AWS DMS tratada como nula ao ler a partir da fonte. O padrão é uma string vazia. Se você não definir esse parâmetro, AWS DMS tratará uma string vazia como um valor nulo. Se você definir esse parâmetro como uma string como “\ N”, AWS DMS tratará essa string como o valor nulo e tratará as strings vazias como um valor de string vazio.

CsvRowDelimiter

O delimitador utilizado para separar linhas nos arquivos de origem. O padrão é uma nova linha (\n).

'{"CsvRowDelimiter": "\n"}'

DataFormat

Defina esse valor Parquet para ler dados no formato Parquet.

'{"DataFormat": "Parquet"}'

IgnoreHeaderRows

Quando esse valor é definido como 1, AWS DMS ignora o cabeçalho da primeira linha em um arquivo.csv. Um valor de 1 habilita o recurso, um valor de 0 desabilita o recurso.

O padrão é 0.

'{"IgnoreHeaderRows": 1}'

Rfc4180

Quando esse valor é definido como true ou y, as aspas duplas de abertura devem ser seguidas por aspas duplas de fechamento. Essa formatação está em conformidade com RFC 4180. Quando esse valor for definido para false ou n, os literais das strings serão copiados no destino como estão. Nesse caso, um delimitador (linha ou coluna) sinaliza o final do campo. Assim, você não poderá utilizar um delimitador como parte da string, pois ele sinalizará o final do valor.

O padrão é true.

Valores válidos: true, false, y, n

'{"Rfc4180": false}'

Tipos de dados de origem do Amazon S3

Migração de dados que usa o Amazon S3 como fonte para AWS DMS necessidades de mapear dados do Amazon S3 AWS DMS para tipos de dados. Para ter mais informações, consulte Definindo tabelas externas para o Amazon S3 como fonte para AWS DMS.

Para obter informações sobre como visualizar o tipo de dados mapeado no destino, consulte a seção relativa ao endpoint de destino que você está usando.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulteTipos de dados do AWS Database Migration Service.

Os seguintes tipos de AWS DMS dados são usados com o Amazon S3 como fonte:

Usando arquivos no formato Parquet no Amazon S3 como fonte para AWS DMS

Na AWS DMS versão 3.5.3 e posterior, você pode usar arquivos no formato Parquet em um bucket do S3 como fonte para replicação de carga completa ou CDC.

O DMS só oferece suporte a arquivos no formato Parquet como fonte que o DMS gera ao migrar dados para um endpoint de destino do S3. Os nomes dos arquivos devem estar no formato compatível, ou o DMS não os incluirá na migração.

Para arquivos de dados de origem no formato Parquet, eles devem estar na seguinte pasta e convenção de nomenclatura.

schema/table1/LOAD00001.parquet schema/table2/LOAD00002.parquet schema/table2/LOAD00003.parquet

Para arquivos de dados de origem para dados CDC no formato Parquet, nomeie-os e armazene-os usando a seguinte pasta e convenção de nomenclatura.

schema/table/20230405-094615814.parquet schema/table/20230405-094615853.parquet schema/table/20230405-094615922.parquet

Para acessar arquivos no formato Parquet, defina as seguintes configurações de endpoint:

  • Defina DataFormat como Parquet.

  • Não defina a cdcPath configuração. Certifique-se de criar seus arquivos no formato Parquet nas pastas de esquema/tabela especificadas.

Para obter mais informações sobre as configurações dos endpoints do S3, consulte S3Settings na Referência da API.AWS Database Migration Service

Tipos de dados compatíveis com arquivos no formato Parquet

AWS DMS suporta os seguintes tipos de dados de origem e destino ao migrar dados de arquivos no formato Parquet. Certifique-se de que sua tabela de destino tenha colunas dos tipos de dados corretos antes de migrar.

Tipo de dados de origem Tipo de dados de destino
BYTE BINARY
DATE DATE32
TIME TIME32
DATETIME TIMESTAMP
INT1 INT8
INT2 INT16
INT4 INT32
INT8 INT64
NUMERIC DECIMAL
REAL4 FLOAT
REAL8 DOUBLE
STRING STRING
UINT1 UINT8
UINT2 UINT16
UINT4 UINT32
UINT8 UINT
WSTRING STRING
BLOB BINARY
NCLOB STRING
CLOB STRING
BOOLEAN BOOL