2017-10-04 4 views
1

J'ai la méthode suivante pour analyser tous les éléments dans le tableau dynamo dbComment scanner tous les éléments dans dynamo db?

async def scan_all(self, parse_item: Callable[[dict], dict], **kwargs) -> List[dict]: 
    response = await self._db.scan(**kwargs) 
    response_items = response.get('Items', []) 
    items = list(parse_item(item) for item in response_items) 
    last_evaluated_key = response.get('LastEvaluatedKey', None) 
    while last_evaluated_key is not None: 
     response = await self._db.scan(ExclusiveStartKey=last_evaluated_key, **kwargs) 
     response_items = response.get('Items', []) 
     items.extend(parse_item(item) for item in response_items) 
     last_evaluated_key = response.get('LastEvaluatedKey', None) 
    return items 

Est-ce la bonne ou je peux l'améliorer? Quelle est la meilleure pratique à utiliser LastEvaluatedKey?

+0

double possible de (https [scan complet de DynamoDB avec boto3]://stackoverflow.com/questions/36780856/complete-scan-of-dynamodb-with-boto3) –

Répondre

0

Eh bien, je ne suis pas sûr que ce celui-ci est mieux, mais voilà comment je fais (lecture à travers la documentation DynamoDB):

Map<String, AttributeValue> lastKeyEvaluated = null; 

    do { 
     ScanRequest scanRequest = new ScanRequest().withTableName(TABLE_NAME) 
       .withExclusiveStartKey(lastKeyEvaluated); 
     ScanResult result = client.scan(scanRequest); 
     for (Map<String, AttributeValue> item : result.getItems()) { 

     } 
    }while(lastKeyEvaluated != null);