Utilisation des index secondaires globaux : AWS CLI - Amazon DynamoDB

Utilisation des index secondaires globaux : AWS CLI

Vous pouvez utiliser l'AWS CLI pour créer une table Amazon DynamoDB avec un ou plusieurs index secondaires globaux, décrire les index sur la table, et effectuer des requêtes à l'aide des index.

Créer une table avec un index secondaire global

Vous pouvez créer des index secondaires globaux au moment où vous créez une table. Pour ce faire, utilisez le paramètre create-table et fournissez vos spécifications pour un ou plusieurs index secondaires globaux. L'exemple suivant crée une table nommée GameScores avec un index secondaire global nommé GameTitleIndex. La table de base a une clé de partition UserId et une clé de tri GameTitle, vous permettant de trouver efficacement le meilleur score d'un utilisateur pour un jeu spécifique, tandis que l'index secondaire global (GSI) a une clé de partition GameTitle et une clé de tri TopScore, vous permettant de trouver rapidement le score le plus élevé pour un jeu particulier.

aws dynamodb create-table \ --table-name GameScores \ --attribute-definitions AttributeName=UserId,AttributeType=S \ AttributeName=GameTitle,AttributeType=S \ AttributeName=TopScore,AttributeType=N \ --key-schema AttributeName=UserId,KeyType=HASH \ AttributeName=GameTitle,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=10,WriteCapacityUnits=5 \ --global-secondary-indexes \ "[ { \"IndexName\": \"GameTitleIndex\", \"KeySchema\": [{\"AttributeName\":\"GameTitle\",\"KeyType\":\"HASH\"}, {\"AttributeName\":\"TopScore\",\"KeyType\":\"RANGE\"}], \"Projection\":{ \"ProjectionType\":\"INCLUDE\", \"NonKeyAttributes\":[\"UserId\"] }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": 10, \"WriteCapacityUnits\": 5 } } ]"

Vous devez attendre que DynamoDB crée la table et définisse l'état de celle-ci sur ACTIVE. Après cela, vous pouvez commencer à insérer des éléments de données dans la table. Vous pouvez utiliser la commande describe-table pour déterminer l'état de la création de table.

Ajouter un index secondaire global à une table existante

Vous pouvez également ajouter ou modifier des index secondaires globaux après la création de la table. Pour ce faire, utilisez le paramètre update-table et fournissez vos spécifications pour un ou plusieurs index secondaires globaux. L'exemple suivant utilise le même schéma que l'exemple précédent, mais part du principe que la table a déjà été créée et que nous ajoutons le GSI par la suite.

aws dynamodb update-table \ --table-name GameScores \ --attribute-definitions AttributeName=TopScore,AttributeType=N \ --global-secondary-index-updates \ "[ { \"Create\": { \"IndexName\": \"GameTitleIndex\", \"KeySchema\": [{\"AttributeName\":\"GameTitle\",\"KeyType\":\"HASH\"}, {\"AttributeName\":\"TopScore\",\"KeyType\":\"RANGE\"}], \"Projection\":{ \"ProjectionType\":\"INCLUDE\", \"NonKeyAttributes\":[\"UserId\"] } } } ]"

Décrire une table avec un index secondaire global

Pour obtenir des informations concernant les index secondaires globaux sur une table, utilisez le paramètre describe-table. Pour chaque index, vous pouvez accéder à son nom, à son schéma de clé et aux attributs projetés.

aws dynamodb describe-table --table-name GameScores

Interroger un index secondaire global

Vous pouvez utiliser l'opération query sur un index secondaire global de la même manière que vous utilisez l'opération query sur une table. Vous devez spécifier le nom d'index, les critères de requête pour la clé de tri d'index et les attributs que vous souhaitez renvoyer. Dans cet exemple, l'index est GameTitleIndex et la clé de tri d'index est GameTitle.

Les seuls attributs renvoyés sont ceux qui ont été projetés dans l'index. Vous pourriez également modifier cette requête pour sélectionner des attributs autres que de clé, mais cela nécessiterait une activité d'extraction de table relativement coûteuse. Pour plus d'informations sur les extractions de table, consultez Projections d'attribut.

aws dynamodb query \ --index-name GameTitleIndex \ --key-condition-expression "GameTitle = :v_game" \ --expression-attribute-values '{":v_game":{"S":"Alien Adventure"} }'