

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

# BatchWriteItem
<a name="API_BatchWriteItem_v20111205"></a>

**penting**  
***This section refers to API version 2011-12-05, which is deprecated and should not be used for new applications.***  
 **Untuk dokumentasi tentang API tingkat rendah saat ini, lihat [Referensi API Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/).**

## Deskripsi
<a name="API_BatchWriteItems_Description"></a>

Operasi ini memungkinkan Anda untuk menempatkan atau menghapus beberapa item di beberapa tabel dalam satu panggilan. 

Untuk mengunggah satu item, Anda dapat menggunakan `PutItem`, dan untuk menghapus satu item, Anda dapat menggunakan `DeleteItem`. Namun, jika Anda ingin mengunggah atau menghapus sejumlah besar data, seperti mengunggah sejumlah besar data dari Amazon EMR (Amazon EMR) atau memigrasi data dari basis data lain ke DynamoDB, `BatchWriteItem` menawarkan alternatif yang efisien. 

Jika Anda menggunakan bahasa seperti Java, Anda dapat menggunakan thread untuk mengunggah item secara paralel. Hal ini menambah kompleksitas dalam aplikasi Anda untuk menangani thread. Bahasa lain tidak mendukung threading. Misalnya, jika Anda menggunakan PHP, Anda harus mengunggah atau menghapus item satu per satu. Dalam kedua situasi tersebut, `BatchWriteItem` menyediakan alternatif, yaitu pemrosesan operasi penempatan dan penghapusan yang ditentukan dilakukan secara paralel, sehingga bisa melakukan pendekatan thread pool tanpa harus menambah kompleksitas dalam aplikasi Anda. 

Perhatikan bahwa setiap penempatan dan penghapusan individual yang ditentukan dalam operasi `BatchWriteItem` memiliki biaya yang sama dalam hal unit kapasitas yang dikonsumsi. Namun, karena `BatchWriteItem` melakukan operasi yang ditentukan secara paralel, Anda mendapatkan latensi yang lebih rendah. Operasi hapus pada item yang tidak ada mengonsumsi 1 unit kapasitas tulis. Untuk informasi selengkapnya tentang unit kapasitas yang dikonsumsi, lihat [Bekerja dengan tabel dan data di DynamoDB](WorkingWithTables.md).

Saat menggunakan `BatchWriteItem`, perhatikan batasan berikut:
+ **Operasi maksimum dalam satu permintaan—**Anda dapat menentukan total hingga 25 operasi penempatan atau penghapusan; tetapi, ukuran total permintaan tidak boleh melebihi 1 MB (payload HTTP). 
+ Anda dapat menggunakan operasi `BatchWriteItem` hanya untuk menempatkan dan menghapus item. Anda tidak dapat menggunakannya untuk memperbarui item yang ada.
+ **Bukan operasi atomik—**Operasi individual yang ditentukan dalam `BatchWriteItem` bersifat atomik; tetapi `BatchWriteItem` secara keseluruhan adalah operasi "upaya terbaik" dan bukan operasi atomik. Artinya, dalam permintaan `BatchWriteItem`, beberapa operasi mungkin berhasil dan yang lainnya mungkin gagal. Operasi yang gagal dikembalikan ke bidang `UnprocessedItems` dalam respons. Sejumlah kegagalan ini mungkin terjadi karena Anda melampaui throughput yang disediakan dan dikonfigurasi untuk tabel atau kegagalan sementara seperti kesalahan jaringan. Anda dapat menyelidiki dan mengirim ulang permintaan (opsional). Biasanya, Anda memanggil `BatchWriteItem` dalam satu loop serta di setiap pemeriksaan pengulangan untuk item yang belum diproses, dan mengirimkan permintaan `BatchWriteItem` baru dengan item yang belum diproses tersebut. 
+ **Tidak mengembalikan item apa pun—** `BatchWriteItem` dirancang untuk mengunggah data dalam jumlah besar secara efisien. Hal itu tidak menyediakan sejumlah kecanggihan yang ditawarkan oleh `PutItem` dan `DeleteItem`. Sebagai contoh, `DeleteItem` mendukung bidang `ReturnValues` dalam isi permintaan Anda untuk meminta item yang dihapus dalam respons. Operasi `BatchWriteItem` tidak mengembalikan item apa pun dalam respons.
+ Tidak seperti `PutItem` dan `DeleteItem`, `BatchWriteItem` tidak memungkinkan Anda untuk menentukan syarat pada permintaan tulis individu dalam operasi.
+ Nilai atribut tidak boleh null; atribut jenis string dan biner harus memiliki panjang lebih dari nol; dan atribut jenis set tidak boleh kosong. Permintaan yang memiliki nilai kosong akan ditolak dengan `ValidationException`.

DynamoDB menolak keseluruhan batch operasi penulisan jika salah satu dari yang berikut ini true: 
+ Jika satu atau beberapa tabel yang ditentukan dalam permintaan `BatchWriteItem` tidak ada.
+ Jika atribut kunci primer yang ditentukan pada item dalam permintaan tidak cocok dengan skema kunci primer dalam tabel yang sesuai.
+ Jika Anda mencoba untuk melakukan beberapa operasi pada item yang sama dalam permintaan `BatchWriteItem` yang sama. Misalnya, Anda tidak dapat menempatkan dan menghapus item yang sama dalam permintaan `BatchWriteItem` yang sama. 
+ Jika total ukuran permintaan melampaui batas ukuran permintaan 1 MB (payload HTTP).
+ Jika setiap item individu dalam suatu batch melampaui batas ukuran item 64 KB.

## Permintaan
<a name="API_BatchWriteItems_RequestParameters"></a>

### Sintaks
<a name="API_BatchWriteItems_RequestParameters.syntax"></a>

```
// This header is abbreviated. For a sample of a complete header, see API tingkat rendah DynamoDB.
POST / HTTP/1.1
x-amz-target: DynamoDB_20111205.BatchGetItem 
content-type: application/x-amz-json-1.0 

{
  "RequestItems" :  RequestItems
} 

RequestItems
{
     "TableName1" :  [ Request, Request, ... ],
     "TableName2" :  [ Request, Request, ... ],
     ...
}

Request ::=
  PutRequest | DeleteRequest

PutRequest ::=
{
  "PutRequest" : {
     "Item" : {
        "Attribute-Name1" : Attribute-Value,
        "Attribute-Name2" : Attribute-Value,
         ...
     }
  }
}

DeleteRequest ::=
{
   "DeleteRequest" : {
      "Key" : PrimaryKey-Value
   }
}


PrimaryKey-Value ::= HashTypePK | HashAndRangeTypePK

HashTypePK ::=
{ 
   "HashKeyElement" : Attribute-Value
}

HashAndRangeTypePK
{ 
   "HashKeyElement" : Attribute-Value,
   "RangeKeyElement" : Attribute-Value, 
}

Attribute-Value ::= String | Numeric| Binary | StringSet | NumericSet | BinarySet 

Numeric ::=
{
   "N": "Number"
}

String ::=
{
   "S": "String"
}

Binary ::=
{
    "B": "Base64 encoded binary data"
}

StringSet ::=
{
   "SS": [ "String1", "String2", ... ]
}

NumberSet ::=
{
   "NS": [ "Number1", "Number2", ... ]
}  

BinarySet ::=
{
   "BS": [ "Binary1", "Binary2", ... ]
}
```

Dalam isi permintaan, objek JSON `RequestItems` menggambarkan operasi yang ingin Anda lakukan. Operasi dikelompokkan berdasarkan tabel. Anda dapat menggunakan `BatchWriteItem` untuk memperbarui atau menghapus beberapa item di beberapa tabel. Untuk setiap permintaan penulisan khusus, Anda harus mengidentifikasi jenis permintaan (`PutItem`, `DeleteItem`) diikuti dengan informasi terperinci tentang operasi tersebut. 
+ Untuk `PutRequest`, Anda memberikan item, yaitu daftar atribut dan nilai-nilainya.
+ Untuk `DeleteRequest`, Anda memberikan nama dan nilai kunci primernya. 

## Respons
<a name="API_BatchWriteItems_ResponseElements"></a>

### Sintaks
<a name="API_BatchWriteItems_ResponseElements.syntax"></a>

Berikut ini adalah sintaksis dari isi JSON yang dikembalikan dalam respons.

```
{
  "Responses" :         ConsumedCapacityUnitsByTable
  "UnprocessedItems" :  RequestItems
} 

ConsumedCapacityUnitsByTable
{
    "TableName1" : { "ConsumedCapacityUnits", : NumericValue },
    "TableName2" : { "ConsumedCapacityUnits", : NumericValue },
     ...
}

RequestItems
This syntax is identical to the one described in the JSON syntax in the request.
```

## Kesalahan khusus
<a name="API_BatchWriteItems_SpecialErrors"></a>

Tidak ada kesalahan khusus untuk operasi ini.

## Contoh
<a name="API_BatchWriteItems_Examples"></a>

Contoh berikut menunjukkan permintaan HTTP POST dan respons operasi `BatchWriteItem`. Permintaan tersebut menentukan operasi berikut pada tabel Reply dan Thread:
+ Menempatkan item dan menghapus item dari tabel Reply
+ Menempatkan item ke dalam tabel Thread

Untuk contoh menggunakan AWS SDK, lihat[Bekerja dengan item dan atribut di DynamoDB](WorkingWithItems.md).

### Permintaan sampel
<a name="API_BatchWriteItems_Examples_Request"></a>

```
// This header is abbreviated. For a sample of a complete header, see API tingkat rendah DynamoDB.
POST / HTTP/1.1
x-amz-target: DynamoDB_20111205.BatchGetItem 
content-type: application/x-amz-json-1.0 

{
  "RequestItems":{
    "Reply":[
      {
        "PutRequest":{
          "Item":{
            "ReplyDateTime":{
              "S":"2012-04-03T11:04:47.034Z"
            },
            "Id":{
              "S":"DynamoDB#DynamoDB Thread 5"
            }
          }
        }
      },
      {
        "DeleteRequest":{
          "Key":{
            "HashKeyElement":{
              "S":"DynamoDB#DynamoDB Thread 4"
            },
            "RangeKeyElement":{
              "S":"oops - accidental row"
            }
          }
        }
      }
    ],
    "Thread":[
      {
        "PutRequest":{
          "Item":{
            "ForumName":{
              "S":"DynamoDB"
            },
            "Subject":{
              "S":"DynamoDB Thread 5"
            }
          }
        }
      }
    ]
  }
}
```

### Respons sampel
<a name="API_BatchWriteItems_Examples_Response"></a>

Respons contoh berikut menunjukkan operasi penempatan pada tabel Thread dan Reply yang berhasil dan operasi penghapusan pada tabel Reply yang gagal (karena alasan seperti throttling yang disebabkan terlampauinya throughput yang disediakan di tabel). Perhatikan hal berikut dalam respons JSON:
+ Objek `Responses` menunjukkan satu unit kapasitas yang digunakan pada tabel `Thread` dan `Reply` sebagai hasil dari kesuksesan operasi penempatan pada setiap tabel ini. 
+ Objek `UnprocessedItems` menunjukkan kegagalan operasi penghapusan pada tabel `Reply`. Anda kemudian dapat mengeluarkan panggilan `BatchWriteItem` baru untuk mengatasi permintaan yang belum diproses ini.

```
HTTP/1.1 200 OK
x-amzn-RequestId: G8M9ANLOE5QA26AEUHJKJE0ASBVV4KQNSO5AEMVJF66Q9ASUAAJG
Content-Type: application/x-amz-json-1.0
Content-Length: 536
Date: Thu, 05 Apr 2012 18:22:09 GMT

{
   "Responses":{
      "Thread":{
         "ConsumedCapacityUnits":1.0
      },
      "Reply":{
         "ConsumedCapacityUnits":1.0
      }
   },
   "UnprocessedItems":{
      "Reply":[
         {
            "DeleteRequest":{
               "Key":{
                  "HashKeyElement":{
                     "S":"DynamoDB#DynamoDB Thread 4"
                  },
                  "RangeKeyElement":{
                     "S":"oops - accidental row"
                  }
               }
            }
         }
      ]
   }
}
```