セカンダリ インデックスだけで条件を使用して、dynamodb テーブルでクエリを実行できますか。ハッシュキーに条件を付けたくありません。それを行う方法はありますか?
6 に答える
2013 年 12 月現在、可能です。Dynamo は、グローバル セカンダリ インデックスをサポートしています。
クエリの実行方法については、ドキュメントページを参照してください。基本的に、テーブルとインデックスを指定する必要があります。インデックスにすべての属性を射影した場合はレコードを取得できます。そうでない場合は、以前のようにテーブル内のオブジェクトを検索するために使用できる元のハッシュ キーを取得できます。
いいえ、DynamoDB にクエリを実行するには、ハッシュ キーを知っている必要があります。ハッシュ キーがわからない場合、データを取得する唯一の方法はテーブル全体のスキャンです。
TL;DRはい、セカンダリ インデックスに基づいてクエリを実行できます。
例:
したがって、次の構造を持つテーブルを考えてみましょう。
- user_id (partition key)
- created_at (sort key)
- account_id
- api_path
- execution_time
- platform
- ttl
- metadata
account_id に基づいてクエリを実行する場合は、次のように GSI を作成できます。
account_id (partition key)
created_at (sort key)
このインデックスを呼び出したとしましょう: account_id-created_at-index
次のようにクエリを実行できるようになりました (簡潔にするために選択した言語として Python が使用されます。これはすべての SDK に適用されます)。
import boto3
from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = db.Table('table_name')
response = table.query(KeyConditionExpression=Key('account_id').eq(some_account_id), IndexName=account_id-created_at-index)
ここで重要なIndexNameパラメータに注意してください。
に適用される項目がある場合KeyConditionExpression
、それらはresponse['Items']
オブジェクトのリストでアクセスできます。