你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 数字孪生查询语言参考:SELECT 子句

本文档包含有关 Azure 数字孪生查询语言 SELECT 子句的参考信息。

SELECT 子句是查询的第一个部分。 它指定查询将返回的列的列表。

所有查询都需要此子句。

SELECT *

在 select 语句中使用 * 字符按原样投影数字孪生体文档,而无需将其分配给结果集中的属性。

注意

仅当查询不使用 JOIN 时,SELECT * 才是有效语法。 有关使用 JOIN 的查询的详细信息,请参阅 Azure 数字孪生查询语言参考:JOIN 子句

语法

SELECT *
--FROM ...

返回

从查询返回的属性集。

示例

下面的查询将返回实例中的所有数字孪生体。

SELECT *
FROM DIGITALTWINS

包含投影的 SELECT 列

可使用 SELECT 子句中的投影来选择查询将返回的列。 可指定孪生和关系的命名集合,或孪生和关系的属性。

基元属性和复杂属性现在都支持投影。

语法

投影集合:

SELECT <twin-or-relationship-collection>

投影属性:

SELECT <twin-or-relationship-collection>.<property-name>

返回

投影中指定的孪生体、属性或关系的集合。

如果对于特定的数据行,投影中包含的属性不存在,则结果集中同样也不存在该属性。 有关此行为的示例,请参阅投影属性示例:数据行不存在该属性

示例

示例方案

对于以下示例,请考虑包含以下数据元素的孪生图:

  • 名为 FactoryA 的工厂孪生体
    • 包含一个名为 name 的属性,其值为 FactoryA
  • 名为 Contoso 的使用者孪生体
    • 包含一个名为 name 的属性,其值为 Contoso
  • 从 FactoryA 到 Contoso 的 consumerRelationship 关系,称为 FactoryA-consumerRelationship-Contoso
    • 包含一个名为 managedBy 的属性,其值为 Jeff

以下是说明此情况的关系图:

显示上述示例图的关系图。

投影集合示例

以下是一个示例查询,该查询投影该图的一个集合。 下面的查询将返回实例中的所有数字孪生体,方法是将整个孪生体集合命名为 T,并将 T 投影为要返回的集合。

SELECT T
FROM DIGITALTWINS T

以下是此查询返回的 JSON 有效负载:

{
  "value": [
    {
      "result": [
        {
          "T": {
            "$dtId": "FactoryA",
            "$etag": "W/\"d22267a0-fd4f-4f6b-916d-4946a30453c9\"",
            "$metadata": {
              "$model": "dtmi:contosocom:DigitalTwins:Factory;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:15:54.4977151Z"
              }
            },
            "name": "FactoryA"
          }
        },
        {
          "T": {
            "$dtId": "Contoso",
            "$etag": "W/\"a96dc85e-56ae-4061-866b-058a149e03d8\"",
            "$metadata": {
              "$model": "dtmi:com:contoso:Consumer;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:16:30.2154166Z"
              }
            },
            "name": "Contoso"
          }
        }
      ]
    }
  ],
  "continuationToken": "null"
}

使用 JOIN 的投影示例

投影通常用于返回在 JOIN 中指定的集合。 以下查询使用投影来返回使用者、工厂和关系数据。 有关此示例中使用的 JOIN 语法的详细信息,请参阅 Azure 数字孪生查询语言参考:JOIN 子句

SELECT Consumer, Factory, Relationship
FROM DIGITALTWINS Factory
JOIN Consumer RELATED Factory.consumerRelationship Relationship
WHERE Factory.$dtId = 'FactoryA'

以下是此查询返回的 JSON 有效负载:

{
  "value": [
    {
      "result": [
        {
          "Consumer": {
            "$dtId": "Contoso",
            "$etag": "W/\"a96dc85e-56ae-4061-866b-058a149e03d8\"",
            "$metadata": {
              "$model": "dtmi:com:contoso:Consumer;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:16:30.2154166Z"
              }
            },
            "name": "Contoso"
          },
          "Factory": {
            "$dtId": "FactoryA",
            "$etag": "W/\"d22267a0-fd4f-4f6b-916d-4946a30453c9\"",
            "$metadata": {
              "$model": "dtmi:contosocom:DigitalTwins:Factory;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:15:54.4977151Z"
              }
            },
            "name": "FactoryA"
          },
          "Relationship": {
            "$etag": "W/\"f01e07c1-19e4-4bbe-a12d-f5761e86d3e8\"",
            "$relationshipId": "FactoryA-consumerRelationship-Contoso",
            "$relationshipName": "consumerRelationship",
            "$sourceId": "FactoryA",
            "$targetId": "Contoso",
            "managedBy": "Jeff"
          }
        }
      ]
    }
  ],
  "continuationToken": "null"
}

投影属性示例

以下是投影属性的示例。 下面的查询使用投影来返回使用者孪生体的 name 属性和关系的 managedBy 属性。

SELECT Consumer.name, Relationship.managedBy
FROM DIGITALTWINS Factory
JOIN Consumer RELATED Factory.consumerRelationship Relationship
WHERE Factory.$dtId = 'FactoryA'

以下是此查询返回的 JSON 有效负载:

{
  "value": [
    {
      "result": [
        {
          "managedBy": "Jeff",
          "name": "Contoso"
        }
      ]
    }
  ],
  "continuationToken": "null"
}

投影属性示例:数据行不存在属性

如果对于特定的数据行,投影中包含的属性不存在,则结果集中同样也不存在该属性。

对于本示例,请考虑一组表示用户的孪生体。 有些孪生体有与之关联的期限,而其他孪生体则没有。

以下是投影 nameage 属性的查询:

SELECT name, age 
FROM DIGITALTWINS

结果可能如下所示,其中某些孪生体缺少 age 属性,因为这些孪生体不具有此属性。

{
  "value": [
    {
      "result": [
        {
          "name": "John",
          "age": 27
        },
        {
          "name": "Keanu"
        }
      ]
    }
  ],
  "continuationToken": "null"
}

SELECT COUNT

使用此方法对结果集中的项数进行计数并返回该数字。

语法

SELECT COUNT()

参数

无。

返回

一个 int 值。

示例

下面的查询返回实例中所有数字孪生体的计数。

SELECT COUNT()
FROM DIGITALTWINS

下面的查询返回实例中所有关系的计数。

SELECT COUNT()
FROM RELATIONSHIPS

SELECT TOP

使用此方法仅返回满足查询要求的前面几项。

语法

SELECT TOP(<number-of-return-items>)

参数

一个 int 值,指定要选择的前面几项。

返回

孪生体的集合。

示例

下面的查询仅返回实例中的前五个数字孪生体。

SELECT TOP(5)
FROM DIGITALTWINS