フィルター式とは?(DynamoDB)
DynamoDBのフィルター式は、Scan
およびQuery
操作の結果として返されるアイテムをさらにフィルタリングするための条件式です。フィルター式を使用すると、DynamoDBから返されるアイテムのサブセットを制御することができます。ただし、フィルター式が実行されるのは、アイテムがスキャンまたはクエリされてからであり、フィルタリングはサービス側で行われるため、読み取り容量単位のコストには影響しません。
フィルター式の具体例:
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('YourTableName')
response = table.query(
KeyConditionExpression=Key('YourPrimaryKey').eq('PrimaryKeyValue'),
FilterExpression=Attr('YourAttributeName').lt(10)
)
この例では、プライマリキーに対するクエリ操作を行った後、属性YourAttributeName
の値が10より小さいアイテムだけをフィルタリングしています。
フィルター式を使用する際の注意点:
- フィルター式はアイテムがDynamoDBから読み取られた後に適用されるため、読み取り容量単位のコストには影響しません。すなわち、大量のデータをスキャンまたはクエリした後で少量のデータだけをフィルタリングする場合、その読み取り操作のコストは高くなります。
- フィルター式では、非キー属性のみを参照できます。キー属性に対する条件は
KeyConditionExpression
で指定する必要があります。 - フィルター式で使用するすべての属性名や値は、エクスプレッション属性名やエクスプレッション属性値として明示的に定義する必要がある場合があります。
フィルター式は、クエリやスキャンの結果にさらなる条件を追加する際に便利ですが、効率的な読み取りを行うためには、主要な条件はKeyConditionExpression
やセカンダリインデックスを使用して指定することが推奨されます。