У меня есть простой вариант использования. Я хочу фильтровать данные в зависимости от того, содержит ли файл json некоторые поля с именами вроде «событие».
У меня есть данные, которые могут иметь 1, 2, 3 или любое количество массивов json.
В массивах есть объекты json.
Итак, считайте, что у меня есть 4 массива: [A], [B], [C], [D]
Я могу извлечь их в U-SQL с помощью JSON Extractor. Затем получите значения массива как JSONTuple.
Как только они будут извлечены. Я хочу проверить, есть ли в массиве определенное поле json.
Нравится: select @data where JsonContains(A, "ordernumber") .
Как я могу сделать это в USQL? Простой способ сделать:
Select [A], [B], [c], [D] where A constains "event" ...
Я пытался сделать, но нет возможности сделать, как в sql. Пожалуйста помоги. Спасибо.
В качестве примечания: мне кажется, что единственный способ справиться с этим несоответствующим количеством столбцов (из-за которых я должен фильтровать наборы строк) в usql:
Отфильтруйте данные по заданным столбцам. Как тот, о котором я спрашиваю в вопросе.
Использовать динамические столбцы, например, выбрать A["Data"] как A["Name"]? Как ни странно, 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 ...................
JsonFunctions.JsonTuple
для извлечения значения внутри предложенияWHERE
. - person Michael Rys   schedule 21.03.2018