자습서: 일반 연산자 알아보기

Kusto 쿼리 언어(KQL)Azure Data Explorer, Azure Monitor Log Analytics, Azure Sentinel 등에서 쿼리를 작성하는 데 사용됩니다. 이 자습서에서는 데이터에 액세스하고 분석하는 데 사용되는 필수 KQL 연산자를 소개합니다.

Azure Monitor에서 로그를 쿼리하는 방법에 대한 자세한 지침은 로그 쿼리 시작을 참조하세요.

참고

원하는 항목을 찾을 수 없나요? 이 문서는 다음과 같이 최근에 분할되었습니다.

이 자습서에서 학습할 방법은 다음과 같습니다.

이 자습서의 예제에서는 도움말 클러스터에서 공개적으로 사용할 수 있는 테이블을 사용합니다StormEvents. 사용자 고유의 데이터로 탐색하려면 사용자 고유의 무료 클러스터를 만듭니다.

사전 요구 사항

행 수 계산

먼저 count 연산자를 사용하여 테이블에서 storm 레코드 수를 찾습니다 StormEvents .

StormEvents 
| count

출력

개수
59066

데이터 샘플 보기

데이터 감각을 얻으려면 take 연산자를 사용하여 레코드 샘플을 봅니다. 이 연산자는 테이블에서 지정된 수의 임의 행을 반환하므로 일반 데이터 구조 및 내용을 미리 보는 데 유용할 수 있습니다.

StormEvents 
| take 5

다음 표에서는 반환된 22개 열 중 6개만 보여 줍니다. 전체 출력을 보려면 쿼리를 실행합니다.

StartTime EndTime EpisodeId EventId 시스템 상태 EventType ...
2007-09-20T21:57:00Z 2007-09-20T22:05:00Z 11078 60913 FLORIDA 토네이도 ...
2007-12-20T07:50:00Z 2007-12-20T07:53:00Z 12554 68796 미시시피 뇌우를 동반한 바람 ...
2007-12-30T16:00:00Z 2007-12-30T16:05:00Z 11749 64588 GEORGIA 뇌우를 동반한 바람 ...
2007-09-29T08:11:00Z 2007-09-29T08:11:00Z 11091 61032 대서양 남부 용오름 ...
2007-09-18T20:00:00Z 2007-09-19T18:00:00Z 11074 60904 FLORIDA 폭우 ...

열 하위 집합 선택

프로젝트 연산자를 사용하여 보기를 단순화하고 열의 특정 하위 집합을 선택합니다. 를 사용하는 project 것이 모든 열을 보는 것보다 더 효율적이고 읽기 쉬운 경우가 많습니다.

StormEvents
| take 5
| project State, EventType, DamageProperty

출력

시스템 상태 EventType DamageProperty
대서양 남부 용오름 0
FLORIDA 폭우 0
FLORIDA 토네이도 6200000
GEORGIA 뇌우를 동반한 바람 2000
미시시피 뇌우를 동반한 바람 20000

고유 값 나열

이전 쿼리의 결과에 따라 여러 유형의 폭풍이 있는 것으로 보입니다. distinct 연산자를 사용하여 모든 고유한 Storm 형식을 나열합니다.

StormEvents 
| distinct EventType

테이블에는 46가지 유형의 폭풍이 있습니다. 그 중 10점의 샘플은 다음과 같습니다.

EventType
뇌우를 동반한 바람
우박
갑작스러운 홍수
가뭄
겨울 날씨
겨울 폭풍
폭설
강풍
서리/동결
홍수
...

조건별로 필터링

where 연산자는 특정 조건에 따라 데이터 행을 필터링합니다.

다음 쿼리는 특정 EventType의 특정 State 에서 Storm 이벤트를 찾습니다.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| project StartTime, EndTime, State, EventType, DamageProperty

이러한 조건과 일치하는 146개의 이벤트가 있습니다. 그 중 5개 샘플은 다음과 같습니다.

StartTime EndTime 시스템 상태 EventType DamageProperty
2007-01-13T08:45:00Z 2007-01-13T10:30:00Z 텍사스 홍수 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z 텍사스 홍수 0
2007-01-13T09:30:00Z 2007-01-13T21:00:00Z 텍사스 홍수 0
2007-01-15T22:00:00Z 2007-01-16T22:00:00Z 텍사스 홍수 20000
2007-03-12T02:30:00Z 2007-03-12T06:45:00Z 텍사스 홍수 0
... ... ... ... ...

결과 정렬

가장 큰 피해를 입힌 텍사스의 상위 홍수를 보려면 정렬 연산자를 사용하여 열을 기준으로 DamageProperty 행을 내림차순으로 정렬합니다. 기본 정렬 순서는 내림차순입니다. 오름차순으로 정렬하려면 를 지정합니다 asc.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| sort by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty

출력

StartTime EndTime 시스템 상태 EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 텍사스 홍수 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 텍사스 홍수 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 텍사스 홍수 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 텍사스 홍수 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 텍사스 홍수 750000
... ... ... ... ...

상위 n 개 행 가져오기

top 연산자는 지정된 열을 기준으로 정렬된 첫 번째 n개의 행을 반환합니다.

다음 쿼리는 가장 손상된 속성을 발생시킨 5개의 텍사스 홍수를 반환합니다.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty
| project StartTime, EndTime, State, EventType, DamageProperty

출력

StartTime EndTime 시스템 상태 EventType DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 텍사스 홍수 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 텍사스 홍수 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 텍사스 홍수 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 텍사스 홍수 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 텍사스 홍수 750000

참고

연산자의 순서가 중요합니다. 여기에 배치 topwhere 하면 다른 결과를 얻을 수 있습니다. 데이터가 각 연산자에 의해 순서대로 변환되기 때문입니다. 자세한 내용은 테이블 형식 식 문을 참조하세요.

계산 열 만들기

프로젝트확장 연산자는 모두 계산 열을 만들 수 있습니다.

를 사용하여 project 보려는 열만 지정하고 를 사용하여 extend 계산 열을 테이블 끝에 추가합니다.

다음 쿼리는 와 EndTime의 차이를 사용하여 계산 Duration 열을 StartTime 만듭니다. 몇 개의 선택 열만 보려고 하므로 이 경우 를 사용하는 project 것이 더 좋습니다.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| project StartTime, EndTime, Duration = EndTime - StartTime, DamageProperty

출력

StartTime EndTime 기간 DamageProperty
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z 1.01:30:00 5000000
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z 12:00:00 1200000
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z 05:00:00 1000000
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z 08:00:00 750000
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z 03:00:00 750000

계산 열을 Duration 살펴보면 가장 큰 피해를 입힌 홍수가 가장 긴 홍수라는 것을 알 수 있습니다.

다른 모든 열과 함께 계산 Duration 열을 보려면 를 사용합니다extend. 열이 Duration 마지막 열로 추가됩니다.

StormEvents
| where State == 'TEXAS' and EventType == 'Flood'
| top 5 by DamageProperty desc
| extend Duration = EndTime - StartTime

출력

StartTime EndTime ... Duration
2007-08-18T21:30:00Z 2007-08-19T23:00:00Z ... 1.01:30:00
2007-06-27T00:00:00Z 2007-06-27T12:00:00Z ... 12:00:00
2007-06-28T18:00:00Z 2007-06-28T23:00:00Z ... 05:00:00
2007-06-27T00:00:00Z 2007-06-27T08:00:00Z ... 08:00:00
2007-06-26T20:00:00Z 2007-06-26T23:00:00Z ... 03:00:00

한 세트의 값을 다른 세트의 값으로 매핑

정적 매핑은 결과 표시를 변경하는 데 유용한 기술입니다. KQL에서 정적 매핑을 수행하는 한 가지 방법은 동적 사전 및 접근자를 사용하여 한 집합에서 다른 집합으로 값을 매핑하는 것입니다.

let sourceMapping = dynamic(
  {
    "Emergency Manager" : "Public",
    "Utility Company" : "Private"
  });
StormEvents
| where Source == "Emergency Manager" or Source == "Utility Company"
| project EventId, Source, FriendlyName = sourceMapping[Source]

출력

EventId Source FriendlyName
68796 긴급 상황 관리자 공용
... ... ...
72609 유틸리티 회사 프라이빗
... ... ...

다음 단계

이제 Kusto 쿼리 작성의 필수 요소에 대해 잘 알고 있으므로 다음 자습서로 이동하여 집계 함수를 사용하여 데이터에 대한 심층적인 인사이트를 얻는 방법을 알아봅니다.