我有一个简单的用例。我想根据json文件是否包含一些名为" event"的字段来过滤数据。
我的数据可以包含1,2,3或任意数量的json数组。
数组中包含json对象。
所以,考虑我有4个数组:[A],[B],[C],[D]
我可以使用JSON Extractor在U-SQL中提取它们。然后将数组值作为JSONTuple。
一旦提取出来。我想检查一个数组是否有一个特定的json字段。
赞:select @data where JsonContains(A, "ordernumber") .
我怎样才能在USQL中这样做?简单的方法:
Select [A], [B], [c], [D] where A constains "event" ...
我尝试过,但在sql中没有办法做。请帮忙。感谢。
作为旁注,我认为在usql中处理这些不匹配的列数(我必须过滤行集的唯一方法)是:
过滤给定列的数据。就像我在问题中询问的一样。
使用动态列,例如选择A ["数据"]作为A ["名称"]?奇怪的是,U-SQL会要求您事先为列命名,否则这将是一个了不起的功能。
您看到要处理的任何其他方法:文件中的任意列数,缺少列,不同JSON文件中列数不匹配?
示例输入:
[
{
"PID": "10201820",
"System": [
{
"Name": "EventName",
"Value": "SystemEvent"
},
{
"Name": "Name",
"Value": "Test"
},
],
"Domain": [
{
"Name": "Type",
"Value": "ENTER"
},
{
"Name": "startTime",
"Value": "1/10/2018 11:21:10 AM"
}
],
"Custom": [
{
"Name": "platform",
"Value": "Windows"
},
{
"Name": "sys:eventts",
"Value": "2018-01-10T11:21:10.440Z"
},
{
"Name": "sys:mguid",
"Value": "e236426e-a246-3e99f4f9bf95"
},
{
"Name": "bus:AS2",
"Value": "TestAs2From"
},
{
"Name": "bus:AS3",
"Value": "TestAs2To"
},
{
"Name": "bus:Message-ID",
"Value": "efd4-46bf-b11d-d838b4540aba"
}
],
"ttl": 8640000
},
{
"PID": "201870",
"System": [
{
"Name": "EventName",
"Value": "SystemEvent"
}
],
"Domain": [
{
"Name": "Type",
"Value": "ENTER"
}
],
"Custom": [
{
"Name": "sys:MachineName",
"Value": "TestMachine"
},
{
"Name": "cor:OriginalMessageId",
"Value": "336-b102-4002-a7cc-36132e97"
}
],
"ttl": 8640000
},
{Similar rows as the one above just with some fields missing, some added}
]
示例输出:
All Data Fields (CSV): PID System.EventName System.Name Custom.Type ...TTL
...Corresponding Values or 0 if field not present in a row of the json ...................