다음을 통해 공유


parse-kv 연산자

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

문자열 식에서 구조화된 정보를 추출하고 키/값 형식으로 정보를 나타냅니다.

지원되는 추출 모드는 다음과 같습니다.

구문

지정된 구분 기호

T parse-kv | as ( KeysList = ) pair_delimiter with ( PairDelimiter kv_delimiter = , KvDelimiter [, = quote QuoteChars ... [, escape = EscapeChar ...]] [, greedy = true])

지정되지 않은 구분 기호

T parse-kv | as ( KeysList ) ( with [quote = QuoteChars ... [, escape = EscapeChar ...]])

Regex

T | parse-kv ( as KeysList regex ( with = ) RegexPattern) )

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

매개 변수

이름 Type 필수 설명
string ✔️ 키 값을 추출할 식입니다.
KeysList string ✔️ 키 이름 및 해당 값 데이터 형식의 쉼표로 구분된 목록입니다. 키의 순서는 텍스트에 표시되는 순서와 일치하지 않아도됩니다.
PairDelimiter string 키 값 쌍을 서로 구분하는 구분 기호입니다.
KvDelimiter string 키와 값을 구분하는 구분 기호입니다.
QuoteChars string 키 이름 또는 추출된 값을 래핑할 수 있는 여는 따옴표와 닫는 따옴표를 나타내는 1자 또는 2자 문자열 리터럴입니다. 매개 변수를 반복하여 별도의 여는 따옴표/닫는 따옴표 집합을 지정할 수 있습니다.
EscapeChar string 따옴표 붙은 값으로 특수 문자를 이스케이프하는 데 사용할 수 있는 문자를 설명하는 한 문자 문자열 리터럴입니다. 여러 이스케이프 문자를 사용하는 경우 매개 변수를 반복할 수 있습니다.
RegexPattern string 정확히 두 개의 캡처링 그룹을 포함하는 정규식입니다. 첫 번째 그룹은 키 이름을 나타내고 두 번째 그룹은 키 값을 나타냅니다.

반품

추출할 지정된 키당 열로 확장된 원래 입력 테이블 형식 식 T입니다.

참고 항목

  • 키가 레코드에 표시되지 않으면 열 형식에 따라 해당 열 값이 빈 문자열이거나 빈 문자열이 됩니다 null .
  • 연산자에 나열된 키만 추출됩니다.
  • 키의 첫 번째 모양이 추출되고 후속 값은 무시됩니다.
  • 키와 값을 추출할 때 선행 공백과 후행 공백은 무시됩니다.

예제

잘 정의된 구분 기호를 사용하여 추출

다음 예제에서 키와 값은 잘 정의된 구분 기호로 구분됩니다. 이러한 구분 기호는 쉼표 및 콜론 문자입니다.

print str="ThreadId:458745723, Machine:Node001, Text: The service is up, Level: Info"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (pair_delimiter=',', kv_delimiter=':')
| project-away str

출력

Text ThreadId 컴퓨터
서비스가 설정되었습니다. 458745723 Node001

값 따옴표로 추출

키 이름 또는 값이 따옴표로 래핑되어 값 자체에 구분 기호 문자를 포함할 수 있는 경우가 있습니다. 다음 예제에서는 인수를 quote 사용하여 이러한 값을 추출하는 방법을 보여 줍니다.

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="connection aborted" "event time"=2021-01-01T10:00:54'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"')
| project-away str

출력

이벤트 시간 src dst bytes 실패
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 연결이 중단됨

다음 예제에서는 다른 여는 따옴표와 닫는 따옴표를 사용합니다.

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure=(connection aborted) (event time)=(2021-01-01 10:00:54)'
| parse-kv str as (['event time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='()')
| project-away str

출력

이벤트 시간 src dst bytes 실패
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 연결이 중단됨

다음 예제와 같이 값 자체에 올바르게 이스케이프된 따옴표 문자가 포함될 수 있습니다.

print str='src=10.1.1.123 dst=10.1.1.124 bytes=125 failure="the remote host sent \\"bye!\\"" time=2021-01-01T10:00:54'
| parse-kv str as (['time']:datetime, src:string, dst:string, bytes:long, failure:string) with (pair_delimiter=' ', kv_delimiter='=', quote='"', escape='\\')
| project-away str

출력

시간 src dst bytes 실패
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 원격 호스트가 보낸 "안녕!"

greedy 모드에서 추출

따옴표가 지정되지 않은 값에 쌍 구분 기호가 포함될 수 있는 경우가 있습니다. 이 경우 모드를 greedy 사용하여 끝 값을 검색할 때 다음 키 모양(또는 문자열의 끝)까지 검사하도록 연산자에 표시합니다.

다음 예제에서는 지정된 모드와 함께 또는 지정하지 않고 연산자가 greedy 작동하는 방식을 비교합니다.

print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=')
| project-away str

출력

name phone city
John 5:55 새로 만들기
print str='name=John Doe phone=555 5555 city=New York'
| parse-kv str as (name:string, phone:string, city:string) with (pair_delimiter=' ', kv_delimiter='=', greedy=true)
| project-away str

출력

name phone city
John Doe 555 5555 뉴욕

잘 정의된 구분 기호가 없는 추출

다음 예제에서는 무수 문자가 아닌 문자가 유효한 구분 기호로 간주됩니다.

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: Started"
| parse-kv str as (Text: string, ThreadId:long, Machine: string)
| project-away str

출력

Text ThreadId 컴퓨터
Started 458745723 Node001

다음 예제와 같이 이 모드에서는 따옴표 및 이스케이프 값을 사용할 수 있습니다.

print str="2021-01-01T10:00:34 [INFO] ThreadId:458745723, Machine:Node001, Text: 'The service \\' is up'"
| parse-kv str as (Text: string, ThreadId:long, Machine: string) with (quote="'", escape='\\')
| project-away str

출력

Text ThreadId 컴퓨터
서비스 '가 설정되었습니다. 458745723 Node001

regex를 사용하여 추출

구분 기호가 텍스트 구조를 충분히 정의하지 않는 경우 정규식 기반 추출이 유용할 수 있습니다.

print str=@'["referer url: https://hostname.com/redirect?dest=/?h=1234", "request url: https://hostname.com/?h=1234", "advertiser id: 24fefbca-cf27-4d62-a623-249c2ad30c73"]'
| parse-kv str as (['referer url']:string, ['request url']:string, ['advertiser id']: guid) with (regex=@'"([\w ]+)\s*:\s*([^"]*)"')
| project-away str

출력

참조자 URL 요청 URL 광고주 ID
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73