

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

# AWS IoT SQL 参考
<a name="iot-sql-reference"></a>

在中 AWS IoT，规则是使用类似 SQL 的语法定义的。SQL 语句由三类子句组成：

**SET**  
（可选）定义可在整个 SQL 语句和替换模板中重复使用的变量。使用表达式为变量赋值。在 SELECT 和 WHERE 子句以及操作替换模板中引用这些变量。  
SET 子句支持[数据类型](iot-sql-data-types.md)[运算符](iot-sql-operators.md)、[函数](iot-sql-functions.md)、、[文本](iot-sql-literals.md)、[Case 语句](iot-sql-case.md)、[JSON 扩展](iot-sql-json.md)、、[变量](iot-sql-set.md#iot-sql-set-usage)和[嵌套对象查询](iot-sql-nested-queries.md)。

**SELECT**  
（必填）从传入消息有效载荷提取信息并执行信息转换。要使用的消息由[主题筛选条件](topics.md#topicfilters)在 FROM 子句中指定。  
SELECT 子句支持[数据类型](iot-sql-data-types.md)[运算符](iot-sql-operators.md)[函数](iot-sql-functions.md)、[文本](iot-sql-literals.md)、、[Case 语句](iot-sql-case.md)、[JSON 扩展](iot-sql-json.md)、[替换模板](iot-substitution-templates.md)、、、[嵌套对象查询](iot-sql-nested-queries.md)、[变量](iot-sql-set.md#iot-sql-set-usage)和[二进制有效载荷](binary-payloads.md)。

**FROM**  
MQTT 消息[主题筛选条件](topics.md#topicfilters)，用于标识要从中提取数据的消息。对于发送到符合此处指定的主题筛选条件的 MQTT 主题的每条消息，将激活该规则。对于通过消息代理传递的消息所激活的规则是必需的。对于仅使用[基本摄取](iot-basic-ingest.md)特征激活的规则是可选的。

**WHERE**  
（可选）添加用于确定是否执行规则指定的操作的条件逻辑。  
WHERE 子句支持[数据类型](iot-sql-data-types.md)[运算符](iot-sql-operators.md)、[函数](iot-sql-functions.md)、[文本](iot-sql-literals.md)、[Case 语句](iot-sql-case.md)、、[JSON 扩展](iot-sql-json.md)、、[变量](iot-sql-set.md#iot-sql-set-usage)和[嵌套对象查询](iot-sql-nested-queries.md)。

SQL 语句的示例如下所示：

```
SELECT color AS rgb FROM 'topic/subtopic' WHERE temperature > 50
```

MQTT 消息（也称为传入有效载荷）的示例如下所示：

```
{
    "color":"red",
    "temperature":100
}
```

如果此消息在 `'topic/subtopic'` 主题上发布，则触发规则并评估 SQL 语句。如果 `color` 属性大于 50，SQL 语句将提取 `"temperature"` 属性的值。WHERE 子句指定条件 `temperature > 50`。`AS` 关键字将 `"color"` 属性重命名为 `"rgb"`。结果（也称为*传出有效载荷*）如下所示：

```
{
    "rgb":"red"
}
```

此数据随后将转发至规则的操作，在其中发送数据供后续处理。有关规则操作的更多信息，请参阅 [AWS IoT 规则动作](iot-rule-actions.md)。

**注意**  
 AWS IoT SQL 语法目前不支持注释。  
包含空格的属性名称不能用作 SQL 语句中的字段名称。虽然传入有效载荷可以在属性名称中包含空格，但这些名称不能在 SQL 语句中使用。但是，如果您使用通配符 (\*) 字段名称规范，它们将传递到传出有效载荷。