

 AWS Cloud9 不再向新客户提供。 AWS Cloud9 的现有客户可以继续正常使用这项服务。[了解详情](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

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

# 适用于以下内容的亚马逊 DynamoDB 教程 AWS Cloud9
<a name="sample-dynamodb"></a>

本教程允许您设置 AWS Cloud9 开发环境以使用 Amazon DynamoDB。

DynamoDB 是一种完全托管式 NoSQL 数据库服务。您可以使用 DynamoDB 创建一个数据库表来存储和检索任意量级的数据，并支持任何级别的请求流量。DynamoDB 自动将表的数据和流量分布到足够数量的服务器上，以处理指定的请求容量和存储的数据量，同时保持一致且快速的性能。有关更多信息，请参阅网站上的[亚马逊 Dyn](https://aws.amazon.com/dynamodb/) amoDB。 AWS 

创建此样本可能会导致向您的 AWS 账户收取费用。其中包括可能对 Amazon EC2 和 DynamoDB 等服务收取的费用。有关更多信息，请参阅 [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)和 [Amazon DynamoDB 定价](https://aws.amazon.com/dynamodb/pricing/)。

有关其他 AWS 数据库产品的信息，请参阅网站[上的亚马逊关系数据库 (RDS)](https://aws.amazon.com/rds/)、[亚马逊和 ElastiCache亚马逊](https://aws.amazon.com/elasticache/) R [edshift](https://aws.amazon.com/redshift/)。 AWS 另请参阅 AWS 网站上的 [AWS Database Migration Service](https://aws.amazon.com/dms/)。
+  [先决条件](#sample-dynamodb-prereqs) 
+  [步骤 1：在您的环境中安装和配置 AWS CLI和/或 AWS CloudShell](#sample-dynamodb-cli-setup) 
+  [步骤 2：创建表](#sample-dynamodb-create-table) 
+  [步骤 3：向表添加项目](#sample-dynamodb-add-item) 
+  [步骤 4：向表添加多个项目](#sample-dynamodb-add-items) 
+  [步骤 5：创建全局二级索引](#sample-dynamodb-create-index) 
+  [步骤 6：获取表中的项目](#sample-dynamodb-get-items) 
+  [步骤 7：清除](#sample-dynamodb-clean-up) 

## 先决条件
<a name="sample-dynamodb-prereqs"></a>

在使用此示例之前，请确保您的设置满足以下要求：
+ **您必须拥有现有 AWS Cloud9 的 EC2 开发环境。**本示例假设您已经有连接到运行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 实例的 EC2 环境。如果您有不同类型的环境或操作系统，可能需要按照本示例的说明来设置相关的工具。有关更多信息，请参阅 [在中创建环境 AWS Cloud9](create-environment.md)。
+ **您已经打开了现有环境的 AWS Cloud9 IDE。**打开环境时，会在 Web 浏览器中 AWS Cloud9 打开该环境的 IDE。有关更多信息，请参阅 [在中打开环境 AWS Cloud9](open-environment.md)。

## 步骤 1：在您的环境中 AWS CLI安装和配置 AWS CloudShell、或两者兼而有之
<a name="sample-dynamodb-cli-setup"></a>

在此步骤中，您将使用 AWS Cloud9 IDE 在您的环境中安装和配置 AWS CLI AWS CloudShell、或两者兼而有之，这样您就可以运行命令与 DynamoDB 进行交互。然后，您将使用 AWS CLI 运行基本 DynamoDB 命令来测试安装和配置。

1. 要为 AWS CLI 或设置凭据管理 AWS CloudShell 并在您的环境中安装 AWS CLI AWS CloudShell、或两者，请按照和[AWS CloudShell 示例中的步骤 1 AWS CLI 和](sample-aws-cli.md) 2 进行操作，然后返回本主题。如果您已经在环境中安装并配置了 AWS CloudShell、或两者兼而有之，则无需再次执行此操作。 AWS CLI

1. 通过在您的环境中的终端会话中 AWS CLI运行 DynamoDB **`list-tables`**命令来列出您的现有 DynamoDB 表（如果有），以测试安装和配置、aws-shell 或两者兼而有之。要开始新的终端会话，请在菜单栏上依次选择 **Window (窗口)**、**New Terminal (新建终端)**。

   ```
   aws dynamodb list-tables # For the AWS CLI.
   dynamodb list-tables     # For the aws-shell.
   ```
**注意**  
在本示例中，如果您使用的是 aws-shell，请忽略以 `aws` 开头的每个命令中的 `aws`。要启动 aws-shell，请运行 **`aws-shell`** 命令。要停止使用 aws-shell，请运行 **`.exit`** 或 **`.quit`** 命令。

   如果此命令成功，它会输出一个 `TableNames` 数组，其中包含您现在已有的 DynamoDB 表的列表。如果您还没有 DynamoDB 表，则 `TableNames` 数组将为空。

   ```
   {
     "TableNames": []
   }
   ```

   如果您有任何 DynamoDB 表，则 `TableNames` 数组包含表名称列表。

## 步骤 2：创建表
<a name="sample-dynamodb-create-table"></a>

在此步骤中，您在 DynamoDB 中创建表，并指定表的名称、布局、简单主键以及数据吞吐量设置。

此示例表名为 `Weather`，包含美国几个城市的天气预报信息。此表包含以下类型的信息（在 DynamoDB 中，每一条信息称为一个*属性*）：
+ 必需的唯一城市 ID (`CityID`)
+ 必需的预测日期 (`Date`)
+ 城市名称 (`City`)
+ 州名称 (`State`)
+ 预测天气状况 (`Conditions`)
+ 预测温度 (`Temperatures`)
  + 预测高温，使用华氏度 (`HighF`)
  + 预测低温，使用华氏度 (`LowF`)

要创建表，请在 AWS Cloud9 IDE 的终端会话中运行 DynamoDB **`create-table`**命令。

```
aws dynamodb create-table \
--table-name Weather \
--attribute-definitions \
  AttributeName=CityID,AttributeType=N AttributeName=Date,AttributeType=S \
--key-schema \
  AttributeName=CityID,KeyType=HASH AttributeName=Date,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
```

在此命令中：
+  `--table-name` 表示表名 (在本示例中为 `Weather`)。在您 AWS 账户的每个 AWS 区域中，表名必须是唯一的。
+  `--attribute-definitions` 表示用于唯一标识表项目的属性。此表的各个项目由数字 `ID` 属性和 `Date` 属性的组合唯一标识，表示为 ISO-8601 格式的字符串。
+  `--key-schema` 表示表的键架构。此表具有复合主键 `CityID` 和 `Date`。这意味着，每个表项目必须具有一个 `CityID` 属性值和一个 `Date` 属性值，但表中的任意两个项目不能具有相同的 `CityID` 属性值和 `Date` 属性值。
+  `--provisioned-throughput` 表示表的读写容量。对于最大 4 KB 的项目，DynamoDB 允许每秒最多 5 次强一致性读取，或者对于最大 4 KB 的项目，每秒最多 5 次最终一致读数。对于最大 1 KB 的项目，DynamoDB 还允许每秒最多 5 次写入。
**注意**  
设置更高的预配置吞吐量可能会导致您的 AWS 账户产生额外费用。  
有关此命令和其他 DynamoDB 命令的更多信息，请参阅 *AWS CLI 命令参考*中的 [dynamodb](https://docs.aws.amazon.com/cli/latest/reference/dynamodb/index.html)。

如果此命令成功，它会显示所创建新表的摘要信息。要确认已成功创建表，请运行 DynamoDB **`describe-table`** 命令，在命令中指定表的名称 (`--table-name`)。

```
aws dynamodb describe-table --table-name Weather
```

成功创建表之后，`TableStatus` 值会从 `CREATING` 变为 `ACTIVE`。在成功创建表之前，请不要继续完成此步骤。

## 步骤 3：向表添加项目
<a name="sample-dynamodb-add-item"></a>

在此步骤中，您将向刚刚创建的表中添加一个项目。

1. 使用以下内容创建名为 `weather-item.json` 的文件。要创建新文件，请在菜单栏上依次选择 **File (文件)**、**New File (新建文件)**。要保存文件，请依次选择 **File (文件)**、**Save (保存)**。

   ```
   {
     "CityID": { "N": "1" },
     "Date": { "S": "2017-04-12" },
     "City": { "S": "Seattle" },
     "State": { "S": "WA" },
     "Conditions": { "S": "Rain" },
     "Temperatures": { "M": {
         "HighF": { "N": "59" },
         "LowF": { "N": "46" }
       }
     }
   }
   ```

   在本代码中，`N` 表示数字属性值。`S` 是字符串属性值。`M` 是映射属性，该属性是一组属性/值对。在使用项目时，您必须指定属性的数据类型。有关其他可用属性数据类型的信息，请参阅 *Amazon DynamoDB 开发人员指南*中的[数据类型](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes)。

1. 运行 DynamoDB **`put-item`** 命令，在命令中指定表的名称 (`--table-name`) 和 JSON 格式项目 (`--item`) 的路径。

   ```
   aws dynamodb put-item \
   --table-name Weather \
   --item file://weather-item.json
   ```

   如果命令成功，它将运行而没有错误，并且不显示确认消息。

1. 要确认表的当前内容，请运行 DynamoDB **`scan`** 命令，在命令中指定表的名称 (`--table-name`)。

   ```
   aws dynamodb scan --table-name Weather
   ```

   如果命令成功，则将显示有关表以及刚刚添加项目的汇总信息。

## 步骤 4：向表添加多个项目
<a name="sample-dynamodb-add-items"></a>

在此步骤中，您将向 `Weather` 表中添加多个项目。

1. 使用以下内容创建名为 `more-weather-items.json` 的文件。

   ```
   {
     "Weather": [
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "1" },
             "Date": { "S": "2017-04-13" },
             "City": { "S": "Seattle" },
             "State": { "S": "WA" },
             "Conditions": { "S": "Rain" },
             "Temperatures": { "M": {
                 "HighF": { "N": "52" },
                 "LowF": { "N": "43" }
               }
             }
           }
         }
       },
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "1" },
             "Date": { "S": "2017-04-14" },
             "City": { "S": "Seattle" },
             "State": { "S": "WA" },
             "Conditions": { "S": "Rain" },
             "Temperatures": { "M": {
                 "HighF": { "N": "49" },
                 "LowF": { "N": "43" }
               }
             }
           }
         }
       },
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "2" },
             "Date": { "S": "2017-04-12" },
             "City": { "S": "Portland" },
             "State": { "S": "OR" },
             "Conditions": { "S": "Thunderstorms" },
             "Temperatures": { "M": {
                 "HighF": { "N": "59" },
                 "LowF": { "N": "43" }
               }
             }
           }
         }
       },
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "2" },
             "Date": { "S": "2017-04-13" },
             "City": { "S": "Portland" },
             "State": { "S": "OR" },
             "Conditions": { "S": "Rain" },
             "Temperatures": { "M": {
                 "HighF": { "N": "51" },
                 "LowF": { "N": "41" }
               }
             }
           }
         }
       },
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "2" },
             "Date": { "S": "2017-04-14" },
             "City": { "S": "Portland" },
             "State": { "S": "OR" },
             "Conditions": { "S": "Rain Showers" },
             "Temperatures": { "M": {
                 "HighF": { "N": "49" },
                 "LowF": { "N": "39" }
               }
             }
           }
         }
       },
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "3" },
             "Date": { "S": "2017-04-12" },
             "City": { "S": "Portland" },
             "State": { "S": "ME" },
             "Conditions": { "S": "Rain" },
             "Temperatures": { "M": {
                 "HighF": { "N": "59" },
                 "LowF": { "N": "40" }
               }
             }
           }
         }
       },
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "3" },
             "Date": { "S": "2017-04-13" },
             "City": { "S": "Portland" },
             "State": { "S": "ME" },
             "Conditions": { "S": "Partly Sunny" },
             "Temperatures": { "M": {
                 "HighF": { "N": "54" },
                 "LowF": { "N": "37" }
               }
             }
           }
         }
       },
       {
         "PutRequest": {
           "Item": {
             "CityID": { "N": "3" },
             "Date": { "S": "2017-04-14" },
             "City": { "S": "Portland" },
             "State": { "S": "ME" },
             "Conditions": { "S": "Mostly Sunny" },
             "Temperatures": { "M": {
                 "HighF": { "N": "53" },
                 "LowF": { "N": "37" }
               }
             }
           }
         }
       }
     ]
   }
   ```

   在本代码中，8 个 `Item` 对象定义要添加到表中的 8 个项目，类似于上一步中定义的单个项目。不过，在下一步骤中运行 DynamoDB **`batch-write-item`** 命令时，您必须提供 JSON 格式的对象，该对象在包含的每个 `PutRequest` 对象中包括一个 `Item` 对象。然后，您必须将这些 `PutRequest` 对象包括在与表具有相同名称的父数组中。

1. 运行 DynamoDB **`batch-write-item`** 命令，在命令中指定要添加的 JSON 格式项目的路径 (`--request-items`)。

   ```
   aws dynamodb batch-write-item \
   --request-items file://more-weather-items.json
   ```

   如果命令成功，它会显示以下消息，确认已成功添加项目。

   ```
   {
     "UnprocessedItems": {}
   }
   ```

1. 要确认表的当前内容，请再次运行 DynamoDB **`scan`** 命令。

   ```
   aws dynamodb scan --table-name Weather
   ```

   如果命令成功，现在显示 9 个项目。

## 步骤 5：创建全局二级索引
<a name="sample-dynamodb-create-index"></a>

运行 DynamoDB **`scan`** 命令以获取有关项目信息的速度可能会较慢，尤其在表的大小增长或者您要获取的信息类型非常复杂时。您可以创建一个或多个二级索引，以加快速度并更轻松地获取信息。在此步骤中，您将了解 DynamoDB 支持用于实现此目的两种二级索引类型。这两种索引称为*本地二级索引* 和*全局二级索引*。然后创建全局二级索引。

要了解这些二级索引类型，您首先需要了解主键，它用于唯一地标识表的项目。DynamoDB 支持*简单主键*或*复合主键*。简单主键具有一个属性，该属性值对于表中的每个项目必须唯一。该属性也称为*分区键*（或*哈希属性*），DynamoDB 可以使用该属性来分区项目以实现更快地访问。表还可以具有复合主键，其中包含两个属性。第一个属性是分区键，第二个属性是*排序键*（也称为*范围属性*）。在具有复合主键的表中，任何两个项目可以具有相同的分区键值，但不能同时具有相同的排序键值。`Weather` 表具有复合主键。

本地二级索引具有与表相同的分区键，但此索引类型可以具有不同的排序键。全局二级索引可以具有与表本身均不相同的分区键和排序键。

例如，您可以使用主键，按照 `Weather` 访问 `CityID` 项目。要按照 `Weather` 访问 `State`，您可以创建具有分区键 `CityID` (必须与表本身的分区键相同) 以及排序键 `State` 的本地二级索引。要按照 `Weather` 访问 `City`，您可以创建具有分区键 `City` 以及排序键 `Date` 的全局二级索引。

您只能在创建表的时候创建本地二级索引。由于 `Weather` 表已存在，您不能向它添加任何本地二级索引。不过，您可以添加全局二级索引。现在练习添加全局二级索引。

**注意**  
创建二级索引可能会导致您的 AWS 账户产生额外费用。

1. 使用以下内容创建名为 `weather-global-index.json` 的文件。

   ```
   [
     {
       "Create": {
         "IndexName": "weather-global-index",
         "KeySchema": [
           {
             "AttributeName": "City",
             "KeyType": "HASH"
           },
           {
             "AttributeName": "Date",
             "KeyType": "RANGE"
           }
         ],
         "Projection": {
           "ProjectionType": "INCLUDE",
           "NonKeyAttributes": [
             "State",
             "Conditions",
             "Temperatures"
           ]
         },
         "ProvisionedThroughput": {
           "ReadCapacityUnits": 5,
           "WriteCapacityUnits": 5
         }
       }
     }
   ]
   ```

   在此代码中：
   + 全局二级索引的名称为 `weather-global-index`。
   + `City` 属性是分区键 (哈希属性)，`Date` 属性是排序键 (范围属性)。
   +  对于使用此索引进行的表搜索所匹配的每个项目，`Projection` 定义默认情况下要检索的属性 (在哈希属性和任意范围属性之外)。在本示例中，为每个匹配项目检索 `State`、`Conditions`、`HighF` (属于 `Temperatures`) 和 `LowF` (也属于 `Temperatures`) 属性 (以及 `City` 和 `Date` 属性)。
   + 与表类似，全局二级索引必须定义其预配置吞吐量设置。
   + `IndexName`、`KeySchema`、`Projection` 和 `ProvisionedThroughput` 设置必须包含在 `Create` 对象中，该对象定义在下一步骤中运行 DynamoDB** `update-table` ** 命令时，要创建的全局二级索引。

1. 运行 DynamoDB **`update-table`** 命令。

   ```
   aws dynamodb update-table \
   --table-name Weather \
   --attribute-definitions \
     AttributeName=City,AttributeType=S AttributeName=Date,AttributeType=S \
   --global-secondary-index-updates file://weather-global-index.json
   ```

   在此命令中：
   +  `--table-name` 是要更新的表的名称。
   +  `--attribute-definitions` 是要包括在索引中的属性。分区键始终首先列出，任意排序键始终第二列出。
   +  `--global-secondary-index-updates` 是指向定义全局二级索引的文件的路径。

   如果此命令成功，它会显示所创建新全局二级索引的摘要信息。要确认已成功创建全局二级索引，请运行 DynamoDB **`describe-table`** 命令，在命令中指定表的名称 (`--table-name`)。

   ```
   aws dynamodb describe-table --table-name Weather
   ```

   成功创建了全局二级索引时，`TableStatus` 值从 `UPDATING` 更改为 `ACTIVE`，`IndexStatus` 值从 `CREATING` 更改为 `ACTIVE`。在成功创建全局二级索引之前，请不要继续完成此步骤。这个过程可能需要几分钟。

## 步骤 6：获取表中的项目
<a name="sample-dynamodb-get-items"></a>

有多种方法可以从表中获取项目。在此步骤中，您可以使用表的主键、使用表的其他属性以及使用全局二级索引来获取项目。

### 根据项目的主键值从表中获取单个项目
<a name="w2aac31c21c25b5"></a>

如果您知道某个项目的主键值，则可以通过运行 DynamoDB 命令 **`get-item`**、**`scan`** 或 **`query`** 来获取匹配项目。以下介绍了这些命令中的主要差别：
+  ** `get-item` **返回具有给定主键的项目的一组属性。
+  ** `scan` **通过访问表或者二级索引中的每个项目，返回一个或多个项目和项目属性。
+  ** `query` **基于主键值查找项目。您可查询具有复合主键 (分区键和排序键) 的任何表或二级索引。

在本示例中，下面介绍了如何使用这些各个命令来获取包含 `CityID` (属性值为 `1`) 和 `Date` (属性值为 `2017-04-12`) 的项目。

1. 要运行 DynamoDB **`get-item`** 命令，请指定表的名称 (`--table-name`)、主键值 (`--key`) 以及要显示的项目的属性值 (`--projection-expression`)。由于 `Date` 是 DynamoDB 中的保留关键字，您还必须为 `Date` 属性值 (`--expression-attribute-names`) 提供一个别名。（`State` 也是保留关键字，因此您将在后面的步骤中看到为其提供的别名。）

   ```
   aws dynamodb get-item \
   --table-name Weather \
   --key '{ "CityID": { "N": "1" }, "Date": { "S": "2017-04-12" } }' \
   --projection-expression \
     "City, #D, Conditions, Temperatures.HighF, Temperatures.LowF" \
   --expression-attribute-names '{ "#D": "Date" }'
   ```

   在此命令和其他命令中，要显示项目的所有属性，请勿包括 `--projection-expression`。在本示例中，由于您未包括 `--projection-expression`，您也无需包含 `--expression-attribute-names`。

   ```
   aws dynamodb get-item \
   --table-name Weather \
   --key '{ "CityID": { "N": "1" }, "Date": { "S": "2017-04-12" } }'
   ```

1. 要运行 DynamoDB **`scan`** 命令，请指定：
   + 表的名称 (`--table-name`)。
   + 要运行的搜索 (`--filter-expression`)。
   + 要使用的搜索标准 (`--expression-attribute-values`)。
   + 要为匹配项目显示的属性类型 (`--select`)。
   + 要显示的项目的属性值 (`--projection-expression`)。
   + 如果您的属性使用 DynamoDB 中的预留关键字，则指定这些属性的别名 (`--expression-attribute-names`)。

   ```
   aws dynamodb scan \
   --table-name Weather \
   --filter-expression "(CityID = :cityID) and (#D = :date)" \
   --expression-attribute-values \
     '{ ":cityID": { "N": "1" }, ":date": { "S": "2017-04-12" } }' \
   --select SPECIFIC_ATTRIBUTES \
   --projection-expression \
     "City, #D, Conditions, Temperatures.HighF, Temperatures.LowF" \
   --expression-attribute-names '{ "#D": "Date" }'
   ```

1. 要运行 DynamoDB **`query`** 命令，请指定：
   + 表的名称 (`--table-name`)。
   + 要运行的搜索 (`--key-condition-expression`)。
   + 在搜索中使用的属性值 (`--expression-attribute-values`)。
   + 要为匹配项目显示的属性类型 (`--select`)。
   + 要显示的项目的属性值 (`--projection-expression`)。
   + 如果您的属性使用 DynamoDB 中的预留关键字，则指定这些属性的别名 (`--expression-attribute-names`)。

   ```
   aws dynamodb query \
   --table-name Weather \
   --key-condition-expression "(CityID = :cityID) and (#D = :date)" \
   --expression-attribute-values \
     '{ ":cityID": { "N": "1" }, ":date": { "S": "2017-04-12" } }' \
   --select SPECIFIC_ATTRIBUTES \
   --projection-expression \
     "City, #D, Conditions, Temperatures.HighF, Temperatures.LowF" \
   --expression-attribute-names '{ "#D": "Date" }'
   ```

   请注意，**`scan` **命令需要扫描所有 9 个项目以获得所需的结果，而** `query` **命令仅扫描 1 个项目。

### 根据项目的主键值从表中获取多个项目
<a name="w2aac31c21c25b7"></a>

如果您知道项目的主键值，则可以通过运行 DynamoDB **`batch-get-item`** 命令获取匹配项目。在本示例中，下面介绍了如何获取包含 `CityID` (属性值为 `3`) 和 `Date` (属性值为 `2017-04-13` 或 `2017-04-14`) 的项目。

运行 DynamoDB **`batch-get-item`** 命令，指定描述要获取项目的文件的路径 (`--request-items`)。

```
aws dynamodb batch-get-item --request-items file://batch-get-item.json
```

在本示例中，`batch-get-item.json` 文件中的代码指定在 `Weather` 表中，搜索 `CityID` 为 `3` 并且 `Date` 为 `2017-04-13` 或 `2017-04-14`的项目。对于找到的每个项目，将显示 `City`、`State`、`Date` 和 `HighF` (属于 `Temperatures`) 的属性值 (如果存在)。

```
{
  "Weather" : {
    "Keys": [
      {
        "CityID": { "N": "3" },
        "Date": { "S": "2017-04-13" }
      },
      {
        "CityID": { "N": "3" },
        "Date": { "S": "2017-04-14" }
      }
    ],
    "ProjectionExpression": "City, #S, #D, Temperatures.HighF",
    "ExpressionAttributeNames": { "#S": "State", "#D": "Date" }
  }
}
```

### 获取表的所有匹配项目
<a name="w2aac31c21c25b9"></a>

如果您知道表中属性值的一些信息，则可以通过运行 DynamoDB **`scan`** 命令获取匹配项目。在本示例中，下面介绍了当 `Conditions` 属性值包含 `Sunny` 并且 `HighF` 属性值 (属于 `Temperatures`) 大于 `53` 时，如何获取日期。

运行 DynamoDB **`scan`** 命令，指定：
+ 表的名称 (`--table-name`)。
+ 要运行的搜索 (`--filter-expression`)。
+ 要使用的搜索标准 (`--expression-attribute-values`)。
+ 要为匹配项目显示的属性类型 (`--select`)。
+ 要显示的项目的属性值 (`--projection-expression`)。
+ 如果您的属性使用 DynamoDB 中的预留关键字，则指定这些属性的别名 (`--expression-attribute-names`)。

```
aws dynamodb scan \
--table-name Weather \
--filter-expression \
  "(contains (Conditions, :sun)) and (Temperatures.HighF > :h)" \
--expression-attribute-values \
  '{ ":sun": { "S" : "Sunny" }, ":h": { "N" : "53" } }' \
--select SPECIFIC_ATTRIBUTES \
--projection-expression "City, #S, #D, Conditions, Temperatures.HighF" \
--expression-attribute-names '{ "#S": "State", "#D": "Date" }'
```

### 从全局二级索引获取所有匹配项目
<a name="w2aac31c21c25c11"></a>

要使用全局二级索引搜索，请使用 DynamoDB **`query`** 命令。在本示例中，下面介绍了如何使用 `weather-global-index` 二级索引，获取名为 `Portland` 的城市在日期 `2017-04-13` 和 `2017-04-14` 的天气预报。

运行 DynamoDB **`query`** 命令，指定：
+ 表的名称 (`--table-name`)。
+ 全局二级索引的名称 (`--index-name`)。
+ 要运行的搜索 (`--key-condition-expression`)。
+ 在搜索中使用的属性值 (`--expression-attribute-values`)。
+ 要为匹配项目显示的属性类型 (`--select`)。
+ 如果您的属性使用 DynamoDB 中的预留关键字，则指定这些属性的别名 (`--expression-attribute-names`)。

```
aws dynamodb query \
--table-name Weather \
--index-name weather-global-index \
--key-condition-expression "(City = :city) and (#D between :date1 and :date2)" \
--expression-attribute-values \
  '{ ":city": { "S" : "Portland" }, ":date1": { "S": "2017-04-13" }, ":date2": { "S": "2017-04-14" } }' \
--select SPECIFIC_ATTRIBUTES \
--projection-expression "City, #S, #D, Conditions, Temperatures.HighF" \
--expression-attribute-names '{ "#S": "State", "#D": "Date" }'
```

## 步骤 7：清除
<a name="sample-dynamodb-clean-up"></a>

为了防止在您使用完此示例后继续向您的 AWS 账户收费，您应该删除该表。删除表还将删除全局二级索引。您还应该删除环境。

要删除表，请运行 DynamoDB **`delete-table`** 命令，在命令中指定表的名称 (`--table-name`)。

```
aws dynamodb delete-table --table-name Weather
```

如果命令成功，则会显示有关表的信息，包括值为 `TableStatus` 的 `DELETING`。

要确认已成功删除表，请运行 DynamoDB **`describe-table`** 命令，在命令中指定表的名称 (`--table-name`)。

```
aws dynamodb describe-table --table-name Weather
```

如果成功删除此表，将显示包含短语 `Requested resource not found` 的消息。

要删除您的环境，请参阅[删除环境](delete-environment.md)。