1

我想获取以“测试”字开头的设备列表。或者类似的,获取 tags.email 以“test”开头的所有设备。我已经阅读了文档,但根据我的发现,它只支持完全匹配的查询,并且还支持少数运算符,如(>、<、!=、<> 等)。

谁能帮我这个?我想要一些查询,例如,

SELECT * from devices WHERE deviceId LIKE 'test%';

或者

SELECT * from devices WHERE STARTS_WITH(tags.email, 'test')

4

1 回答 1

3

文档中详细描述了用于在 IoT Hub 中查询设备的类似 SQL 语句集。IoT 中心当前不支持请求的查询,但是您可以通过一些选项来处理您的要求:

  1. 为每个设备添加tags属性,例如:

    "tags": { "environment": "test" }
    

    并根据tags.environment的值在 IoT Hub 端进行查询,例如:

    SELECT deviceId FROM devices  WHERE tags.environment IN ['test', 'dev']
    
    SELECT deviceId FROM devices  WHERE tags.environment NIN ['test']
    
  2. 此选项基于 IoT 中心的预查询​​设备,然后使用 LINQ 查询来获取查询的最终结果,例如根据您的情况:

     SELECT deviceId, tags FROM devices
    

您还可以使用 WHERE 语句在预查询步骤中最小化设备集。

获得此预查询结果后,您可以使用 LINQ 丰富的语句根据 deviceId 和/或 tags 属性选择设备。

使用选项 #2,可以使用以下示例:

SELECT deviceId, tags.email FROM devices WHERE is_defined(tags.email)

然后基于 LINQ,您可以在客户端完成查询。

于 2020-07-26T15:20:06.923 回答