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 (TableName yine de zorunludur). KeyConditionExpression, bir tablo sorgusuyla aynı operatörlerle indeksin bölüm (ve isteğe bağlı sıralama) anahtarını — burada AlbumTitle — kullanır.
  • Yalnızca nihai tutarlılık — GSI'lar temel tablodan eşzamansız olarak çoğaltılır. Bir GSI sorgusunda ConsistentRead=True geçirmek onu yükseltmez; bir ValidationException fı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_ONLY veya INCLUDE ile 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 bir get_item ile 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).
  • Sayfalamaclient.get_paginator("query"), bir tablo sorgusundakiyle tam olarak aynı şekilde sayfalar arasında LastEvaluatedKey'i takip eder; her page bir Items listesi 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

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Bu isteği görsel olarak oluşturun

Bu operasyonu ücretsiz DynamoDB Sorgu Oluşturucuda kurun — anahtar koşulu, filtre, index, Limit, sıralama yönü ve bir sayfalama döngüsü — ve çalıştırılabilir bir SDK v3, CLI veya boto3 programı olarak geri kopyalayın.

DynamoDB Sorgu Oluşturucuyu aç

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.