parse-where 演算子
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
文字列式が評価され、その値が1つまたは複数の計算列に解析されます。 結果は、正常に解析された文字列のみになります。
parse-where
は、parse と同じ方法で文字列を解析し、正常に解析されなかった文字列を除外します。
解析できなかった文字列に対してnullを生成するparse 演算子を参照してください。
構文
T | parse-where
[kind=
kind [flags=
regexFlags]] expression with
*
(stringConstant columnName [:
columnType]) *
...
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
T | string |
✔️ | 解析する表形式の入力。 |
kind | string |
✔️ | サポートされている種類の値の 1 つ。 既定値は simple です。 |
regexFlags | string |
kindがregex されている場合は、非グレディのU 、複数行モードのm 、一致する新しい行の\n のs 、大文字と小文字を区別しない場合のi など、使用する正規表現フラグを指定できます。 その他のフラグは、 Flags で確認できます。 |
|
式 (expression) | string |
✔️ | 文字列に対して評価される式。 |
stringConstant | string |
✔️ | 検索および解析する文字列定数。 |
columnName | string |
✔️ | 文字列式から抽出された値を代入する列の名前。 |
columnType | string |
値の変換後の型を示すスカラー値。 既定値は string です。 |
Note
- いくつかの列を削除したり名前を変更したりする場合も project を使用します。
- パターンで
*
を使用して、迷惑メール値をスキップします。 この値は、列の後string
使用できません。 - 解析パターンは、StringConstantに加えて、ColumnNameで始まる場合があります。
- 解析された 式 型が
string
でない場合は、string
型に変換されます。
サポートされている種類の値
Text | 説明 |
---|---|
simple |
これが既定値です。 stringConstant は通常の文字列値であり、一致は厳密です。 すべての文字列の区切り記号が解析される文字列に含まれ、すべての拡張列が必要な型と一致している必要があります。 |
regex |
stringConstant は正規表現であり、一致は厳密です。 すべての文字列の区切り記号 (このモードでは正規表現が可能です) が解析される文字列に含まれ、すべての拡張列が必要な型と一致している必要があります。 |
正規表現モード
正規表現モードでは、解析はパターンを正規表現に変換し、 規則的な式を使用して 内部で処理される番号付きキャプチャ グループを使用して照合を行います。 次に例を示します。
parse-where kind=regex Col with * <regex1> var1:string <regex2> var2:long
解析によって内部的に生成される正規表現は.*?<regex1>(.*?)<regex2>(\-\d+)
です。
*
は.*?
に変換されました。string
は.*?
に変換されました。long
は\-\d+
に変換されました。
返品
演算子に与えられた列の一覧に従って拡張された入力テーブル。
Note
出力には、正常に解析された文字列のみが含まれます。 パターンに一致しない文字列は除外されます。
例
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})
形式の文字列が含まれているとします。 resourceName
、totalSlices
、sliceNumber
、lockTime
、releaseTime
、previousLockTime
、Month
、Day
の6つの列を含むこのテーブルが、下記の操作によって拡張されます。
一部の文字列には完全一致がありません。
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 |
正規表現フラグを使用する正規表現モード
次のクエリを使用して、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
大文字と小文字を区別しない正規表現フラグ
上記のクエリでは、既定のモードでは大文字と小文字が区別されていたため、文字列は正常に解析されました。 結果は取得されませんでした。
必要な結果を得るには、parse-where
大文字と小文字を区別しない(i
)正規表現フラグを指定して実行します。
3つの文字列のみが正常に解析されるため、結果は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 |