Vous pouvez avoir plusieurs clés de hachage identiques ; mais seulement si vous avez une clé de gamme qui varie. Pensez-y comme aux formats de fichiers : vous pouvez avoir deux fichiers portant le même nom dans le même dossier tant que leur format est différent. Si leur format est le même, leur nom doit être différent. Le même concept s'applique aux clés de hachage/plage de DynamoDB ; il suffit de considérer le hachage comme le nom et la plage comme le format.
De plus, je ne me souviens pas s'ils existaient à l'époque de l'OP (je ne crois pas que ce soit le cas), mais ils proposent désormais des index secondaires locaux.
Si j'ai bien compris, cela devrait vous permettre d'exécuter les requêtes souhaitées sans avoir à effectuer un balayage complet. L'inconvénient est que ces index doivent être spécifiés lors de la création de la table, et aussi (je crois) ne peuvent pas être vides lors de la création d'un élément. En outre, ils nécessitent un débit supplémentaire (bien que généralement moins important qu'un scan) et du stockage, ce n'est donc pas une solution parfaite, mais une alternative viable, pour certains.
Je continue cependant à recommander la réponse de Mike Brant comme la méthode préférée d'utilisation de DynamoDB, et j'utilise moi-même cette méthode. Dans mon cas, j'ai juste une table centrale avec seulement une clé de hachage comme mon ID, puis des tables secondaires qui ont un hachage et une plage qui peuvent être interrogés, puis l'élément pointe le code vers "l'élément d'intérêt" de la table centrale, directement.
Des données supplémentaires concernant les index secondaires peuvent être trouvées dans la documentation DynamoDB d'Amazon. aquí pour les personnes intéressées.
Quoi qu'il en soit, j'espère que cela aidera toute autre personne qui tombera sur ce fil.