parse-kv 演算子
適用対象: ✅Microsoft Fabric✅Azure データ エクスプローラー✅Azure Monitor✅Microsoft Sentinel
文字列式から構造化された情報を抽出し、情報をキー/値形式で表します。
次の抽出モードがサポートされています。
- 指定したデリメーター: キー/値とペアの分離方法を指定する、指定された区切り記号に基づく抽出。
- 指定されていない delimeter: 区切り記号を指定する必要のない抽出。 英数字以外の文字は、区切り記号と見なされます。
- Regex: 規則式に基づく抽出。
構文
指定されたデシメートル
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)
)
構文規則について詳しく知る。
パラメーター
返品
元の入力表形式の式 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 |