共用方式為


parse-kv 運算子

適用於:✅Microsoft網狀架構Azure 數據✅總管 Azure 監視器✅Microsoft Sentinel

從字串運算式擷取結構化資訊,並以索引鍵/值形式表示資訊。

支援下列擷取模式:

語法

指定的 delimeter

T parse-kv | 表達式 as( 索引鍵清單 with= pair_delimiter )( PairDelimiter KvDelimiter = kv_delimiter , [, quote = QuoteChars ...[, escape = EscapeChar ...]][, greedy = true])

未指定的分隔符

T parse-kv | 運算式 ( as索引鍵清單 with () [ =quote QuoteChars ...[, escape = EscapeChar ...]])

RegEx

T | parse-kv 運算式 (as 索引鍵List with )( regex = RegexPattern) )

深入瞭解 語法慣例

參數

姓名 類型​​ 必要 描述
運算式 string ✔️ 要從中擷取索引鍵值的表達式。
KeysList string ✔️ 索引鍵名稱及其實值數據類型的逗號分隔清單。 索引鍵的順序不一定符合它們出現在文字中的順序。
PairDelimiter string 分隔符,分隔索引鍵值組彼此。
KvDelimiter string 分隔符,分隔索引鍵與值。
QuoteChars string 一或兩個字元的字串常值,代表索引鍵名稱或擷取值可能包裝的開頭和結尾引號。 您可以重複 參數,以指定一組個別的開頭/結尾引號。
EscapeChar string 一個字元字串常值,描述可用於逸出引號值中特殊字元的字元。 如果使用多個逸出字元,則可以重複參數。
RegexPattern string 正則表達式,包含兩個擷取群組。 第一個群組代表索引鍵名稱,而第二個群組則代表索引鍵值。

傳回

原始輸入表格式表示式 T,會以每個指定索引鍵的數據行擴充以擷取。

注意

  • 如果索引鍵未出現在記錄中,則對應的數據行值將會 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 機器
服務已啟動 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 bytes 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 bytes 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 bytes 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 電話 市/鎮
John 5:55 新增
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 電話 市/鎮
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 機器
已開始 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 機器
服務 ' 已啟動 458745723 Node001

使用 regex 進行擷取

當沒有分隔符定義足夠好的文字結構時,正則表達式型擷取可能會很有用。

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

輸出

參考者 URL 要求 URL 廣告客戶標識碼
https://hostname.com/redirect?dest=/?h=1234 https://hostname.com/?h=1234 24fefbca-cf27-4d62-a623-249c2ad30c73