Python'da DynamoDB'de GSI Sorgulama (boto3)
Bir global ikincil indeksi sorgulamak, normal bir query artı bir parametredir: IndexName. Anahtar koşulu bu durumda tablonun değil, indeksin anahtarlarını hedefler — burada AlbumTitle-index, temel tablonun (Artist + SongTitle) bir tarama olmadan hizmet edemeyeceği bir erişim deseni olan, şarkıları albüme göre getirmemizi sağlar.
Code
import boto3
client = boto3.client("dynamodb")
paginator = client.get_paginator("query")
items = []
for page in paginator.paginate(
TableName="Music",
IndexName="AlbumTitle-index",
KeyConditionExpression="#hashKey = :hashKeyValue",
ExpressionAttributeNames={"#hashKey": "AlbumTitle"},
ExpressionAttributeValues={":hashKeyValue": {"S": "Danzon"}},
):
items.extend(page["Items"])
print(f"Found {len(items)} songs on the album")Açıklama
IndexName— sorgulanacak GSI'yı adlandırır (TableNameyine de zorunludur).KeyConditionExpression, bir tablo sorgusuyla aynı operatörlerle indeksin bölüm (ve isteğe bağlı sıralama) anahtarını — buradaAlbumTitle— kullanır.- Yalnızca nihai tutarlılık — GSI'lar temel tablodan eşzamansız olarak çoğaltılır. Bir GSI sorgusunda
ConsistentRead=Truegeçirmek onu yükseltmez; birValidationExceptionfırlatır. (Yerel ikincil indeksler güçlü tutarlılığı destekler.) - Yalnızca yansıtılan öznitelikleri alırsınız — bir GSI sorgusu, indeksin yansıttığını (
ALL,KEYS_ONLYveyaINCLUDEile listelenen öznitelikler) döndürür ve gerisini temel tablodan getiremez. Yansıtılmamış bir özniteliğe mi ihtiyacınız var? Tablo anahtarında birget_itemile devam edin ya da projeksiyonu genişletin. - Bir GSI'da anahtarlar benzersiz değildir — birçok öğe aynı indeks anahtarını paylaşabilir ve indeks anahtarı özniteliği eksik olan öğeler basitçe görünmez (bu, seyrek-indeks desenidir).
- Sayfalama —
client.get_paginator("query"), bir tablo sorgusundakiyle tam olarak aynı şekilde sayfalar arasındaLastEvaluatedKey'i takip eder; herpagebirItemslistesi taşır. - resource API'sinde aynı sorgu, yerel Python değerleriyle
table.query(IndexName="AlbumTitle-index", KeyConditionExpression=Key("AlbumTitle").eq("Danzon"))şeklindedir.
Görsel olarak yapın
DynamoDB Expression Builder, indeks sorguları için anahtar koşulunu + ad/değer eşlemelerini oluşturur ve çalıştırılabilir boto3 kodunu kopyalar.
Bir tablonun indekslerini gezinmek ve bir formdan GSI sorguları çalıştırmak için — sayfalanmış ızgara, kod olarak kopyalama — DynoTable'ı indirin.
İlgili örnekler
- Node.js'te DynamoDB'de GSI Sorgulama — AWS SDK v3 ile aynı indeks sorgusu.
- AWS CLI ile DynamoDB'de GSI Sorgulama — kabuktan aynı indeks sorgusu.
- Python'da DynamoDB Query — temel tabloyu sorgulama.
- GSI ve LSI — erişim desenine hangi indeks türünün uyduğu.
- GSI'lar neden nihai tutarlıdır — çoğaltma gecikmesinin açıklaması.
- "The table does not have the specified index" — indeks adı eşleşmiyor (GSI adları büyük/küçük harf duyarlıdır).
- "Consistent reads are not supported on global secondary indexes" — tutarlı okuma bayrağının bir GSI'da neden başarısız olduğu.
References
- Query — Amazon DynamoDB API Reference
- DynamoDB.Paginator.Query — Boto3 documentation
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.