Потоковая аналитика GetArrayElements в виде строки
У меня есть задание Stream Analytics, которое получает данные из внешнего источника (я не могу сказать, как эти данные форматируются). Я пытаюсь импортировать данные в мое озеро данных, сохраняя их в формате JSON. Это работает нормально, но я также хочу получить вывод в CSV, вот где у меня проблемы.
Поскольку входные данные имеют массив в качестве одного из столбцов, при импорте в JSON он распознает их и предоставляет правильные данные, то есть помещает их в скобки [A, B, C], но когда я использую их в CSV, я получаю представленный столбец как слово "массив". Я думал, что преобразовал бы это в XML, использовал бы STUFF и получил бы их в одной строке, но это не любит использование инструкции SELECT в CROSS APPLY.
Кто-нибудь работал с Stream Analytics, импортирующим данные в CSV, который имеет столбец массива? Если да, то как вам удалось импортировать значения массива?
Пример данных:
[
{"GID":"10","UID":1,"SID":"5400.0","PG:["75aef","e5f8e"]},
{"GID":"10","UID":2,"SID":"4400.0","PG:["75aef","e5f8e","6d793"]}
]
PG - это столбец, который я пытаюсь извлечь, поэтому выходной CSV должен выглядеть примерно так.
GID|UID|SID|PG
10|1|5400.0|75aef,e5f8e
10|2|4400.0|75aef,e5f8e,6d793
Это запрос, который я использую,
SELECT
D.GID ,
D.UID ,
D.SID ,
A.ArrayValue
FROM
dummy AS D
CROSS APPLY GetArrayElements(D.PG) AS A
Как вы можете себе представить, это дает мне результаты в этом формате.
GID|UID|SID|PG
10|1|5400.0|75aef
10|1|5400.0|e5f8e
10|2|4400.0|75aef
10|2|4400.0|e5f8e
10|2|4400.0|6d793
1 ответ
Как сказал Пит М, вы можете попытаться создать пользовательскую функцию JavaScript для преобразования массива в строку, а затем вы можете вызвать эту пользовательскую функцию в своем запросе.
Пользовательская функция JavaScript:
function main(inputobj) {
var outstring = inputobj.toString();
return outstring;
}
Вызовите UDF в запросе:
SELECT
TI.GID,TI.UID,TI.SID,udf.extractdatafromarray(TI.PG)
FROM
[TEST-SA-DEMO-BLOB-Input] as TI
Результат: