parse-where 演算子

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft 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 kindregexされている場合は、非グレディのU、複数行モードのm、一致する新しい行の\ns、大文字と小文字を区別しない場合の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の列EventTextEvent: NotifySliceRelease (resourceName={0}, totalSlices= {1}, sliceNumber={2}, lockTime={3}, releaseTime={4}, previousLockTime={5})形式の文字列が含まれているとします。 resourceNametotalSlicessliceNumberlockTimereleaseTimepreviousLockTimeMonthDayの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