Share via


gen1 쿼리 구문 Azure Time Series Insights

주의

이는 Gen1 문서입니다.

이 문서에서는 Azure Time Series Insights Gen1 쿼리 API에 대한 쿼리 요청 형식 및 구문을 설명합니다.

요약

중요

  • 쿼리 요청은 JSON 형식이어야 합니다.
  • 쿼리 API에 대한 HTTP 요청 페이로드는 이 문서에 지정된 형식을 준수해야 합니다.

언어는 다음 요소로 세분화됩니다.

데이터 모델

Azure Time Series Insights Gen1 쿼리 API는 환경 내에서 개별 이벤트로 저장된 데이터에 대해 작동합니다. 각 이벤트는 속성 이름 쌍의 집합입니다.

이벤트 속성

이벤트 속성은 Bool, DateTime, Double 또는 String과 같은 기본 형식 중 하나일 수 있습니다. 모든 기본 형식은 null 허용입니다.

참고

사용자 지정된 이벤트 원본 형식은 더 큰 값 형식 집합을 지원할 수 있습니다. Azure Time Series Insights Gen1은 가장 가까운 기본 형식을 유추한 다음 수신 시 사용자 지정된 형식을 캐스팅합니다.

모든 이벤트에는 미리 정의된 이름과 형식의 다음과 같은 기본 제공 속성이 있습니다.

속성 이름 속성 형식 정의
$ts DateTime 이벤트 타임스탬프
$esn String 이벤트 원본 이름
  • 이벤트 타임스탬프

    기본적으로 이벤트 타임스탬프 값은 이벤트 원본에서 제공됩니다. 예를 들어 IoT Hub에서 오는 이벤트는 큐에 추가된 시간을 타임스탬프로 사용합니다.

    고객은 대신 다른 이벤트 속성을 구성하여 이 동작을 수정할 수 있습니다. 사용자 지정 타임스탬프 속성은 이벤트 허브IoT Hub에서 지정할 수 있습니다.

  • 이벤트 원본 이름

    이벤트 원본 이름은 Azure Time Series Insights Gen1이 이벤트를 수신한 이벤트 원본에 대해 표시되는 이름입니다. 이벤트 원본 이름은 수신 시 특정 이벤트와 연결됩니다.

    중요

    • 이벤트 원본 이름은 이벤트 수명 동안 변경되지 않은 상태로 유지됩니다.
    • 이벤트 원본의 이름이 수정되면 기존 이벤트는 이전 이벤트 원본 이름을 전달합니다. 새 이벤트는 새 이벤트 원본 이름을 전달합니다.

일정 유형

사용자 지정 이벤트 속성은 이름 및 형식별로 쿼리 식에서 고유하게 식별되고 참조됩니다. 이벤트에는 이름이 동일하고 형식이 다른 속성이 둘 이상 있을 수 있습니다. 이름이 같지만 형식이 다른 속성은 수신 형식 분할로 인해 발생할 수 있습니다.

문자열 형식의 이벤트 속성 값은 다음과 같은 경우에 다른 형식의 속성으로 저장할 수 있습니다.

  • String 값이 유효한 Double 값이면 DoubleString으로 모두 저장됩니다.
  • String 값이 유효한 DateTime 값인 경우 DateTime으로만 저장됩니다.

쿼리 API는 출력에서 빈 문자열 리터럴("")을 로 null 변환합니다.

Azure Time Series Insights Gen1은 Double 형식 Double.NaN내에서 , Double.PositiveInfinityDouble.NegativeInfinity값에 대한 지원이 제한됩니다. 이러한 값은 수신 중에 로 null 변환되지만 쿼리 평가에서 이러한 값 중 하나를 생성하는 경우 값이 평가되고 응답으로 String 으로 직렬화됩니다.

이러한 값을 수신에 대한 문자열 로 전달할 수 있으므로 쿼리 식에서 이러한 값도 문자열로 전달되어야 합니다.

이벤트 스키마는 이벤트의 속성을 설명합니다. 이벤트 스키마에는 이벤트 원본의 이름과 이벤트에 대한 정렬된 속성 집합이 포함됩니다. 이벤트별로 스키마가 다르거나 동일한 스키마를 공유할 수 있습니다.

스칼라 식

스칼라 식은 스칼라 값을 생성합니다. 스칼라 식은 다음 종류로 나뉩니다.

상수 식

각 기본 형식에 대해 다음 리터럴을 사용하여 수 식을 나타냅니다.

기본 형식 JSON 표현 JSON 예제 참고
Bool JSON 부울 형식으로 true, false
DateTime ISO 8601 형식yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK의 단일 dateTime 속성이 있는 중첩된 개체입니다. {"dateTime":"2016-08-01T00:00:00.000Z"}
double Double 범위로 캐스팅된 JSON 번호입니다. 1.23e45, 123 이중 오버플로는 오류를 생성합니다.
String JSON 문자열 형식 "abc"
TimeSpan ISO 8601 형식의 단일 timeSpan 속성이 있는 중첩된 개체: P[n]Y[n]M[n]DT[n]H[n]M[n]S. {"timeSpan":"P1Y2M3DT4M5.67S"}

Nullable 기본 형식

기본 데이터 형식은 null 허용입니다. null 기본 형식의 값은 다음과 같이 JSON으로 표현됩니다.

{ "string": null }
{ "double": null }
{ "bool": null }
{ "dateTime": null }
{ "timeSpan": null }

속성 참조 식

속성 참조 식을 사용하여 이벤트의 기본 제공 속성이 아닌 속성 값에 액세스합니다. 기본 제공이 아닌 속성에는 이벤트 스키마에 자동으로 포함된 기본 속성 이외의 사용자 지정된 속성이 포함됩니다.

속성 참조 식의 결과 형식은 속성의 기본 형식입니다. 이벤트 스키마의 속성은 이름 및 형식으로 고유하게 식별되며 참조 식을 모두 지정해야 합니다.

  • JSON 예제:

    {
       "property": "p1",
       "type": "Bool"
    }
    
    {
       "property": "p1",
       "type": "DateTime"
    }
    
    {
       "property": "p1",
       "type": "Double"
    }
    
    {
       "property": "p1",
       "type": "String"
    }
    
    {
       "property": "p1",
       "type": "TimeSpan"
    }
    

기본 제공 속성 참조 식은 이벤트의 기본 제공 속성에 액세스하는 데 사용됩니다. 기본 제공 속성은 이벤트 스키마에 자동으로 정의된 속성입니다.

기본 제공 속성 참조 식의 결과 형식은 속성의 기본 형식입니다. 기본 제공 속성은 이름으로만 참조됩니다. 따라서 참조 식에는 형식이 필요하지 않습니다.

{ "builtInProperty": "$esn" }

비교 식

지원되는 부울 비교 식은 다음과 같습니다.

JSON의 속성 이름 Description
eq 같음
in 에서(모든 항목과 같음)
phrase 구를 포함합니다.
startsWith 다음으로 시작
endsWith 구로 끝납니다.
regex 정규식과 일치
lt 보다 작음
Lte 작거나 같음
gt 보다 큼
Gte 크거나 같음

중요

  • 모든 비교 식은 왼쪽 인수와 오른쪽 인수의 기본 형식을 모두 사용하고 비교 결과를 나타내는 부울 값을 반환합니다.
  • 비교에서 왼쪽 및 오른쪽 인수의 두 형식이 일치해야 합니다.
  • 모든 형식은 암시적으로 자신에게만 캐스팅되며 명시적 캐스트는 지원되지 않습니다.
{
  "eq": {
    "left": {
      "property": "p1",
      "type": "String"
     },
     "right": "abc"
  }
}
  • JSON 예제:

    {
       "startsWith": {
         "left": {
           "property": "p1",
           "type": "String"
          },
          "right": "abc"
       }
    }
    
    {
       "startsWith": {
         "left": {
           "property": "p1",
           "type": "String"
         },
         "right": "",
         "stringComparison": "Ordinal"
       }
    }
    
    {
       "endsWith": {
         "left": {
           "property": "p1",
           "type": "String"
         },
         "right": {
           "property": "p2",
           "type": "String"
         },
         "stringComparison": "Ordinal"
       }
    }
    

다음 표에서는 각 비교 식에 대해 지원되는 인수 형식을 보여 줍니다.

인수 형식 지원되는 비교 작업
Bool eq, in
DateTime eq, in, lt, lte, gt, gte
double eq, in, lt, lte, gt, gte
String eq, in, phrase, startsWith, endsWith, regex
TimeSpan eq, in, lt, lte, gt, gte

NULL 리터럴은 eq 또는 in 비교 연산자에서만 사용할 수 있습니다.

  • 양면이 값이면 eq 연산자가 발생 true 합니다 null . 그렇지 않으면 연산자가 를 생성합니다 false.
  • 다른 작업의 경우 NULL 리터럴에 대해 오류가 발생하며 null 값 속성에 대해 동작이 false정의되지 않습니다(결과되는 비교 작업).
  • 값은 null 정렬 순서에서 null이 아닌 값 앞에 옵니다(예: 이벤트 목록을 반환하기 위해 속성으로 정렬이 적용되는 경우).

Azure Time Series Insights Gen1은 다음 부울 논리 식을 지원합니다.

JSON의 속성 이름 Description
and 비어 있지 않은 부울 인수 집합을 사용하고 모두 로 평가true되면 를 반환 true 합니다.
or 비어 있지 않은 부울 인수 집합을 가져와서 값이 로 계산true되면 를 반환 true 합니다.
not 단일 부울 인수를 사용하고 부정된 값을 반환합니다.
{
  "and": [
    {
      "eq": {
        "left": {
          "property": "p1",
          "type": "String"
        },
        "right": "abc"
      }
    },
    {
      "not": {
        "lt": {
          "left": {
            "property": "p1",
            "type": "Double"
          },
          "right": 1
        }
      }
    }
  ]
}

stringComparison 속성은 선택 사항입니다. 기본적으로 해당 값은 이며 OrdinalIgnoreCase, 이로 인해 문장 대/소문자가 비교에서 무시됩니다.

{
  "regex": {
    "left": {
      "property": "p1",
      "type": "String"
    },
    "right": "^abc*"
  }
}
{
  "regex": {
      "left": "abc",
      "right": "^a*$"
  }
}

산술 식

Azure Time Series Insights Gen1은 다음 산술 식을 지원합니다.

JSON의 속성 이름 Description
추가 더하기
sub 빼기
복수 곱하기
div 사업부

모든 산술 식은 기본 형식의 왼쪽 및 오른쪽 인수를 사용하고 연산 결과를 나타내는 값을 반환합니다.

모든 형식은 암시적으로 자신에게만 캐스팅되며 명시적 캐스트는 지원되지 않습니다.

{
  "add": {
    "left": {
      "property": "p1",
      "type": "Double"
     },
     "right": 1
  }
}

다음 표에서는 각 산술 식에 대해 지원되는 인수 형식을 보여 줍니다.

작업 왼쪽 형식 오른쪽 형식 결과 형식
추가 double double double
추가 TimeSpan TimeSpan TimeSpan
추가 DateTime TimeSpan DateTime
추가 TimeSpan DateTime DateTime
sub double double double
sub TimeSpan TimeSpan TimeSpan
sub DateTime DateTime TimeSpan
sub DateTime TimeSpan DateTime
mul double double double
div double double double

조건자 문자열 식

부울 조건자 문자열 식에는 조건자 문자열이라는 사람이 읽을 수 있는 식으로 표현되는 부울 조건자가 포함됩니다.

조건자 문자열의 예:

조건자 문자열 Description
Description HAS 'hello world' true모든 이벤트 원본의 Description 속성에 구 hello world 가 포함된 이벤트의 경우
'hello world' true 구를 포함하는 이벤트의 경우 hello world
startsWith(Status, 'go') true 상태가 로 시작하는 이벤트의 경우 go
endsWith(Status, 'oD') true상태가 로 끝나는 이벤트의 경우od
startsWith_cs(Status, 'Go') true 상태가 로 시작하는 이벤트의 경우 Go
endsWith_cs(Status, 'od') true 상태가 로 시작하는 이벤트의 경우 od
matchesRegex(s, '^G*') true 정규식과 일치하는 상태가 있는 이벤트의 경우 ^G*
PointValue.Double = 3.14 true Double PointValue 가 같은 이벤트의 경우 3.14
Status IN ('Good','Bad') true또는 가 포함된 Good상태인 이벤트의 경우Bad
PointValue > 3.14 AND Status.String = 'Good' truePointValue가 보다 3.14 크고 문자열 상태가 인 이벤트의 경우Good
[PointValue] > 3.14 AND ([Status] = 'Good' OR [Status] = 'Bad') AND NOT [Description] HAS 'hello world' truePointValue가 보다 3.14 크고 상태가Good 또는 Bad 이고 설명에 구가 포함되지 않은 이벤트의 경우hello world
{ "predicateString": "PointValue.Double = 3.14" }

조건자 문자열의 식은 JSON 부울 식으로 계산됩니다. 다음(간소화된) 문법을 준수해야 합니다.

JSON 부울 식 Backus-Naur 양식
parse orPredicate EOF | EOF;
orPredicate andPredicate (Or andPredicate)*;
andPredicate notPredicate (And notPredicate)*;
notPredicate (Not)* predicate;
predicate parenPredicate | comparisonPredicateExtended | hasPredicate | inPredicate;
parenPredicate OpenParen orPredicate CloseParen;
parenExpression OpenParen additiveExpression CloseParen;
comparisonPredicateExtended (ComparisonOp literal) | comparisonPredicate;
comparisonPredicate additiveExpression ComparisonOp additiveExpression;
additiveExpression multiplicativeExpression ((Plus | Minus) multiplicativeExpression)*;
multiplicativeExpression unaryExpression (MultiplicativeOp unaryExpression)*;
functionCallExpression identifier OpenParen CloseParen;
unaryExpression identifier | literal | functionCallExpression | parenPredicate | parenExpression;
hasPredicate (identifier? Has)? StringLiteral;
inPredicate identifier? In OpenParen literal (Comma literal)* CloseParen;
literal StringLiteral | ((Minus)? NumericLiteral) | BooleanLiteral | DateTimeLiteral | TimeSpanLiteral | NullLiteral;
identifier BuiltinIdentifier | (QuotedOrUnquotedIdentifier (Sep QuotedOrUnquotedIdentifier)?);

Azure Time Series Insights Gen1 기본 데이터 형식은 조건자 문자열 식에서 지원됩니다.

JSON 속성 참조 식과 달리 속성의 형식을 생략할 수 있습니다. 이 경우 형식이 자동으로 유추됩니다.

지원되는 리터럴

기본 형식 리터럴
Bool TRUE, FALSE
DateTime dt'2016-10-08T03:22:55.3031599Z'
double 1.23, 1.0
String 'abc'
TimeSpan ts'P1Y2M3DT4M5.67S'
NULL

지원되는 피연산자 형식

작업 지원되는 형식 참고
<, >, <=, >= Double, DateTime, TimeSpan
=, !=, <> String, Bool, Double, DateTime, TimeSpan, NULL <>!=에 해당합니다.
+, -, *, / Double, DateTime, TimeSpan
IN String, Bool, Double, DateTime, TimeSpan, NULL 모든 피연산자는 동일한 형식이거나 NULL 상수여야 합니다. 여러 NULLs는 단일 NULL과 동일합니다.
HAS String 우측 항에는 상수 문자열 리터럴만 사용할 수 있습니다. 빈 문자열 및 NULL 은 허용되지 않습니다.

비교 조건자(<, >, <=, =, >=, !=)의 경우 IN 조건자 피연산자는 NULL이거나 단일 형식일 수 있습니다.

HAS 조건자가 있는 식의 경우 HAS 피연산자의 오른쪽에 있는 상수 리터럴을 여러 형식으로 확장할 수 있습니다. 또한 HAS 피연산자의 오른쪽에 있는 상수 리터럴은 Bool, Double, DateTime 또는 TimeSpan 값으로 구문 분석됩니다. 성공적으로 구문 분석된 각 값에 대해 연산자가 있는 조건자가 = 만들어집니다. 이러한 조건자와 원래 HAS 조건자는 OR 조건자로 조인됩니다. 예를 들어 조건자 문자열 p1 HAS '1.0'문자열Double 형식이 p1.String HAS '1.0' OR p1.Double = 1.0있는 p1 속성이 있는 경우 와 동일합니다.

형식 검사

조건자 식은 형식을 검사하고 유효성을 검사하여 해당 식 내의 오른쪽 및 왼쪽 형식이 일치하는지 확인합니다.

중요

  • 피연산자의 왼쪽과 오른쪽 상수가 일치하지 않으면 오류가 throw됩니다.
  • 특정 형식 간에 작업이 허용되지 않는 경우에도 오류가 throw됩니다.
  • 속성에 대해 형식을 지정하면 검사 형식이 적용됩니다.

    • NULL 리터럴에 대해 모든 속성 형식이 허용됩니다.

    • 그렇지 않으면 왼쪽 및 오른쪽 형식이 일치해야 합니다.

      문자열 형식의 속성 p1p2의 예와 Double 형식의 속성 p3이 다음 표에 표시됩니다.

      조건자 문자열 유효한가요? 참고
      p1.String = 'abc'
      p1.String = p2.String
      p1.String = NULL NULL 는 모든 왼쪽 형식과 일치합니다.
      p3.Double = 'abc' 아니요 형식이 일치하지 않습니다.
      p3.Double = p1.String 아니요 형식이 일치하지 않습니다.
      p1.String HAS 'abc'
      p3.Double HAS '1.0' 문자열 리터럴이 Double 값으로 구문 분석되었습니다.
  • 속성에 대해 형식을 생략했지만 이름이 지정된 경우 다음 단계가 수행됩니다.

    1. 지정된 이름과 형식의 모든 속성이 수행됩니다.
    2. 왼쪽 및 오른쪽 피연산자는 형식별로 쌍으로 그룹화됩니다.
    3. 쌍은 AND 작업을 사용하여 연결됩니다.
    • 문자열Double 형식의 속성 p1p2와 해당 형식의 일부 속성의 예는 다음 표에 표시됩니다.

      조건자 문자열 해당하는 강력한 형식 조건자 문자열 참고
      p1 = 'abc' p1.String = 'abc'
      p1 = true Bool 형식의 p1 속성이 없으므로 누락된 속성 오류가 내보내집니다.
      p1 = NULL p1.String = NULL AND p1.Double = NULL 오른쪽의 경우 NULL 일치하는 모든 속성이 이어야 한다고 가정합니다 NULL.
      p1 != NULL p1.String != NULL OR p1.Double != NULL 이는 이전 식의 반전입니다.
      p1 = '1.0' p1.String = '1.0'
      p1 IN (1.0, NULL) p1.Double = 1.0 OR p1.Double = NULL
      p1 IN (NULL) p1.String = NULL AND p1.Double = NULL 이 값은 에 해당합니다 p1 = NULL.
      p1 HAS '1.0' p1.String HAS '1.0' OR p1.Double = 1.0 문자열 리터럴이 유효한 Double 값으로 구문 분석되었습니다.
      p1 HAS 'true' p1.String HAS 'true' 문자열 리터럴이 Bool로 성공적으로 구문 분석되었지만 p1은 구문 분석되지 않았습니다 . Bool 속성이 있습니다.
      p1 = p2 p1.String = p2.String AND p1.Double = p2.Double
      p1 != p2 p1.String != p2.String OR p1.Double != p2.Double 이는 이전 식의 반전입니다.
  • 오른쪽 속성 형식이 잘 정의된 경우 왼쪽 속성에 대해 속성 이름과 형식을 모두 생략할 수 있습니다. 오른쪽에 상수 리터럴이 있고 리터럴만 NULL 포함되지 않을 때마다 마찬가지입니다.

    • 이 시나리오는 HAS 피연산자를 사용하는 전체 텍스트 검색의 일반화입니다.

    • 오른쪽 형식과 일치하는 모든 속성이 수행되고 결과 식은 OR 연산을 통해 연결됩니다.

    • StringDateTime 형식의 StringDouble 형식 및 속성 p2의 속성 p1 예제는 다음 표에 표시됩니다.

      조건자 문자열 동등한 강력한 형식의 조건자 문자열 참고
      = 'abc' p1.String = 'abc' OR p2.String = 'abc'
      != 'abc' p1.String != 'abc' AND p2.String != 'abc' 이전 식의 반전
      = 1.0 p1.Double = 1.0
      = dt'2000-01-02T03:04:05' p2.DateTime = dt'2000-01-02T03:04:05'
      = true 오류. Bool 속성이 없으므로 누락된 속성 오류가 내보내집니다.
      = NULL 오류. 오른쪽에 대한 NULL 속성 이름을 생략할 수 없습니다.
      IN (NULL) 이전 오류와 동일합니다.
      IN (1.0, NULL) p1.Double = 1.0 OR p1.Double = NULL
      HAS '1.0' p1.String HAS '1.0' OR p1.Double = 1.0 OR p2.String HAS '1.0'
      HAS 'true' p1.String HAS 'true' OR p2.String HAS 'true' Bool 형식의 속성이 없습니다.
  • 연산자를 속성 이름과 함께 생략하면 연산이 HAS 가정됩니다.

스칼라 함수

스칼라 함수는 스칼라 값을 반환합니다.

네이티브 함수

Azure Time Series Insights Gen1에서 기본적으로 지원되는 스칼라 함수는 다음과 같습니다.

함수 이름 반환 값 인수 예제 참고
utcNow DateTime 없음 utcNow() 현재 시간을 UTC 형식으로 반환합니다. 함수 이름은 대/소문자를 구분합니다.

이제 UTC 함수는 현재 시간을 UTC 형식으로 포함하는 DateTime 값을 반환합니다. 인수는 허용하지 않습니다.

집계 식

집계 식은 파티션을 통해 이벤트 및 컴퓨팅 측정값의 컬렉션을 분할하는 데 사용됩니다. 집계 식은 다음 종류로 나뉩니다.

차원 식

집계 절 내에서 차원 식을 사용하여 이벤트 집합을 분할하고 각 파티션에 스칼라 키를 할당합니다.

차원 식 형식:

JSON의 속성 이름 Description 예제
uniqueValues 결과의 차원 값은 지정된 속성의 정확한 값입니다.
dateHistogram 결과의 차원 값은 지정된 속성의 시간 범위입니다. 타임스탬프의 날짜 히스토그램은 10시간 검색 범위에 대해 10개의 1시간 범위가 발생할 수 있습니다.
numericHistogram 결과의 차원 값은 지정된 속성의 값 범위입니다. 온도의 숫자 히스토그램은 10도 범위의 반환을 초래할 수 있습니다.

Azure Time Series Insights Gen1은 입력 집계 쿼리의 최대 카디널리티 또는 최대 격자 크기를 150,000개의 셀로 제한합니다. 집계 쿼리의 카디널리티를 계산하려면 쿼리에 있는 모든 차원의 크기를 곱합니다. 제품이 150,000개 미만인 경우 쿼리를 실행하기 위해 허용됩니다. 제품이 150,000보다 작거나 같으면 쿼리가 거부됩니다.

take 절을 사용하여 uniqueValuesnumericHistogram으로 생성되는 차원의 최대 크기를 지정합니다. dateHistogram에서 크기는 검색 범위를 breaks 절을 사용하여 지정한 dateHistogram 간격의 크기로 나누어 계산됩니다.

예를 들어 집계 쿼리의 검색 범위는 "2017-11-15T16:00:00.000Z"에서 "2017-11-15T19:00:00.000Z" = 3시간으로 설정됩니다. 쿼리에 breaks 절이 있는 dateHistogram이 1분(차원 1)으로 설정되고 속성 XYZ보다 uniqueValues가 포함된 경우 dateHistogram 차원 크기는 3x60=180입니다. 이 결과는 uniqueValues 가 총 150,000/180 = 833개 항목까지 걸릴 수 있음을 의미합니다.

고유 값 식

고유한 값 식을 사용하여 지정된 이벤트 속성의 값으로 이벤트 집합을 그룹화합니다.

이 JSON 식을 평가하면 최대 100 개의 레코드가 생성되며 String 속성으로 sensorId 그룹화됩니다.

{
  "uniqueValues": {
    "input": {
      "property": "sensorId",
      "type": "String"
    },
    "take": 100
  }
}

날짜 히스토그램 식

날짜 히스토그램 식을 사용하여 DateTime 속성 값을 지정된 크기의 버킷으로 그룹화합니다.

이 JSON 식을 계산하면 각 값에 초가 0이 되도록 바닥이 둥근 타임스탬프 레코드 집합이 생성됩니다.

{
  "dateHistogram": {
    "input": {
      "builtInProperty": "$ts"
    },
    "breaks": {
      "size": "1m"
    }
  }
}

숫자 히스토그램 식

숫자 히스토그램 식을 사용하여 Double 속성 값을 지정된 수의 버킷으로 그룹화합니다.

이 JSON 식을 계산하면 10개의 레코드가 생성되므로 p1 속성의 최소값과 최대값 사이의 범위는 10개의 버킷으로 나뉩니다.

{
  "numericHistogram": {
    "input": {
      "property": "p1",
      "type": "Double"
    },
    "breaks": {
      "count": 10
    }
  }
}

측정값 식

집계 절 내에서 측정값 식을 사용하여 이벤트 집합에서 스칼라 값을 계산합니다. 예를 들어 측정값 식은 지난 24시간 동안 온도 센서가 측정한 최대값을 계산하는 것입니다.

count 식을 사용하여 해당 버킷 내의 이벤트 수를 계산합니다.

{ "count": {} }

min, max, avgsum 식을 사용하여 해당 버킷 내에서 지정된 속성에 대한 값의 최소, 최대, 평균 및 합계를 계산합니다.

{
  "min": {
    "input": {
      "property": "temperature",
      "type": "Double"
    }
  }
}

첫 번째마지막 측정값 식을 사용하면 속성 B의 최소값 또는 최대값에 해당하는 지정된 속성 A의 값을 가져올 수 있습니다.

{
  "first": {
    "input": {
      "property": "propertyA",
      "type": "String"
    },
    "orderBy": {
      "property": "propertyB",
      "type": "Double"
    }
  }
}
{
  "last": {
    "input": {
      "property": "propertyA",
      "type": "Double"
    },
    "orderBy": {
      "property": "propertyB",
      "type": "DateTime"
    }
  }
}

orderBy 절은 선택 사항이며 기본적으로 Timestamp 속성 $ts. 입력은 모든 형식일 수 있습니다. orderBy 절은 DoubleDateTime 형식만 지원합니다.

속성 BDateTime 형식인 경우 속성 A의 최신 또는 초기 값을 가져옵니다.

첫 번째마지막 식을 사용하여 특정 속성의 초기 또는 최신 값을 이해할 수 있습니다. 예를 들어 라는 deviceID 속성이 있고 이벤트를 보낸 최신 deviceID 항목을 이해하려는 경우 마지막 은 해당 정보를 식별하는 데 사용할 가장 효율적인 식 연산자입니다.

{
  "last": {
    "input": {
      "property": "deviceID",
      "type": "String"
    }
  }
}

또 다른 예는 마지막으로 를 사용하여 선박, 차량 또는 기타 움직이는 개체와 같은 특정 개체의 마지막으로 보고된 위치를 찾는 것입니다.

함대에서 선박의 마지막으로 알려진 위치를 생성하는 쿼리를 설명하기 위해 다음과 유사한 쿼리를 작성할 수 있습니다.

{
  "searchSpan": {
    "from": "2018-05-05T12:00:00.000Z",
    "to": "2018-05-15T12:01:00.000Z"
  },
  "aggregates": [
     {
       "dimension": {
         "uniqueValues": {
           "input": {
             "property": "shipId",
             "type": "string"
            },
            "take": 150000
          }
        },
        "measures": [
          {
            "last": {
              "input": {
                "property": "Latitude",
                "type": "Double"
              }
           }
        },
        {
          "last": {
            "input": {
              "property": "Longitude",
              "type": "Double"
            }
          }
        }
      ]
    }
  ]
}

또 다른 예는 먼저 를 사용하여 모든 공장에 대해 가장 낮은 압력을 보고하는 디바이스를 찾는 것입니다.

{
  "searchSpan": {
    "from": "2018-05-05T12:00:00.000Z",
    "to": "2018-05-15T12:01:00.000Z"
  },
  "aggregates": [
    {
      "dimension": {
        "uniqueValues": {
          "input": {
            "property": "plantId",
            "type": "String"
          },
          "take": 150000
        }
     },
     "measures": [
       {
         "first": {
           "input": {
             "property": "deviceId",
             "type": "String"
           },
           "orderBy": {
             "property": "pressure",
              "type": "Double"
            }
          }
        }
      ]
    }
  ]
}

차원 및 측정값 유형 지원

속성 형식에 따라 지원되는 차원 및 측정값 식은 다음과 같습니다.

속성 형식 지원되는 차원 식 지원되는 측정값 식
Bool "uniqueValues" "first" (입력), "last" (입력)
DateTime "uniqueValues", "dateHistogram" "min", "max", "first" (orderBy, input), "last” (orderBy, input)
double "uniqueValues", "numericHistogram" "sum", "avg", "min", "max", "first" (orderBy, input), "last” (orderBy, input)
String "uniqueValues" "first" (입력), "last" (입력)

절은 JSON 쿼리의 구성 요소 또는 식의 일부를 구성합니다. 절은 다음 종류로 나뉩니다.

검색 범위 절

검색 범위 절을 사용하여 이벤트의 기본 제공 타임스탬프 속성을 지정된 간격으로 필터링합니다. 간격의 시작은 포함됩니다. 간격의 끝은 배타적입니다.

{
  "searchSpan": {
    "from": {
      "dateTime": "2016-08-01T00:00:00.000Z"
    },
    "to": {
      "dateTime": "2016-08-31T00:00:00.000Z"
    }
  }
}

검색 범위 절(searchSpan)의 fromto 속성은 DateTime 결과 형식의 유효한 식이어야 합니다. 이러한 식은 쿼리 실행 전에 평가되므로 속성 참조를 포함하지 않아야 합니다.

조건자 절

조건자 절을 사용하여 조건자를 충족하는 이벤트를 필터링합니다. 부울 식으로 확인되어야 합니다.

{
  "predicate": {
    "eq": {
      "left": {
        "property": "p1",
        "type": "String"
       },
       "right": "abc"
     }
  }
}

이벤트를 필터링하려면 환경의 각 이벤트에 대해 부울 식으로 표시되는 조건자를 실행하는 것을 의미합니다. 이벤트에 대한 식 실행은 이벤트가 추가 작업에 포함되어야 하는 경우 를 반환 true 합니다. 추가 처리에서 이벤트를 생략해야 하는 경우 를 반환 false 합니다.

참고

이벤트는 조건자 식 내에 지정된 필터링 외에도 항상 검색 범위별로 필터링됩니다.

상위 절 제한

*limit top 절을 사용하여 오름차순 또는 내림차순으로 지정된 수의 값을 가져옵니다. 값 수는 지정된 개수에 따라 제한됩니다.

{
  "sort": [
    {
      "input": {
        "builtInProperty": "$ts"
      },
      "order": "Asc"
    }
  ],
  "count": 10
}

Take 절 제한

특정 순서 없이 값 집합을 가져오는 빠른 방법으로 limit take 절을 사용할 수 있습니다. 반환된 값의 수는 지정된 입력에 의해 제한됩니다.

{ "take": 10 }

샘플 절 제한

*limit 샘플 절을 사용하여 값 집합에서 통계적으로 대표적인 샘플을 가져옵니다. 반환된 값의 수는 지정된 입력에 의해 제한됩니다.

{ "sample": 10 }

절 나누기

히스토그램 식에 *breaks 절을 사용하여 범위를 분할하는 방법을 지정합니다.

날짜 히스토그램의 경우 datetime 간격 및 간격 경계의 크기를 지정해야 합니다. 히스토그램이 검색 범위에 따라 경계가 결정되는 기본 제공 Timestamp 속성을 기반으로 하지 않는 한 이렇게 합니다.

  • 간격 경계는 선택 사항이며 사용할 수 있습니다. 예를 들어 간격 경계를 생략하는 경우 검색 범위에 따라 결정될 때 사용할 수 있습니다.
  • 숫자 히스토그램의 경우 나누기 수를 지정해야 합니다. 속성의 최소값과 최대값을 기준으로 간격 경계를 결정합니다.
{
  "breaks": {
    "size": "1d",
    "from": "2000-01-02T03:04:05.0000000",
    "to": "2000-01-02T03:04:05.0000000"
  }
}
{
  "breaks": {
    "count": 10
  }
}

집계 절

집계 절을 사용하여 다른 이벤트 속성의 값을 측정하는 동안 지정된 속성으로 이벤트 집합을 분할합니다.

측정값은 차원 식에 의해 생성되는 각 파티션에서 평가됩니다.

  • 다음 JSON 예제에서는 센서 ID당 평균, 최소 및 최대 온도를 계산합니다.

    {
      "aggregates": [
        {
          "dimension": {
            "uniqueValues": {
              "input": {
                "property": "sensorId",
                "type": "String"
              },
              "take": 100
            }
          },
          "measures": [
            {
              "avg": {
                "input": {
                  "property": "temperature",
                  "type": "Double"
                }
              }
            },
            {
              "min": {
                "input": {
                  "property": "temperature",
                  "type": "Double"
                }
              }
            },
            {
              "max": {
                "input": {
                  "property": "temperature",
                  "type": "Double"
                }
              }
            }
          ]
        }
      ]
    }
    

    참고

    집계 절은 최상위 수준에서 둘 이상의 집계를 지정할 수 있는 배열입니다.

  • 다음 JSON 예제에서는 도시 및 제조업체당 평균 온도를 독립적으로 계산합니다.

    {
      "aggregates": [
        {
          "dimension": {
            "uniqueValues": {
              "input": {
                "property": "city",
                "type": "String"
              },
              "take": 100
            }
          },
          "measures": [
            {
              "avg": {
                "input": {
                  "property": "temperature",
                  "type": "Double"
                }
              }
            }
          ]
        },
        {
          "dimension": {
            "uniqueValues": {
              "input": {
                "property": "manufacturer",
                "type": "String"
              },
              "take": 100
            }
          },
          "measures": [
            {
              "avg": {
                "input": {
                  "property": "temperature",
                  "type": "Double"
                }
              }
            }
          ]
        }
      ]
    }
    

    참고

    • 집계 배열에 요소가 두 개 이상 있는 것은 현재 지원되지 않습니다.
    • 그러나 집계 정의에는 보다 유연한 다차원 격자를 지정하는 중첩된 배열이 포함될 수 있습니다.
  • 다음 JSON 예제에서는 센서 ID당 분당 평균 온도를 계산합니다.

    {
      "aggregates": [
        {
          "dimension": {
            "uniqueValues": {
              "input": {
                "property": "sensorId",
                "type": "String"
              },
              "take": 100
            }
          },
          "aggregate": {
            "dimension": {
              "dateHistogram": {
                "input": {
                  "builtInProperty": "$ts"
                },
                "breaks": {
                  "size": "1m"
                }
              }
            },
            "measures": [
              {
                "avg": {
                  "input": {
                    "property": "temperature",
                    "type": "Double"
                  }
                }
              }
            ]
          }
        }
      ]
    }
    

추가 정보

  • Azure Time Series Insights Gen1 API에 대한 자세한 내용은 Gen1 API를 참조하세요.

  • 요청 및 인증 매개 변수에 대한 자세한 내용은 인증 및 권한 부여를 참조하세요.

  • Gen1 설명서를 검토하여 Gen1 Azure Time Series Insights 대해 자세히 알아보세요.