

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# SQL 版本
<a name="iot-rule-sql-version"></a>

 AWS IoT 規則引擎使用類似 SQL 的語法，從 MQTT 訊息中選取資料。SQL 陳述式會以指定的 SQL 版本來解釋，版本由描述規則的 JSON 文件的 `awsIotSqlVersion` 屬性指定。如需更多關於 JSON 規則文件結構的資訊，請參閱[建立規則的相關文章](iot-create-rule.md)。`awsIotSqlVersion` 屬性可讓您指定要使用的 AWS IoT SQL 規則引擎版本。部署新版本時，可以繼續使用較早版本，或變更規則以使用新版本。目前的規則會繼續使用建立時使用的版本。

下列 JSON 範例顯示了如何使用 `awsIotSqlVersion` 屬性來指定 SQL 版本。

```
{
    "sql": "expression",
    "ruleDisabled": false,
    "awsIotSqlVersion": "2016-03-23",
    "actions": [{
        "republish": {
            "topic": "my-mqtt-topic",
            "roleArn": "arn:aws:iam::123456789012:role/my-iot-role"
        }
    }]
}
```

AWS IoT 目前支援下列 SQL 版本：
+ `2016-03-23`：建立於 2016 年 3 月 23 日的 SQL 版本（推薦）。
+ `2015-10-08`：建立於 2015 年 10 月 8 日的原始 SQL 版本。
+ `beta`：最新的 SQL 版本。此版本可能導致規則受到中段變更。

## 2016 年 3 月 23 日 SQL 規則引擎版本的新功能
<a name="sql-2016-03-23-beta"></a>
+ 修正巢狀 JSON 物件的選取問題。
+ 修正陣列查詢的問題。
+ 支援物件內部查詢。如需詳細資訊，請參閱[巢狀物件查詢](iot-sql-nested-queries.md)。
+ 支援將陣列輸出為最上層物件。
+ 除了 `encode(value, encodingScheme)` 函數外，它也可以應用於 JSON 和非 JSON 格式資料。如需詳細資訊，請參閱[編碼函數](iot-sql-functions.md#iot-sql-encode-payload)。

### 輸出一個 `Array` 作為最上層物件
<a name="return-array-rule"></a>

此功能可讓規則將陣列作為最上層物件傳回。舉例而言，若為以下的 MQTT 訊息：

```
{
    "a": {"b":"c"},
    "arr":[1,2,3,4]
}
```

此外以下規則：

```
SELECT VALUE arr FROM 'topic'
```

該規則會產生以下輸出。

```
[1,2,3,4]
```