다음을 통해 공유


동적 데이터 형식

적용 대상: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

스칼라 데이터 형식은 dynamic 다음 값 중 어느 것이든 될 수 있습니다.

  • 0부터 시작하는 인덱싱을 통해 0개 이상의 값이 포함된 dynamic 값의 배열
  • 고유 string 값을 값에 매핑하는 dynamic 속성 모음입니다. 속성 모음에는 고유한 string 값으로 인덱싱된 0개 이상의 이러한 매핑("슬롯"이라고 함)이 있습니다. 슬롯의 순서가 지정되지 않습니다.
  • 기본 스칼라 데이터 형식bool( , , datetime, intguid, long, realstringtimespan)의 값입니다.
  • null 자세한 내용은 Null 값을 참조 하세요.

참고 항목

  • 형식 dynamic 값은 압축되지 않은 1MB(2^20)로 제한됩니다. 레코드의 셀 값이 1MB를 초과하면 값이 삭제되고 수집에 성공합니다. 인코딩 정책을 변경하여 열의 크기를 늘릴 MaxValueSize 수 있습니다.
  • 형식은 dynamic JSON과 유사하게 표시되지만 JSON 모델이 JSON(예: long, , timespanrealdatetimeguid)에 없기 때문에 나타내지 않는 값을 보유할 수 있습니다. 따라서 값을 JSON 표현으로 직렬화 dynamic 할 때 JSON이 나타낼 수 없는 값은 값으로 string 직렬화됩니다. 반대로, Kusto는 문자열을 구문 분석할 수 있는 경우 강력한 형식의 값으로 구문 분석합니다. 이는 , real, longguid 형식에 datetime적용됩니다. JSON 개체 모델에 대한 자세한 내용은 json.org 참조하세요.
  • Kusto는 속성 모음에서 이름-값 매핑의 순서를 유지하려고 시도하지 않으므로 순서를 보존할 수 없습니다. 예를 들어 매핑 집합이 동일한 두 개의 속성 모음이 string 값으로 표현되면 완전히 다른 결과를 생성할 수 있습니다.

동적 리터럴

리터럴을 dynamic 지정하려면 다음 구문 옵션 중 하나를 사용합니다.

구문 설명 예시
dynamic([value [, ...]]) 동적 또는 기타 스칼라 리터럴의 배열입니다. dynamic([1, 2, "hello"])
dynamic({ = [, ...]}) 속성 모음 또는 개체입니다. 키 값은 중첩된 속성 모음일 수 있습니다. dynamic({"a":1, "b":{"a":2}})
dynamic(value) 내부 스칼라 데이터 형식의 값을 보유하는 동적 값입니다. dynamic(4)
dynamic(null) null 값을 나타냅니다.

구문 규칙에 대해 자세히 알아봅니다.

동적 개체 접근자

사전을 첨자하려면 점 표기법(dict.key) 또는 대괄호 표기법(dict["key"])을 사용합니다. 아래 첨자가 문자열 상수인 경우 두 옵션 모두 동일합니다.

참고 항목

식을 아래 첨자로 사용하려면 대괄호 표기법을 사용합니다. 산술 식을 사용하는 경우 대괄호 안의 식을 괄호로 묶어야 합니다.

아래 dict 예제와 arr 동적 형식의 열은 다음과 같습니다.

접근자 식 형식 의미 설명
dict[col] 엔터티 이름(열) col 값을 키로 사용하여 사전을 첨자합니다. 열은 문자열 형식이어야 합니다.
arr[index] 엔터티 인덱스(열) index 열의 값을 인덱스로 사용하여 배열에 대한 아래 첨자를 지정합니다. 열은 정수 또는 부울 형식이어야 합니다.
arr[-index] 엔터티 인덱스(열) 배열의 끝에서 'index'-th 값을 검색합니다. 열은 정수 또는 부울 형식이어야 합니다.
arr[(-1)] 엔터티 인덱스 배열의 마지막 값을 검색합니다.
arr[toint(indexAsString)] 함수 호출 indexAsString 값을 int로 캐스팅하고 이를 사용하여 배열을 첨자합니다.
dict[['where']] 엔터티 이름(열)으로 사용되는 키워드 where 값을 키로 사용하여 사전을 첨자합니다. 일부 쿼리 언어 키워드와 동일한 엔터티 이름을 따옴표로 묶어야 합니다.
dict.['where'] 또는 dict['where'] 상수 문자열을 키로 사용하여 where 사전을 첨자합니다.

가능한 경우 상수 아래 첨자를 사용하는 것이 좋습니다.

dynamic 값의 하위 개체에 액세스하면 하위 개체의 기본 형식이 다른 경우에도 다른 dynamic 값이 생성됩니다. 함수를 gettype 사용하여 값의 실제 기본 형식을 검색하고 아래에 나열된 캐스트 함수를 검색하여 실제 형식으로 캐스팅합니다.

동적 개체 캐스팅

동적 개체를 첨자한 후 값을 단순 형식으로 캐스팅해야 합니다.

Type
X parse_json('[100,101,102]') 배열
X[0] parse_json('100') dynamic
toint(X[1]) 101 int
Y parse_json('{"a1":100, "a b c":"2015-01-01"}') 사전
Y.a1 parse_json('100') dynamic
Y["a b c"] parse_json("2015-01-01") dynamic
todate(Y["a b c"]) datetime(2015-01-01) datetime

캐스트 함수는 다음과 같습니다.

  • tolong()
  • todouble()
  • todatetime()
  • totimespan()
  • tostring()
  • toguid()
  • parse_json()

동적 개체 빌드

여러 함수를 사용하여 새 dynamic 개체를 만들 수 있습니다.

  • bag_pack() 는 이름/값 쌍에서 속성 모음을 만듭니다.
  • pack_array() 는 값 목록에서 배열을 만듭니다(열 목록일 수 있으며, 각 행에 대해 지정된 열에서 배열을 만듭니다).
  • range() 는 산술 계열의 숫자로 배열을 만듭니다.
  • zip() 은 두 배열의 "병렬" 값을 단일 배열로 쌍을 이어집니다.
  • repeat() 는 반복되는 값을 사용하여 배열을 만듭니다.

또한 집계 값이 포함된 dynamic 배열을 만드는 다음과 같은 몇 가지 집계 함수가 있습니다.

  • buildschema() 는 여러 dynamic 값의 집계 스키마를 반환합니다.
  • make_bag() 는 그룹 내에서 동적 값의 속성 모음을 반환합니다.
  • make_bag_if() 는 조건자를 사용하여 그룹 내에서 동적 값의 속성 모음을 반환합니다.
  • make_list() 는 모든 값을 포함하는 배열을 순서대로 반환합니다.
  • make_list_if()는 모든 값이 순서대로 포함된 배열을 반환합니다(조건자 사용).
  • make_list_with_dvs()는 모든 값(null 값 포함)이 순서대로 포함된 배열을 반환합니다.
  • make_set()는 모든 고유 값이 포함된 배열을 반환합니다.
  • make_set_if() 는 모든 고유 값(조건자 포함)을 보유하는 배열을 반환합니다.

동적 형식에 대한 연산자 및 함수

스칼라 동적/배열 함수의 전체 목록은 동적/배열 함수를 참조 하세요.

연산자 또는 함수 동적 데이터 형식 사용
in 배열 배열의 요소가 == 값인 경우 True입니다.
where City in ('London', 'Paris', 'Rome')
!in 배열 == 값인 배열 요소가 없으면 True입니다.
array_length(array) 배열이 아닌 경우 Null
bag_has_key(모음,) 동적 모음 열에 지정된 키가 포함되어 있는지 여부를 확인합니다.
bag_keys(가방) 동적 속성 모음 개체의 모든 루트 키를 열거합니다.
bag_merge(bag1,...,bagN) 모든 속성이 병합된 동적 속성 모음에 동적 속성 모음을 병합합니다.
bag_set_key(bag,key,value) 지정된 키를 동적 속성 모음의 지정된 값으로 설정합니다.
extract_json(path,object), extract_json(path,object) 경로를 사용하여 개체로 이동합니다.
parse_json(source) JSON 문자열을 동적 개체로 바꿉니다.
range(from,to,step) 값의 배열입니다.
mv-expand listColumn 지정된 셀의 목록에 있는 각 값에 대한 행을 복제합니다.
summarize buildschema(column) 열 내용에서 형식 스키마를 유추합니다.
summarize make_bag(column) 열의 속성 모음(사전) 값을 하나의 속성 모음으로 병합합니다(키 중복 포함 안 함).
summarize make_bag_if(column,predicate) 열의 속성 모음(사전) 값을 키 중복(조건자 포함)없이 하나의 속성 모음에 병합합니다.
summarize make_list(column) 행 그룹을 평면화하고 열 값을 배열에 넣습니다.
summarize make_list_if(column,predicate) 행 그룹을 평면화하고, 열 값을 배열에 배치합니다(조건자 사용).
summarize make_list_with_nulls(column) 행 그룹을 평면화하고 null 값을 포함하여 열 값을 배열에 넣습니다.
summarize make_set(column) 행 그룹을 평면화하고 열 값을 중복 없이 배열에 넣습니다.

동적 데이터에 대한 인덱싱

모든 필드는 데이터 수집 중에 인덱싱됩니다. 인덱스의 범위는 단일 데이터 분할입니다.

동적 열을 인덱싱하기 위해 수집 프로세스는 동적 값(속성 이름, 값, 배열 요소) 내의 모든 "atomic" 요소를 열거하고 인덱스 작성기로 전달합니다. 그렇지 않으면 동적 필드에 문자열 필드와 동일한 반전된 용어 인덱스가 있습니다.

예제

동적 속성 모음

다음 쿼리는 동적 속성 모음을 만듭니다.

print o=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
| extend a=o.a, b=o.b, c=o.c, d=o.d

편의 dynamic 를 위해 쿼리 텍스트 자체에 표시되는 리터럴에는 형식이 booltimespandynamicrealguidlong있는 다른 Kusto 리터럴도 포함될 수 있습니다. datetime JSON을 통해 이 확장은 문자열을 구문 분석할 때(예: 함수를 사용 parse_json 하거나 데이터를 수집할 때) 사용할 수 없지만 다음을 수행할 수 있습니다.

print d=dynamic({"a": datetime(1970-05-11)})

JSON 인코딩 규칙을 따르는 값을 값으로 dynamic 구문 분석 string 하려면 함수를 parse_json 사용합니다. 예시:

  • parse_json('[43, 21, 65]') - 숫자의 배열
  • parse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}') - 사전
  • parse_json('21') - 숫자를 포함하는 동적 형식의 단일 값
  • parse_json('"21"') - 문자열을 포함하는 동적 형식의 단일 값
  • parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}') - 위의 예제에서 o와 같은 값을 제공합니다.

참고 항목

JavaScript와 달리 JSON은 문자열 및 속성 모음 속성 이름 주위에 큰따옴표(") 문자를 사용해야 합니다. 따라서 일반적으로 작은따옴표(') 문자를 사용하여 JSON으로 인코딩된 문자열 리터럴을 인용하는 것이 더 쉽습니다.

동적 열로 데이터 수집

다음 예제에서는 열과 datetime 열을 포함하는 dynamic 테이블을 정의한 다음 단일 레코드를 수집하는 방법을 보여 줍니다. 또한 CSV 파일에서 JSON 문자열을 인코딩하는 방법을 보여 줍니다.

// dynamic is just like any other type:
.create table Logs (Timestamp:datetime, Trace:dynamic)

// Everything between the "[" and "]" is parsed as a CSV line would be:
// 1. Since the JSON string includes double-quotes and commas (two characters
//    that have a special meaning in CSV), we must CSV-quote the entire second field.
// 2. CSV-quoting means adding double-quotes (") at the immediate beginning and end
//    of the field (no spaces allowed before the first double-quote or after the second
//    double-quote!)
// 3. CSV-quoting also means doubling-up every instance of a double-quotes within
//    the contents.

.ingest inline into table Logs
  [2015-01-01,"{""EventType"":""Demo"", ""EventValue"":""Double-quote love!""}"]

출력

Timestamp Trace
2015-01-01 00:00:00.0000000 {"EventType":"Demo","EventValue":"큰따옴표 사랑!"}