将序列转到Kusto / Azure Data Explorer中的列

时间:2018-12-20 17:10:45

标签: kusto azure-data-explorer

我正在尝试将Azure日志(kusto)中的Windows事件日志xml事件数据转换为列,因此给定parse_xml()返回的xml中的EventData数组,如何将其转换为列?

我尝试了mvexplode,它给了我行(系列),但是然后我想将它们变成列,其中col name是标记中的属性“ Name”,值是text属性。

下面的Windows事件日志xml供参考

"\"Date\",\"Transaction\",\"Name\",\"Memo\",\"Amount\"\n\"9/7/2016\",\"DEBIT\",\"DEBIT PURCHASE\",\"Food Yummy\",\"-4.8000\"\n\"9/7/2016\",\"DEBIT\",\"DEBIT PURCHASE\",\"Gas Blah\",\"-28.0000\"\n\n"

1 个答案:

答案 0 :(得分:2)

以下方法可能有效 (取决于您实际计划查询数据的方式,可能会有更有效的方法-因此,如果您可以共享示例查询,可能会有所帮助)

datatable(someColumn:string, xmlValue:string)
["hello", '<EventData xmlns="http://schemas.microsoft.com/win/2004/08/events/event">\r\n'
  '<Data Name="DomainBehaviorVersion">8</Data>\r\n'
  '<Data Name="OemInformation">12</Data>\r\n'
  '<Data Name="DomainPolicyChanged">Password Policy</Data>\r\n'
  '<Data Name="DomainName">XXX</Data>\r\n'
  '<Data Name="DomainSid">S-1-5-21-....</Data>\r\n'
  '<Data Name="SubjectUserSid">S-1-5-18</Data>\r\n'
  '<Data Name="SubjectUserName">SRV-XX-001$</Data>\r\n'
  '<Data Name="SubjectDomainName">DOMAIN</Data>\r\n'
  '<Data Name="SubjectLogonId">0x3e7</Data>\r\n'
  '<Data Name="PrivilegeList">-</Data>\r\n'
  '<Data Name="MinPasswordAge"></Data>\r\n'
  '<Data Name="MaxPasswordAge"></Data>\r\n'
  '<Data Name="ForceLogoff"></Data>\r\n'
  '<Data Name="LockoutThreshold">耠</Data>\r\n'
  '<Data Name="LockoutObservationWindow"></Data>\r\n'
  '<Data Name="LockoutDuration"></Data>\r\n'
  '<Data Name="PasswordProperties">耠-</Data>\r\n'
  '<Data Name="MinPasswordLength">-</Data>\r\n'
  '<Data Name="PasswordHistoryLength">-</Data>\r\n'
  '<Data Name="MachineAccountQuota">-</Data>\r\n'
  '<Data Name="MixedDomainMode">1</Data>\r\n'
'</EventData>',
"world", '<EventData xmlns="http://schemas.microsoft.com/win/2004/08/events/event">\r\n'
  '<Data Name="DomainBehaviorVersion">876543</Data>\r\n'
  '<Data Name="OemInformation">12345</Data>\r\n'
'</EventData>'
]
| extend parsed = parse_xml(xmlValue).EventData.Data
| mvexpand parsed
| summarize d = make_dictionary(pack(tostring(parsed['@Name']), parsed['#text'])) by someColumn
| evaluate bag_unpack(d)

此示例中使用的用于运算符/功能的文档: