parse-where 運算子
評估字串運算式,並將其值剖析至一或多個計算的資料行。 結果只會是成功剖析的字串。
parse-where
剖析字串的方式與剖析相同,並篩選出未成功剖析的字串。
請參閱剖析運算子,這會針對未成功剖析的字串產生 Null。
語法
T| parse-where
[kind [kind=
regexFlags]] 表達式with
*
(stringConstantcolumnName [:
flags=
columnType]) *
...
深入瞭解 語法慣例。
參數
名稱 | 類型 | 必要 | Description |
---|---|---|---|
T | string |
✔️ | 要剖析的表格式輸入。 |
種類 | string |
✔️ | 其中一個 支援的種類值。 預設值是 simple 。 |
regexFlags | string |
如果 kind 為 regex ,則您可以指定 regex 旗標,例如 U 用於非greedy、 m 多行模式、 s 比對新行 \n ,以及 i 不區分大小寫。 您可以在 [旗標] 中找到更多旗標。 |
|
expression | string |
✔️ | 評估為字串的表達式。 |
stringConstant | string |
✔️ | 要搜尋和剖析的字串常數。 |
columnName | string |
✔️ | 要指派值的數據行名稱,從字串表達式擷取。 |
columnType | string |
指示要將值轉換成何種型別的純量值。 預設為 string 。 |
注意
- 如果您也想要捨棄或重新命名某些資料行,請使用 project。
- 在
*
模式中使用 來略過垃圾郵件值。 這個值無法在數據行之後string
使用。 - 除了 StringConstant 之外,剖析模式可能會以 ColumnName 為開頭。
- 如果剖析的 表達式 不是 類型
string
,則會轉換成 類型string
。
支援的種類值
Text | 描述 |
---|---|
simple |
這是預設值。 stringConstant 是一般字串值,且相符項目嚴格。 所有字串分隔符號都應出現在剖析字串中,而所有擴展資料行皆必須與要求的型別相符。 |
regex |
stringConstant 可能是正則表達式,且比對嚴格。 所有字串分隔符號 (可以是此模式的規則運算式) 都應出現在剖析字串中,而所有擴展資料行皆必須與要求的型別相符。 |
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
資料行包含多個您想要細分為個別資料行的值時,這個就非常有用。 例如,您可以拆解 developer trace ("printf
"/"Console.WriteLine
") 陳述式產生的資料行。
使用 parse
在下列範例中,Traces
資料表的 EventText
資料行包含 Event: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})
形式的字串。 下列作業將會以六個資料行來擴充資料表:resourceName
、totalSlices
、sliceNumber
、lockTime
、releaseTime
、previousLockTime
、Month
和 Day
。
有些字串沒有完全相符。
使用 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
使用不區分大小寫的 RegEx 旗標
在上述查詢中,預設模式會區分大小寫,因此已成功剖析字串。 未取得任何結果。
若要取得所需的結果,請以不區分大小寫的 (i
) RegEx 旗標來執行 parse-where
。
只會成功剖析三個字串,因此結果會是三筆記錄 (某些 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 |
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應