

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

# Gunakan indeks sekunder dengan DynamoDB Mapper
<a name="ddb-mapper-secondary-indices"></a>

****  
**DynamoDB Mapper adalah rilis Pratinjau Pengembang. Ini tidak lengkap fitur dan dapat berubah.**

## Tentukan skema untuk indeks sekunder
<a name="ddb-mapper-secondary-indices-schema"></a>

Tabel DynamoDB mendukung indeks sekunder yang menyediakan akses ke data menggunakan kunci yang berbeda dari yang didefinisikan pada tabel dasar itu sendiri. Seperti tabel dasar, DynamoDB Mapper berinteraksi dengan indeks dengan menggunakan tipe. `[ItemSchema](https://docs.aws.amazon.com/sdk-for-kotlin/api/latest/dynamodb-mapper/aws.sdk.kotlin.hll.dynamodbmapper.items/-item-schema/index.html)`

Indeks sekunder DynamoDB tidak diperlukan untuk memuat setiap atribut dari tabel dasar. Dengan demikian, kelas Kotlin yang memetakan ke indeks mungkin berbeda dari kelas Kotlin yang memetakan ke tabel dasar indeks tersebut. Ketika itu terjadi, skema terpisah harus dideklarasikan untuk kelas indeks.

Kode berikut secara manual membuat skema indeks untuk tabel DynamoDB`cars`.

```
import aws.sdk.kotlin.hll.dynamodbmapper.items.ItemConverter
import aws.sdk.kotlin.hll.dynamodbmapper.items.ItemSchema
import aws.sdk.kotlin.hll.dynamodbmapper.model.itemOf

// This is a data class for modelling the index of the Car table. Note
// that it contains a subset of the fields from the Car class and also 
// uses different names for them.
data class Model(val name: String, val manufacturer: String)

// We define an item converter.
val modelConverter = object : ItemConverter<Model> {
    override fun convertTo(from: Model, onlyAttributes: Set<String>?): Item  = itemOf(
        "model" to AttributeValue.S(from.name),
        "make" to AttributeValue.S(from.manufacturer),
    )

    override fun convertFrom(to: Item): Model = Model(
        name = to["model"]?.asSOrNull() ?: error("Invalid attribute `model`"),
        manufacturer = to["make"]?.asSOrNull() ?: error("Invalid attribute `make`"),
    )
}
val modelKey = KeySpec.String("model")
val makeKey = KeySpec.String("make")

val modelSchema = ItemSchema(modelConverter, modelKey, makeKey) // The partition key specification is the second parameter.

/* Note that `Model` index's partition key is `model` and its sort key is `make`,
   whereas the `Car` base table uses `make` as the partition key and `model` as the sort key:

        @DynamoDbItem
        data class Car(
            @DynamoDbPartitionKey
            val make: String,
    
            @DynamoDbSortKey
            val model: String,
    
            val initialYear: Int
        )
*/
```

Kita sekarang dapat menggunakan `Model` instance dalam operasi.

## Gunakan indeks sekunder dalam operasi
<a name="ddb-mapper-gs-index-ops"></a>

DynamoDB Mapper mendukung subset operasi pada indeks, yaitu dan. `queryPaginated` `scanPaginated` Untuk menjalankan operasi ini pada indeks, Anda harus terlebih dahulu mendapatkan referensi ke indeks dari objek tabel. Dalam contoh berikut, kami menggunakan `modelSchema` yang kami buat sebelumnya untuk `cars-by-model` indeks (pembuatan tidak ditampilkan di sini):

```
val table = mapper.getTable("cars", CarSchema)
val index = table.getIndex("cars-by-model", modelSchema)

val modelFlow = index
    .scanPaginated { }
    .items()

modelFlow.collect { model -> println(model) }
```