

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 destino para AWS Database Migration Service
<a name="CHAP_Target.S3"></a>

Você pode migrar dados para o Amazon S3 AWS DMS usando qualquer uma das fontes de banco de dados suportadas. Ao usar o Amazon S3 como destino em uma AWS DMS tarefa, os dados de carga total e de captura de dados alterados (CDC) são gravados no formato de valores separados por vírgula (.csv) por padrão. Para obter mais opções de armazenamento compacto e de consultas mais rápidas, você também tem a opção de ter os dados gravados no formato do Apache Parquet (.parquet). 

AWS DMS nomeia arquivos criados durante um carregamento completo usando um contador hexadecimal incremental — por exemplo, .csv,... LOAD00001 LOAD00002 , LOAD00009, LOAD0000 A e assim por diante para arquivos.csv. AWS DMS nomeia arquivos CDC usando carimbos de data/hora, por exemplo, 20141029-1134010000.csv. Para cada tabela de origem que contém registros, AWS DMS cria uma pasta na pasta de destino especificada (se a tabela de origem não estiver vazia). AWS DMS grava todos os arquivos CDC e de carga completa no bucket do Amazon S3 especificado. Você pode controlar o tamanho dos arquivos AWS DMS criados usando a configuração do [MaxFileSize](https://docs.aws.amazon.com/dms/latest/APIReference/API_S3Settings.html#DMS-Type-S3Settings-MaxFileSize)endpoint. 

O parâmetro `bucketFolder` contém o local em que arquivos .csv ou .parquet são armazenados antes de serem carregados no bucket do S3. Com arquivos .csv, os dados de tabela são armazenados no seguinte formato no bucket do S3, mostrado com arquivos da carga máxima.

```
database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...
database_schema_name/table_name/LOAD00000009.csv
database_schema_name/table_name/LOAD0000000A.csv
database_schema_name/table_name/LOAD0000000B.csv
...database_schema_name/table_name/LOAD0000000F.csv
database_schema_name/table_name/LOAD00000010.csv
...
```

É possível especificar o delimitador de coluna, o delimitador de linha e outros parâmetros utilizando os atributos de conexão adicionais. Para obter mais informações sobre os atributos de conexão extra, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring), no final desta seção.

Para evitar falsificações, AWS DMS valida a propriedade do bucket antes de realizar as operações. Por padrão, quando a configuração do endpoint do `ExpectedBucketOwner` Amazon S3 não é especificada, AWS DMS usa o ID da AWS conta que possui a função de AWS DMS serviço como o proprietário esperado do bucket.

Para migrar dados para um bucket do S3 pertencente a uma AWS conta diferente, você deve especificar explicitamente o proprietário real do bucket na configuração do endpoint do `ExpectedBucketOwner` Amazon S3, conforme mostrado a seguir. Caso contrário, a tarefa de replicação entre contas falhará.

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

Quando você usa AWS DMS para replicar alterações de dados usando uma tarefa CDC, a primeira coluna do arquivo de saída.csv ou .parquet indica como os dados da linha foram alterados, conforme mostrado no seguinte arquivo.csv.

```
I,101,Smith,Bob,4-Jun-14,New York
U,101,Smith,Bob,8-Oct-15,Los Angeles
U,101,Smith,Bob,13-Mar-17,Dallas
D,101,Smith,Bob,13-Mar-17,Dallas
```

Neste exemplo, suponha que haja uma `EMPLOYEE` tabela no banco de dados de origem. AWS DMS grava dados no arquivo.csv ou .parquet, em resposta aos seguintes eventos:
+ Um novo funcionário (Bob Smith, ID de funcionário 101) é contratado em 4 de junho de 2014 no escritório de Nova York. No arquivo .csv ou .parquet, o `I` na primeira coluna indica que uma nova linha foi `INSERT` (inserida) na tabela EMPLOYEE no banco de dados de origem.
+ Em 8 de outubro de 2015, Bob é transferido para o escritório de Los Angeles. No arquivo .csv ou .parquet, o `U` indica que a linha correspondente na tabela EMPLOYEE foi `UPDATE` (atualizada) para refletir o local do novo escritório de Bob. O restante da linha reflete a linha na tabela EMPLOYEE conforme ela aparece após `UPDATE`. 
+ Em 13 de março de 2017, Bob é transferido novamente para o escritório de Dallas. No arquivo .csv ou .parquet, o `U` indica que essa linha foi `UPDATE` (atualizada) novamente. O restante da linha reflete a linha na tabela EMPLOYEE conforme ela aparece após `UPDATE`.
+ Depois de um tempo trabalhando em Dallas, Bob deixa a empresa. No arquivo .csv ou .parquet, o `D` indica que a linha foi `DELETE` (excluída) da tabela de origem. O restante da linha reflete como a linha na tabela EMPLOYEE aparecia antes de ser excluída.

Observe que, por padrão, para o CDC, AWS DMS armazena as alterações de linha para cada tabela do banco de dados, independentemente da ordem de transação. Para armazenar as alterações de linha nos arquivos de CDC de acordo com a ordem da transação, utilize as configurações do endpoint do S3 para especificar isso e o caminho da pasta em que deseja que os arquivos de transações da CDC sejam armazenados no destino do S3. Para obter mais informações, consulte [Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para controlar a frequência de gravações em um destino do Amazon S3 durante uma tarefa de replicação de dados, é possível configurar os atributos de conexão adicionais `cdcMaxBatchInterval` e `cdcMinFileSize`. Isso pode resultar em melhor desempenho ao analisar os dados sem operações adicionais de sobrecarga. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). 

**Topics**
+ [Pré-requisitos da utilização do Amazon S3 como destino](#CHAP_Target.S3.Prerequisites)
+ [Limitações da utilização do Amazon S3 como destino](#CHAP_Target.S3.Limitations)
+ [Segurança](#CHAP_Target.S3.Security)
+ [Utilizar o Apache Parquet para armazenar objetos do Amazon S3](#CHAP_Target.S3.Parquet)
+ [Marcação de objetos do Amazon S3](#CHAP_Target.S3.Tagging)
+ [Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3](#CHAP_Target.S3.KMSKeys)
+ [Utilizar o particionamento de pastas com base em data](#CHAP_Target.S3.DatePartitioning)
+ [Carga paralela de fontes particionadas ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.ParallelLoad)
+ [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring)
+ [Usando AWS Glue Data Catalog com um destino do Amazon S3 para AWS DMS](#CHAP_Target.S3.GlueCatalog)
+ [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings)
+ [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps)
+ [Tipos de dados de destino do S3 Parquet](#CHAP_Target.S3.DataTypes)

## Pré-requisitos da utilização do Amazon S3 como destino
<a name="CHAP_Target.S3.Prerequisites"></a>

Antes de utilizar o Amazon S3 como destino, verifique se o seguinte é verdadeiro: 
+ O bucket do S3 que você está usando como destino está na mesma AWS região da instância de replicação do DMS que você está usando para migrar seus dados.
+ A AWS conta que você usa para a migração tem uma função do IAM com acesso de gravação e exclusão ao bucket do S3 que você está usando como destino.
+ Esse perfil tem acesso à marcação para que você possa marcar todos os objetos do S3 gravados no bucket de destino.
+ O perfil do IAM tem o DMS (dms.amazonaws.com) adicionado como *Entidade confiável.* 
+ 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 ter informações sobre os endpoints da VPC, consulte [Configurando endpoints VPC para AWS DMS](CHAP_VPC_Endpoints.md).

Para configurar esse acesso à conta, verifique se o perfil atribuído à conta de usuário utilizada para criar a tarefa de migração tem o seguinte conjunto de permissões.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::buckettest2"
            ]
        }
    ]
}
```

------

Para obter os pré-requisitos para utilizar a validação com o S3 como destino, consulte [Pré-requisitos da validação do S3 de destino](CHAP_Validating_S3.md#CHAP_Validating_S3_prerequisites).

## Limitações da utilização do Amazon S3 como destino
<a name="CHAP_Target.S3.Limitations"></a>

Aplicam-se as seguintes limitações ao utilizar o Amazon S3 como destino:
+ 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html). Para excluir a versão de um objeto do S3, consulte [Excluir versões de objetos de um bucket com versionamento ativado](https://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjectVersions.html).
+ Um bucket do S3 ativado para VPC (VPC do gateway) é compatível com as versões 3.4.7 e superiores.
+ Os seguintes comandos da linguagem de definição de dados (DDL) são compatíveis com a captura de dados de alteração (CDC): truncar tabela, descartar tabela, criar tabela, renomear tabela, adicionar coluna, descartar coluna, renomear coluna e alterar o tipo de dados de coluna. Observe que quando uma coluna é adicionada, descartada ou renomeada no banco de dados de origem, nenhuma instrução ALTER é registrada no bucket do S3 de destino e AWS DMS não altera os registros criados anteriormente para corresponder à nova estrutura. Após a alteração, AWS DMS cria todos os novos registros usando a nova estrutura da tabela.
**nota**  
Uma operação de truncamento da DDL remove todos os arquivos e pastas de tabelas correspondentes em um bucket do S3. É possível utilizar as configurações de tarefas para desativar esse comportamento e configurar a forma como o DMS trata o comportamento da DDL durante a captura de dados de alteração (CDC). Para obter mais informações, consulte [Configurações de tarefa para processamento de DDL de processamento de alterações](CHAP_Tasks.CustomizingTasks.TaskSettings.DDLHandling.md).
+ O modo Full LOB não é compatível.
+ As alterações na estrutura da tabela de origem durante a carga máxima não são compatíveis. As alterações nos dados são compatíveis durante a carga máxima.
+ Várias tarefas que replicam dados da mesma tabela de origem para o mesmo bucket de endpoint do S3 de destino resultam em tarefas sendo gravadas no mesmo arquivo. Recomendamos que você especifique diferentes endpoints de destino (buckets) se sua fonte de dados estiver na mesma tabela.
+ `BatchApply` não é compatível com um endpoint do S3. A utilização da aplicação em lote (por exemplo, a configuração da tarefa de metadados de destino `BatchApplyEnabled`) para um destino do S3 pode resultar em perda de dados.
+ Não é possível utilizar `DatePartitionEnabled` ou `addColumnName` em conjunto com `PreserveTransactions` ou `CdcPath`.
+ AWS DMS não suporta renomear várias tabelas de origem para a mesma pasta de destino usando regras de transformação.
+ Se houver gravação intensa na tabela de origem durante a fase de carregamento completo, o DMS poderá gravar registros duplicados no bucket do S3 ou nas alterações armazenadas em cache.
+ Se você configurar a tarefa com um `TargetTablePrepMode` definido como `DO_NOTHING`, o DMS poderá gravar registros duplicados no bucket do S3 se a tarefa for interrompida e retomada abruptamente durante a fase de carregamento completo.
+ Se você configurar o endpoint de destino com a configuração `PreserveTransactions` definida como `true`, o recarregamento de uma tabela não limpará os arquivos de CDC gerados anteriormente. Para obter mais informações, consulte [Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.](#CHAP_Target.S3.EndpointSettings.CdcPath).

Para obter as limitações da utilização da validação com o S3 como destino, consulte [Limitações da utilização da validação de destino do S3.](CHAP_Validating_S3.md#CHAP_Validating_S3_limitations).

## Segurança
<a name="CHAP_Target.S3.Security"></a>

Para utilizar o Amazon S3 como destino, a conta utilizada para a migração deve ter acesso de gravação e exclusão ao bucket do Amazon S3 utilizado como o destino. Especifique o nome do recurso da Amazon (ARN) de um perfil do IAM que tem as permissões necessárias para acessar o Amazon S3. 

AWS DMS oferece suporte a um conjunto de concessões predefinidas para o Amazon S3, conhecidas como listas de controle de acesso predefinidas (). ACLs Cada ACL pré-configurada tem um conjunto de concessões e permissões que podem ser utilizadas para definir permissões para o bucket do Amazon S3. É possível especificar uma ACL pré-configurada utilizando `cannedAclForObjects` no atributo da string de conexão para o endpoint de destino do S3. Para obter mais informações sobre como utilizar o atributo de conexão adicional `cannedAclForObjects`, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). [Para obter mais informações sobre o Amazon S3 enlatado ACLs, consulte ACL enlatado.](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl)

O perfil do IAM que você utiliza para a migração deve ser capaz de executar a operação da API `s3:PutObjectAcl`.

## Utilizar o Apache Parquet para armazenar objetos do Amazon S3
<a name="CHAP_Target.S3.Parquet"></a>

O formato de valores separados por vírgulas (.csv) é o formato do armazenamento padrão para objetos de destino do Amazon S3. Para obter armazenamento compacto e consultas mais rápidas, é possível utilizar o Apache Parquet (.parquet) como o formato de armazenamento.

O Apache Parquet é um formato de armazenamento de arquivos de código aberto originalmente projetado para o Hadoop. Para obter mais informações sobre o Apache Parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/).

Para definir o .parquet como o formato de armazenamento para os objetos de destino do S3, é possível utilizar os seguintes mecanismos:
+ Configurações de endpoint que você fornece como parâmetros de um objeto JSON ao criar o endpoint utilizando a AWS CLI ou a API do AWS DMS. Para obter mais informações, consulte [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings).
+ Atributos de conexão adicionais que você fornece como uma lista separada por ponto-e-vírgula ao criar o endpoint. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

## Marcação de objetos do Amazon S3
<a name="CHAP_Target.S3.Tagging"></a>

É possível marcar objetos do Amazon S3 criados por uma instância de replicação especificando objetos JSON adequados como parte das regras de mapeamento de tarefa-tabela. Para obter mais informações sobre os requisitos e as opções de marcação de objetos do S3, incluindo nomes de tag válidos, consulte [Marcação de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html) no *Guia do usuário do Amazon Simple Storage Service*. Para obter mais informações sobre o mapeamento de tabelas utilizando JSON, consulte [Especificar a seleção de tabelas e as regras de transformação utilizando JSON](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md).

Você marca objetos do S3 criados para tabelas e esquemas especificados utilizando um ou mais objetos JSON do tipo de regra `selection`. Então, você segue esse objeto (ou objetos) `selection` por um ou mais objetos JSON do tipo de regra `post-processing` com a ação `add-tag`. Essas regras de pós-processamento identificam os objetos do S3 que você deseja marcar e especificar os nomes e valores das tags que você deseja adicionar a esses objetos do S3.

É possível encontrar os parâmetros para especificar em objetos JSON do tipo de regra `post-processing` na tabela a seguir.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.S3.html)

Ao especificar vários tipos de regra `post-processing` para marcar uma seleção de objetos do S3, cada objeto do S3 é marcado utilizando apenas um objeto `tag-set` de uma regra de pós-processamento. O conjunto de tags específico utilizado para marcar um determinado objeto do S3 é aquele da regra de pós-processamento cujo localizador de objeto associado corresponde melhor ao objeto do S3. 

Por exemplo, suponha que duas regras de pós-processamento identificam o mesmo objeto do S3. Suponha também que o localizador de objetos de uma regra use curingas, e que o localizador de objetos de outra regra use uma correspondência exata para identificar o objeto do S3 (sem curingas). Nesse caso, o conjunto de tags associado à regra pós-processamento com a correspondência exata é utilizado para marcar o objeto do S3. Se várias regras de pós-processamento corresponderem a um determinado objeto do S3 igualmente bem, o conjunto de tags associado à primeira regra de pós-processamento será utilizado para marcar o objeto.

**Example Adicionar tags estáticas a um objeto do S3 criado para uma única tabela e esquema**  
As seguintes regras de seleção e pós-processamento adicionam três tags (`tag_1`, `tag_2` e `tag_3` com valores estáticos correspondentes, `value_1`, `value_2` e `value_3`) a um objeto do S3 criado. Esse objeto do S3 corresponde a uma única tabela na origem chamada `STOCK` com um esquema chamado `aat2`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "5",
            "rule-name": "5",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat2",
                "table-name": "STOCK"
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              },
              {
                "key": "tag_3",
                "value": "value_3"
              }                                     
           ]
        }
    ]
}
```

**Example Adicionar tags estáticas e dinâmicas a objetos do S3 criados para várias tabelas e esquemas**  
O exemplo a seguir tem uma seleção e duas regras de pós-processamento, em que a entrada da origem inclui todas as tabelas e todos os seus esquemas.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "%",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_${table-name}"
              }
            ]
        },
        {
            "rule-type": "post-processing",
            "rule-id": "41",
            "rule-name": "41",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "aat",
                "table-name": "ITEM",
            },
            "tag-set": [
              {
                "key": "tag_1",
                "value": "value_1"
              },
              {
                "key": "tag_2",
                "value": "value_2"
              }           ]
        }
    ]
}
```
A primeira regra de pós-processamento adiciona duas tags (`dw-schema-name` e `dw-schema-table`) com valores dinâmicos correspondentes (`${schema-name}` e `my_prefix_${table-name}`) a quase todos os objetos do S3 criados no destino. A exceção é o objeto do S3 identificado e marcado com a segunda regra de pós-processamento. Assim, cada objeto de destino do S3 identificado pelo localizador de objetos curinga é criado com tags que identificam o esquema e a tabela à qual ele corresponde na origem.  
A segunda regra de pós-processamento adiciona `tag_1` e `tag_2` com valores estáticos correspondentes `value_1` e `value_2` a um objeto do S3 criado, que é identificado por um localizador de objetos de correspondência exata. Esse objeto do S3 criado, portanto, corresponde à uma única tabela na origem chamada `ITEM` com um esquema chamado `aat`. Devido à correspondência exata, essas tags substituem todas as tags nesse objeto adicionado na primeira regra de pós-processamento, que corresponde a objetos do S3 apenas por meio de curinga.

**Example Adicionar nomes e valores de tags dinâmicas a objetos do S3**  
O exemplo a seguir tem duas regras de seleção e uma regra de pós-processamento. Aqui, a entrada da origem inclui apenas a tabela `ITEM` no esquema `retail` ou `wholesale`.  

```
{
    "rules": [
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "retail",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "selection",
            "rule-id": "1",
            "rule-name": "1",
            "object-locator": {
                "schema-name": "wholesale",
                "table-name": "ITEM"
            },
            "rule-action": "include"
        },
        {
            "rule-type": "post-processing",
            "rule-id": "21",
            "rule-name": "21",
            "rule-action": "add-tag",
            "object-locator": {
                "schema-name": "%",
                "table-name": "ITEM",
            },
            "tag-set": [
              { 
                "key": "dw-schema-name",
                "value":"${schema-name}"
              },
              {
                "key": "dw-schema-table",
                "value": "my_prefix_ITEM"
              },
              {
                "key": "${schema-name}_ITEM_tag_1",
                "value": "value_1"
              },
              {
                "key": "${schema-name}_ITEM_tag_2",
                "value": "value_2"
              }
            ]
    ]
}
```
O conjunto de tags da regra de pós-processamento adiciona duas tags (`dw-schema-name` e `dw-schema-table`) para todos os objetos do S3 criados para a tabela `ITEM` no destino. A primeira tag tem o valor dinâmico `"${schema-name}"`, e a segunda tag tem um valor estático, `"my_prefix_ITEM"`. Assim, cada objeto de destino do S3 é criado com tags que identificam o esquema e a tabela à qual ele corresponde na origem.   
Além disso, o conjunto de tags adiciona duas tags adicionais com nomes dinâmicos (`${schema-name}_ITEM_tag_1` e `"${schema-name}_ITEM_tag_2"`). Essas têm valores estáticos correspondentes `value_1` e `value_2`. Portanto, cada uma dessas tags são nomeadas pelo esquema atual, `retail` ou `wholesale`. Não é possível criar um nome de tag dinâmico duplicado nesse objeto, porque cada objeto é criado para um único nome de esquema exclusivo. O nome do esquema é utilizado para criar um nome de tag exclusivo de outra forma.

## Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3
<a name="CHAP_Target.S3.KMSKeys"></a>

Você pode criar e usar AWS KMS chaves personalizadas para criptografar seus objetos de destino do Amazon S3. Depois de criar uma chave do KMS, é possível utilizá-la para criptografar objetos utilizando uma das seguintes abordagens ao criar o endpoint de destino do S3:
+ Utilize as seguintes opções para objetos de destino do S3 (com o formato de armazenamento de arquivo .csv padrão) ao executar o comando `create-endpoint` utilizando a AWS CLI.

  ```
  --s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", 
  "CsvRowDelimiter": "\n", "CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
  "BucketName": "your-bucket-name", "EncryptionMode": "SSE_KMS", 
  "ServerSideEncryptionKmsKeyId": "your-KMS-key-ARN"}'
  ```

  Aqui, `your-KMS-key-ARN` é o nome do recurso da Amazon (ARN) da sua chave do KMS. Além disso, seu perfil do IAM deve ter permissões de acesso (consulte [Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3](#CHAP_Target.S3.EndpointSettings)).
+ Defina o atributo de conexão adicional `encryptionMode` como o valor `SSE_KMS`, e o atributo de conexão adicional `serverSideEncryptionKmsKeyId` como o ARN de sua chave do KMS. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring).

Para criptografar os objetos de destino do Amazon S3 utilizando uma chave do KMS, você precisa de um perfil do IAM que tenha permissões para acessar o bucket do Amazon S3. Esse perfil do IAM é acessado em uma política (uma política de chaves) anexada à chave de criptografia criada. É possível fazer isso no console do IAM criando o seguinte:
+ Uma política com permissões para acessar o bucket do Amazon S3.
+ Um perfil do IAM com essa política.
+ A chave de criptografia do KMS com uma política de chaves que faz referência a esse perfil.

Os procedimentos a seguir descrevem como fazer isso.

**Para criar uma política do IAM com permissões para acessar o bucket do Amazon S3.**

1. Abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No painel de navegação, escolha **Policies (Políticas)**. A página **Policies (Políticas)** é aberta.

1. Selecione **Criar política**. A página **Create policy (Criar política)** é aberta.

1. Escolha **Service (Serviço)** e escolha **S3**. Uma lista de permissões de ação é exibida.

1. Escolha **Expand all (Expandir tudo)** para expandir a lista e escolha as seguintes permissões no mínimo:
   + **ListBucket**
   + **PutObject**
   + **DeleteObject**

   Escolha todas as outras permissões necessárias e escolha **Collapse all (Recolher tudo)** para recolher a lista.

1. Escolha **Resouces (Recursos)** para especificar os recursos que você deseja acessar. No mínimo, escolha **Todos os recursos** para fornecer acesso geral aos recursos do Amazon S3.

1. Adicione todas as outras condições ou permissões necessárias e escolha **Review policy (Revisar política)**. Verifique os resultados na página **Review policy (Revisar política)**.

1. Se as configurações forem o que você precisa, insira um nome para a política (por exemplo, `DMS-S3-endpoint-access`), e qualquer descrição adicional e escolha **Criar política**. A página **Policies (Políticas)** é aberta com uma mensagem indicando que sua política foi criada.

1. Pesquise e escolha o nome da política na lista **Policies (Políticas)**. A página **Summary (Resumo)** é aberta exibindo o JSON da política, semelhante ao seguinte.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject",
                   "s3:ListBucket",
                   "s3:DeleteObject"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

Agora, você criou a política para acessar os recursos do Amazon S3 para a criptografia com um nome específico, por exemplo `DMS-S3-endpoint-access`.

**Como criar um perfil do IAM com essa política**

1. No console do IAM, escolha **Perfis** no painel de navegação. A página de detalhes de **Perfis** é aberta.

1. Selecione **Criar perfil**. A página **Create role (Criar função)** é aberta.

1. Com o AWS serviço selecionado como a entidade confiável, escolha **DMS** como o serviço para usar a função do IAM.

1. Escolha **Próximo: Permissões**. A visualização **Attach permissions policies (Anexar políticas de permissões)** é exibida na página **Create role (Criar função)**.

1. Encontre e selecione a política do IAM para o perfil do IAM criado no procedimento anterior (`DMS-S3-endpoint-access`).

1. Escolha **Próximo: tags**. A visualização **Add tags (Adicionar tags)** é exibida na página **Create role (Criar função)**. Aqui, você pode adicionar todas as tags desejadas.

1. Escolha **Próximo: revisar**. A visualização **Review (Revisão)** é exibida na página **Create role (Criar função)**. Aqui, é possível verificar os resultados.

1. Se as configurações forem o que você precisa, insira um nome para o perfil (obrigatório, por exemplo, `DMS-S3-endpoint-access-role`), e qualquer descrição adicional e escolha **Criar função**. A página de detalhes **Funções** é aberta com uma mensagem indicando que o perfil foi criado.

Agora, você criou o perfil para acessar os recursos do Amazon S3 para criptografia com um nome especificado, por exemplo, `DMS-S3-endpoint-access-role`.

**Como criar uma chave de criptografia do KMS com uma política de chave que faz referência ao perfil do IAM**
**nota**  
Para obter mais informações sobre como AWS DMS funciona com chaves de AWS KMS criptografia, consulte[Configurando uma chave de criptografia e especificando permissões AWS KMS](CHAP_Security.md#CHAP_Security.EncryptionKey).

1. Faça login no console Console de gerenciamento da AWS e abra o AWS Key Management Service (AWS KMS) em [https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms).

1. Para alterar o Região da AWS, use o seletor de região no canto superior direito da página.

1. No painel de navegação, escolha **Chaves gerenciadas pelo cliente**.

1. Escolha **Criar chave**. A página **Configure key (Configurar chave)** é aberta.

1. Para **Key type (Tipo de chave)**, escolha **Symmetric (Simétrica)**.
**nota**  
Ao criar essa chave, você só pode criar uma chave simétrica, porque todos os AWS serviços, como o Amazon S3, só funcionam com chaves de criptografia simétricas.

1. Escolha **Opções avançadas**. Para **Key material origin (Origem do material da chave)**, certifique-se de que o **KMS** está escolhido e escolha **Next (Próximo)**. A página **Add labels (Adicionar rótulos)** é aberta.

1. Em **Create alias and description (Criar alias e descrição)**, insira um alias para a chave (por exemplo, `DMS-S3-endpoint-encryption-key`) e qualquer descrição adicional.

1. Em **Tags**, adicione todas as tags desejadas para ajudar a identificar a chave e controlar seu uso e escolha **Next (Próximo)**. A página **Define key administrative permissions (Definir permissões administrativas de chaves)** é aberta mostrando uma lista de usuários e funções que podem ser escolhidos.

1. Adicione os usuários e as funções desejados para gerenciar a chave. Certifique-se de que esses usuários e funções tenham as permissões necessárias para gerenciar a chave. 

1. Em **Key deletion (Exclusão de chaves)**, escolha se os administradores de chaves podem excluir a chave e escolha **Next (Próximo)**. A página **Define key usage permissions (Definir permissões de uso de chaves)** é aberta mostrando uma lista adicional de usuários e funções que podem ser escolhidos.

1. Para **Esta conta**, escolha os usuários disponíveis que você deseja que executem operações criptográficas em destinos do Amazon S3. Escolha também o perfil criado anteriormente em **Perfis** para ativar o acesso à criptografia dos objetos de destino do Amazon S3, por exemplo, `DMS-S3-endpoint-access-role`).

1. Se você quiser adicionar outras contas não listadas para ter esse mesmo acesso, em **Outras AWS contas**, escolha **Adicionar outra AWS conta** e escolha **Avançar**. A página **Review and edit key policy (Rever e editar política de chave)** é aberta mostrando o JSON da política de chave que você pode revisar e editar digitando no JSON existente. Aqui, a política de chave que faz referência à função e aos usuários é mostrada (por exemplo, `Admin` e `User1`) que você escolheu na etapa anterior. Também é possível ver as diferentes ações de chaves permitidas para as várias entidades principais (usuários e perfis), conforme mostrado no exemplo a seguir.

------
#### [ JSON ]

****  

   ```
   {
       "Id": "key-consolepolicy-3",
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:root"
                   ]
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/Admin"
                   ]
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow use of the key",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:ReEncrypt*",
                   "kms:GenerateDataKey*",
                   "kms:DescribeKey"
               ],
               "Resource": "*"
           },
           {
               "Sid": "Allow attachment of persistent resources",
               "Effect": "Allow",
               "Principal": {
                   "AWS": [
                       "arn:aws:iam::111122223333:role/DMS-S3-endpoint-access-role",
                       "arn:aws:iam::111122223333:role/Admin",
                       "arn:aws:iam::111122223333:role/User1"
                   ]
               },
               "Action": [
                   "kms:CreateGrant",
                   "kms:ListGrants",
                   "kms:RevokeGrant"
               ],
               "Resource": "*",
               "Condition": {
                   "Bool": {
                       "kms:GrantIsForAWSResource": true
                   }
               }
           }
       ]
   }
   ```

------

1. Escolha **Terminar**. A página **Chaves de criptografia** é aberta com uma mensagem indicando que a chave do KMS foi criada.

Agora, você criou uma nova chave do KMS com um alias especificado (por exemplo, `DMS-S3-endpoint-encryption-key`). Essa chave permite AWS DMS criptografar objetos de destino do Amazon S3.

## Utilizar o particionamento de pastas com base em data
<a name="CHAP_Target.S3.DatePartitioning"></a>

AWS DMS suporta partições de pastas do S3 com base na data de confirmação da transação quando você usa o Amazon S3 como seu endpoint de destino. Utilizando o particionamento de pastas com base em data, é possível gravar dados de uma única tabela de origem em uma estrutura de pastas com hierarquia temporal em um bucket do S3. Ao particionar pastas ao criar um endpoint de destino do S3, é possível fazer o seguinte:
+ Gerenciar melhor os objetos do S3
+ Limitar o tamanho de cada pasta do S3
+ Otimizar consultas de data lake ou outras operações subsequentes

É possível ativar o particionamento de pastas com base em data ao criar um endpoint de destino do S3. É possível ativá-lo ao migrar dados existentes e ao replicar alterações em andamento (carga máxima \$1 CDC) ou replicar somente alterações de dados (somente CDC). Ao migrar dados existentes e replicar alterações contínuas, somente as alterações contínuas serão particionadas. Utilize as seguintes configurações de endpoint de destino:
+ `DatePartitionEnabled`: especifica o particionamento com base em datas. Defina esta opção Boolean como `true` para particionar pastas de bucket do S3 com base nas datas de confirmação da transação. 

  Não é possível utilizar essa configuração com `PreserveTransactions` ou `CdcPath`.

  O valor padrão é `false`. 
+ `DatePartitionSequence`: identifica a sequência do formato de data a ser utilizado durante o particionamento de pastas. Defina esta opção ENUM como `YYYYMMDD`, `YYYYMMDDHH`, `YYYYMM`, `MMYYYYDD` ou `DDMMYYYY`. O valor padrão é `YYYYMMDD`. Utilize essa configuração quando `DatePartitionEnabled` estiver definido como `true.`.
+ `DatePartitionDelimiter`: especifica um delimitador de separação de datas a ser utilizado durante o particionamento de pastas. Defina esta opção ENUM como `SLASH`, `DASH`, `UNDERSCORE` ou `NONE`. O valor padrão é `SLASH`. Utilize essa configuração quando `DatePartitionEnabled` estiver definido como `true`.
+ `DatePartitionTimezone`: ao criar um endpoint de destino do S3, defina `DatePartitionTimezone` para converter a hora UTC atual em um fuso horário especificado. A conversão ocorre quando uma pasta de partição de data é criada e um nome de CDC é gerado. O formato do fuso horário é Área/Localização. Use esse parâmetro quando `DatePartitionedEnabled` for definido como `true`, conforme mostrado no seguinte exemplo:

  ```
  s3-settings='{"DatePartitionEnabled": true, "DatePartitionSequence": "YYYYMMDDHH", "DatePartitionDelimiter": "SLASH", "DatePartitionTimezone":"Asia/Seoul", "BucketName": "dms-nattarat-test"}'
  ```

O exemplo a seguir mostra como ativar o particionamento de pastas com base em data, com valores padrão para a sequência e o delimitador da partição de dados. Ele usa a `--s3-settings '{json-settings}'` opção do AWS CLI. `create-endpoint`comando. 

```
   --s3-settings '{"DatePartitionEnabled": true,"DatePartitionSequence": "YYYYMMDD","DatePartitionDelimiter": "SLASH"}'
```

## Carga paralela de fontes particionadas ao usar o Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.ParallelLoad"></a>

É possível configurar uma carga máxima paralela de fontes de dados particionadas para destinos do Amazon S3. Essa abordagem melhora os tempos de carga da migração de dados particionados nos mecanismos de banco de dados de origem compatíveis para o destino do S3. Para melhorar os tempos de carga dos dados de origem particionados, crie subpastas de destino do S3 mapeadas para as partições de cada tabela no banco de dados de origem. Essas subpastas vinculadas à partição permitem AWS DMS executar processos paralelos para preencher cada subpasta no destino.

Para configurar uma carga máxima paralela de um destino do S3, o S3 é compatível com os três tipos de regra `parallel-load` para a regra `table-settings` de mapeamento de tabela:
+ `partitions-auto`
+ `partitions-list`
+ `ranges`

Para obter mais informações sobre esses tipos de regra de carga paralela, consulte [Regras e operações de configurações de tabelas e coleções](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md).

Para os tipos de regra `partitions-auto` e `partitions-list`, o AWS DMS utiliza o nome de cada partição do endpoint de origem para identificar a estrutura da subpasta de destino, da seguinte forma.

```
bucket_name/bucket_folder/database_schema_name/table_name/partition_name/LOADseq_num.csv
```

Aqui, o caminho da subpasta em que os dados são migrados e armazenados no destino do S3 inclui uma subpasta `partition_name` adicional que corresponde a uma partição de origem com o mesmo nome. Essa subpasta `partition_name` armazena um ou mais arquivos `LOADseq_num.csv` contendo os dados migrados da partição de origem especificada. Aqui, `seq_num` é o sufixo do número de sequência no nome do arquivo .csv, como `00000001` no arquivo .csv com o nome `LOAD00000001.csv`.

No entanto, alguns mecanismos de banco de dados, como MongoDB e o DocumentDB, não têm o conceito de partições. Para esses mecanismos de banco de dados, AWS DMS adiciona o índice do segmento de origem em execução como um prefixo ao nome do arquivo.csv de destino, da seguinte maneira.

```
.../database_schema_name/table_name/SEGMENT1_LOAD00000001.csv
.../database_schema_name/table_name/SEGMENT1_LOAD00000002.csv
...
.../database_schema_name/table_name/SEGMENT2_LOAD00000009.csv
.../database_schema_name/table_name/SEGMENT3_LOAD0000000A.csv
```

Aqui, os arquivos `SEGMENT1_LOAD00000001.csv` e `SEGMENT1_LOAD00000002.csv` são nomeados com o mesmo prefixo de índice do segmento de origem em execução, `SEGMENT1`. Eles são nomeados assim porque os dados de origem migrados para esses dois arquivos .csv estão associados ao mesmo índice de segmento de origem em execução. Por outro lado, os dados migrados armazenados em cada um dos arquivos `SEGMENT2_LOAD00000009.csv` e `SEGMENT3_LOAD0000000A.csv` de destino estão associados a diferentes índices de segmentos de origem em execução. Cada arquivo tem seu nome prefixado com o nome de seu índice de segmento em execução, `SEGMENT2` e `SEGMENT3`.

Para o tipo de carga paralela `ranges`, defina os nomes e valores das colunas utilizando as configurações `columns` e `boundaries` das regras `table-settings`. Com essas regras, é possível especificar partições correspondentes aos nomes dos segmentos, da seguinte maneira.

```
"parallel-load": {
    "type": "ranges",
    "columns": [
         "region",
         "sale"
    ],
    "boundaries": [
          [
               "NORTH",
               "1000"
          ],
          [
               "WEST",
               "3000"
          ]
    ],
    "segment-names": [
          "custom_segment1",
          "custom_segment2",
          "custom_segment3"
    ]
}
```

Aqui, a configuração de `segment-names` define nomes de três partições para migrar dados em paralelo no destino do S3. Os dados migrados são carregados paralelamente e armazenados em arquivos .csv nas subpastas da partição em ordem, da seguinte maneira.

```
.../database_schema_name/table_name/custom_segment1/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment2/LOAD[00000001...].csv
.../database_schema_name/table_name/custom_segment3/LOAD[00000001...].csv
```

Aqui, AWS DMS armazena uma série de arquivos.csv em cada uma das três subpastas de partição. A série de arquivos .csv em cada subpasta de partição é nomeada de forma incremental, começando com `LOAD00000001.csv` até que todos os dados sejam migrados.

Em alguns casos, é possível não nomear explicitamente as subpastas de partição para um tipo de carga paralela `ranges` utilizando a configuração `segment-names`. Nesse caso, AWS DMS aplica o padrão de criação de cada série de arquivos.csv em sua `table_name` subpasta. Aqui, o AWS DMS prefixa os nomes dos arquivos de cada série de arquivos .csv com o nome do índice do segmento de origem em execução, da seguinte forma.

```
.../database_schema_name/table_name/SEGMENT1_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT2_LOAD[00000001...].csv
.../database_schema_name/table_name/SEGMENT3_LOAD[00000001...].csv
...
.../database_schema_name/table_name/SEGMENTZ_LOAD[00000001...].csv
```

## Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS
<a name="CHAP_Target.S3.Configuring"></a>

É possível utilizar as configurações de endpoint para configurar o banco de dados de destino do Amazon S3 de forma semelhante à utilização de atributos de conexão adicional. Você especifica as configurações ao criar o endpoint de destino usando o AWS DMS console ou usando o `create-endpoint` comando no [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), com a sintaxe `--s3-settings '{"EndpointSetting": "value", ...}'` JSON.

**nota**  
O DMS grava alterações em arquivos Parquet com base na ordem de confirmação do banco de dados de origem, mas, ao migrar várias tabelas, a ordem da transação original não é preservada devido ao particionamento em nível de tabela. Para manter as informações de sequência da transação, defina a configuração de endpoint `TimestampColumnName` para incluir o carimbo de data/hora de confirmação de origem para cada linha, que você pode usar no processamento posterior para reconstruir a sequência da transação original. Ao contrário do formato CSV, que oferece a configuração `PreserveTransactions`, os arquivos Parquet lidam com as transações de forma diferente devido à respectiva estrutura de armazenamento em colunas, mas essa abordagem permite o rastreamento preciso dos tempos de confirmação da origem, possibilita reconstruir a ordem de transação pós-migração e permite o processamento eficiente dos dados, mantendo a consistência de dados.

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


| **Opção** | **Descrição** | 
| --- | --- | 
| CsvNullValue |  Um parâmetro opcional que especifica como AWS DMS trata valores nulos. Ao tratar o valor nulo, é possível utilizar esse parâmetro para passar uma string definida pelo usuário como nula ao gravar no destino. Por exemplo, quando as colunas de destino forem anuláveis, é possível utilizar essa opção para diferenciar entre o valor de string vazia e o valor nulo.  Valor padrão: `""` Valores válidos: qualquer string válida. Exemplo: `--s3-settings '{"CsvNullValue": "NULL"}'` Se o valor da coluna do banco de dados de origem for nulo, no arquivo CSV do S3, o valor da coluna será `NULL` em vez da string “”.  | 
| AddColumnName |  Um parâmetro opcional que, quando definido como `true` ou `y`, pode ser utilizado para adicionar informações de nome de coluna ao arquivo .csv de saída. Não é possível utilizar esse parâmetro com `PreserveTransactions` ou `CdcPath`. Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"AddColumnName": true}'`  | 
| AddTrailingPaddingCharacter |  Utilize a configuração `AddTrailingPaddingCharacter` do endpoint de destino do S3 para adicionar preenchimento aos dados da string. O valor padrão é `false`. Tipo: booliano Exemplo: `--s3-settings '{"AddTrailingPaddingCharacter": true}'`  | 
| BucketFolder |  Um parâmetro opcional para definir um nome de pasta no bucket do S3. Se fornecidos, os objetos de destino serão criados como arquivos .csv ou .parquet no caminho `BucketFolder/schema_name/table_name/`. Se esse parâmetro não for especificado, o caminho utilizado será `schema_name/table_name/`.  Exemplo: `--s3-settings '{"BucketFolder": "testFolder"}'`  | 
| BucketName |  O nome do bucket do S3 no qual os objetos de destino do S3 são criados como arquivos .csv ou .parquet. Exemplo: `--s3-settings '{"BucketName": "buckettest"}'`  | 
| CannedAclForObjects |  Um valor que AWS DMS permite especificar uma lista de controle de acesso predefinida (padrão) para objetos criados no bucket do S3 como arquivos.csv ou .parquet. *Para obter mais informações sobre o Amazon S3 canned ACLs, consulte [Canned ACL no Amazon S3 Developer](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl) Guide.* Valor padrão: NONE Os valores válidos para esse atributo são: NONE; PRIVATE; PUBLIC\$1READ; PUBLIC\$1READ\$1WRITE; AUTHENTICATED\$1READ; \$1READ; BUCKET\$1OWNER\$1READ; BUCKET\$1OWNER\$1FULL\$1CONTROL. AWS\$1EXEC Exemplo: `--s3-settings '{"CannedAclForObjects": "PUBLIC_READ"}'`  | 
| CdcInsertsOnly |  Um parâmetro opcional durante um carga de captura de dados de alteração (CDC) para gravar apenas operações INSERT nos arquivos de saída de valores separados por vírgulas (.csv) ou de armazenamento colunar (.parquet). Por padrão (a configuração `false`), o primeiro campo em um registro .csv ou .parquet contém a letra I (INSERT), U (UPDATE) ou D (DELETE). Esta carta indica se a linha foi inserida, atualizada ou excluída no banco de dados de origem para um carregamento CDC no destino. Se `cdcInsertsOnly` estiver definido como `true` ou`y`, somente INSERTs do banco de dados de origem serão migrados para o arquivo.csv ou .parquet. Somente no caso do formato .csv, a maneira como esses INSERTS são registrados depende do valor `IncludeOpForFullLoad`. Se `IncludeOpForFullLoad` estiver definido como `true`, o primeiro campo de cada registro CDC será definido como I para indicar a operação INSERT na origem. Se `IncludeOpForFullLoad` estiver definido como `false`, os registros CDC serão gravados sem um primeiro campo indicando a operação INSERT na origem. Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps). Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"CdcInsertsOnly": true}'`  | 
| CdcInsertsAndUpdates |  Habilita uma carga de captura de dados de alteração (CDC) para gravar operações INSERT e UPDATE em arquivos de saída .csv ou .parquet (armazenamento colunar). A configuração padrão é`false`, mas quando `cdcInsertsAndUpdates` é definido como `true` ou`y`, INSERTs e UPDATEs do banco de dados de origem são migrados para o arquivo.csv ou .parquet.  Somente para o formato de arquivo.csv, a forma como esses INSERTs e UPDATEs são gravados depende do valor do `includeOpForFullLoad` parâmetro. Se `includeOpForFullLoad` estiver definido como `true`, o primeiro campo de cada registro CDC será definido como `I` ou `U` para indicar operações INSERT e UPDATE na origem. Mas se `includeOpForFullLoad` for definido como `false`, os registros CDC serão gravados sem uma indicação de operações INSERT ou UPDATE na origem.   Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps).  `CdcInsertsOnly` e `cdcInsertsAndUpdates` não podem ambos serem definidos como true para o mesmo endpoint. Defina `cdcInsertsOnly` ou `cdcInsertsAndUpdates` `true` para o mesmo endpoint, mas não os dois.   Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"CdcInsertsAndUpdates": true}'`  | 
|  `CdcPath`  |  Especifica o caminho da pasta dos arquivos CDC. Para uma origem do S3, essa configuração é necessária se uma tarefa captura os dados de alterações; caso contrário, ela é opcional. Se `CdcPath` estiver definido, o DMS lerá os arquivos da CDC nesse caminho e replicará as alterações de dados no endpoint de destino. Para um destino do S3, se você definir `PreserveTransactions` como verdadeiro, o DMS verificará se você definiu esse parâmetro para um caminho de pasta no destino do S3, em que o DMS pode salvar a ordem das transações na carga da CDC. O DMS cria esse caminho de pasta CDC no diretório de trabalho de destino do S3 ou no local de destino do S3 especificado por `BucketFolder` e `BucketName`. Não é possível utilizar esse parâmetro com `DatePartitionEnabled` ou `AddColumnName`. Tipo: string Por exemplo, se você especificar `CdcPath` como `MyChangedData` e especificar `BucketName` como `MyTargetBucket`, mas não especificar `BucketFolder`, o DMS criará o seguinte caminho da pasta CDC: `MyTargetBucket/MyChangedData`.  Se você especificar o mesmo `CdcPath` e especificar `BucketName` como `MyTargetBucket` e `BucketFolder` como `MyTargetData`, o DMS criará o seguinte caminho da pasta CDC: `MyTargetBucket/MyTargetData/MyChangedData`. Essa configuração é suportada nas AWS DMS versões 3.4.2 e superiores. Ao capturar alterações de dados na ordem da transação, o DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do DataFormat S3 no destino.   | 
|  `CdcMaxBatchInterval`  |  Condição de tamanho máximo do intervalo, definido em segundos, para a saída de um arquivo para o Amazon S3. Valor padrão: 60 segundos Quando `CdcMaxBatchInterval` e `CdcMinFileSize` forem especificados, a gravação do arquivo será acionada por qualquer condição de parâmetro que seja atendida primeiro.  A partir da AWS DMS versão 3.5.3, ao usar o PostgreSQL ou o Aurora PostgreSQL como origem e o Amazon S3 com o Parquet como destino, a frequência das atualizações depende da quantidade de dados que o endpoint de destino está configurado para reter `confirmed_flush_lsn` na memória. AWS DMS envia o de `confirmed_flush_lsn` volta para a fonte somente depois que os dados na memória são gravados no Amazon S3. Se você configurar o parâmetro `CdcMaxBatchInterval` com um valor maior, poderá observar um aumento no uso do slot de replicação no banco de dados de origem.   | 
|  `CdcMinFileSize`  |  Condição de tamanho mínimo do arquivo, definido em kilobytes, para a saída de um arquivo para o Amazon S3. Valor padrão: 32000 KB Quando `CdcMinFileSize` e `CdcMaxBatchInterval` forem especificados, a gravação do arquivo será acionada por qualquer condição de parâmetro que seja atendida primeiro.  | 
|  `PreserveTransactions`  |  Se definido como `true`, o DMS salvará a ordem da transação para a captura de dados de alteração (CDC) no destino do Amazon S3 especificado por `CdcPath`. Não é possível utilizar esse parâmetro com `DatePartitionEnabled` ou `AddColumnName`. Tipo: booliano Ao capturar alterações de dados na ordem da transação, o DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do DataFormat S3 no destino. Essa configuração é suportada nas AWS DMS versões 3.4.2 e superiores.   | 
| IncludeOpForFullLoad |  Um parâmetro opcional durante um carga máxima para gravar operações INSERT só nos arquivos de saída de valores separados por vírgulas (.csv). Em cargas máximas, os registros só podem ser inseridos. Por padrão (a configuração `false`), não há informações gravadas nesses arquivos de saída para um carga máxima indicando que as linhas foram inseridas no banco de dados de origem. Se `IncludeOpForFullLoad` estiver definido como `true` ou `y`, INSERT será registrado utilizando a letra I no primeiro campo do arquivo .csv.  Esse parâmetro funciona em conjunto com `CdcInsertsOnly` ou `CdcInsertsAndUpdates` somente para arquivos .csv de saída. Para obter mais informações sobre como esses parâmetros funcionam juntos, consulte [Indicar operações de banco de dados de origem em dados migrados do S3](#CHAP_Target.S3.Configuring.InsertOps).  Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"IncludeOpForFullLoad": true}'`  | 
| CompressionType |  Um parâmetro opcional ao definir como `GZIP` utiliza o GZIP para compactar os arquivos .csv ou .parquet de destino. Quando esse parâmetro é definido como o padrão, ele deixa os arquivos descompactados. Valor padrão: `NONE` Valores válidos: `GZIP` ou `NONE` Exemplo: `--s3-settings '{"CompressionType": "GZIP"}'`  | 
| CsvDelimiter |  O delimitador utilizado para separar colunas nos arquivos .csv de origem. O padrão é uma vírgula (,). Exemplo: `--s3-settings '{"CsvDelimiter": ","}'`  | 
| CsvRowDelimiter |  O delimitador utilizado para separar linhas nos arquivos .csv de origem. O padrão é uma nova linha (\$1n). Exemplo: `--s3-settings '{"CsvRowDelimiter": "\n"}'`  | 
|   `MaxFileSize`   |  Um valor que especifica o tamanho máximo (em KB) de qualquer arquivo .csv a ser criado ao migrar para um destino do S3 durante a carga máxima. Valor padrão: 1.048.576 KB (1 GB) Valores válidos: 1 a 1.048.576 Exemplo: `--s3-settings '{"MaxFileSize": 512}'`  | 
| Rfc4180 |  Um parâmetro opcional utilizado para definir o comportamento com o propósito de determinar a conformidade com RFC para os dados migrados para o Amazon S3 utilizando somente o formato de arquivo .csv. Quando esse valor é definido como `true` ou `y` usando o Amazon S3 como destino, se os dados tiverem aspas, vírgulas ou caracteres de nova linha, AWS DMS inclua a coluna inteira com um par adicional de aspas duplas (“). Cada aspa dentro dos dados é repetida duas vezes. Essa formatação está em conformidade com RFC 4180. Valor padrão: `true` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"Rfc4180": false}'`  | 
| EncryptionMode |  O modo de criptografia do lado do servidor que você deseja utilizar para criptografar os arquivos de objetos .csv ou .parquet copiados no S3. Os valores válidos são `SSE_S3` (criptografia no lado do servidor do S3) ou `SSE_KMS` (criptografia da chave do KMS). Se você escolher `SSE_KMS`, defina o parâmetro `ServerSideEncryptionKmsKeyId` como o Nome do recurso da Amazon (ARN) para a chave do KMS a ser usada para a criptografia.  Também é possível utilizar o comando `modify-endpoint` da CLI para alterar o valor do atributo `EncryptionMode` de um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.  Valor padrão: `SSE_S3` Valores válidos: `SSE_S3` ou `SSE_KMS` Exemplo: `--s3-settings '{"EncryptionMode": SSE_S3}'`  | 
| ServerSideEncryptionKmsKeyId |  Se você definir `EncryptionMode` como `SSE_KMS`, defina esse parâmetro como o nome do recurso da Amazon (ARN) da chave do KMS. Você pode encontrar esse ARN selecionando o alias da chave na lista de AWS KMS chaves criadas para sua conta. Ao criar a chave, você deve associar políticas e perfis específicos associadas a essa chave do KMS. Para obter mais informações, consulte [Criação de AWS KMS chaves para criptografar objetos de destino do Amazon S3](#CHAP_Target.S3.KMSKeys). Exemplo: `--s3-settings '{"ServerSideEncryptionKmsKeyId":"arn:aws:kms:us-east-1:111122223333:key/11a1a1a1-aaaa-9999-abab-2bbbbbb222a2"}'`  | 
| DataFormat |  O formato de saída dos arquivos AWS DMS usados para criar objetos do S3. Para destinos do Amazon S3, AWS DMS oferece suporte a arquivos.csv ou .parquet. Os arquivos .parquet têm um formato de armazenamento colunar binário com opções de compactação eficientes e desempenho de consulta mais rápido. Para obter mais informações sobre os arquivos .parquet, consulte [https://parquet.apache.org/](https://parquet.apache.org/). Valor padrão: `csv` Valores válidos: `csv` ou `parquet` Exemplo: `--s3-settings '{"DataFormat": "parquet"}'`  | 
| EncodingType |  O tipo de codificação Parquet. As opções do tipo de compactação incluem as seguintes: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/dms/latest/userguide/CHAP_Target.S3.html) Valor padrão: `rle-dictionary` Valores válidos: `rle-dictionary`, `plain` ou `plain-dictionary` Exemplo: `--s3-settings '{"EncodingType": "plain-dictionary"}'`  | 
| DictPageSizeLimit |  O tamanho máximo permitido, em bytes, para uma página de dicionário em um arquivo .parquet. Se uma página de dicionário exceder esse valor, a página usará a codificação simples. Valor padrão: 1.024.000 (1 MB) Valores válidos: qualquer valor inteiro válido Exemplo: `--s3-settings '{"DictPageSizeLimit": 2,048,000}'`  | 
| RowGroupLength |  O número de linhas em um grupo de linhas de um arquivo .parquet. Valor padrão: 10.024 (10 KB) Valores válidos: qualquer número inteiro válido Exemplo: `--s3-settings '{"RowGroupLength": 20,048}'`  | 
| DataPageSize |  O tamanho máximo permitido, em bytes, para uma página de dados em um arquivo .parquet. Valor padrão: 1.024.000 (1 MB) Valores válidos: qualquer número inteiro válido Exemplo: `--s3-settings '{"DataPageSize": 2,048,000}'`  | 
| ParquetVersion |  A versão do formato do arquivo .parquet. Valor padrão: `PARQUET_1_0` Valores válidos: `PARQUET_1_0` ou `PARQUET_2_0` Exemplo: `--s3-settings '{"ParquetVersion": "PARQUET_2_0"}'`  | 
| EnableStatistics |  Defina como `true` ou `y` para ativar as estatísticas sobre páginas e grupos de linhas do arquivo .parquet. Valor padrão: `true` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"EnableStatistics": false}'`  | 
| TimestampColumnName |  Um parâmetro opcional para incluir uma coluna de timestamp nos dados de endpoint de destino do S3. AWS DMS inclui uma `STRING` coluna adicional nos arquivos de objeto .csv ou .parquet dos dados migrados quando você define `TimestampColumnName` um valor que não esteja em branco. Em uma carga completa, cada linha da coluna de timestamp contém um timestamp para quando os dados foram transferidos da origem para o destino pelo DMS.  Em um carregamento de CDC, cada linha da coluna de timestamp contém o timestamp da confirmação da linha no banco de dados de origem. O formato de string para esse valor de coluna de timestamp é `yyyy-MM-dd HH:mm:ss.SSSSSS`. Por padrão, a precisão desse valor é em microssegundos. Para uma carga de CDC, o arredondamento da precisão depende do carimbo de data e hora de confirmação compatível com o DMS para o banco de dados de origem. Quando o parâmetro `AddColumnName` for definido como `true`, o DMS também inclui o nome da coluna de timestamp definida como o valor não vazio de `TimestampColumnName`. Exemplo: `--s3-settings '{"TimestampColumnName": "TIMESTAMP"}'`  | 
| UseTaskStartTimeForFullLoadTimestamp |  Quando definido como `true`, esse parâmetro utiliza a hora de início da tarefa como o valor da coluna de timestamp em vez da hora em que os dados são gravados no destino. Para carga completa, quando o `UseTaskStartTimeForFullLoadTimestamp` for definido como `true`, cada linha da coluna de carimbo de data/hora mostrará a hora de início da tarefa. Para cargas de CDC, cada linha da coluna de data e hora contém o tempo de confirmação da transação. Quando `UseTaskStartTimeForFullLoadTimestamp` está definido como `false`, o timestamp da carga máxima na coluna de timestamp é incrementado com data e hora em que os dados chegam ao destino. Valor padrão: `false` Valores válidos: `true`, `false` Exemplo: `--s3-settings '{"UseTaskStartTimeForFullLoadTimestamp": true}'` `UseTaskStartTimeForFullLoadTimestamp: true` ajuda a tornar `TimestampColumnName` do destino do S3 de uma carga máxima classificável com `TimestampColumnName` para uma carga de CDC.  | 
| ParquetTimestampInMillisecond |  Um parâmetro opcional que especifica a precisão de qualquer valor de coluna `TIMESTAMP` gravado em um arquivo de objeto do S3 no formato .parquet. Quando esse atributo é definido como `true` ou`y`, AWS DMS grava todas as `TIMESTAMP` colunas em um arquivo formatado.parquet com precisão de milissegundos. Caso contrário, o DMS grava com precisão de microssegundos. Atualmente, Amazon Athena e AWS Glue pode lidar com precisão de apenas milissegundos para `TIMESTAMP` valores. Defina esse atributo como verdadeiro para arquivos de objeto do endpoint do S3 formatados como .parquet somente se quiser consultar ou processar os dados com o Athena ou o AWS Glue.    AWS DMS grava qualquer valor de `TIMESTAMP` coluna gravado em um arquivo S3 no formato.csv com precisão de microssegundos.   A configuração desse atributo não tem efeito sobre o formato da string do valor da coluna de timestamp inserido definindo o atributo `TimestampColumnName`.    Valor padrão: `false` Valores válidos: `true`, `false`, `y`, `n` Exemplo: `--s3-settings '{"ParquetTimestampInMillisecond": true}'`  | 
| GlueCatalogGeneration |  Para gerar um AWS Glue Data Catalog, defina essa configuração de endpoint como. `true` Valor padrão: `false` Valores válidos: `true`, `false`. Exemplo: `--s3-settings '{"GlueCatalogGeneration": true}'` **Observação:** não utilize `GlueCatalogGeneration` com `PreserveTransactions` e `CdcPath`.  | 

## Usando AWS Glue Data Catalog com um destino do Amazon S3 para AWS DMS
<a name="CHAP_Target.S3.GlueCatalog"></a>

AWS Glue é um serviço que fornece maneiras simples de categorizar dados e consiste em um repositório de metadados conhecido como. AWS Glue Data Catalog Você pode se integrar AWS Glue Data Catalog ao seu endpoint de destino do Amazon S3 e consultar dados do Amazon S3 por meio de outros serviços, AWS como o Amazon Athena. O Amazon Redshift funciona com AWS DMS isso AWS Glue , mas não oferece suporte a isso como uma opção pré-criada. 

Para gerar o catálogo de dados, defina a configuração do `GlueCatalogGeneration` endpoint como`true`, conforme mostrado no AWS CLI exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint 
            --engine-name s3 --endpoint-type target--s3-settings '{"ServiceAccessRoleArn": 
            "your-service-access-ARN", "BucketFolder": "your-bucket-folder", "BucketName": 
            "your-bucket-name", "DataFormat": "parquet", "GlueCatalogGeneration": true}'
```

Para uma tarefa de replicação de carga máxima que inclua o tipo de dados `csv`, defina `IncludeOpForFullLoad` como `true`.

Não utilize `GlueCatalogGeneration` com `PreserveTransactions` e `CdcPath`. O AWS Glue rastreador não consegue reconciliar os diferentes esquemas de arquivos armazenados sob o especificado. `CdcPath`

Para que o Amazon Athena indexe os dados do Amazon S3, e para você consultar os dados utilizando consultas SQL padrão por meio do Amazon Athena, o perfil do IAM anexado ao endpoint deve ter a seguinte política:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	  
    "Statement": [ 
        {
            "Effect": "Allow", 
            "Action": [
                "s3:GetBucketLocation", 
                "s3:GetObject",
                "s3:ListBucket", 
                "s3:ListBucketMultipartUploads", 
                "s3:ListMultipartUploadParts", 
                "s3:AbortMultipartUpload" 
            ], 
            "Resource": [
                "arn:aws:s3:::bucket123", 
                "arn:aws:s3:::bucket123/*" 
            ]
        },
        {
            "Effect": "Allow", 
            "Action": [ 
                "glue:CreateDatabase", 
                "glue:GetDatabase", 
                "glue:CreateTable", 
                "glue:DeleteTable", 
                "glue:UpdateTable", 
                "glue:GetTable", 
                "glue:BatchCreatePartition", 
                "glue:CreatePartition", 
                "glue:UpdatePartition", 
                "glue:GetPartition", 
                "glue:GetPartitions", 
                "glue:BatchGetPartition"
            ], 
            "Resource": [
                "arn:aws:glue:*:111122223333:catalog", 
                "arn:aws:glue:*:111122223333:database/*", 
                "arn:aws:glue:*:111122223333:table/*" 
            ]
        }, 
        {
            "Effect": "Allow",
            "Action": [
                "athena:StartQueryExecution",
                "athena:GetQueryExecution", 
                "athena:CreateWorkGroup"
            ],
            "Resource": "arn:aws:athena:*:111122223333:workgroup/glue_catalog_generation_for_task_*"
        }
    ]
}
```

------

**Referências**
+ Para obter mais informações sobre AWS Glue, consulte [Conceitos](https://docs.aws.amazon.com//glue/latest/dg/components-key-concepts.html) no *Guia do AWS Glue desenvolvedor*.
+ Para obter mais informações, AWS Glue Data Catalog consulte [Componentes](https://docs.aws.amazon.com/glue/latest/dg/components-overview.html) no *Guia do AWS Glue desenvolvedor*.

## Utilizar criptografia de dados, arquivos de parquet e de CDC no destino do Amazon S3
<a name="CHAP_Target.S3.EndpointSettings"></a>

É possível utilizar as configurações do endpoint de destino do S3 para configurar o seguinte:
+ Uma chave do KMS personalizada para criptografar os objetos de destino do S3.
+ Arquivos parquet como o formato de armazenamento para objetos de destino do S3.
+ Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.
+  AWS Glue Data Catalog Integre-se ao seu endpoint de destino do Amazon S3 e consulte dados do Amazon S3 por meio de outros serviços, como o Amazon Athena.

### AWS KMS configurações principais para criptografia de dados
<a name="CHAP_Target.S3.EndpointSettings.KMSkeys"></a>

Os exemplos a seguir mostram como configurar uma chave do KMS personalizada para criptografar os objetos de destino do S3. Para iniciar, execute o seguinte comando `create-endpoint` na CLI,

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_KMS", 
"ServerSideEncryptionKmsKeyId": "arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480"}'
```

Aqui, o objeto JSON especificado pela opção `--s3-settings` define dois parâmetros. Um é um parâmetro `EncryptionMode` com o valor `SSE_KMS`. O outro é um parâmetro `ServerSideEncryptionKmsKeyId` com o valor de `arn:aws:kms:us-east-1:111122223333:key/72abb6fb-1e49-4ac1-9aed-c803dfcc0480`. Esse valor é um Nome de recurso da Amazon (ARN) para a chave personalizada do KMS. Para um destino do S3, você também pode especificar configurações adicionais. Esses identificam o perfil de acesso ao servidor, fornecem delimitadores para o formato de armazenamento de objetos CSV padrão e fornecem o local e o nome do bucket para armazenar objetos de destino do S3.

Por padrão, a criptografia dos dados do S3 ocorre usando a criptografia do lado do servidor do S3. Para o destino do S3 do exemplo anterior, isso também é equivalente a especificar suas configurações de endpoint, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "CsvRowDelimiter": "\n", 
"CsvDelimiter": ",", "BucketFolder": "your-bucket-folder", 
"BucketName": "your-bucket-name", 
"EncryptionMode": "SSE_S3"}'
```

Para obter mais informações sobre como trabalhar com a criptografia do lado do servidor do S3, consulte [Proteger dados utilizando a criptografia do lado do servidor](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html).

**nota**  
Também é possível utilizar o comando `modify-endpoint` na CLI para alterar o valor do parâmetro `EncryptionMode` para um endpoint existente de `SSE_KMS` para `SSE_S3`. Mas não é possível alterar o valor de `EncryptionMode` de `SSE_S3` para `SSE_KMS`.

### Configurações para utilizar arquivos .parquet para armazenar objetos de destino do S3
<a name="CHAP_Target.S3.EndpointSettings.Parquet"></a>

O formato padrão para criar objetos de destino do S3 é arquivos .csv. Os exemplos a seguir mostram algumas configurações de endpoint para especificar arquivos .parquet como o formato para criar objetos de destino do S3. É possível especificar o formato .parquet de arquivos com todos os padrões, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target 
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "DataFormat": "parquet"}'
```

Aqui, o parâmetro `DataFormat` é definido como `parquet` para ativar o formato com todos os padrões do S3. Esses padrões incluem a codificação de um dicionário (`"EncodingType: "rle-dictionary"`) que utiliza uma combinação de empacotamento de bits e de codificação de run-length para armazenar valores repetidos.

É possível adicionar outras configurações para opções diferentes do padrão, como no exemplo a seguir.

```
aws dms create-endpoint --endpoint-identifier s3-target-endpoint --engine-name s3 --endpoint-type target
--s3-settings '{"ServiceAccessRoleArn": "your-service-access-ARN", "BucketFolder": "your-bucket-folder",
"BucketName": "your-bucket-name", "DataFormat": "parquet", "EncodingType: "plain-dictionary", "DictPageSizeLimit": 3,072,000,
"EnableStatistics": false }'
```

Aqui, além dos parâmetros para várias opções padrão de bucket do S3 e do parâmetro `DataFormat`, os seguintes parâmetros adicionais de arquivo .parquet são definidos:
+ `EncodingType`: defina uma codificação de dicionário (`plain-dictionary`) que armazena os valores encontrados em cada coluna em um bloco por coluna da página do dicionário.
+ `DictPageSizeLimit`: defina um tamanho máximo de página do dicionário de 3 MB.
+ `EnableStatistics`: desativa o padrão que ativa a coleção de estatísticas sobre páginas de arquivos Parquet e grupos de linhas.

### Captura de dados de alteração (CDC), incluindo a ordem de transações no destino do S3.
<a name="CHAP_Target.S3.EndpointSettings.CdcPath"></a>

Por padrão, quando AWS DMS executa uma tarefa do CDC, ela armazena todas as alterações de linha registradas em seu banco de dados de origem (ou bancos de dados) em um ou mais arquivos para cada tabela. Cada conjunto de arquivos contendo alterações para a mesma tabela reside em um único diretório de destino associado a essa tabela. AWS DMS cria tantos diretórios de destino quanto tabelas de banco de dados migradas para o endpoint de destino do Amazon S3. Os arquivos são armazenados no destino do S3 nesses diretórios, independentemente da ordem da transação. Para obter mais informações sobre as convenções de nomenclatura, o conteúdo e o formato dos dados, consulte [Usando o Amazon S3 como destino para AWS Database Migration Service](#CHAP_Target.S3).

Para capturar as alterações do banco de dados de origem de uma forma que também capture a ordem da transação, você pode especificar as configurações do endpoint do S3 que AWS DMS direcionam o armazenamento das alterações de linha de *todas as* tabelas do banco de dados em um ou mais arquivos.csv criados dependendo do tamanho da transação. Esses *arquivos de transação* .csv contêm todas as alterações de linhas listadas sequencialmente na ordem da transação de todas as tabelas envolvidas em cada transação. Esses arquivos de transação residem juntos em um único *diretório de transações* que você também especifica no destino do S3. Em cada arquivo de transação, a operação da transação e a identidade do banco de dados e a tabela de origem de cada alteração de linha são armazenadas como parte dos dados da linha, da seguinte maneira. 

```
operation,table_name,database_schema_name,field_value,...
```

Aqui, `operation` é a operação da transação na linha alterada, `table_name` é o nome da tabela do banco de dados em que a linha foi alterada, `database_schema_name` é o nome do esquema do banco de dados em que a tabela reside e `field_value` é o primeiro de um ou mais valores de campo que especificam os dados da linha.

O exemplo a seguir de um arquivo de transação mostra as linhas alteradas de uma ou mais transações que envolvem duas tabelas.

```
I,Names_03cdcad11a,rdsTempsdb,13,Daniel
U,Names_03cdcad11a,rdsTempsdb,23,Kathy
D,Names_03cdcad11a,rdsTempsdb,13,Cathy
I,Names_6d152ce62d,rdsTempsdb,15,Jane
I,Names_6d152ce62d,rdsTempsdb,24,Chris
I,Names_03cdcad11a,rdsTempsdb,16,Mike
```

Aqui, a operação da transação em cada linha é indicada por `I` (inserir), `U` (atualizar) ou `D` (excluir) na primeira coluna. O nome da tabela é o valor da segunda coluna (por exemplo, `Names_03cdcad11a`). O nome do esquema do banco de dados é o valor da terceira coluna (por exemplo, `rdsTempsdb`). E as colunas restantes são preenchidas com seus próprios dados da linha (por exemplo, `13,Daniel`).

Além disso, AWS DMS nomeia os arquivos de transação que ele cria no destino do Amazon S3 usando um registro de data e hora de acordo com a seguinte convenção de nomenclatura.

```
CDC_TXN-timestamp.csv
```

Aqui, `timestamp` é a hora em que o arquivo de transação foi criado, como no exemplo a seguir. 

```
CDC_TXN-20201117153046033.csv
```

Esse timestamp no nome do arquivo garante que os arquivos de transação sejam criados e listados na ordem da transação quando você os lista no diretório de transações.

**nota**  
Ao capturar alterações de dados na ordem da transação, AWS DMS sempre armazena as alterações de linha em arquivos.csv, independentemente do valor da configuração do `DataFormat` S3 no destino.

Para controlar a frequência de gravações em um destino do Amazon S3 durante uma tarefa de replicação de dados, é possível definir as configurações `CdcMaxBatchInterval` e `CdcMinFileSize`. Isso pode resultar em melhor desempenho ao analisar os dados sem operações adicionais de sobrecarga. Para obter mais informações, consulte [Configurações de endpoint ao usar o Amazon S3 como destino para AWS DMS](#CHAP_Target.S3.Configuring). 

**Para pedir AWS DMS para armazenar todas as alterações de linha na ordem da transação**

1. Defina a configuração `PreserveTransactions` do S3 no destino como `true`.

1. Defina a configuração do `CdcPath` S3 no destino para um caminho de pasta relativo no qual você AWS DMS deseja armazenar os arquivos de transação.csv.

   AWS DMS cria esse caminho no bucket de destino e no diretório de trabalho padrão do S3 ou na pasta do bucket e do bucket que você especifica usando as configurações `BucketName` e do `BucketFolder` S3 no destino.

## Indicar operações de banco de dados de origem em dados migrados do S3
<a name="CHAP_Target.S3.Configuring.InsertOps"></a>

Ao AWS DMS migrar registros para um destino do S3, ele pode criar um campo adicional em cada registro migrado. Esse campo adicional indica a operação aplicada ao registro no banco de dados de origem. AWS DMS A forma como cria e define esse primeiro campo depende do tipo de tarefa de migração e das configurações de `includeOpForFullLoad``cdcInsertsOnly`, `cdcInsertsAndUpdates` e.

Em uma carga máxima, quando `includeOpForFullLoad` é `true`, o AWS DMS sempre cria um primeiro campo adicional em cada registro .csv. Esse campo contém a letra I (INSERT) para indicar que a linha foi inserida no banco de dados de origem. Para uma carga de CDC when `cdcInsertsOnly` is `false` (o padrão), AWS DMS também sempre cria um primeiro campo adicional em cada registro.csv ou .parquet. Esse campo contém a letra I (INSERT), U (UPDATE) ou D (DELETE) para indicar se a linha foi inserida, atualizada ou excluída no banco de dados de origem.

Na tabela a seguir, é possível ver como as configurações dos atributos `includeOpForFullLoad` e `cdcInsertsOnly` funcionam em conjunto e afetam a configuração dos registros migrados.


| Com essas configurações de parâmetros | O DMS define os registros de destino para a saída .csv e .parquet da seguinte maneira  | includeOpForFullLoad | cdcInsertsOnly | Para carga completa | Para carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I é adicionado | 
| false | false | Nenhum campo é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 
| false | true | Nenhum campo é adicionado | Nenhum campo é adicionado | 
| true | false | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 

Quando `includeOpForFullLoad` e `cdcInsertsOnly` forem definidos com o mesmo valor, os registros de destino serão definidos de acordo com o atributo que controla as configurações de registro para o tipo de migração atual. Esse atributo é `includeOpForFullLoad` para a carga máxima e `cdcInsertsOnly` para a carga da CDC.

Quando `includeOpForFullLoad` e `cdcInsertsOnly` são definidos com valores diferentes, AWS DMS torna as configurações de registro de destino consistentes tanto para o CDC quanto para a carga total. Isso é feito fazendo com que as configurações de registro de uma carga de CDC com as configurações de qualquer carga máxima anterior especificada por `includeOpForFullLoad` estejam em conformidade. 

Ou seja, suponha que uma carga máxima está configurada para adicionar um primeiro campo para indicar um registro inserido. Nesse caso, um carregamento de CDC seguinte será configurado para adicionar um primeiro campo que indica um registro inserido, atualizado ou excluído de acordo com a origem. Por outro lado, suponha que um carga máxima está configurada para *não* adicionar um primeiro campo indicando um registro inserido. Nesse caso, uma carga de CDC também será definida para não adicionar um primeiro campo para cada registro, independentemente das operações de registro correspondentes na origem.

Da mesma forma, a maneira como o DMS cria e define um primeiro campo adicional depende das configurações de `includeOpForFullLoad` e de `cdcInsertsAndUpdates`. Na tabela a seguir, é possível ver como as configurações dos atributos `includeOpForFullLoad` e `cdcInsertsAndUpdates` funcionam em conjunto e afetam a configuração dos registros migrados neste formato. 


| Com essas configurações de parâmetros | O DMS define os registros de destino para a saída .csv da seguinte forma  | includeOpForFullLoad | cdcInsertsAndAtualizações | Para carga completa | Para carga de CDC | 
| --- | --- | --- | --- | --- | --- | 
| true | true | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I ou U | 
| false | false | Nenhum campo é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 
| false | true | Nenhum campo é adicionado | O valor do primeiro campo definido como I ou U | 
| true | false | O valor do primeiro campo definido como I é adicionado | O valor do primeiro campo definido como I, U ou D é adicionado | 

## Tipos de dados de destino do S3 Parquet
<a name="CHAP_Target.S3.DataTypes"></a>

A tabela a seguir mostra os tipos de dados de destino do Parquet que são suportados durante o uso AWS DMS e o mapeamento padrão dos tipos de AWS DMS dados.

Para obter informações adicionais sobre AWS DMS os tipos de dados, consulte[Tipos de dados do AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  AWS DMS tipo de dados  |  Tipo de dados parquet do S3   | 
| --- | --- | 
| BYTES | 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 | UINT64 | 
| WSTRING | STRING | 
| BLOB | BINARY | 
| NCLOB | STRING | 
| CLOB | STRING | 
| BOOLEAN | BOOL | 