Voici l'exemple de scan utilisant contains. Veuillez noter que l'analyse est une opération coûteuse si la table contient des millions d'éléments. Normalement, l'analyse est utilisée si vous ne connaissez pas la valeur de la clé de partition. Même si vous ne connaissez pas la valeur de la clé de partition, la solution la plus recommandée consiste à utiliser l'index secondaire global (GSI) et à interroger directement l'index plutôt que la table.
Vous devrez peut-être explorer les options ci-dessus et décider de l'approche adaptée à votre cas d'utilisation.
Le code ci-dessous est pour donner une idée de l'utilisation API SCAN utilisant contient. Vous pouvez également utiliser CONTAINS sur l'API QUERY si vous connaissez la valeur de la clé de partition.
balayage à l'aide contient: -
from __future__ import print_function # Python 2/3 compatibility
import boto3
from botocore.exceptions import ClientError
import json
import decimal
from boto3.dynamodb.conditions import Key, Attr
# Helper class to convert a DynamoDB item to JSON.
class DecimalEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, decimal.Decimal):
if o % 1 > 0:
return float(o)
else:
return int(o)
return super(DecimalEncoder, self).default(o)
dynamodb = boto3.resource('dynamodb', region_name='us-west-2', endpoint_url="http://localhost:8000")
table = dynamodb.Table('usertable')
print("Scanning...")
sessionData = {
"id": "12ghbcyg",
"foo": "bar"
}
fe = Attr('sessions').contains(sessionData)
response = table.scan(
FilterExpression=fe
)
for i in response['Items']:
print(json.dumps(i, cls=DecimalEncoder))
while 'LastEvaluatedKey' in response:
response = table.scan(
FilterExpression=fe,
ExclusiveStartKey=response['LastEvaluatedKey']
)
for i in response['Items']:
print(json.dumps(i, cls=DecimalEncoder))
Simplement il est impossible d'interroger ou analyser les données par identifiant de session seule. DynamoDB n'a pas cette fonctionnalité. Vous avez besoin à la fois de l'identifiant et de la foo pour trouver la valeur. – notionquest
@notionquest Pourriez-vous montrer cela? Ce serait également acceptable. – Aaronepower