parse-kv 연산자
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
문자열 식에서 구조화된 정보를 추출하고 키/값 형식으로 정보를 나타냅니다.
지원되는 추출 모드는 다음과 같습니다.
- 지정된 구분 기호: 키/값과 쌍을 서로 구분하는 방법을 지정하는 지정된 구분 기호를 기반으로 추출합니다.
- 지정되지 않은 구분 기호: 구분 기호를 지정할 필요 없이 추출합니다. 숫자가 아닌 문자는 구분 기호로 간주됩니다.
- Regex: 정규식을 기반으로 추출합니다.
구문
지정된 구분 기호
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 |