使用全局二级索引:AWS CLI - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用全局二级索引:AWS CLI

您可以使用 AWS CLI 创建具有一个或多个全局二级索引的 Amazon DynamoDB 表、描述表上的索引以及使用索引执行查询。

使用 全局二级索引 创建表

全局二级索引可在您创建表的同时创建。为此,请使用 create-table 参数并为一个或多个全局二级索引提供您的规范。以下示例创建一个名为 GameScores 的表,该表具有名为 全局二级索引 的 GameTitleIndex。 基表具有分区键 UserId 和排序键 GameTitle,允许您高效查找特定游戏的单个用户的最佳分数,而 GSI 具有分区键 GameTitle 和排序键 TopScore,使您可以快速查找特定游戏的整体最高分数。

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\"] } } ]"

您必须等待 DynamoDB 创建表并将表状态设置为 ACTIVE。 之后,您就可以开始将数据项目放入表中了。您可以使用 describe-table 确定表创建的状态。

将全局二级索引添加到现有表

也可以在创建表后添加或修改全局二级索引。为此,请使用 update-table 参数并为一个或多个全局二级索引提供您的规范。以下示例使用与上一个示例相同的架构,但假定已创建表,我们稍后将添加 GSI。

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\"] } } } ]"

描述具有 全局二级索引 的表

要获取有关表上本地二级索引的信息,请使用 describe-table 参数。对于每个索引,您都可以查看其名称、键架构和投影的属性。

aws dynamodb describe-table --table-name GameScores

查询全局二级索引

您可以对全局二级索引使用 query 操作(基本与对表执行 query 操作一样)。您需要指定索引名称、索引排序键的查询条件以及要返回的属性。在本示例中,索引为 GameTitleIndex,索引排序键为 GameTitle

要返回的只包含投影到索引的属性。您也可以修改此查询,让返回结果中也包含非键属性,但是这样会导致表抓取活动的成本相对较高的。有关表抓取的更多信息,请参阅属性投影

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