

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

# 在中查询资产属性通知 Amazon IoT SiteWise
查询通知

要查询资产属性通知，请创建由 SQL 语句组成的 Amazon IoT Core 规则。

Amazon IoT SiteWise 以下列格式将资产属性数据更新发布到 Amazon IoT Core。

```
{
  "type": "PropertyValueUpdate",
  "payload": {
    "assetId": "String",
    "propertyId": "String",
    "values": [
      {
        "timestamp": {
          "timeInSeconds": Number,
          "offsetInNanos": Number
        },
        "quality": "String",
        "value": {
          "booleanValue": Boolean,
          "doubleValue": Number,
          "integerValue": Number,
          "stringValue": "String",
          "nullValue": {
            "valueType": "String
            }           
        }
      }
    ]
  }
}
```

`values`列表中的每个结构都是一个 timestamp-quality-value (TQV) 结构。
+ `timestamp` 包含当前的 Unix 纪元时间（以秒为单位），偏移量为纳秒。
+ `quality` 包含以下字符串之一，用于指示数据点的质量：
  + `GOOD` – 数据不受任何问题的影响。
  + `BAD` – 数据受传感器故障等问题的影响。
  + `UNCERTAIN` – 数据受传感器不准确等问题的影响。
+ `value` 包含下列字段之一，具体取决于属性的类型：
  + `booleanValue`
  + `doubleValue`
  + `integerValue`
  + `stringValue`
  + `nullValue`

`nullValue`— 一种结构，其中包含以下字段，表示属性值的类型，值为 Null，质量为`BAD`或`UNCERTAIN`。
+ `valueType`— \$1“B”、“D”、“S”、“I”\$1 的枚举

要解析 `values` 数组中的值，您需要在规则的 SQL 语句中使用复杂的嵌套对象查询。有关更多信息，请参阅 *Amazon IoT 开发人员指南*中的[嵌套对象查询](https://docs.amazonaws.cn/iot/latest/developerguide/iot-sql-nested-queries.html)，或参阅 [将属性值更新发布到 Amazon DynamoDB](publish-to-amazon-dynamodb.md) 教程，了解解析资产属性通知消息的具体示例。

**Example 提取值数组的示例查询**  
以下语句演示如何针对具有特定 double 类型属性的所有资产查询该属性的已更新属性值的数组。  

```
SELECT
  (SELECT VALUE (value.doubleValue) FROM payload.values) AS windspeed
FROM
  '$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE' 
WHERE
  type = 'PropertyValueUpdate'
```
上一个规则查询语句采用以下格式输出数据。  

```
{
  "windspeed": [
    26.32020195042838,
    26.282584572975477,
    26.352566977372508,
    26.283084346171442,
    26.571883739599322,
    26.60684140743005,
    26.628738636715045,
    26.273486932802125,
    26.436379105473964,
    26.600590095377303
  ]
}
```

**Example 提取单个值的示例查询**  
以下语句演示如何针对具有特定 double 类型属性的所有资产查询该属性的属性值数组中的第一个值。  

```
SELECT
  get((SELECT VALUE (value.doubleValue) FROM payload.values), 0) AS windspeed
FROM
  '$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE' 
WHERE
  type = 'PropertyValueUpdate'
```

上一个规则查询语句采用以下格式输出数据。

```
{
  "windspeed": 26.32020195042838
}
```

**重要**  
该规则查询语句忽略每个批次中的第一个值更新以外的更新。每个批次最多可以包含 10 个值。如果需要包含其余值，您必须设置更复杂的解决方案，以将资产属性值输出到其他服务。例如，您可以设置一条规则，其 Amazon Lambda 操作是将数组中的每个值重新发布到另一个主题，然后设置另一个规则来查询该主题并将每个值发布到所需的规则操作。