デバイス ツイン、モジュール ツイン、ジョブ、メッセージ ルーティングの IoT Hub クエリ言語IoT Hub query language for device and module twins, jobs, and message routing

IoT Hub には SQL に似た強力な言語が備わっており、デバイス ツインモジュール ツインジョブ、およびメッセージ ルーティングに関する情報を取得できます。IoT Hub provides a powerful SQL-like language to retrieve information regarding device twins, module twins, jobs, and message routing. この記事で取り扱う内容は次のとおりです。This article presents:

  • IoT Hub のクエリ言語の主な機能の説明An introduction to the major features of the IoT Hub query language, and
  • 言語の詳しい説明The detailed description of the language. メッセージ ルーティングにおけるクエリ言語の詳細については、メッセージ ルーティングでのクエリに関するページを参照してください。For details on query language for message routing, see queries in message routing.

注意

この記事で言及されている一部の機能 (cloud-to-device メッセージング、デバイス ツイン、デバイス管理など) は、IoT Hub の Standard レベルだけで使用することができます。Some of the features mentioned in this article, like cloud-to-device messaging, device twins, and device management, are only available in the standard tier of IoT Hub. IoT Hub の Basic レベルおよび Standard レベルの詳細については、適切な IoT Hub レベルの選び方に関するページを参照してください。For more information about the basic and standard IoT Hub tiers, see How to choose the right IoT Hub tier.

デバイス ツインとモジュール ツインのクエリDevice and module twin queries

デバイス ツインモジュール ツインには、任意の JSON オブジェクトをタグおよびプロパティとして含めることができます。Device twins and module twins can contain arbitrary JSON objects as both tags and properties. IoT Hub では、すべてのツイン情報を含む 1 つの JSON ドキュメントとしてデバイス ツインとモジュール ツインにクエリを実行できます。IoT Hub enables you to query device twins and module twins as a single JSON document containing all twin information.

たとえば、IoT Hub のデバイス ツインに、次の構造があるとします (モジュール ツインも同様で、追加の moduleId があるだけです)。Assume, for instance, that your IoT hub device twins have the following structure (module twin would be similar just with an additional moduleId):

{
    "deviceId": "myDeviceId",
    "etag": "AAAAAAAAAAc=",
    "status": "enabled",
    "statusUpdateTime": "0001-01-01T00:00:00",
    "connectionState": "Disconnected",
    "lastActivityTime": "0001-01-01T00:00:00",
    "cloudToDeviceMessageCount": 0,
    "authenticationType": "sas",
    "x509Thumbprint": {
        "primaryThumbprint": null,
        "secondaryThumbprint": null
    },
    "version": 2,
    "tags": {
        "location": {
            "region": "US",
            "plant": "Redmond43"
        }
    },
    "properties": {
        "desired": {
            "telemetryConfig": {
                "configId": "db00ebf5-eeeb-42be-86a1-458cccb69e57",
                "sendFrequencyInSecs": 300
            },
            "$metadata": {
            ...
            },
            "$version": 4
        },
        "reported": {
            "connectivity": {
                "type": "cellular"
            },
            "telemetryConfig": {
                "configId": "db00ebf5-eeeb-42be-86a1-458cccb69e57",
                "sendFrequencyInSecs": 300,
                "status": "Success"
            },
            "$metadata": {
            ...
            },
            "$version": 7
        }
    }
}

デバイス ツイン クエリDevice twin queries

IoT Hub はデバイス ツインを devices という名前のドキュメント コレクションとして公開します。IoT Hub exposes the device twins as a document collection called devices. たとえば、次のクエリでは、デバイス ツインのセット全体が取得されます。For example, the following query retrieves the whole set of device twins:

SELECT * FROM devices

注意

Azure IoT SDK では、大量の結果をページングできます。Azure IoT SDKs support paging of large results.

IoT Hub は、任意の条件でフィルター処理してデバイス ツインを取得できます。IoT Hub allows you to retrieve device twins filtering with arbitrary conditions. たとえば、location.region タグが US に設定されているデバイス ツインを受け取るには、次のクエリを使います。For instance, to receive device twins where the location.region tag is set to US use the following query:

SELECT * FROM devices
WHERE tags.location.region = 'US'

ブール演算子と算術比較もサポートされています。Boolean operators and arithmetic comparisons are supported as well. たとえば、US に存在し、1 分以上の間隔でテレメトリを送信するように構成されているデバイス ツインを取得するには、次のクエリを使います。For example, to retrieve device twins located in the US and configured to send telemetry less than every minute, use the following query:

SELECT * FROM devices
  WHERE tags.location.region = 'US'
    AND properties.reported.telemetryConfig.sendFrequencyInSecs >= 60

必要に応じて、INNIN (含まれない) 演算子とともに配列定数も使用できます。As a convenience, it is also possible to use array constants with the IN and NIN (not in) operators. たとえば、WiFi または有線接続を報告するデバイス ツインを取得するには、次のクエリを使います。For instance, to retrieve device twins that report WiFi or wired connectivity use the following query:

SELECT * FROM devices
  WHERE properties.reported.connectivity IN ['wired', 'wifi']

特定のプロパティを含むすべてのデバイス ツインを識別する必要がある場合があります。It is often necessary to identify all device twins that contain a specific property. IoT Hub では、この目的で関数 is_defined() がサポートされています。IoT Hub supports the function is_defined() for this purpose. たとえば、connectivity プロパティが定義されているデバイス ツインを取得するには、次のクエリを使います。For instance, to retrieve device twins that define the connectivity property use the following query:

SELECT * FROM devices
  WHERE is_defined(properties.reported.connectivity)

フィルター処理機能の完全なリファレンスは、「WHERE 句」セクションをご覧ください。Refer to the WHERE clause section for the full reference of the filtering capabilities.

グループ化と集計もサポートされています。Grouping and aggregations are also supported. たとえば、各テレメトリ構成状態のデバイスの数を調べるには、次のクエリを使います。For instance, to find the count of devices in each telemetry configuration status, use the following query:

SELECT properties.reported.telemetryConfig.status AS status,
    COUNT() AS numberOfDevices
  FROM devices
  GROUP BY properties.reported.telemetryConfig.status

このグループ化クエリは、次の例のような結果を返します。This grouping query would return a result similar to the following example:

[
    {
        "numberOfDevices": 3,
        "status": "Success"
    },
    {
        "numberOfDevices": 2,
        "status": "Pending"
    },
    {
        "numberOfDevices": 1,
        "status": "Error"
    }
]

この例では、3 つのデバイスが正常な構成を報告し、2 つは構成を適用中であり、1 つがエラーを報告しています。In this example, three devices reported successful configuration, two are still applying the configuration, and one reported an error.

プロジェクション クエリを使用すると、開発者は必要なプロパティのみを返すことができます。Projection queries allow developers to return only the properties they care about. たとえば、すべての切断されているデバイスの最後のアクティビティ時間を取得するには、次のクエリを使用します。For example, to retrieve the last activity time of all disconnected devices use the following query:

SELECT LastActivityTime FROM devices WHERE status = 'enabled'

モジュール ツイン クエリModule twin queries

モジュール ツインに対するクエリはデバイス ツインに対するクエリと似ていますが、別のコレクションと名前空間を使用して、devices からではなく、device.modules からクエリを実行します。Querying on module twins is similar to querying on device twins, but using a different collection/namespace; instead of from devices, you query from devices.modules:

SELECT * FROM devices.modules

デバイスと devices.modules コレクション間の結合は許可されません。We don't allow join between the devices and devices.modules collections. デバイスを超えてモジュール ツインのクエリを実行する場合は、タグに基づいて行います。If you want to query module twins across devices, you do it based on tags. このクエリでは、スキャン中状態のすべてのデバイスのすべてのモジュール ツインが返されます。This query will return all module twins across all devices with the scanning status:

SELECT * FROM devices.modules WHERE properties.reported.status = 'scanning'

このクエリでは、スキャン中状態のすべてのモジュール ツインが返されますが、指定したデバイスのサブセット上のみです。This query will return all module twins with the scanning status, but only on the specified subset of devices:

SELECT * FROM devices.modules
  WHERE properties.reported.status = 'scanning'
  AND deviceId IN ['device1', 'device2']

C# の例C# example

クエリ機能は RegistryManager クラスの C# サービス SDK で公開されます。The query functionality is exposed by the C# service SDK in the RegistryManager class.

簡単なクエリの使用例を次に示します。Here is an example of a simple query:

var query = registryManager.CreateQuery("SELECT * FROM devices", 100);
while (query.HasMoreResults)
{
    var page = await query.GetNextAsTwinAsync();
    foreach (var twin in page)
    {
        // do work on twin object
    }
}

query オブジェクトは、ページ サイズ (最大 100) を使用してインスタンス化されます。The query object is instantiated with a page size (up to 100). GetNextAsTwinAsync メソッドを複数回呼び出すと、複数のページが取得されます。Then multiple pages are retrieved by calling the GetNextAsTwinAsync methods multiple times.

query オブジェクトは、クエリに必要な逆シリアル化オプションに応じて、複数の Next 値を公開します。The query object exposes multiple Next values, depending on the deserialization option required by the query. たとえば、デバイス ツインまたはジョブ オブジェクト、プロジェクションを使用する場合のプレーンな JSON などです。For example, device twin or job objects, or plain JSON when using projections.

Node.js の使用例Node.js example

クエリ機能は Registry オブジェクトの Azure IoT service SDK for Node.js で公開されます。The query functionality is exposed by the Azure IoT service SDK for Node.js in the Registry object.

簡単なクエリの使用例を次に示します。Here is an example of a simple query:

var query = registry.createQuery('SELECT * FROM devices', 100);
var onResults = function(err, results) {
    if (err) {
        console.error('Failed to fetch the results: ' + err.message);
    } else {
        // Do something with the results
        results.forEach(function(twin) {
            console.log(twin.deviceId);
        });

        if (query.hasMoreResults) {
            query.nextAsTwin(onResults);
        }
    }
};
query.nextAsTwin(onResults);

query オブジェクトは、ページ サイズ (最大 100) を使用してインスタンス化されます。The query object is instantiated with a page size (up to 100). nextAsTwin メソッドを複数回呼び出すと、複数のページが取得されます。Then multiple pages are retrieved by calling the nextAsTwin method multiple times.

query オブジェクトは、クエリに必要な逆シリアル化オプションに応じて、複数の Next 値を公開します。The query object exposes multiple Next values, depending on the deserialization option required by the query. たとえば、デバイス ツインまたはジョブ オブジェクト、プロジェクションを使用する場合のプレーンな JSON などです。For example, device twin or job objects, or plain JSON when using projections.

制限事項Limitations

重要

クエリの結果には、デバイス ツインの最新の値に関連し、数分の遅れが生じることがあります。Query results can have a few minutes of delay with respect to the latest values in device twins. ID を使用して個々のデバイス ツインのクエリを実行する場合は、get twin REST API を使用します。If querying individual device twins by ID, use the get twin REST API. この API からは常に最新の値が返されます。また、調整の上限は高くなっています。This API always returns the latest values and has higher throttling limits. REST API を直接発行するか、Azure IoT Hub Service SDK のいずれかで同等の機能を使用できます。You can issue the REST API directly or use the equivalent functionality in one of the Azure IoT Hub Service SDKs.

現時点では、比較はプリミティブ型間 (オブジェクトなし) でのみサポートされます。たとえば、... WHERE properties.desired.config = properties.reported.config は、これらのプロパティがプリミティブ値を持つ場合にのみサポートされます。Currently, comparisons are supported only between primitive types (no objects), for instance ... WHERE properties.desired.config = properties.reported.config is supported only if those properties have primitive values.

ジョブのクエリの概要Get started with jobs queries

ジョブでは、一連のデバイスで操作を実行する方法が提供されます。Jobs provide a way to execute operations on sets of devices. 各デバイス ツインにはジョブに関する情報が含まれます。これは、jobs.という名前のコレクションの一部です。Each device twin contains the information of the jobs of which it is part in a collection called jobs.

{
    "deviceId": "myDeviceId",
    "etag": "AAAAAAAAAAc=",
    "tags": {
        ...
    },
    "properties": {
        ...
    },
    "jobs": [
        {
            "deviceId": "myDeviceId",
            "jobId": "myJobId",
            "jobType": "scheduleTwinUpdate",
            "status": "completed",
            "startTimeUtc": "2016-09-29T18:18:52.7418462",
            "endTimeUtc": "2016-09-29T18:20:52.7418462",
            "createdDateTimeUtc": "2016-09-29T18:18:56.7787107Z",
            "lastUpdatedDateTimeUtc": "2016-09-29T18:18:56.8894408Z",
            "outcome": {
                "deviceMethodResponse": null
            }
        },
        ...
    ]
}

現在のところ、このコレクションには IoT Hub のクエリ言語の devices.jobs でクエリを実行できます。Currently, this collection is queryable as devices.jobs in the IoT Hub query language.

重要

現時点では、デバイス ツインにクエリを実行した場合、ジョブのプロパティは返されません。Currently, the jobs property is never returned when querying device twins. つまり、クエリに 'FROM devices' が含まれる場合です。That is, queries that contain 'FROM devices'. ジョブのプロパティに直接アクセスするには、FROM devices.jobs を使用してクエリを実行する必要があります。The jobs property can only be accessed directly with queries using FROM devices.jobs.

たとえば、1 つのデバイスに影響を与えるすべてのジョブ (過去のジョブおよびスケジュールが設定されたジョブ) を取得するには、次のクエリを使用することができます。For instance, to get all jobs (past and scheduled) that affect a single device, you can use the following query:

SELECT * FROM devices.jobs
  WHERE devices.jobs.deviceId = 'myDeviceId'

このクエリによって、返されたそれぞれのジョブのデバイス固有の状態 (および、ダイレクト メソッドの応答) がどのように適用されるのかをご確認ください。Note how this query provides the device-specific status (and possibly the direct method response) of each job returned.

さらに、devices.jobs コレクションのオブジェクトのすべてのプロパティに対して任意のブール条件でフィルター処理をすることもできます。It is also possible to filter with arbitrary Boolean conditions on all object properties in the devices.jobs collection.

たとえば、特定のデバイスに対して 2016 年 9 月以降に作成されて完了したデバイス ツイン更新ジョブをすべて取得するには、次のクエリを使います。For instance, to retrieve all completed device twin update jobs that were created after September 2016 for a specific device, use the following query:

SELECT * FROM devices.jobs
  WHERE devices.jobs.deviceId = 'myDeviceId'
    AND devices.jobs.jobType = 'scheduleTwinUpdate'
    AND devices.jobs.status = 'completed'
    AND devices.jobs.createdTimeUtc > '2016-09-01'

また、1 つのジョブによるデバイスごとの結果を取得することもできます。You can also retrieve the per-device outcomes of a single job.

SELECT * FROM devices.jobs
  WHERE devices.jobs.jobId = 'myJobId'

制限事項Limitations

現在のところ、devices.jobs に対するクエリはサポートされていません。Currently, queries on devices.jobs do not support:

  • プロジェクション。SELECT * のみ実行可能Projections, therefore only SELECT * is possible.
  • 条件。ジョブのプロパティ以外にデバイス ツインを参照するもの (上述のセクションを参照)Conditions that refer to the device twin in addition to job properties (see the preceding section).
  • 集計の実行。カウント、平均、グループ化などPerforming aggregations, such as count, avg, group by.

IoT Hub クエリの基礎Basics of an IoT Hub query

IoT Hub のすべてのクエリは、SELECT 句と FROM 句、およびオプションの WHERE 句と GROUP BY で構成されます。Every IoT Hub query consists of SELECT and FROM clauses, with optional WHERE and GROUP BY clauses. 各クエリは JSON ドキュメントのコレクション (デバイス ツインなど) で実行されます。Every query is run on a collection of JSON documents, for example device twins. FROM 句は、反復対象のドキュメント コレクション (devicesdevices.modules、または devices.jobs) を示します。The FROM clause indicates the document collection to be iterated on (devices, devices.modules, or devices.jobs). 次に、WHERE 句でフィルター処理が適用されます。Then, the filter in the WHERE clause is applied. 集計により、この手順の結果は GROUP BY 句の指定に従ってグループ化されます。With aggregations, the results of this step are grouped as specified in the GROUP BY clause. グループごとに、SELECT 句で指定された行が生成されます。For each group, a row is generated as specified in the SELECT clause.

SELECT <select_list>
  FROM <from_specification>
  [WHERE <filter_condition>]
  [GROUP BY <group_specification>]

FROM 句FROM clause

FROM <from_specification> 句では、3 つの値だけが想定されています。デバイス ツインに対するクエリのための FROM devices、モジュール ツインに対するクエリのための FROM devices.modules、またはジョブのデバイスごとの詳細に対するクエリのための FROM devices.jobs です。The FROM <from_specification> clause can assume only three values: FROM devices to query device twins, FROM devices.modules to query module twins, or FROM devices.jobs to query job per-device details.

WHERE 句WHERE clause

WHERE <filter_condition> 句はオプションです。The WHERE <filter_condition> clause is optional. WHERE 句は、FROM コレクションの JSON ドキュメントを結果に含めるために満たす必要がある条件を指定します。It specifies one or more conditions that the JSON documents in the FROM collection must satisfy to be included as part of the result. 結果に含めるためには、指定された条件についてすべての JSON ドキュメントが "true" と評価される必要があります。Any JSON document must evaluate the specified conditions to "true" to be included in the result.

使用できる条件は、「式と条件」セクションに記載されています。The allowed conditions are described in section Expressions and conditions.

SELECT 句SELECT clause

SELECT <select_list> は必須であり、クエリで取得する値の種類を指定します。The SELECT <select_list> is mandatory and specifies what values are retrieved from the query. これは、新しい JSON オブジェクトを生成するために使用する JSON 値を指定します。It specifies the JSON values to be used to generate new JSON objects. FROM コレクションのフィルター処理されたサブセット (さらにオプションでグループ化されたもの) の各要素に対して、プロジェクション フェーズでは新しい JSON オブジェクトが生成されます。For each element of the filtered (and optionally grouped) subset of the FROM collection, the projection phase generates a new JSON object. このオブジェクトは、SELECT 句で指定した値で構築されます。This object is constructed with the values specified in the SELECT clause.

SELECT 句の文法を次に示します。Following is the grammar of the SELECT clause:

SELECT [TOP <max number>] <projection list>

<projection_list> ::=
    '*'
    | <projection_element> AS alias [, <projection_element> AS alias]+

<projection_element> :==
    attribute_name
    | <projection_element> '.' attribute_name
    | <aggregate>

<aggregate> :==
    count()
    | avg(<projection_element>)
    | sum(<projection_element>)
    | min(<projection_element>)
    | max(<projection_element>)

attribute_name は、FROM コレクションの JSON ドキュメントのプロパティを参照します。Attribute_name refers to any property of the JSON document in the FROM collection. SELECT 句の例は、デバイス ツインのクエリの概要に関するセクションに記載されています。Some examples of SELECT clauses can be found in the Getting started with device twin queries section.

現在のところ、SELECT * 以外の選択句は、デバイス ツインの集計クエリでのみサポートされています。Currently, selection clauses different than SELECT* are only supported in aggregate queries on device twins.

GROUP BY 句GROUP BY clause

GROUP BY <group_specification> 句はオプションの手順であり、WHERE 句で指定したフィルターの後か、SELECT で指定したプロジェクションの前に実行します。The GROUP BY <group_specification> clause is an optional step that executes after the filter specified in the WHERE clause, and before the projection specified in the SELECT. 属性の値に基づいてドキュメントをグループ化します。It groups documents based on the value of an attribute. これらのグループを使用すると、SELECT 句で指定した方法で、集計された値が生成されます。These groups are used to generate aggregated values as specified in the SELECT clause.

次は GROUP BY を使用したクエリの例です。An example of a query using GROUP BY is:

SELECT properties.reported.telemetryConfig.status AS status,
    COUNT() AS numberOfDevices
FROM devices
GROUP BY properties.reported.telemetryConfig.status

GROUP BY の正式な構文は次のとおりです。The formal syntax for GROUP BY is:

GROUP BY <group_by_element>
<group_by_element> :==
    attribute_name
    | < group_by_element > '.' attribute_name

attribute_name は、FROM コレクションの JSON ドキュメントのプロパティを参照します。Attribute_name refers to any property of the JSON document in the FROM collection.

現在のところ、GROUP BY 句はデバイス ツインに対するクエリの場合にのみサポートされています。Currently, the GROUP BY clause is only supported when querying device twins.

重要

group という単語は、現在、クエリで特殊なキーワードとして扱われています。The term group is currently treated as a special keyword in queries. プロパティ名として group を使用する場合は、エラーを回避するために二重の角かっこで囲んでください (例: SELECT * FROM devices WHERE tags.[[group]].name = 'some_value')。In case, you use group as your property name, consider surrounding it with double brackets to avoid errors, e.g., SELECT * FROM devices WHERE tags.[[group]].name = 'some_value'.

式と条件Expressions and conditions

とはおおまかに次のように言い表すことができます。At a high level, an expression:

  • JSON 型 (ブール値、数値、文字列、配列、オブジェクトなど) のインスタンスに対して評価を行うEvaluates to an instance of a JSON type (such as Boolean, number, string, array, or object).
  • 組み込みの演算子と関数を使用するデバイス JSON ドキュメントと定数からくるデータの操作として定義されるIs defined by manipulating data coming from the device JSON document and constants using built-in operators and functions.

条件はブール値に対して評価する式のことです。Conditions are expressions that evaluate to a Boolean. ブール値の true 以外の定数は、false と見なされます。Any constant different than Boolean true is considered as false. このルールには、null未定義、任意のオブジェクトまたは配列インスタンス、任意の文字列、およびブール値の false が含まれます。This rule includes null, undefined, any object or array instance, any string, and the Boolean false.

式の構文は次のとおりです。The syntax for expressions is:

<expression> ::=
    <constant> |
    attribute_name |
    <function_call> |
    <expression> binary_operator <expression> |
    <create_array_expression> |
    '(' <expression> ')'

<function_call> ::=
    <function_name> '(' expression ')'

<constant> ::=
    <undefined_constant>
    | <null_constant>
    | <number_constant>
    | <string_constant>
    | <array_constant>

<undefined_constant> ::= undefined
<null_constant> ::= null
<number_constant> ::= decimal_literal | hexadecimal_literal
<string_constant> ::= string_literal
<array_constant> ::= '[' <constant> [, <constant>]+ ']'

式の構文で使われている各シンボルの意味については、次の表をご覧ください。To understand what each symbol in the expressions syntax stands for, refer to the following table:

SymbolSymbol 定義Definition
attribute_nameattribute_name FROM コレクションの JSON ドキュメントのプロパティ。Any property of the JSON document in the FROM collection.
binary_operatorbinary_operator 演算子」セクションに記載されている 2 項演算子。Any binary operator listed in the Operators section.
function_namefunction_name 関数」セクションに記載されている関数。Any function listed in the Functions section.
decimal_literaldecimal_literal 10 進表記で表される浮動小数点数。A float expressed in decimal notation.
hexadecimal_literalhexadecimal_literal 文字列 '0x' の後に 16 進数の文字列を続けて表された数値。A number expressed by the string '0x' followed by a string of hexadecimal digits.
string_literalstring_literal 文字列リテラルは、0 個以上の Unicode 文字のシーケンスまたはエスケープ シーケンスによって表される Unicode 文字列です。String literals are Unicode strings represented by a sequence of zero or more Unicode characters or escape sequences. 文字列リテラルは、単一引用符または二重引用符で囲みます。String literals are enclosed in single quotes or double quotes. 使用できるエスケープ: 4 つの 16 進数字によって定義された Unicode 文字の \'\"\\\uXXXXAllowed escapes: \', \", \\, \uXXXX for Unicode characters defined by 4 hexadecimal digits.

オペレーターOperators

次の演算子がサポートされています。The following operators are supported:

ファミリFamily オペレーターOperators
算術Arithmetic +, -, *, /, %+, -, *, /, %
論理Logical AND、OR、NOTAND, OR, NOT
比較Comparison =、!=、<、>、<=、>=、<>=, !=, <, >, <=, >=, <>

関数Functions

ツインとジョブのクエリにおいて、サポートされている唯一の関数は次のとおりです。When querying twins and jobs the only supported function is:

機能Function 説明Description
IS_DEFINED(property)IS_DEFINED(property) プロパティに値が代入されているかどうかを示すブール値を返します (null を含む)。Returns a Boolean indicating if the property has been assigned a value (including null).

ルートの条件では、次の計算関数がサポートされています。In routes conditions, the following math functions are supported:

機能Function 説明Description
ABS(x)ABS(x) 指定された数値式の絶対値 (正の値) を返します。Returns the absolute (positive) value of the specified numeric expression.
EXP(x)EXP(x) 指定された数値式の指数値を返します (e^x)。Returns the exponential value of the specified numeric expression (e^x).
POWER(x,y)POWER(x,y) 指定されたべき乗の指定された式の値を返します (x^y)。Returns the value of the specified expression to the specified power (x^y).
SQUARE(x)SQUARE(x) 指定された数値の 2 乗を返します。Returns the square of the specified numeric value.
CEILING(x)CEILING(x) 指定された数値式以上の最小の整数値を返します。Returns the smallest integer value greater than, or equal to, the specified numeric expression.
FLOOR(x)FLOOR(x) 指定された数値式以下の最大の整数を返します。Returns the largest integer less than or equal to the specified numeric expression.
SIGN(x)SIGN(x) 指定された数値式の正 (+1)、ゼロ (0)、または負 (-1) の符号を返します。Returns the positive (+1), zero (0), or negative (-1) sign of the specified numeric expression.
SQRT(x)SQRT(x) 指定された数値の平方根を返します。Returns the square root of the specified numeric value.

ルートの条件では、次の型の確認とキャスト関数がサポートされています。In routes conditions, the following type checking and casting functions are supported:

機能Function 説明Description
AS_NUMBERAS_NUMBER 入力文字列を数値に変換します。Converts the input string to a number. 入力が数値の場合は noop、文字列が数値を表していない場合は Undefined です。noop if input is a number; Undefined if string does not represent a number.
IS_ARRAYIS_ARRAY 指定した式の型が配列であるかどうかを示すブール値を返します。Returns a Boolean value indicating if the type of the specified expression is an array.
IS_BOOLIS_BOOL 指定した式の型がブール値であるかどうかを示すブール値を返します。Returns a Boolean value indicating if the type of the specified expression is a Boolean.
IS_DEFINEDIS_DEFINED プロパティに値が代入されているかどうかを示すブール値を返します。Returns a Boolean indicating if the property has been assigned a value. これは、値がプリミティブ型である場合にのみサポートされます。This is supported only when the value is a primitive type. プリミティブ型には、文字列、ブール値、数値、または null が含まれます。Primitive types include string, Boolean, numeric, or null. DateTime、オブジェクト型、配列はサポートされていません。DateTime, object types and arrays are not supported.
IS_NULLIS_NULL 指定した式の型が null であるかどうかを示すブール値を返します。Returns a Boolean value indicating if the type of the specified expression is null.
IS_NUMBERIS_NUMBER 指定した式の型が数値であるかどうかを示すブール値を返します。Returns a Boolean value indicating if the type of the specified expression is a number.
IS_OBJECTIS_OBJECT 指定した式の型が JSON オブジェクトであるかどうかを示すブール値を返します。Returns a Boolean value indicating if the type of the specified expression is a JSON object.
IS_PRIMITIVEIS_PRIMITIVE 指定した式の型がプリミティブ (文字列、ブール値、数値、または null) であるかどうかを示すブール値を返します。Returns a Boolean value indicating if the type of the specified expression is a primitive (string, Boolean, numeric, or null).
IS_STRINGIS_STRING 指定した式の型が文字列であるかどうかを示すブール値を返します。Returns a Boolean value indicating if the type of the specified expression is a string.

ルートの条件では、次の文字列関数がサポートされています。In routes conditions, the following string functions are supported:

機能Function 説明Description
CONCAT(x, y, …)CONCAT(x, y, …) 2 つ以上の文字列値を連結した結果である文字列を返します。Returns a string that is the result of concatenating two or more string values.
LENGTH(x)LENGTH(x) 指定された文字列式の文字数を返します。Returns the number of characters of the specified string expression.
LOWER(x)LOWER(x) 文字列式の大文字データを小文字に変換して返します。Returns a string expression after converting uppercase character data to lowercase.
UPPER(x)UPPER(x) 文字列式の小文字データを大文字に変換して返します。Returns a string expression after converting lowercase character data to uppercase.
SUBSTRING(string, start [, length])SUBSTRING(string, start [, length]) 指定された文字のゼロベースの位置で始まる文字列式の一部を返し、指定された長さまたは文字列の末尾まで続きます。Returns part of a string expression starting at the specified character zero-based position and continues to the specified length, or to the end of the string.
INDEX_OF(string, fragment)INDEX_OF(string, fragment) 1 つ目に指定された文字列式内で 2 つ目の文字列式が最初に出現する箇所の開始位置を返します。文字列が見つからない場合は -1 を返します。Returns the starting position of the first occurrence of the second string expression within the first specified string expression, or -1 if the string is not found.
STARTS_WITH(x, y)STARTS_WITH(x, y) 1 つ目の文字列式が 2 つ目の文字列で始まっているかどうかを示すブール値を返します。Returns a Boolean indicating whether the first string expression starts with the second.
ENDS_WITH(x, y)ENDS_WITH(x, y) 1 つ目の文字列式が 2 つ目の文字列で終了しているかどうかを示すブール値を返します。Returns a Boolean indicating whether the first string expression ends with the second.
CONTAINS(x,y)CONTAINS(x,y) 1 つ目の文字列式に 2 つ目の文字列式が含まれているかどうかを示すブール値を返します。Returns a Boolean indicating whether the first string expression contains the second.

次のステップNext steps

Azure IoT SDK を使用して、アプリでクエリを実行する方法を説明します。Learn how to execute queries in your apps using Azure IoT SDKs.