

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Ekspor data DynamoDB ke Amazon S3: cara kerjanya
<a name="S3DataExport.HowItWorks"></a>

Ekspor DynamoDB ke S3 adalah solusi yang dikelola sepenuhnya untuk mengekspor data DynamoDB Anda ke bucket Amazon S3 dalam skala besar. Menggunakan ekspor DynamoDB ke S3, Anda dapat mengekspor data dari tabel Amazon DynamoDB kapan saja dalam jendela pemulihan ([PITR) ke point-in-time bucket](Point-in-time-recovery.md) Amazon S3. Anda perlu mengaktifkan PITR di tabel Anda untuk menggunakan fungsionalitas ekspor. Fitur ini memungkinkan Anda untuk melakukan analitik dan kueri kompleks pada data Anda menggunakan AWS layanan lain seperti Athena AWS Glue,, Amazon AI, SageMaker Amazon EMR, dan. AWS Lake Formation

Ekspor DynamoDB ke S3 memungkinkan Anda mengekspor data lengkap dan tambahan dari tabel DynamoDB Anda. Ekspor bersifat asinkron, mereka tidak mengkonsumsi [unit kapasitas baca (RCUs)](provisioned-capacity-mode.md) dan tidak berdampak pada kinerja dan ketersediaan tabel. Format file ekspor yang didukung adalah format DynamoDB JSON dan Amazon Ion. Anda juga dapat mengekspor data ke bucket S3 yang dimiliki oleh AWS akun lain dan ke AWS wilayah lain. Data Anda selalu dienkripsi end-to-end.

Ekspor penuh DynamoDB dikenakan biaya berdasarkan ukuran tabel DynamoDB (data tabel dan indeks sekunder lokal) pada saat ekspor dilakukan. Ekspor tambahan DynamoDB dikenakan biaya berdasarkan ukuran data yang diproses dari pencadangan berkelanjutan Anda selama periode waktu yang diekspor. Ekspor tambahan memiliki biaya minimum 10MB. Biaya tambahan berlaku untuk menyimpan data yang diekspor di Amazon S3 dan untuk permintaan `PUT` yang dibuat terhadap bucket Amazon S3 Anda. Untuk informasi selengkapnya tentang tagihan ini, lihat [harga Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/) dan [harga Amazon S3](https://aws.amazon.com/s3/pricing/).

Untuk spesifik tentang kuota layanan, lihat. [Ekspor tabel ke Amazon S3](ServiceQuotas.md#limits-table-export) 

**Topics**
+ [Meminta ekspor tabel di DynamoDB](S3DataExport_Requesting.md)
+ [Format output ekspor tabel DynamoDB](S3DataExport.Output.md)

# Meminta ekspor tabel di DynamoDB
<a name="S3DataExport_Requesting"></a>

Ekspor tabel DynamoDB memungkinkan Anda mengekspor data tabel ke bucket Amazon S3, memungkinkan Anda melakukan analitik dan kueri kompleks pada data Anda menggunakan layanan lain AWS seperti Athena, Amazon AI, Amazon EMR AWS Glue, dan. SageMaker AWS Lake Formation Anda dapat meminta ekspor tabel menggunakan Konsol Manajemen AWS, AWS CLI, atau DynamoDB API.

**catatan**  
Pemohon membayar bucket Amazon S3 tidak didukung.

DynamoDB mendukung ekspor penuh dan ekspor tambahan:
+ Dengan **ekspor penuh**, Anda dapat mengekspor snapshot lengkap tabel Anda dari titik waktu mana pun dalam jendela point-in-time pemulihan (PITR) ke bucket Amazon S3 Anda.
+ Dengan **ekspor tambahan**, Anda dapat mengekspor data dari tabel DynamoDB yang diubah, diperbarui, atau dihapus antara periode waktu tertentu, dalam jendela PITR, ke bucket Amazon S3 Anda. 

**Topics**
+ [Prasyarat](#S3DataExport_Requesting_Permissions)
+ [Meminta ekspor menggunakan Konsol Manajemen AWS](#S3DataExport_Requesting_Console)
+ [Mendapatkan detail tentang ekspor masa lalu di Konsol Manajemen AWS](#S3DataExport_Requesting_Console_Details)
+ [Meminta ekspor menggunakan dan AWS CLI AWS SDKs](#S3DataExport_Requesting_CLI)
+ [Mendapatkan detail tentang ekspor sebelumnya menggunakan dan AWS CLI AWS SDKs](#S3DataExport_Requesting_CLI_Details)

## Prasyarat
<a name="S3DataExport_Requesting_Permissions"></a>

**Mengaktifkan PITR**

Untuk menggunakan fitur ekspor ke S3, Anda harus mengaktifkan PITR di meja Anda. Untuk detail tentang cara mengaktifkan PITR, lihat [oint-in-timePemulihan P](PointInTimeRecovery_Howitworks.md). Jika Anda meminta ekspor untuk tabel yang tidak mengaktifkan PITR, permintaan Anda akan gagal dengan pesan pengecualian: “Terjadi kesalahan (PointInTimeRecoveryUnavailableException) saat memanggil `ExportTableToPointInTime` operasi: Pemulihan titik waktu tidak diaktifkan untuk tabel 'my-dynamodb-table”. Anda hanya dapat meminta dan mengekspor dari titik waktu yang ada dalam PITR `RecoveryPeriodInDays` yang dikonfigurasi.

**Menyiapkan izin S3**

Anda dapat mengekspor data tabel Anda ke setiap bucket Amazon S3 yang izinnya Anda miliki untuk menulis. Bucket tujuan tidak harus berada di AWS Wilayah yang sama atau memiliki pemilik yang sama dengan pemilik tabel sumber. Kebijakan AWS Identity and Access Management (IAM) Anda harus memungkinkan Anda untuk dapat melakukan tindakan S3 (`s3:AbortMultipartUpload`,`s3:PutObject`, dan`s3:PutObjectAcl`) dan tindakan ekspor DynamoDB (). `dynamodb:ExportTableToPointInTime` Berikut adalah contoh kebijakan sampel yang akan memberikan izin kepada pengguna Anda untuk melakukan ekspor ke bucket S3.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDynamoDBExportAction",
            "Effect": "Allow",
            "Action": "dynamodb:ExportTableToPointInTime",
            "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table"
        },
        {
            "Sid": "AllowS3BucketWrites",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

Jika Anda perlu menulis ke bucket Amazon S3 yang ada di akun lain atau Anda tidak memiliki izin untuk menulis, pemilik bucket Amazon S3 harus menambahkan kebijakan bucket untuk memungkinkan Anda mengekspor dari DynamoDB ke bucket tersebut. Berikut adalah contoh kebijakan pada bucket Amazon S3 target.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ExampleStatement",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

Mencabut izin ini saat ekspor sedang berlangsung akan mengakibatkan sebagian file.

**catatan**  
Jika tabel atau bucket tujuan ekspor dienkripsi dengan kunci yang dikelola pelanggan, kebijakan kunci KMS tersebut harus memberikan izin kepada DynamoDB untuk menggunakannya. Izin ini diberikan melalui IAM User/Role yang memicu pekerjaan ekspor. Untuk informasi selengkapnya tentang enkripsi termasuk praktik terbaik, lihat [Bagaimana DynamoDB menggunakan AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html) dan [Menggunakan kunci KMS kustom](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html#managed-key-customer-managed).

## Meminta ekspor menggunakan Konsol Manajemen AWS
<a name="S3DataExport_Requesting_Console"></a>

Contoh berikut menunjukkan cara menggunakan konsol DynamoDB untuk mengekspor tabel yang sudah ada bernama `MusicCollection`.

**catatan**  
Prosedur ini mengasumsikan bahwa Anda telah mengaktifkan point-in-time pemulihan. Untuk mengaktifkannya untuk `MusicCollection` tabel, pada tab **Ikhtisar** tabel, di bagian **Rincian tabel**, pilih **Aktifkan** untuk **oint-in-timepemulihan P**.

**Untuk meminta ekspor tabel**

1. Masuk ke Konsol Manajemen AWS dan buka konsol DynamoDB di. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

1. Di panel navigasi di sisi kiri konsol, pilih **Ekspor ke S3**.

1. Pilih tombol **Ekspor ke S3**.

1. Pilih tabel sumber dan bucket S3 tujuan. Jika bucket tujuan adalah milik akun Anda, Anda dapat menggunakan tombol **Jelajahi S3** untuk menemukannya. Jika tidak, masukkan URL bucket menggunakan format `s3://bucketname/prefix format.`, **prefix** adalah folder opsional untuk membantu mengatur keranjang tujuan Anda.

1. Pilih **Ekspor penuh** atau **Ekspor tambahan**. **Ekspor penuh** menghasilkan cuplikan tabel lengkap dari tabel Anda seperti pada titik waktu yang Anda tentukan. **Ekspor tambahan **menghasilkan perubahan yang dibuat pada tabel Anda selama periode ekspor yang ditentukan. Output Anda dipadatkan sehingga hanya berisi status akhir item dari periode ekspor. Item hanya akan muncul satu kali dalam ekspor meskipun memiliki beberapa pembaruan dalam periode ekspor yang sama.

------
#### [ Full export ]

   1. Pilih titik waktu di mana Anda ingin mengekspor snapshot tabel lengkap. Ini bisa terjadi kapan saja dalam jendela PITR. Atau, Anda dapat memilih **Waktu saat ini** untuk mengekspor snapshot terbaru.

   1. Untuk **Format file yang diekspor**, pilih antara **DynamoDB JSON** dan **Amazon Ion**. Secara default, tabel Anda akan diekspor dalam format DynamoDB JSON dari waktu pemulihan terbaru di jendela pemulihan titik waktu dan dienkripsi menggunakan kunci Amazon S3 (SSE-S3). Anda dapat mengubah pengaturan ekspor ini jika perlu. 
**catatan**  
Jika Anda memilih untuk mengenkripsi ekspor menggunakan kunci yang dilindungi oleh AWS Key Management Service (AWS KMS), kunci harus berada di Region yang sama dengan bucket S3 tujuan.

------
#### [ Incremental export ]

   1. Pilih **Periode ekspor** yang ingin Anda ekspor data tambahannya. Pilih waktu mulai dalam jendela PITR. Durasi periode ekspor minimal harus 15 menit dan tidak lebih dari 24 jam. Waktu mulai periode ekspor bersifat inklusif dan waktu berakhirnya bersifat eksklusif.

   1. Pilih antara **Mode absolut** atau **Mode relatif**.

      1. **Mode absolut** akan mengekspor data tambahan untuk jangka waktu yang Anda tentukan.

      1. **Mode relatif** akan mengekspor data tambahan untuk periode ekspor yang relatif terhadap waktu pengiriman tugas ekspor Anda.

   1. Untuk **Format file yang diekspor**, pilih antara **DynamoDB JSON** dan **Amazon Ion**. Secara default, tabel Anda akan diekspor dalam format DynamoDB JSON dari waktu pemulihan terbaru di jendela pemulihan titik waktu dan dienkripsi menggunakan kunci Amazon S3 (SSE-S3). Anda dapat mengubah pengaturan ekspor ini jika perlu.
**catatan**  
Jika Anda memilih untuk mengenkripsi ekspor menggunakan kunci yang dilindungi oleh AWS Key Management Service (AWS KMS), kunci harus berada di Region yang sama dengan bucket S3 tujuan.

   1. Untuk **Jenis tampilan ekspor**, pilih **Gambar baru dan lama** atau **Gambar baru saja**. Gambar baru memberikan status terkini item. Gambar lama menunjukkan status item tepat sebelum “tanggal dan waktu mulai” yang ditentukan. Pengaturan defaultnya adalah **Gambar baru dan lama**. Untuk informasi selengkapnya tentang gambar baru dan gambar lama, lihat [Output ekspor inkremental](S3DataExport.Output.md#incremental-export-output).

------

1. Pilih **Ekspor** untuk memulai.

Data yang diekspor tidak konsisten secara transaksional. Operasi transaksi Anda dapat terpecah antara dua output ekspor. Subset item dapat dimodifikasi oleh operasi transaksi yang tercermin dalam ekspor, sementara subset modifikasi lain dalam transaksi yang sama tidak tercermin dalam permintaan ekspor yang sama. Namun, ekspor pada akhirnya konsisten. Jika transaksi terkoyak selama ekspor, Anda akan memiliki sisa transaksi di ekspor berikutnya yang berdekatan, tanpa duplikat. Jangka waktu yang digunakan untuk ekspor didasarkan pada jam sistem internal dan dapat bervariasi menurut satu menit jam lokal aplikasi Anda.

## Mendapatkan detail tentang ekspor masa lalu di Konsol Manajemen AWS
<a name="S3DataExport_Requesting_Console_Details"></a>

Anda dapat menemukan informasi tentang tugas ekspor yang pernah Anda jalankan di masa lalu dengan memilih bagian **Ekspor ke S3** di bilah sisi navigasi. Bagian ini berisi daftar semua ekspor yang Anda buat dalam 90 hari terakhir. Pilih ARN tugas yang tercantum di tab **Ekspor untuk mengambil informasi tentang ekspor** itu, termasuk pengaturan konfigurasi lanjutan yang Anda pilih. Perhatikan bahwa meskipun metadata tugas ekspor akan kedaluwarsa setelah 90 hari dan tugas yang lebih lama dari itu tidak lagi ditemukan dalam daftar ini, objek di bucket S3 Anda tetap ada selama kebijakan bucketnya mengizinkan. DynamoDB tidak pernah menghapus objek apa pun yang dibuatnya di bucket S3 Anda selama ekspor.

## Meminta ekspor menggunakan dan AWS CLI AWS SDKs
<a name="S3DataExport_Requesting_CLI"></a>

Contoh berikut menunjukkan cara mengekspor tabel yang ada ke bucket S3. 

**catatan**  
Prosedur ini mengasumsikan bahwa Anda telah mengaktifkan point-in-time pemulihan. Untuk mengaktifkannya untuk tabel `MusicCollection`, jalankan perintah berikut.  

```
aws dynamodb update-continuous-backups \
    --table-name MusicCollection \
    --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
```

**Ekspor penuh**

------
#### [ AWS CLI ]

**catatan**  
Jika meminta ekspor tabel lintas akun, pastikan untuk menyertakan opsi `--s3-bucket-owner`.

```
aws dynamodb export-table-to-point-in-time \
  --table-arn arn:aws:dynamodb:us-west-2:111122223333:table/MusicCollection \
  --s3-bucket ddb-export-musiccollection-9012345678 \
  --s3-prefix 2020-Nov \
  --export-format DYNAMODB_JSON \
  --export-time 1604632434 \
  --s3-bucket-owner 9012345678 \
  --s3-sse-algorithm AES256
```

------
#### [ Python ]

```
import boto3
from datetime import datetime

client = boto3.client('dynamodb')

client.export_table_to_point_in_time(
    TableArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE',
    ExportTime=datetime(2023, 9, 20, 12, 0, 0),
    S3Bucket='bucket',
    S3Prefix='prefix',
    S3SseAlgorithm='AES256',
    ExportFormat='DYNAMODB_JSON'
)
```

------
#### [ Java ]

```
DynamoDbClient client = DynamoDbClient.create();

client.exportTableToPointInTime(b -> b
    .tableArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE")
    .exportTime(Instant.parse("2023-09-20T12:00:00Z"))
    .s3Bucket("bucket")
    .s3Prefix("prefix")
    .s3SseAlgorithm(S3SseAlgorithm.AES256)
    .exportFormat(ExportFormat.DYNAMODB_JSON));
```

------
#### [ .NET ]

```
var client = new AmazonDynamoDBClient();

await client.ExportTableToPointInTimeAsync(new ExportTableToPointInTimeRequest
{
    TableArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
    ExportTime = new DateTime(2023, 9, 20, 12, 0, 0, DateTimeKind.Utc),
    S3Bucket = "bucket",
    S3Prefix = "prefix",
    S3SseAlgorithm = S3SseAlgorithm.AES256,
    ExportFormat = ExportFormat.DYNAMODB_JSON
});
```

------
#### [ JavaScript ]

```
import { DynamoDBClient, ExportTableToPointInTimeCommand } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient();

await client.send(new ExportTableToPointInTimeCommand({
    TableArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
    ExportTime: new Date("2023-09-20T12:00:00Z"),
    S3Bucket: "bucket",
    S3Prefix: "prefix",
    S3SseAlgorithm: "AES256",
    ExportFormat: "DYNAMODB_JSON"
}));
```

------
#### [ Go ]

```
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)

exportTime := time.Date(2023, 9, 20, 12, 0, 0, 0, time.UTC)
client.ExportTableToPointInTime(context.TODO(), &dynamodb.ExportTableToPointInTimeInput{
    TableArn:       aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"),
    ExportTime:     &exportTime,
    S3Bucket:       aws.String("bucket"),
    S3Prefix:       aws.String("prefix"),
    S3SseAlgorithm: types.S3SseAlgorithmAes256,
    ExportFormat:   types.ExportFormatDynamodbJson,
})
```

------

**Ekspor tambahan**

------
#### [ AWS CLI ]

```
aws dynamodb export-table-to-point-in-time \
  --table-arn arn:aws:dynamodb:REGION:ACCOUNT:table/TABLENAME \
  --s3-bucket BUCKET --s3-prefix PREFIX \
  --incremental-export-specification ExportFromTime=1693569600,ExportToTime=1693656000,ExportViewType=NEW_AND_OLD_IMAGES \
  --export-type INCREMENTAL_EXPORT
```

------
#### [ Python ]

```
import boto3
from datetime import datetime

client = boto3.client('dynamodb')

client.export_table_to_point_in_time(
    TableArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE',
    IncrementalExportSpecification={
      'ExportFromTime': datetime(2023, 9, 20, 12, 0, 0),
      'ExportToTime': datetime(2023, 9, 20, 13, 0, 0),
      'ExportViewType': 'NEW_AND_OLD_IMAGES'
    },
    ExportType='INCREMENTAL_EXPORT',
    S3Bucket='bucket',
    S3Prefix='prefix',
    S3SseAlgorithm='AES256',
    ExportFormat='DYNAMODB_JSON'
)
```

------
#### [ Java ]

```
DynamoDbClient client = DynamoDbClient.create();

client.exportTableToPointInTime(b -> b
    .tableArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE")
    .exportType(ExportType.INCREMENTAL_EXPORT)
    .incrementalExportSpecification(i -> i
        .exportFromTime(Instant.parse("2023-09-20T12:00:00Z"))
        .exportToTime(Instant.parse("2023-09-20T13:00:00Z"))
        .exportViewType(ExportViewType.NEW_AND_OLD_IMAGES))
    .s3Bucket("bucket")
    .s3Prefix("prefix")
    .s3SseAlgorithm(S3SseAlgorithm.AES256)
    .exportFormat(ExportFormat.DYNAMODB_JSON));
```

------
#### [ .NET ]

```
var client = new AmazonDynamoDBClient();

await client.ExportTableToPointInTimeAsync(new ExportTableToPointInTimeRequest
{
    TableArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
    ExportType = ExportType.INCREMENTAL_EXPORT,
    IncrementalExportSpecification = new IncrementalExportSpecification
    {
        ExportFromTime = new DateTime(2023, 9, 20, 12, 0, 0, DateTimeKind.Utc),
        ExportToTime = new DateTime(2023, 9, 20, 13, 0, 0, DateTimeKind.Utc),
        ExportViewType = ExportViewType.NEW_AND_OLD_IMAGES
    },
    S3Bucket = "bucket",
    S3Prefix = "prefix",
    S3SseAlgorithm = S3SseAlgorithm.AES256,
    ExportFormat = ExportFormat.DYNAMODB_JSON
});
```

------
#### [ JavaScript ]

```
import { DynamoDBClient, ExportTableToPointInTimeCommand } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient();

await client.send(new ExportTableToPointInTimeCommand({
    TableArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
    ExportType: "INCREMENTAL_EXPORT",
    IncrementalExportSpecification: {
        ExportFromTime: new Date("2023-09-20T12:00:00Z"),
        ExportToTime: new Date("2023-09-20T13:00:00Z"),
        ExportViewType: "NEW_AND_OLD_IMAGES"
    },
    S3Bucket: "bucket",
    S3Prefix: "prefix",
    S3SseAlgorithm: "AES256",
    ExportFormat: "DYNAMODB_JSON"
}));
```

------
#### [ Go ]

```
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)

fromTime := time.Date(2023, 9, 20, 12, 0, 0, 0, time.UTC)
toTime := time.Date(2023, 9, 20, 13, 0, 0, 0, time.UTC)
client.ExportTableToPointInTime(context.TODO(), &dynamodb.ExportTableToPointInTimeInput{
    TableArn:   aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"),
    ExportType: types.ExportTypeIncrementalExport,
    IncrementalExportSpecification: &types.IncrementalExportSpecification{
        ExportFromTime: &fromTime,
        ExportToTime:   &toTime,
        ExportViewType: types.ExportViewTypeNewAndOldImages,
    },
    S3Bucket:       aws.String("bucket"),
    S3Prefix:       aws.String("prefix"),
    S3SseAlgorithm: types.S3SseAlgorithmAes256,
    ExportFormat:   types.ExportFormatDynamodbJson,
})
```

------

**catatan**  
Jika Anda memilih untuk mengenkripsi ekspor menggunakan kunci yang dilindungi oleh AWS Key Management Service (AWS KMS), kunci harus berada di Region yang sama dengan bucket S3 tujuan.

## Mendapatkan detail tentang ekspor sebelumnya menggunakan dan AWS CLI AWS SDKs
<a name="S3DataExport_Requesting_CLI_Details"></a>

Anda dapat menemukan informasi tentang permintaan ekspor yang pernah Anda jalankan sebelumnya dengan menggunakan perintah `list-exports`. Perintah ini mengembalikan daftar semua ekspor yang Anda buat dalam 90 hari terakhir. Perhatikan bahwa meskipun metadata tugas ekspor akan kedaluwarsa setelah 90 hari dan tugas yang lebih lama dari itu tidak lagi dikembalikan oleh perintah `list-exports`, objek dalam bucket S3 Anda tetap ada selama kebijakan bucketnya mengizinkan. DynamoDB tidak pernah menghapus objek apa pun yang dibuatnya di bucket S3 Anda selama ekspor.

Ekspor memiliki status `PENDING` hingga berhasil atau gagal. Jika mereka berhasil, statusnya berubah menjadi`COMPLETED`. Jika gagal, statusnya berubah `FAILED` dengan a `failure_message` dan`failure_reason`.

**Daftar ekspor**

------
#### [ AWS CLI ]

```
aws dynamodb list-exports \
    --table-arn arn:aws:dynamodb:us-east-1:111122223333:table/ProductCatalog
```

------
#### [ Python ]

```
import boto3

client = boto3.client('dynamodb')

print(
  client.list_exports(
     TableArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE',
  )
)
```

------
#### [ Java ]

```
DynamoDbClient client = DynamoDbClient.create();

ListExportsResponse response = client.listExports(b -> b
    .tableArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"));

response.exportSummaries().forEach(System.out::println);
```

------
#### [ .NET ]

```
var client = new AmazonDynamoDBClient();

var response = await client.ListExportsAsync(new ListExportsRequest
{
    TableArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"
});

response.ExportSummaries.ForEach(Console.WriteLine);
```

------
#### [ JavaScript ]

```
import { DynamoDBClient, ListExportsCommand } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient();

const response = await client.send(new ListExportsCommand({
    TableArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"
}));

console.log(response.ExportSummaries);
```

------
#### [ Go ]

```
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)

response, _ := client.ListExports(context.TODO(), &dynamodb.ListExportsInput{
    TableArn: aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"),
})

fmt.Println(response.ExportSummaries)
```

------

**Jelaskan ekspor**

------
#### [ AWS CLI ]

```
aws dynamodb describe-export \
    --export-arn arn:aws:dynamodb:us-east-1:111122223333:table/ProductCatalog/export/01695353076000-a1b2c3d4
```

------
#### [ Python ]

```
import boto3

client = boto3.client('dynamodb')

print(
  client.describe_export(
     ExportArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f',
  )['ExportDescription']
)
```

------
#### [ Java ]

```
DynamoDbClient client = DynamoDbClient.create();

DescribeExportResponse response = client.describeExport(b -> b
    .exportArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"));

System.out.println(response.exportDescription());
```

------
#### [ .NET ]

```
var client = new AmazonDynamoDBClient();

var response = await client.DescribeExportAsync(new DescribeExportRequest
{
    ExportArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"
});

Console.WriteLine(response.ExportDescription);
```

------
#### [ JavaScript ]

```
import { DynamoDBClient, DescribeExportCommand } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient();

const response = await client.send(new DescribeExportCommand({
    ExportArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"
}));

console.log(response.ExportDescription);
```

------
#### [ Go ]

```
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)

response, _ := client.DescribeExport(context.TODO(), &dynamodb.DescribeExportInput{
    ExportArn: aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"),
})

fmt.Println(response.ExportDescription)
```

------

# Format output ekspor tabel DynamoDB
<a name="S3DataExport.Output"></a>

Sebuah ekspor tabel DynamoDB mencakup file manifes selain file yang berisi data tabel Anda. File ini semua disimpan di bucket Amazon S3 yang Anda tentukan di [permintaan ekspor](S3DataExport_Requesting.md). Bagian berikut menjelaskan format dan isi dari setiap objek output.

**Topics**

## Output ekspor penuh
<a name="full-export-output"></a>

### File manifes
<a name="S3DataExport.Output_Manifest"></a>

DynamoDB membuat dua file manifes, bersama dengan file checksum, dalam bucket S3 yang ditentukan untuk setiap permintaan ekspor.

```
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
```

Anda memilih **export-prefix** saat meminta ekspor tabel. Ini membantu Anda menjaga kerapian file di bucket S3 tujuan. **ExportId** adalah token unik yang dihasilkan oleh layanan untuk memastikan bahwa beberapa ekspor ke bucket S3 dan `export-prefix` ekspor yang sama tidak saling menimpa.

Ekspor akan membuat setidaknya 1 file per partisi. Untuk partisi yang kosong, permintaan ekspor Anda akan membuat file kosong. Semua item di setiap file berasal dari keyspace hash partisi tertentu.

**catatan**  
DynamoDB juga membuat sebuah file kosong bernama `_started` dalam direktori yang sama sebagai file manifes. File ini memverifikasi bahwa bucket tujuan dapat ditulis dan bahwa ekspor telah dimulai. File ini bisa dihapus dengan aman.

#### Manifes ringkasan
<a name="S3DataExport.Output_Manifest_Summary"></a>

File `manifest-summary.json` berisi informasi ringkasan tentang tugas ekspor. Ini memungkinkan Anda mengetahui file data mana di folder data bersama yang terkait dengan ekspor ini. Formatnya adalah sebagai berikut:

```
{
   "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"
}
```

#### Manifes file
<a name="S3DataExport.Output_Manifest_Files"></a>

File `manifest-files.json` berisi informasi tentang file yang berisi data tabel Anda yang diekspor. File ada dalam format [baris JSON](https://jsonlines.org/), jadi baris baru digunakan sebagai pembatas item. Pada contoh berikut, perincian satu file data dari manifes file diformat pada beberapa baris untuk keterbacaan.

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

### File data
<a name="S3DataExport.Output_Data"></a>

DynamoDB dapat mengekspor data tabel Anda dalam dua format: DynamoDB JSON dan Amazon Ion. Terlepas dari format yang Anda pilih, data Anda akan ditulis ke beberapa file terkompresi yang dinamai berdasarkan kunci. File-file ini juga tercantum dalam `manifest-files.json` file.

Struktur direktori bucket Amazon S3 Anda setelah ekspor penuh akan berisi semua file manifes dan file data Anda di bawah folder export Id.

```
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
<a name="S3DataExport.Output_Data_DDB-JSON"></a>

Sebuah ekspor tabel dalam format DynamoDB JSON terdiri dari beberapa objek `Item`. Setiap objek individual berada dalam format JSON marshalled standar DynamoDB.

Saat membuat parser kustom untuk data ekspor DynamoDB JSON, formatnya adalah [garis JSON.](https://jsonlines.org/) Ini berarti bahwa baris baru digunakan sebagai pembatas item. Banyak AWS layanan, seperti Athena dan AWS Glue, akan mengurai format ini secara otomatis.

Dalam contoh berikut, satu item dari ekspor JSON DynamoDB telah diformat pada beberapa baris demi keterbacaan.

```
{
    "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
<a name="S3DataExport.Output_Data_ION"></a>

[Amazon Ion](http://amzn.github.io/ion-docs/) adalah format serialisasi data hierarkis yang kaya jenis, dapat dijelaskan sendiri, yang dibuat untuk mengatasi tantangan perkembangan pesat, pemisahan, dan efisiensi yang dihadapi setiap hari saat merekayasa arsitektur berorientasi layanan berskala besar. DynamoDB mendukung ekspor data tabel dalam [format teks](http://amzn.github.io/ion-docs/docs/spec.html) Ion, yang merupakan superset dari JSON.

Saat Anda mengekspor tabel ke format Ion, jenis data DynamoDB yang digunakan dalam tabel dipetakan ke [jenis data Ion](http://amzn.github.io/ion-docs/docs/spec.html). Set DynamoDB menggunakan [anotasi jenis Ion](http://amzn.github.io/ion-docs/docs/spec.html#annot) untuk memperjelas jenis data yang digunakan dalam tabel sumber.

Tabel berikut mencantumkan pemetaan tipe data DynamoDB ke tipe data ion:


| Jenis data DynamoDB | Perwakilan Ion | 
| --- | --- | 
| String (S) | string | 
| Boolean (BOOL) | bool | 
| Angka (N) | desimal | 
| Biner (B) | blob | 
| Set (SS, NS, BS) | daftar (dengan anotasi jenis \$1dynamodb\$1SS, \$1dynamodb\$1NS, or \$1dynamodb\$1BS) | 
| Daftar | daftar | 
| Peta | struct | 

Item dalam ekspor Ion dibatasi oleh baris baru. Setiap baris dimulai dengan penanda versi Ion, diikuti dengan item dalam format Ion. Dalam contoh berikut, item dari ekspor Ion telah diformat dalam beberapa baris demi keterbacaan.

```
$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"
    }
}
```

## Output ekspor inkremental
<a name="incremental-export-output"></a>

### File manifes
<a name="S3DataIncrementalExport.Output_Manifest"></a>

DynamoDB membuat dua file manifes, bersama dengan file checksum, dalam bucket S3 yang ditentukan untuk setiap permintaan ekspor.

```
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
```

Anda memilih **export-prefix** saat meminta ekspor tabel. Ini membantu Anda menjaga kerapian file di bucket S3 tujuan. **ExportId** adalah token unik yang dihasilkan oleh layanan untuk memastikan bahwa beberapa ekspor ke bucket S3 dan `export-prefix` ekspor yang sama tidak saling menimpa.

Ekspor akan membuat setidaknya 1 file per partisi. Untuk partisi yang kosong, permintaan ekspor Anda akan membuat file kosong. Semua item di setiap file berasal dari keyspace hash partisi tertentu.

**catatan**  
DynamoDB juga membuat sebuah file kosong bernama `_started` dalam direktori yang sama sebagai file manifes. File ini memverifikasi bahwa bucket tujuan dapat ditulis dan bahwa ekspor telah dimulai. File ini bisa dihapus dengan aman.

#### Manifes ringkasan
<a name="S3DataIncrementalExport.Output_Manifest_Summary"></a>

File `manifest-summary.json` berisi informasi ringkasan tentang tugas ekspor. Ini memungkinkan Anda mengetahui file data mana di folder data bersama yang terkait dengan ekspor ini. Formatnya adalah sebagai berikut:

```
{
 "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"
}
```

#### Manifes file
<a name="S3DataIncrementalExport.Output_Manifest_Files"></a>

File `manifest-files.json` berisi informasi tentang file yang berisi data tabel Anda yang diekspor. File ada dalam format [baris JSON](https://jsonlines.org/), jadi baris baru digunakan sebagai pembatas item. Pada contoh berikut, perincian satu file data dari manifes file diformat pada beberapa baris untuk keterbacaan.

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

### File data
<a name="S3DataIncrementalExport.Output_Data"></a>

DynamoDB dapat mengekspor data tabel Anda dalam dua format: DynamoDB JSON dan Amazon Ion. Terlepas dari format yang Anda pilih, data Anda akan ditulis ke beberapa file terkompresi yang dinamai berdasarkan kunci. File-file ini juga tercantum dalam `manifest-files.json` file.

File data untuk ekspor inkremental semuanya ada di folder data umum di bucket S3 Anda. File manifes Anda berada di bawah folder ID ekspor Anda.

```
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 
    │   ...
```

Saat Anda mengekspor file, output setiap item menyertakan stempel waktu yang menunjukkan kapan item tersebut diperbarui di tabel Anda dan struktur data yang menunjukkan apakah itu adalah operasi `insert`, `update`, atau `delete`. Stempel waktu didasarkan pada jam sistem internal dan dapat bervariasi dari jam aplikasi Anda. Untuk ekspor tambahan, Anda dapat memilih antara dua jenis tampilan ekspor untuk struktur keluaran Anda: **gambar baru dan lama** atau **hanya gambar baru**.
+ **Gambar baru **memberikan status terkini item 
+ **Gambar lama** menunjukkan status item tepat sebelum **tanggal dan waktu mulai** yang ditentukan

Jenis tampilan dapat membantu jika Anda ingin melihat bagaimana item diubah dalam periode ekspor. Ini juga dapat berguna untuk memperbarui sistem hilir Anda secara efisien, terutama jika sistem hilir tersebut memiliki kunci partisi yang tidak sama dengan kunci partisi DynamoDB Anda. 

Anda dapat menyimpulkan apakah item dalam output ekspor tambahan Anda adalah `insert`, `update`, atau `delete` dengan melihat struktur output. Struktur ekspor inkremental dan operasi yang sesuai dirangkum dalam tabel di bawah ini untuk kedua jenis tampilan ekspor.


| Operasi | Hanya gambar baru | Gambar baru dan lama | 
| --- | --- | --- | 
|  Sisipkan  |  Tombol \$1 gambar baru  | Tombol \$1 gambar baru | 
|  Perbarui  | Tombol \$1 gambar baru | Tombol\$1gambar baru\$1gambar lama | 
| Delete | Kunci | Tombol \$1 gambar lama | 
| Sisipkan \$1 hapus | Tidak ada output | Tidak ada output | 

#### DynamoDB Json
<a name="S3DataIncrementalExport.Output_Data_DDB-JSON"></a>

Ekspor tabel dalam format JSON DynamoDB terdiri dari stempel waktu metadata yang menunjukkan waktu penulisan item, diikuti dengan kunci item dan nilainya. Berikut ini menunjukkan contoh output JSON DynamoDB menggunakan jenis tampilan ekspor sebagai **gambar Baru dan Lama**.

```
// 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
<a name="S3DataIncrementalExport.Output_Data_ION"></a>

[Amazon Ion](http://amzn.github.io/ion-docs/) adalah format serialisasi data hierarkis yang kaya jenis, dapat dijelaskan sendiri, yang dibuat untuk mengatasi tantangan perkembangan pesat, pemisahan, dan efisiensi yang dihadapi setiap hari saat merekayasa arsitektur berorientasi layanan berskala besar. DynamoDB mendukung ekspor data tabel dalam [format teks](http://amzn.github.io/ion-docs/docs/spec.html) Ion, yang merupakan superset dari JSON.

Saat Anda mengekspor tabel ke format Ion, jenis data DynamoDB yang digunakan dalam tabel dipetakan ke [jenis data Ion](http://amzn.github.io/ion-docs/docs/spec.html). Set DynamoDB menggunakan [anotasi jenis Ion](http://amzn.github.io/ion-docs/docs/spec.html#annot) untuk memperjelas jenis data yang digunakan dalam tabel sumber.

Tabel berikut mencantumkan pemetaan tipe data DynamoDB ke tipe data ion:


| Jenis data DynamoDB | Perwakilan Ion | 
| --- | --- | 
| String (S) | string | 
| Boolean (BOOL) | bool | 
| Angka (N) | desimal | 
| Biner (B) | blob | 
| Set (SS, NS, BS) | daftar (dengan anotasi jenis \$1dynamodb\$1SS, \$1dynamodb\$1NS, or \$1dynamodb\$1BS) | 
| Daftar | daftar | 
| Peta | struct | 

Item dalam ekspor Ion dibatasi oleh baris baru. Setiap baris dimulai dengan penanda versi Ion, diikuti dengan item dalam format Ion. Dalam contoh berikut, item dari ekspor Ion telah diformat dalam beberapa baris demi keterbacaan.

```
$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"
        }
    }
}
```