

# 在 DynamoDB AWS CLI 中使用本地二级索引
<a name="LCICli"></a>

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

**Topics**
+ [创建具有本地二级索引的表](#LCICli.CreateTableWithIndex)
+ [描述具有本地二级索引的表](#LCICli.DescribeTableWithIndex)
+ [查询本地二级索引](#LCICli.QueryAnIndex)

## 创建具有本地二级索引的表
<a name="LCICli.CreateTableWithIndex"></a>

本地二级索引必须在您创建表的同时创建。为此，请使用 `create-table` 参数并为一个或多个本地二级索引提供您的规范。以下示例创建一个包含音乐精选中歌曲信息的表 (`Music`)。分区键为 `Artist`，排序键为 `SongTitle`。`AlbumTitle` 属性的二级索引 `AlbumTitleIndex` 可以按专辑名称进行查询。

```
aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
        AttributeName=AlbumTitle,AttributeType=S  \
    --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --local-secondary-indexes \
        "[{\"IndexName\": \"AlbumTitleIndex\",
        \"KeySchema\":[{\"AttributeName\":\"Artist\",\"KeyType\":\"HASH\"},
                      {\"AttributeName\":\"AlbumTitle\",\"KeyType\":\"RANGE\"}],
        \"Projection\":{\"ProjectionType\":\"INCLUDE\",  \"NonKeyAttributes\":[\"Genre\", \"Year\"]}}]"
```

您必须等待 DynamoDB 创建该表并将表的状态设置为 `ACTIVE`。然后，您就可以开始在表中添加数据项目。您可以使用 [describe-table](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/describe-table.html) 确定表创建的状态。

## 描述具有本地二级索引的表
<a name="LCICli.DescribeTableWithIndex"></a>

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

```
aws dynamodb describe-table --table-name Music
```

## 查询本地二级索引
<a name="LCICli.QueryAnIndex"></a>

您可以对本地二级索引使用 `query` 操作，基本上与对表执行 `query` 操作相同。您需要指定索引名称、索引排序键的查询条件以及要返回的属性。在本示例中，索引为 `AlbumTitleIndex`，索引排序键为 `AlbumTitle`。

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

```
aws dynamodb query \
    --table-name Music \
    --index-name AlbumTitleIndex \
    --key-condition-expression "Artist = :v_artist and AlbumTitle = :v_title" \
    --expression-attribute-values  '{":v_artist":{"S":"Acme Band"},":v_title":{"S":"Songs About Life"} }'
```