

# Formato de saída de exportação da tabela do DynamoDB
Formato de exportação

Uma exportação de tabela do DynamoDB inclui arquivos de manifesto, além dos arquivos que contêm os dados da tabela. Esses arquivos são salvos no bucket do Amazon S3 especificado por você na [solicitação de exportação](S3DataExport_Requesting.md). As seções a seguir descrevem o formato e o conteúdo de cada objeto de saída.

**Topics**

## Saída de exportação completa


### Arquivos de manifesto


O DynamoDB cria arquivos de manifesto, bem como os respectivos arquivos de soma de verificação, no bucket do S3 especificado para cada solicitação de exportação.

```
export-prefix/AWSDynamoDB/ExportId/manifest-summary.json
export-prefix/AWSDynamoDB/ExportId/manifest-summary.checksum
export-prefix/AWSDynamoDB/ExportId/manifest-files.json
export-prefix/AWSDynamoDB/ExportId/manifest-files.checksum
```

Você escolhe um **export-prefix** ao solicitar uma exportação de tabela. Isso ajuda a manter os arquivos no bucket do S3 de destino organizados. O **ExportId** é um token exclusivo gerado pelo serviço para garantir que várias exportações para o mesmo bucket do S3 e `export-prefix` não se sobreponham.

Essa exportação cria pelo menos um arquivo por partição. Para partições vazias, a solicitação de exportação criará um arquivo vazio. Todos os itens em cada arquivo são do espaço de chave com hash dessa partição específica.

**nota**  
O DynamoDB também cria um arquivo vazio chamado `_started` no mesmo diretório dos arquivos de manifesto.’ Esse arquivo verifica se o bucket de destino pode ser gravado e se a exportação foi iniciada. Ele pode ser excluído com segurança.

#### O manifesto resumido


O arquivo `manifest-summary.json` contém informações resumidas sobre o trabalho de exportação. Isso permite que você saiba quais arquivos de dados na pasta de dados compartilhada estão associados a essa exportação. Seu formato é o seguinte:

```
{
   "version": "2020-06-30",
   "exportArn": "arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4",
   "startTime": "2020-11-04T07:28:34.028Z",
   "endTime": "2020-11-04T07:33:43.897Z",
   "tableArn": "arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog",
   "tableId": "12345a12-abcd-123a-ab12-1234abc12345",
   "exportTime": "2020-11-04T07:28:34.028Z",
   "s3Bucket": "ddb-productcatalog-export",
   "s3Prefix": "2020-Nov",
   "s3SseAlgorithm": "AES256",
   "s3SseKmsKeyId": null,
   "manifestFilesS3Key": "AWSDynamoDB/01693685827463-2d8752fd/manifest-files.json",
   "billedSizeBytes": 0,
   "itemCount": 8,
   "outputFormat": "DYNAMODB_JSON",
   "exportType": "FULL_EXPORT"
}
```

#### O manifesto de arquivos


O arquivo `manifest-files.json` contém informações sobre os arquivos que contêm os dados da tabela exportada. Como o arquivo está no formato [linhas JSON](https://jsonlines.org/), novas linhas são usadas como delimitadores de itens. No exemplo a seguir, os detalhes de um arquivo de dados de um manifesto de arquivos são formatados em várias linhas por razões de legibilidade.

```
{
"itemCount": 8,
   "md5Checksum": "sQMSpEILNgoQmarvDFonGQ==",
   "etag": "af83d6f217c19b8b0fff8023d8ca4716-1",
   "dataFileS3Key": "AWSDynamoDB/01693685827463-2d8752fd/data/asdl123dasas.json.gz"
}
```

### Arquivos de dados


O DynamoDB pode exportar os dados da tabela em dois formatos: DynamoDB JSON e Amazon Ion. Independentemente do formato escolhido, os dados serão gravados em vários arquivos compactados nomeados pelas chaves. Esses arquivos também estão listados no arquivo `manifest-files.json`.

A estrutura de diretórios do bucket do Amazon S3 após uma exportação completa conterá todos os arquivos de manifesto e arquivos de dados na pasta de ID de exportação.

```
amzn-s3-demo-bucket/DestinationPrefix
.
└── AWSDynamoDB
    ├── 01693685827463-2d8752fd     // the single full export
    │   ├── manifest-files.json     // manifest points to files under 'data' subfolder
    │   ├── manifest-files.checksum
    │   ├── manifest-summary.json   // stores metadata about request
    │   ├── manifest-summary.md5  
    │   ├── data                    // The data exported by full export
    │   │   ├── asdl123dasas.json.gz
    │   │   ...
    │   └── _started                // empty file for permission check
```

#### DynamoDB JSON


Uma exportação de tabela no formato JSON do DynamoDB consiste em vários objetos `Item`. Cada objeto individual está no formato JSON organizado padrão do DynamoDB.

Ao criar analisadores personalizados para dados de exportação JSON do DynamoDB, o formato é [linhas JSON](https://jsonlines.org/). Isso significa que as novas linhas são usadas como delimitadores de item. Muitos serviços da AWS, como Athena e AWS Glue, analisarão esse formato automaticamente.

No exemplo a seguir, um único item de uma exportação DynamoDB JSON foi formatado em várias linhas para fins de legibilidade.

```
{
    "Item":{
        "Authors":{
            "SS":[
                "Author1",
                "Author2"
            ]
        },
        "Dimensions":{
            "S":"8.5 x 11.0 x 1.5"
        },
        "ISBN":{
            "S":"333-3333333333"
        },
        "Id":{
            "N":"103"
        },
        "InPublication":{
            "BOOL":false
        },
        "PageCount":{
            "N":"600"
        },
        "Price":{
            "N":"2000"
        },
        "ProductCategory":{
            "S":"Book"
        },
        "Title":{
            "S":"Book 103 Title"
        }
    }
}
```

#### Amazon Ion


O [Amazon Ion](http://amzn.github.io/ion-docs/) é um formato de serialização de dados hierárquico, autodescritivo e altamente compatível com vários tipos de declaração e criado para lidar com os desafios de desacoplamento, desenvolvimento rápido e eficiência enfrentados todos os dias na criação de arquiteturas orientadas a serviços em grande escala. O DynamoDB oferece suporte à exportação de dados de tabelas no [formato de texto](http://amzn.github.io/ion-docs/docs/spec.html) do Ion, o qual é um superconjunto do JSON.

Quando você exporta uma tabela para o formato Ion, os tipos de dados do DynamoDB usados na tabela são mapeados em [tipos de dados Ion](http://amzn.github.io/ion-docs/docs/spec.html). O DynamoDB define o uso de [anotações do tipo Ion](http://amzn.github.io/ion-docs/docs/spec.html#annot) para eliminar ambiguidades do tipo de dados usado na tabela de origem.

A tabela a seguir lista o mapeamento entre os tipos de dados do DynamoDB e os tipos de dados do Ion:


| Tipo de dados do DynamoDB | Representação no Ion | 
| --- | --- | 
| string (S) | string | 
| Boolean (BOOL) | bool | 
| número (N) | decimal | 
| binário (B) | blob | 
| Conjunto (SS, NS, BS) | list (com anotação de tipo \$1dynamodb\$1SS, \$1dynamodb\$1NS ou \$1dynamodb\$1BS) | 
| Lista | list | 
| Mapa | struct | 

Os itens em uma exportação do Ion são delimitados por novas linhas. Cada linha começa com um marcador de versão do Ion, seguido por um item no formato Ion. No exemplo a seguir, um item de uma exportação ION foi formatado em várias linhas para fins de legibilidade.

```
$ion_1_0 {
    Item:{
        Authors:$dynamodb_SS::["Author1","Author2"],
        Dimensions:"8.5 x 11.0 x 1.5",
        ISBN:"333-3333333333",
        Id:103.,
        InPublication:false,
        PageCount:6d2,
        Price:2d3,
        ProductCategory:"Book",
        Title:"Book 103 Title"
    }
}
```

## Saída de exportação Incremental


### Arquivos de manifesto


O DynamoDB cria arquivos de manifesto, bem como os respectivos arquivos de soma de verificação, no bucket do S3 especificado para cada solicitação de exportação.

```
export-prefix/AWSDynamoDB/ExportId/manifest-summary.json
export-prefix/AWSDynamoDB/ExportId/manifest-summary.checksum
export-prefix/AWSDynamoDB/ExportId/manifest-files.json
export-prefix/AWSDynamoDB/ExportId/manifest-files.checksum
```

Você escolhe um **export-prefix** ao solicitar uma exportação de tabela. Isso ajuda a manter os arquivos no bucket do S3 de destino organizados. O **ExportId** é um token exclusivo gerado pelo serviço para garantir que várias exportações para o mesmo bucket do S3 e `export-prefix` não se sobreponham.

Essa exportação cria pelo menos um arquivo por partição. Para partições vazias, a solicitação de exportação criará um arquivo vazio. Todos os itens em cada arquivo são do espaço de chave com hash dessa partição específica.

**nota**  
O DynamoDB também cria um arquivo vazio chamado `_started` no mesmo diretório dos arquivos de manifesto.’ Esse arquivo verifica se o bucket de destino pode ser gravado e se a exportação foi iniciada. Ele pode ser excluído com segurança.

#### O manifesto resumido


O arquivo `manifest-summary.json` contém informações resumidas sobre o trabalho de exportação. Isso permite que você saiba quais arquivos de dados na pasta de dados compartilhada estão associados a essa exportação. Seu formato é o seguinte:

```
{
 "version": "2023-08-01",
 "exportArn": "arn:aws:dynamodb:us-east-1:599882009758:table/export-test/export/01695097218000-d6299cbd",
 "startTime": "2023-09-19T04:20:18.000Z",
 "endTime": "2023-09-19T04:40:24.780Z",
 "tableArn": "arn:aws:dynamodb:us-east-1:599882009758:table/export-test",
 "tableId": "b116b490-6460-4d4a-9a6b-5d360abf4fb3",
 "exportFromTime": "2023-09-18T17:00:00.000Z",
 "exportToTime": "2023-09-19T04:00:00.000Z",
 "s3Bucket": "jason-exports",
 "s3Prefix": "20230919-prefix",
 "s3SseAlgorithm": "AES256",
 "s3SseKmsKeyId": null,
 "manifestFilesS3Key": "20230919-prefix/AWSDynamoDB/01693685934212-ac809da5/manifest-files.json",
 "billedSizeBytes": 20901239349,
 "itemCount": 169928274,
 "outputFormat": "DYNAMODB_JSON",
 "outputView": "NEW_AND_OLD_IMAGES",
 "exportType": "INCREMENTAL_EXPORT"
}
```

#### O manifesto de arquivos


O arquivo `manifest-files.json` contém informações sobre os arquivos que contêm os dados da tabela exportada. Como o arquivo está no formato [linhas JSON](https://jsonlines.org/), novas linhas são usadas como delimitadores de itens. No exemplo a seguir, os detalhes de um arquivo de dados de um manifesto de arquivos são formatados em várias linhas por razões de legibilidade.

```
{
"itemCount": 8,
   "md5Checksum": "sQMSpEILNgoQmarvDFonGQ==",
   "etag": "af83d6f217c19b8b0fff8023d8ca4716-1",
   "dataFileS3Key": "AWSDynamoDB/data/sgad6417s6vss4p7owp0471bcq.json.gz"
}
```

### Arquivos de dados


O DynamoDB pode exportar os dados da tabela em dois formatos: DynamoDB JSON e Amazon Ion. Independentemente do formato escolhido, os dados serão gravados em vários arquivos compactados nomeados pelas chaves. Esses arquivos também estão listados no arquivo `manifest-files.json`.

Os arquivos de dados para exportações incrementais estão todos contidos em uma pasta de dados comum no bucket do S3. Os arquivos de manifesto estão na pasta de ID de exportação.

```
amzn-s3-demo-bucket/DestinationPrefix
.
└── AWSDynamoDB
    ├── 01693685934212-ac809da5     // an incremental export ID
    │   ├── manifest-files.json     // manifest points to files under 'data' folder
    │   ├── manifest-files.checksum
    │   ├── manifest-summary.json   // stores metadata about request
    │   ├── manifest-summary.md5  
    │   └── _started                // empty file for permission check
    ├── 01693686034521-ac809da5
    │   ├── manifest-files.json
    │   ├── manifest-files.checksum
    │   ├── manifest-summary.json
    │   ├── manifest-summary.md5
    │   └── _started
    ├── data                        // stores all the data files for incremental exports
    │   ├── sgad6417s6vss4p7owp0471bcq.json.gz 
    │   ...
```

Nos arquivos de exportação, a saída de cada item inclui um carimbo de data/hora que representa quando o item foi atualizado na tabela e uma estrutura de dados que indica se foi uma operação `insert`, `update` ou `delete`. O carimbo de data/hora baseia-se em um relógio interno do sistema e pode divergir do relógio da aplicação. Para exportações incrementais, você pode escolher entre dois tipos de visualização de exportação para a estrutura de saída: **Imagens novas e antigas** ou **Somente novas imagens**.
+ **Imagem nova** fornece o estado mais recente do item 
+ **Imagem antiga** fornece o estado do item imediatamente antes da **data e hora de início** especificadas

Os tipos de visualização podem ser úteis se você quiser ver como o item foi alterado no período de exportação. Também pode ser útil para atualizar com eficiência os sistemas subsequentes, especialmente se esses sistemas tiverem uma chave de partição diferente da chave de partição do DynamoDB. 

Você pode inferir se um item na saída de exportação incremental era `insert`, `update` ou `delete` observando a estrutura da saída. A estrutura de exportação incremental e as operações correspondentes estão resumidas na tabela abaixo para os dois tipos de visualização de exportação.


| Operation | Somente novas imagens | Imagens novas e antigas | 
| --- | --- | --- | 
|  Inserir  |  Chaves \$1 imagem nova  | Chaves \$1 imagem nova | 
|  Atualizar  | Chaves \$1 imagem nova | Chaves \$1 imagem nova \$1 imagem antiga | 
| Excluir | Chaves | Chaves \$1 imagem antiga | 
| Inserir \$1 excluir | Sem saída | Sem saída | 

#### DynamoDB JSON


Uma exportação de tabela no formato JSON do DynamoDB consiste em um carimbo de data/hora de metadados que indica a hora de gravação do item, seguido das chaves do item e dos valores. Veja a seguir um exemplo de saída JSON do DynamoDB usando o tipo de visualização de exportação como **Imagens novas e antigas**.

```
// Ex 1: Insert
//   An insert means the item did not exist before the incremental export window
//   and was added during the incremental export window

{
   "Metadata": {
     "WriteTimestampMicros": "1680109764000000"
   },
   "Keys": {
     "PK": { 
       "S": "CUST#100" 
     }
   },
   "NewImage": {
     "PK": { 
       "S": "CUST#100" 
     },
     "FirstName": {
       "S": "John"
     },
     "LastName": {
       "S": "Don"
     }
   }
}

// Ex 2: Update
//   An update means the item existed before the incremental export window
//   and was updated during the incremental export window. 
//   The OldImage would not be present if choosing "New images only".

{
   "Metadata": {
     "WriteTimestampMicros": "1680109764000000"
   },
   "Keys": {
     "PK": { 
       "S": "CUST#200" 
     }
   },
   "OldImage": {
     "PK": { 
       "S": "CUST#200" 
     },
     "FirstName": {
       "S": "Mary"
     },
     "LastName": {
       "S": "Grace"
     }
   },
   "NewImage": {
     "PK": { 
       "S": "CUST#200" 
     },
     "FirstName": {
       "S": "Mary"
     },
     "LastName": {
       "S": "Smith"
     }
   }
}

// Ex 3: Delete
//   A delete means the item existed before the incremental export window
//   and was deleted during the incremental export window
//   The OldImage would not be present if choosing "New images only".

{
   "Metadata": {
     "WriteTimestampMicros": "1680109764000000"
   },
   "Keys": {
     "PK": { 
       "S": "CUST#300" 
     }
   },
   "OldImage": {
     "PK": { 
       "S": "CUST#300" 
     },
     "FirstName": {
       "S": "Jose"
     },
     "LastName": {
       "S": "Hernandez"
     }
   }
}

// Ex 4: Insert + Delete
//   Nothing is exported if an item is inserted and deleted within the 
//   incremental export window.
```

#### Amazon Ion


O [Amazon Ion](http://amzn.github.io/ion-docs/) é um formato de serialização de dados hierárquico, autodescritivo e altamente compatível com vários tipos de declaração e criado para lidar com os desafios de desacoplamento, desenvolvimento rápido e eficiência enfrentados todos os dias na criação de arquiteturas orientadas a serviços em grande escala. O DynamoDB oferece suporte à exportação de dados de tabelas no [formato de texto](http://amzn.github.io/ion-docs/docs/spec.html) do Ion, o qual é um superconjunto do JSON.

Quando você exporta uma tabela para o formato Ion, os tipos de dados do DynamoDB usados na tabela são mapeados em [tipos de dados Ion](http://amzn.github.io/ion-docs/docs/spec.html). O DynamoDB define o uso de [anotações do tipo Ion](http://amzn.github.io/ion-docs/docs/spec.html#annot) para eliminar ambiguidades do tipo de dados usado na tabela de origem.

A tabela a seguir lista o mapeamento entre os tipos de dados do DynamoDB e os tipos de dados do Ion:


| Tipo de dados do DynamoDB | Representação no Ion | 
| --- | --- | 
| string (S) | string | 
| Boolean (BOOL) | bool | 
| número (N) | decimal | 
| binário (B) | blob | 
| Conjunto (SS, NS, BS) | list (com anotação de tipo \$1dynamodb\$1SS, \$1dynamodb\$1NS ou \$1dynamodb\$1BS) | 
| Lista | list | 
| Mapa | struct | 

Os itens em uma exportação do Ion são delimitados por novas linhas. Cada linha começa com um marcador de versão do Ion, seguido por um item no formato Ion. No exemplo a seguir, um item de uma exportação ION foi formatado em várias linhas para fins de legibilidade.

```
$ion_1_0 {
    Record:{
        Keys:{
             ISBN:"333-3333333333"
         },
        Metadata:{
            WriteTimestampMicros:1684374845117899.
        },
        OldImage:{
            Authors:$dynamodb_SS::["Author1","Author2"],
            ISBN:"333-3333333333",
            Id:103.,
            InPublication:false,
            ProductCategory:"Book",
            Title:"Book 103 Title"
        },
        NewImage:{
            Authors:$dynamodb_SS::["Author1","Author2"],
            Dimensions:"8.5 x 11.0 x 1.5",
            ISBN:"333-3333333333",
            Id:103.,
            InPublication:true,
            PageCount:6d2,
            Price:2d3,
            ProductCategory:"Book",
            Title:"Book 103 Title"
        }
    }
}
```