Você pode usar a AWS CLI para criar uma tabela do Amazon DynamoDB com um ou mais índices secundários globais na tabela e executar consultas usando os índices.
Tópicos
Criar uma tabela com um índice secundário global
Você pode criar índices secundários globais ao mesmo tempo que cria uma tabela. Para fazer isso, use o parâmetro create-table
e forneça suas especificações para um ou mais índices secundários globais. O exemplo a seguir cria uma tabela chamada GameScores
com um índice secundário global chamado GameTitleIndex
. A tabela-base tem uma chave de partição UserId
e uma chave de classificação GameTitle
, permitindo que você encontre a melhor pontuação de um usuário individual para um jogo específico de forma eficiente, enquanto o GSI tem uma chave de partição GameTitle
e uma chave de classificação TopScore
, permitindo que você encontre rapidamente a pontuação mais alta geral para um jogo específico.
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 } } ]"
Você deve aguardar até que o DynamoDB crie a tabela e defina o status dessa tabela como ACTIVE
. Depois disso, você poderá começar a inserir itens de dados na tabela. Você pode usar describe-table para determinar o status da criação da tabela.
Adicionar um índice secundário global a uma tabela existente
Os índices secundários globais também podem ser adicionados ou modificados após a criação da tabela. Para fazer isso, use o parâmetro update-table
e forneça suas especificações para um ou mais índices secundários globais. O exemplo a seguir usa o mesmo esquema do exemplo anterior, mas pressupõe que a tabela já foi criada e que adicionaremos o GSI mais tarde.
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\"] } } } ]"
Descrever uma tabela com um índice secundário global
Para obter mais informações sobre índices secundários globais em uma tabela, use o parâmetro describe-table
. Para cada índice, você pode acessar seu nome, esquema de chaves e atributos projetados.
aws dynamodb describe-table --table-name GameScores
Consultar um índice secundário global
Você pode usar a operação query
em um índice secundário global de forma semelhante ao uso de query
em uma tabela. Você deve especificar o nome do índice, os critérios de consulta da chave de classificação do índice e os atributos que deseja retornar. Neste exemplo, o índice é GameTitleIndex
e a chave de classificação do índice é GameTitle
.
Os únicos atributos retornados são aqueles que foram projetados no índice. É possível modificar essa consulta para selecionar atributos não chave também, mas isso exigiria atividades de busca de tabela que são relativamente caras. Para obter mais informações sobre buscas de tabela, consulte Projeções de atributo.
aws dynamodb query --table-name GameScores\ --index-name GameTitleIndex \ --key-condition-expression "GameTitle = :v_game" \ --expression-attribute-values '{":v_game":{"S":"Alien Adventure"} }'