L'Interrogation DynamoDB
J'ai une table DynamoDB avec une chaîne alphanumérique comme une clé de hachage (par exemple, "d4ed6962-3ec2-4312-a480-96ecbb48c9da"). J'ai besoin d'interroger le tableau basé sur un autre champ dans la table, donc j'ai besoin de ma requête pour sélectionner toutes les clés tels que mon champ x est entre dat x et la date y.
Je sais que j'ai besoin d'une condition sur la valeur de hachage de la clé et de l'autre sur une gamme de clé, cependant j'ai du mal à composer une clé de hachage, condition qui ne se lie pas ma requête spécifique Id.
Je pensais que je pouvais sortir avec un redondante condition fondée sur l'ID de NOT_NULL, mais quand je l'utilise j'ai l'erreur:
Requête de la clé condition n'est pas pris en charge
Ci-dessous les conditions, je suis en utilisant, une idée de comment atteindre cet objectif?
Condition hashKeyCondition = new Condition()
.withComparisonOperator(ComparisonOperator.NOT_NULL.toString());
Condition rangeCondition = new Condition()
.withComparisonOperator(ComparisonOperator.BETWEEN.toString())
.withAttributeValueList(new AttributeValue().withS(dateFormatter.print(lastScanTime())),
new AttributeValue().withS(dateFormatter.print(currentScanTime)));
Map<String, Condition> keyConditions = new HashMap<String, Condition>();
keyConditions.put("userId", hashKeyCondition);
keyConditions.put("lastAccesTime", rangeCondition);
Merci d'avance à tous ceux qui ont aidé.
OriginalL'auteur Diferdin | 2013-10-21
Vous devez vous connecter pour publier un commentaire.
Dans DynamoDB vous pouvez obtenir des objets avec 3 api:
. Scan (souple mais cher),
. Requête (moins flexible: vous devez spécifier une table de hachage, mais moins cher)
. GetItem (par Hachage et, si votre table a une, par gamme)
La seule façon d'obtenir ce que vous voulez, c'est soit par:
Utiliser le Scan, et d'être lent ou coûteux.
Utiliser une autre table (B) comme un indice de la précédente (Un) comme:
B. HASH = 'VALEURS'
B. GAMME = userid
B. lastAccesTime = lastAccesTime (avec un index secondaire)
Maintenant que vous avez à maintenir cet index sur l'écrit, mais vous pouvez l'utiliser avec l'opération de Requête,
pour obtenir vos identifiants. La requête B: hash='VALEURS', lastaccesstime n'entre x et y, sélectionnez nom d'utilisateur.
Espère que cette aide.
OriginalL'auteur aaaristo
La NOT_NULL opérateur de comparaison n'est pas valable pour la clé de hachage condition. Le seul opérateur valide pour la clé de Hachage de l'état sur une requête est EQ. Plus d'informations peuvent être trouvées ici:
http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html
Et ce que cela signifie, c'est qu'une requête ne fonctionnera pas, à moins que votre table est actuellement construit. Vous pouvez soit utiliser une opération d'Analyse ou vous pouvez créer une table qui stocke les données par Date (hash) et l'ID d'Utilisateur (plage).
Bonne chance!
OriginalL'auteur John Kelvie
J'ai fini l'analyse de la table et appliquer un filtre.
Merci à tous de prendre du temps pour aider!
OriginalL'auteur Diferdin
Vous pourriez ajouter un Index Secondaire Global avec, par exemple, l'année et le mois de votre date et votre clé de hachage, la gamme de clés pour que l'index serait votre date, alors vous pouvez lancer une requête sur toute la plage de données dans un certain mois. Il vous aidera à éviter de coûteux analyse complète.
E. g.
Global Index Secondaire:
Clé de hachage: month_and_year par exemple " en 2014 Mars
La gamme de clés: full_date
Espérons que cela aide!
OriginalL'auteur irriss
Vous avez besoin pour créer GSI si vous souhaitez interroger autres que la Clé de Partition. Scan est très coûteuse en termes de coût et de performance.
OriginalL'auteur