從結構化字串資料中解壓縮資料

已完成

字串欄位也可以包含 JSON 或索引鍵-值組等結構化資料。 KQL 可讓您輕鬆存取這些值,以供進一步分析。

動態欄位

在記錄分析資料表中,具有定義為動態的欄位類型。 動態欄位包含索引鍵/值組,例如:

{"eventCategory":"Autoscale","eventName":"GetOperationStatusResult","operationId":"xxxxxxxx-6a53-4aed-bab4-575642a10226","eventProperties":"{\"OldInstancesCount\":6,\"NewInstancesCount\":5}","eventDataId":" xxxxxxxx -efe3-43c2-8c86-cd84f70039d3","eventSubmissionTimestamp":"2020-11-30T04:06:17.0503722Z","resource":"ch-appfevmss-pri","resourceGroup":"CH-RETAILRG-PRI","resourceProviderValue":"MICROSOFT.COMPUTE","subscriptionId":" xxxxxxxx -7fde-4caf-8629-41dc15e3b352","activityStatusValue":"Succeeded"}

若要存取動態欄位內的字串,請使用點標記法。 SigninLogs 資料表中的 DeviceDetail 欄位屬於動態類型。 在此範例中,您能以 DeviceDetail.operatingSystem 這個欄位名稱存取作業系統。

SigninLogs 
| extend OS = DeviceDetail.operatingSystem

以下的查詢範例示範了如何搭配使用動態欄位與 SigninLogs 資料表。

// Example query for SigninLogs showing how to break out packed fields.

SigninLogs 
| extend OS = DeviceDetail.operatingSystem, Browser = DeviceDetail.browser 
| extend StatusCode = tostring(Status.errorCode), StatusDetails = tostring(Status.additionalDetails) 
| extend Date = startofday(TimeGenerated) 
| summarize count() by Date, Identity, UserDisplayName, UserPrincipalName, IPAddress, ResultType, ResultDescription, StatusCode, StatusDetails 
| sort by Date

JSON

KQL 會提供函式來操作儲存在字串欄位中的 JSON。 許多記錄會以 JSON 格式提交資料,您必須知道如何將 JSON 資料轉換為可查詢的欄位。

以下範例是 JSON 的相關函式和運算子清單。

Function 說明
parse-json() 或 todynamic() 將字串解譯為 JSON 值,並以動態形式傳回值。 使用 JsonField 或 JsonField["Key"] 任一種函式來參照至欄位
mv-expand 套用至動態類型陣列或是屬性包資料行,讓集合中的每個數值都能得到分開的資料列。 所有其他在展開資料列中的資料行皆會被複製。 mv_expand 是處理 JSON 陣列的最簡單方式。
mv-apply 將子查詢套用至每一筆記錄,並傳回所有子查詢結果的聯集。 將查詢套用至陣列中的每個值。

分別執行每個查詢以確認結果。

SigninLogs 
| extend AuthDetails =  parse_json(AuthenticationDetails) 
| extend AuthMethod =  AuthDetails[0].authenticationMethod 
| extend AuthResult = AuthDetails[0].["authenticationStepResultDetail"] 
| project AuthMethod, AuthResult, AuthDetails 


SigninLogs 
| mv-expand AuthDetails = parse_json(AuthenticationDetails) 
| project AuthDetails

SigninLogs 
| mv-apply AuthDetails = parse_json(AuthenticationDetails) on
(where AuthDetails.authenticationMethod == "Password")