parse-where 연산자
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
문자열 식을 계산하고 해당 값을 하나 이상의 계산 열로 구문 분석합니다. 결과는 성공적으로 구문 분석된 문자열입니다.
parse-where
구문 분석과 동일한 방식으로 문자열을 구문 분석하고 성공적으로 구문 분석되지 않은 문자열을 필터링합니다.
구문 분석되지 않은 문자열에 대해 null을 생성하는 구문 분석 연산자를 참조하세요.
구문
T | parse-where
[kind=
kind [flags=
regexFlags]] expression with
*
(stringConstant columnName [:
columnType]) *
...
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
T | string |
✔️ | 구문 분석할 테이블 형식 입력입니다. |
kind | string |
✔️ | 지원되는 종류 값 중 하나입니다. 기본값은 simple 입니다. |
regexFlags | string |
종류인 경우 ungreedy, 다중 줄 모드s , m 일치 새 줄 \n 및 i 대/소문자를 구분하지 않는 경우처럼 U 사용할 정규식 플래그를 지정할 수 있습니다.regex 플래그에서 더 많은 플래그를 찾을 수 있습니다. |
|
expression | string |
✔️ | 문자열로 계산되는 식입니다. |
stringConstant | string |
✔️ | 검색하고 구문 분석할 문자열 상수입니다. |
columnName | string |
✔️ | 문자열 식에서 추출된 값을 할당할 열의 이름입니다. |
columnType | string |
값을 변환할 형식을 나타내는 스칼라 값입니다. 기본값은 .입니다 string . |
참고 항목
- 일부 열을 삭제하거나 이름을 바꾸려면 프로젝트를 사용합니다.
- 패턴에서 정크 값을 건너뛰는 데 사용합니다
*
. 이 값은 열 뒤string
를 사용할 수 없습니다. - 구문 분석 패턴은 StringConstant 외에도 ColumnName으로 시작할 수 있습니다.
- 구문 분석된 식이 형식이 아니면 형식
string
string
으로 변환됩니다.
지원되는 종류 값
Text | 설명 |
---|---|
simple |
기본값입니다. stringConstant 는 일반 문자열 값이며 일치는 엄격합니다. 모든 문자열 구분 기호가 구문 분석된 문자열에 표시되어야 하고, 모든 확장 열이 필요한 형식과 일치해야 합니다. |
regex |
stringConstant 는 정규식일 수 있으며 일치는 엄격합니다. 이 모드에 대한 regex일 수 있는 모든 문자열 구분 기호가 구문 분석된 문자열에 표시되어야 하고, 모든 확장 열이 필요한 형식과 일치해야 합니다. |
Regex 모드
regex 모드에서 구문 분석에서는 패턴을 regex로 변환하고 정규식을 사용하여 내부적으로 처리되는 번호가 매겨진 캡처된 그룹을 사용하여 일치를 수행합니다. 예시:
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
내부적으로 구문 분석에서 생성되는 regex는 .입니다 .*?<regex1>(.*?)<regex2>(\-\d+)
.
*
가.*?
로 변환되었습니다.string
가.*?
로 변환되었습니다.long
가\-\d+
로 변환되었습니다.
반품
연산자에 제공되는 열 목록에 따라 확장되는 입력 테이블입니다.
참고 항목
성공적으로 구문 분석된 문자열만 출력에 있습니다. 패턴과 일치하지 않는 문자열은 필터링됩니다.
예제
parse-where
연산자는 동일한 string
식에서 여러 extract
애플리케이션을 사용하여 테이블을 extend
(확장)하는 효율적인 방식을 제공합니다. 이는 테이블에 개별 열로 string
분할하려는 여러 값이 포함된 열이 있는 경우에 가장 유용합니다. 예를 들어 개발자 추적(""printf
/"Console.WriteLine
") 문에 의해 생성된 열을 분리할 수 있습니다.
parse
사용
아래 예제에서 테이블 Traces
열 EventText
에는 폼Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
의 문자열이 포함됩니다. 아래 작업은 6개의 열, 즉 , totalSlices
, sliceNumber
lockTime
, releaseTime
, previousLockTime
Month
및 Day
6개의 열로 테이블을 확장합니다 resourceName
.
일부 문자열에는 전체 일치 항목이 없습니다.
계산 parse
열에는 null이 있습니다.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previouLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previouLockTime
출력
resourceName에 대한 추천 사항을 찾았음 | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
parse-where
사용
'parse-where'를 사용하면 결과에서 실패한 구문 분석된 문자열을 필터링합니다.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=invalid_number, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=invalid_datetime, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=20, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=invalid_number, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where EventText with * "resourceName=" resourceName ", totalSlices=" totalSlices: long * "sliceNumber=" sliceNumber: long * "lockTime=" lockTime ", releaseTime=" releaseTime: date "," * "previousLockTime=" previousLockTime: date ")" *
| project
resourceName,
totalSlices,
sliceNumber,
lockTime,
releaseTime,
previousLockTime
출력
resourceName에 대한 추천 사항을 찾았음 | totalSlices | sliceNumber | lockTime | releaseTime | previousLockTime |
---|---|---|---|---|---|
PipelineScheduler | 27 | 20 | 02/17/2016 08:40:01 | 2016-02-17 08:40:01.0000000 | 2016-02-17 08:39:01.0000000 |
PipelineScheduler | 27 | 22 | 02/17/2016 08:41:01 | 2016-02-17 08:41:00.0000000 | 2016-02-17 08:40:01.0000000 |
regex 플래그를 사용하는 Regex 모드
resourceName 및 totalSlices를 얻으려면 다음 쿼리를 사용합니다.
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
출력
resourceName에 대한 추천 사항을 찾았음 | totalSlices |
---|---|
parse-where
대/소문자를 구분하지 않는 정규식 플래그 사용
위의 쿼리에서 기본 모드는 대/소문자를 구분하므로 문자열이 성공적으로 구문 분석되었습니다. 결과를 얻지 못했습니다.
필요한 결과를 얻으려면 대/소문자를 구분하지 않는(i
) regex 플래그를 사용하여 실행 parse-where
합니다.
세 개의 문자열만 성공적으로 구문 분석되므로 결과는 3개의 레코드입니다(일부 totalSlices는 잘못된 정수로 유지됨).
let Traces = datatable(EventText: string)
[
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=11, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=15, lockTime=02/17/2016 08:40:00, releaseTime=02/17/2016 08:40:00, previousLockTime=02/17/2016 08:39:00)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=non_valid_integer, sliceNumber=44, lockTime=02/17/2016 08:40:01, releaseTime=02/17/2016 08:40:01, previousLockTime=02/17/2016 08:39:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=22, lockTime=02/17/2016 08:41:01, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:01)",
"Event: NotifySliceRelease (resourceName=PipelineScheduler, totalSlices=27, sliceNumber=16, lockTime=02/17/2016 08:41:00, releaseTime=02/17/2016 08:41:00, previousLockTime=02/17/2016 08:40:00)"
];
Traces
| parse-where kind = regex flags=i EventText with * "RESOURCENAME=" resourceName "," * "totalSlices=" totalSlices: long "," *
| project resourceName, totalSlices
출력
resourceName에 대한 추천 사항을 찾았음 | totalSlices |
---|---|
PipelineScheduler | 27 |
PipelineScheduler | 27 |
PipelineScheduler | 27 |