次の方法で共有


parse-kv 演算子

適用対象: ✅Microsoft FabricAzure データ エクスプローラーAzure MonitorMicrosoft Sentinel

文字列式から構造化された情報を抽出し、情報をキー/値形式で表します。

次の抽出モードがサポートされています。

構文

指定されたデシメートル

T | parse-kv Expression as ( KeysList ) with ( pair_delimiter = PairDelimiter , kv_delimiter = KvDelimiter [, quote = QuoteChars ...[, escape = EscapeChar ...]][, greedy = true] )

指定されていない区切り記号

T | parse-kv Expression as ( KeysList ) with ( [quote = QuoteChars ...[, escape = EscapeChar ...]] )

Regex

T | parse-kv Expression as ( KeysList ) with ( regex = RegexPattern) )

構文規則について詳しく知る。

パラメーター

件名 タイプ Required 内容
Expression string ✔️ キー値の抽出元となる式。
KeysList string ✔️ キー名とその値データ型のコンマ区切りのリスト。 キーの順序は、テキストに表示される順序と一致する必要はありません。
PairDelimiter string キー値のペアを互いに分離する区切り記号。
KvDelimiter string キーと値を区切る区切り記号。
QuoteChars string キー名または抽出された値をラップできる開始引用符と終了引用符を表す 1 文字または 2 文字の文字列リテラル。 パラメーターを繰り返して、開始/終了引用符の個別のセットを指定できます。
EscapeChar string 引用符で囲まれた値の特殊文字をエスケープするために使用できる文字を記述する 1 文字の文字列リテラル。 複数のエスケープ文字が使用されている場合は、パラメーターを繰り返すことができます。
RegexPattern string 2 つのキャプチャ グループを正確に含む規則的な式。 最初のグループはキー名を表し、2 番目のグループはキー値を表します。

返品

元の入力表形式の式 T。抽出する指定されたキーごとの列で拡張されます。

Note

  • キーがレコードに表示されない場合、対応する列の値は、列の種類に応じて 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 Machine
サービスが稼働しています 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 バイト failure
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 バイト failure
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

出力

time src dst バイト failure
2021-01-01 10:00:54.0000000 10.1.1.123 10.1.1.124 125 リモート ホストが "bye!" を送信しました

最長一致モードでの抽出

引用符で囲まれていない値にペア区切り記号が含まれている場合があります。 この場合は、 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 電話 city
John 555 新しい
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 電話 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 Machine
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 Machine
サービス ' が稼働しています 458745723 Node001

正規表現を使用した抽出

区切り記号がテキスト構造を十分に定義していない場合は、正規表現ベースの抽出が役立ちます。

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

出力

referer url 要求 URL 広告主 ID
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73