IoT Hub는 디바이스 쌍, 모듈 쌍, 작업 및 메시지 라우팅과 관련된 정보를 검색할 수 있는 강력한 SQL 유형의 언어를 제공합니다. 이 문서에 제공되는 내용:
- IoT Hub 쿼리 언어의 주요 기능에 대한 소개입니다.
- 언어에 대한 자세한 설명입니다. 메시지 라우팅에 대한 쿼리 언어에 대한 자세한 내용은 IoT Hub 메시지 라우팅 쿼리 구문 참조하세요.
특정 예제는 IoT Hub 디바이스 및 모듈 쌍에 대한 쿼리 또는 IoT Hub 작업에 대한 쿼리 참조하세요.
참고
클라우드-디바이스 메시지, 디바이스 트윈스, 디바이스 관리 등 이 문서에 언급된 일부 기능은 IoT Hub의 표준 계층에서만 사용할 수 있습니다. 기본 및 표준/무료 IoT Hub 계층에 대한 자세한 내용은 솔루션에 적합한 IoT Hub 계층 및 크기 선택을 참조하세요.
IoT Hub 쿼리 실행
Azure Portal에서 직접 IoT 허브에 대해 쿼리를 실행할 수 있습니다.
- Azure Portal에 로그인하고 IoT Hub로 이동합니다.
- 탐색 메뉴의 디바이스 관리 섹션에서 쿼리를 선택합니다.
- 텍스트 상자에 쿼리를 입력하고 쿼리 실행을 선택합니다.
Azure IoT 서비스 SDK 및 서비스 API를 사용하여 애플리케이션 내에서 쿼리를 실행할 수도 있습니다.
IoT Hub 쿼리를 구현하는 코드 예는 서비스 SDK를 사용한 쿼리 예 섹션을 참조하세요.
SDK 참조 페이지 및 샘플에 대한 링크는 Azure IoT Hub SDK 참조하세요.
IoT Hub 쿼리의 기초
모든 IoT Hub 쿼리는 SELECT 및 FROM 절로 이루어지며 선택적으로 WHERE 및 GROUP BY 절이 포함됩니다.
쿼리는 디바이스 쌍과 같은 JSON 문서 컬렉션에서 실행됩니다. FROM 절은 반복이 수행될 문서 컬렉션을 나타냅니다(예: devices, devices.modules 또는 devices.jobs).
그런 다음 WHERE 절의 필터가 적용됩니다. 집계를 사용할 경우 이 단계의 결과는 GROUP BY 절에 지정된 대로 그룹화됩니다. 각 그룹에 대해 SELECT 절에 지정된 대로 행이 생성됩니다.
SELECT <select_list>
FROM <from_specification>
[WHERE <filter_condition>]
[GROUP BY <group_specification>]
SELECT 절
SELECT <select_list> 절은 모든 IoT Hub 쿼리에 필요합니다. 쿼리에서 반환되는 값을 지정합니다. 새 JSON 개체를 생성하는 데 사용될 JSON 값을 지정합니다.
FROM 컬렉션의 필터링된(그리고 선택적으로 그룹화된) 하위 집합의 각 요소에 대해 프로젝션 단계는 새 JSON 개체를 생성합니다. 이 개체는 SELECT 절에 지정된 값으로 구성됩니다.
예시:
모든 값 반환
SELECT *특정 속성 반환
SELECT DeviceID, LastActivityTime쿼리 결과를 집계하여 개수 반환
SELECT COUNT() as TotalNumber
현재 SELECT와 다른 선택 절은 디바이스 쌍의 집계 쿼리에서만 지원됩니다.
다음 구문은 SELECT 절의 문법입니다.
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 문서의 모든 속성을 참조합니다.
FROM 절
FROM <from_specification> 절은 모든 IoT Hub 쿼리에 필요합니다. 다음 세 값 중 하나여야 합니다.
- 디바이스 쌍을 쿼리하는 디바이스
- 모듈 쌍 쿼리를 위한 devices.modules
- devices.jobs - 디바이스별 작업 세부 정보 쿼리
예시:
디바이스 트윈 모두 검색
SELECT * FROM devices
WHERE 절
WHERE <filter_condition> 절은 선택 사항입니다. FROM 컬렉션의 JSON 문서가 결과의 일부로 포함되기 위해 충족해야 하는 하나 이상의 조건을 지정합니다. JSON 문서는 결과에 포함되도록 지정된 조건을 true 로 평가해야 합니다.
예시:
특정 디바이스를 대상으로 하는 모든 작업 검색
SELECT * FROM devices.jobs WHERE devices.jobs.deviceId = 'myDeviceId'
허용되는 조건은 식 및 조건 섹션에 설명되어 있습니다.
GROUP BY 절
GROUP BY <group_specification> 절은 선택 사항입니다. 이 절은 WHERE 절에 지정된 필터 뒤와 SELECT에 지정된 프로젝션 전에 실행됩니다. 특성의 값을 기반으로 문서를 그룹화합니다. 이러한 그룹은 SELECT 절에 지정된 대로 집계된 값을 생성하는 데 사용됩니다.
예시:
각 원격 분석 구성 상태를 보고하는 디바이스 수를 반환합니다.
SELECT properties.reported.telemetryConfig.status AS status, COUNT() AS numberOfDevices FROM devices GROUP BY properties.reported.telemetryConfig.status
현재 GROUP BY 절은 디바이스 쌍을 쿼리하는 경우에만 지원됩니다.
주의
용어 그룹은 현재 쿼리에서 특수 키워드로 처리됩니다. 속성 이름으로 사용하는 group 경우 다음 예제 SELECT * FROM devices WHERE tags.[[group]].name = 'some_value'와 같이 오류를 방지하기 위해 이중 대괄호로 묶는 것이 좋습니다.
GROUP BY에 대한 형식 구문:
GROUP BY <group_by_element>
<group_by_element> :==
attribute_name
| < group_by_element > '.' attribute_name
Attribute_name 는 FROM 컬렉션에 있는 JSON 문서의 모든 속성을 참조합니다.
쿼리 결과 페이지 매김
query 개체는 최대 페이지 크기를 레코드 100개보다 작거나 같게 하여 인스턴스화됩니다. 여러 페이지를 가져오려면 Node.js SDK에서 nextAsTwin를 호출하거나 .NET SDK 메서드에서 GetNextAsTwinAsync를 여러 번 호출합니다. query 개체는 쿼리에 필요한 역직렬화 옵션에 따라 여러 개의 Next 값을 노출합니다. 예를 들어 프로젝션을 사용할 때 query 개체는 디바이스 쌍 또는 작업 개체 또는 일반 JSON을 반환할 수 있습니다.
식 및 조건
높은 수준의 식은 다음과 같습니다.
- JSON 타입(예: 불리언, 숫자, 문자열, 배열 또는 객체)의 인스턴스로 평가됩니다.
- 기본 제공 연산자 및 함수를 사용하여 디바이스 JSON 문서와 상수의 데이터를 조작하여 정의됩니다.
조건은 부울 값으로 평가되는 식입니다. 부울 true와는 다른 상수는 false로 간주됩니다. 이 규칙에는 null, 정의되지 않음, 개체 또는 배열 인스턴스, 문자열 및 부울 false가 포함됩니다.
표현식의 구문은 다음과 같습니다:
<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>]+ ']'
식 구문의 각 기호가 나타내는 의미를 이해하려면 다음 테이블을 참조하세요.
| 기호 | 정의 |
|---|---|
| 속성_이름 | FROM 컬렉션에 있는 JSON 문서의 모든 속성입니다. |
| 이진 연산자 | 연산자 섹션에서 나열한 모든 이항 연산자입니다. |
| function_name | 함수 섹션에서 나열한 모든 함수입니다. |
| 십진수 리터럴 | 소수 표기법으로 표현되는 부동 소수점 값입니다. |
| 16진수 리터럴 | 뒤에 16진수 문자열이 붙는 '0x' 문자열로 표현되는 숫자입니다. |
| string_literal | 0개 이상의 유니코드 문자 시퀀스 또는 이스케이프 시퀀스로 표현되는 유니코드 문자열입니다. 문자열 리터럴은 작은 따옴표나 큰 따옴표로 묶습니다. 허용되는 이스케이프: \', \", \\, \uXXXX 4자리 16진수로 정의된 유니코드 문자용. |
연산자
다음과 같은 연산자가 지원됩니다.
| 패밀리 | 연산자 |
|---|---|
| 산술 | +, -, *, /, % |
| 논리적 | AND, OR, NOT |
| 비교 | =, !=, <, >, <=, >=, <> |
함수
트윈 및 작업 쿼리 시, 유일한 지원 함수는 다음과 같습니다.
| 함수 | 설명 |
|---|---|
| IS_DEFINED(속성) | 프로퍼티에 값(예: null 포함)이 할당되었는지를 나타내는 Boolean 값을 반환합니다. |
경로 조건에서 지원되는 수학 함수는 다음과 같습니다.
| 함수 | 설명 |
|---|---|
| ABS(x) | 지정한 숫자 식의 절대(양수) 값을 반환합니다. |
| EXP(x) | 지정한 숫자 식(e^x)의 지수 값을 반환합니다. |
| POWER(x,y) | 지정된 식의 값을 지정된 배율로 반환합니다(x^y). |
| SQUARE(x) | 지정한 숫자 값의 제곱을 반환합니다. |
| CEILING(x) | 지정한 숫자 식보다 크거나 같은 가장 작은 정수 값을 반환합니다. |
| FLOOR(x) | 지정된 숫자 식보다 작거나 같은 최대 정수를 반환합니다. |
| SIGN(x) | 지정한 숫자 식의 양수(+1), 0(0) 또는 음수(-1) 부호를 반환합니다. |
| SQRT(x) | 지정된 숫자 값의 제곱근을 반환합니다. |
경로 조건에서 지원되는 형식 검사 및 캐스팅 함수는 다음과 같습니다.
| 함수 | 설명 |
|---|---|
| AS_NUMBER | 입력 문자열을 숫자로 변환합니다.
noop 입력이 숫자인 경우; 문자열이 숫자를 나타내지 않는 경우 Undefined. |
| IS_ARRAY | 지정한 식의 형식이 배열인지 여부를 나타내는 부울 값을 반환합니다. |
| IS_BOOL | 지정한 식의 형식이 부울인지 여부를 나타내는 부울 값을 반환합니다. |
| IS_DEFINED | 속성이 값인지 아닌지를 나타내는 Boolean 값을 반환합니다. 이 함수는 값이 기본 형식인 경우에만 지원됩니다. 기본 형식에는 문자열, 부울, 숫자 또는 null이 포함됩니다. DateTime, 개체 형식 및 배열은 지원되지 않습니다. |
| IS_NULL | 지정한 식의 유형이 널인지를 나타내는 Boolean 값을 반환합니다. |
| IS_NUMBER (숫자인지 확인) | 지정한 식의 형식이 숫자인지 여부를 나타내는 부울 값을 반환합니다. |
| IS_OBJECT | 지정한 식의 형식이 JSON 개체인지 여부를 나타내는 부울 값을 반환합니다. |
| IS_PRIMITIVE | 지정한 식의 형식이 기본 형식(문자열, 부울, 숫자 또는 null)인지 여부를 나타내는 부울 값을 반환합니다. |
| IS_STRING | 지정한 식의 형식이 문자열인지 여부를 나타내는 부울 값을 반환합니다. |
경로 조건에서 지원되는 문자열 함수는 다음과 같습니다.
| 함수 | 설명 |
|---|---|
| CONCAT(x, y, ...) | 둘 이상의 문자열 값을 연결한 결과인 문자열을 반환합니다. |
| LENGTH(x) | 지정한 문자열 식의 문자 수를 반환합니다. |
| LOWER(x) | 대문자 데이터를 소문자로 변환한 후에 문자열 식을 반환합니다. |
| UPPER(x) | 소문자 데이터를 대문자로 변환한 후에 문자열 식을 반환합니다. |
| SUBSTRING(string, start [, length]) | 지정한 문자 0 기준 위치에서 시작하여 지정한 길이 또는 문자열의 끝까지에 이르는 문자열 식의 일부를 반환합니다. |
| INDEX_OF(string, fragment) | 지정된 첫 번째 문자열 식 내의 두 번째 문자열 식에서 첫 번째로 나타나는 시작 위치를 반환하거나 문자열을 찾을 수 없는 경우 -1을 반환합니다. |
| STARTS_WITH(x, y) | 첫 번째 문자열 식이 두 번째 문자열 식에서 시작하는지 여부를 나타내는 부울 값을 반환합니다. |
| ENDS_WITH(x, y) | 첫 번째 문자열 식이 두 번째 문자열 식에서 끝나는지 여부를 나타내는 부울 값을 반환합니다. |
| CONTAINS(x,y) 함수 (x에 y가 포함되어 있는지 검사) | 첫 번째 문자열 표현이 두 번째 문자열 표현을 포함하는지를 나타내는 Boolean 값을 반환합니다. |
서비스 SDK를 사용한 쿼리 예
C# 예제
쿼리 기능은
다음은 간단한 쿼리의 예입니다.
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
}
}
쿼리 개체는 쿼리 결과 페이지 매김 섹션에 언급된 매개 변수로 인스턴스화됩니다. 메서드를 여러 번 호출하여 여러 페이지를 검색합니다 GetNextAsTwinAsync .
Node.js 예제
쿼리 기능은 Node.js용 Azure IoT Hub 서비스 SDK의 Registry 개체에서 공개됩니다.
다음은 간단한 쿼리의 예입니다.
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);
쿼리 개체는 쿼리 결과 페이지 매김 섹션에 언급된 매개 변수로 인스턴스화됩니다. 메서드를 여러 번 호출하여 여러 페이지를 검색합니다 nextAsTwin .
IoT Hub 디바이스 및 모듈 쌍에 대한 쿼리
디바이스 쌍 및 모듈 쌍 은 임의의 JSON 개체를 태그 및 속성으로 포함할 수 있습니다. IoT Hub 모든 트윈 정보를 포함하는 단일 JSON 문서로 디바이스 쌍 및 모듈 쌍을 쿼리할 수 있습니다.
다음은 샘플 IoT 허브 디바이스 쌍입니다(모듈 쌍은 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
}
}
}
디바이스 트윈 쿼리
IoT Hub 디바이스 쌍을 devices라는 문서 컬렉션으로 노출합니다. 예를 들어 가장 기본적인 쿼리는 디바이스 쌍의 전체 집합을 검색합니다.
SELECT * FROM devices
참고
Azure IoT SDK는 큰 결과의 페이징을 지원합니다.
SELECT 절을 사용하여 쿼리 결과를 집계할 수 있습니다. 예를 들어 다음 쿼리는 IoT Hub의 총 디바이스 수를 가져옵니다.
SELECT COUNT() as totalNumberOfDevices FROM devices
WHERE 절을 사용하여 쿼리 결과를 필터링합니다. 예를 들어, location.region 태그가 US로 설정된 디바이스 쌍을 받으려면 다음 쿼리를 사용합니다.
SELECT * FROM devices
WHERE tags.location.region = 'US'
부울 연산자와 산술 비교를 사용하여 복잡한 WHERE 절을 만듭니다. 예를 들어, 다음 쿼리는 미국에 위치한 디바이스 트윈을 검색하며, 이 디바이스 트윈은 원격 분석 데이터를 1분 미만의 간격으로 전송하도록 설정되어 있습니다.
SELECT * FROM devices
WHERE tags.location.region = 'US'
AND properties.reported.telemetryConfig.sendFrequencyInSecs >= 60
IN 및 NIN (not in) 연산자와 함께 배열 상수를 사용할 수도 있습니다. 예를 들어 다음 쿼리는 WiFi 또는 유선 연결을 보고하는 디바이스 쌍을 검색합니다.
SELECT * FROM devices
WHERE properties.reported.connectivity IN ['wired', 'wifi']
특정 속성을 포함하는 모든 디바이스 쌍을 식별해야 하는 경우가 많습니다. IoT Hub 이 목적을 위해 is_defined() 함수를 지원합니다. 예를 들어 다음 쿼리는 속성connectivity을 정의하는 디바이스 트윈을 검색합니다.
SELECT * FROM devices
WHERE is_defined(properties.reported.connectivity)
필터링 기능에 대한 전체 참조는 WHERE 절 섹션을 참조하세요.
그룹화도 지원됩니다. 예를 들어 다음 쿼리는 각 원격 분석 구성 상태의 디바이스 수를 반환합니다.
SELECT properties.reported.telemetryConfig.status AS status,
COUNT() AS numberOfDevices
FROM devices
GROUP BY properties.reported.telemetryConfig.status
이 그룹화 쿼리는 다음 예제와 유사한 결과를 반환합니다.
[
{
"numberOfDevices": 3,
"status": "Success"
},
{
"numberOfDevices": 2,
"status": "Pending"
},
{
"numberOfDevices": 1,
"status": "Error"
}
]
이 예제에서는 3개의 디바이스가 성공적인 구성을 보고했고, 2개는 여전히 구성을 적용하고 있으며, 한 디바이스는 오류를 보고했습니다.
프로젝션 쿼리를 사용하면 개발자가 관심 있는 속성만 반환할 수 있습니다. 예를 들어 연결이 끊긴 모든 사용 가능한 디바이스의 디바이스 ID와 함께 마지막 작업 시간을 검색하려면 다음 쿼리를 사용합니다.
SELECT DeviceId, LastActivityTime FROM devices WHERE status = 'enabled' AND connectionState = 'Disconnected'
해당 쿼리의 결과는 다음 예제와 같습니다.
[
{
"deviceId": "AZ3166Device",
"lastActivityTime": "2021-05-07T00:50:38.0543092Z"
}
]
모듈 쌍 쿼리
모듈 쌍에 대한 쿼리는 디바이스 쌍에 대한 쿼리와 비슷하지만, 다른 컬렉션/네임스페이스를 사용합니다. devices가 아닌 devices.modules에서 쿼리합니다.
SELECT * FROM devices.modules
디바이스와 devices.modules 컬렉션 간의 조인은 허용되지 않습니다. 여러 디바이스에서 모듈 쌍을 쿼리하려는 경우 태그를 기반으로 합니다. 다음 쿼리는 검사 상태의 모든 디바이스에서 모든 모듈 쌍을 반환합니다.
SELECT * FROM devices.modules WHERE properties.reported.status = 'scanning'
다음 쿼리는 지정된 디바이스 하위 집합에서만 검사 상태를 가진 모든 모듈 쌍을 반환합니다.
SELECT * FROM devices.modules
WHERE properties.reported.status = 'scanning'
AND deviceId IN ['device1', 'device2']
쌍 쿼리 제한 사항
Important
쿼리 결과는 결국 일관된 작업이며 최대 30분의 지연은 허용되어야 합니다. 대부분의 경우 쌍 쿼리는 몇 초의 순서로 결과를 반환합니다. IoT Hub는 모든 작업에 낮은 대기 시간을 제공하기 위해 노력합니다. 그러나 네트워크 상태 및 예측할 수 없는 기타 요인으로 인해 특정 대기 시간을 보장할 수 없습니다.
쌍 쿼리에 대한 대체 옵션은 GET 쌍 REST API를 사용하여 ID별로 개별 디바이스 쌍을 쿼리하는 것입니다. 이 API는 항상 최신 값을 반환하며 제한 제한이 더 높습니다. REST API를 직접 실행하거나 Azure IoT Hub 서비스 SDK 중 하나에서 해당 기능을 사용할 수 있습니다.
쿼리 식의 최대 길이는 8,192자일 수 있습니다.
현재는 기본 형식(개체 없음) 간에만 비교가 지원됩니다. 예를 들어 ... WHERE properties.desired.config = properties.reported.config 해당 속성에 기본 값이 있는 경우에만 지원됩니다.
모든 시나리오에 대해 쌍 쿼리에 lastActivityTime 대한 디바이스 ID 속성에 있는 종속성을 사용하지 않는 것이 좋습니다. 이 필드는 디바이스 상태의 정확한 계기가 보장되지 않습니다. 대신 IoT 디바이스 수명 주기 이벤트를 사용하여 디바이스 상태 및 활동을 관리합니다. 솔루션에서 IoT Hub 수명 주기 이벤트를 활용하는 방법에 대한 정보는 Event Grid를 사용하여 IoT Hub 이벤트에 반응하여 작업을 트리거하는 방법을 참조하세요.
참고
이 작업의 최대 대기 시간에 대해 어떠한 가정도 하지 않습니다. 대기 시간을 고려하여 솔루션을 빌드하는 방법에 대한 자세한 내용은 대기 시간 솔루션을 참조하세요.
IoT Hub 작업에 대한 쿼리
작업은 디바이스 집합에 대해 작업을 실행하는 방법을 제공합니다. 각 디바이스 트윈에는 jobs라는 컬렉션 내에서 이 디바이스를 대상으로 하는 작업의 정보가 포함됩니다. IoT Hub 사용하면 모든 트윈 정보를 포함하는 단일 JSON 문서로 작업을 쿼리할 수 있습니다.
myJobId라는 작업의 일부인 샘플 IoT Hub 디바이스 트윈은 다음과 같습니다.
{
"deviceId": "myDeviceId",
"etag": "AAAAAAAAAAc=",
"tags": {
...
},
"properties": {
...
},
"jobs": [
{
"deviceId": "myDeviceId",
"jobId": "myJobId",
"jobType": "scheduleUpdateTwin",
"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 쿼리할 수 있습니다.
Important
현재 작업 목록 속성은 디바이스 트윈을 쿼리할 때 반환되지 않습니다. 즉, 을 포함하는 FROM devices쿼리입니다. 작업 속성은 FROM devices.jobs을 사용한 쿼리로만 직접 액세스할 수 있습니다.
예를 들어 다음 쿼리는 단일 디바이스에 영향을 주는 모든 작업(과거 및 예약됨)을 반환합니다.
SELECT * FROM devices.jobs
WHERE devices.jobs.deviceId = 'myDeviceId'
이 쿼리가 반환된 각 작업의 디바이스별 상태(및 직접 메서드 응답)를 제공하는 방법을 확인합니다.
컬렉션의 모든 객체 속성에 대해 임의로 지정한 Boolean 조건으로 devices.jobs 필터링할 수도 있습니다.
예를 들어 다음 쿼리는 특정 디바이스에 대해 2016년 9월 이후에 생성된 완료된 모든 디바이스 쌍 업데이트 작업을 검색합니다.
SELECT * FROM devices.jobs
WHERE devices.jobs.deviceId = 'myDeviceId'
AND devices.jobs.jobType = 'scheduleUpdateTwin'
AND devices.jobs.status = 'completed'
AND devices.jobs.createdTimeUtc > '2016-09-01'
단일 작업의 디바이스별 결과를 검색할 수도 있습니다.
SELECT * FROM devices.jobs
WHERE devices.jobs.jobId = 'myJobId'
작업 쿼리 제한 사항
쿼리 식의 최대 길이는 8,192자일 수 있습니다.
현재 devices.jobs에 대한 쿼리는 다음을 지원하지 않습니다.
- 따라서
SELECT *만 가능한 프로젝션입니다. - 작업 속성 외에도 장치 트윈과 관련된 조건입니다. 이전 섹션을 참조하세요.
- 집계(예: count, avg 및 group by)입니다.
관련 콘텐츠
- IoT Hub 메시지 라우팅 쿼리 구문을 사용하여 메시지 속성 또는 메시지 본문을 기반으로 메시지 라우팅에 대해 알아봅니다.