А тебе обязательно сохранить вложенность массивов?
Ну можно тогда сделать arrayMap + arrayFilter внутри него, но это не очень эффективно
map?
map к сожалению не получится. Я немног оупросил пример, на самом деле там вот такой массив: Array(Tuple( String, String, Array(Tuple( Nullable(String), Nullable(String), Nullable(String))))) как вы видите мне нужно перебирать вложенный массив
В смысле не получится? Тебе нужно мутировать список, в котором лежат списки. Суть мутации - фильтрация вложенных списков. map (\subArray -> filter predicate subArray) arrayWithSubArrays
Список, вложенный в кортеж из списков?
Это не небольшое упрощение, это буквально две разные задачи. Но тут надо брать напрямую через мап по основному списку обращаться к элементу кортежа и его фильтровать с предикатом
Что-то вроде: map (\tuple -> filter predicate (getArrayFromTuple tuple) ) arrayWithTupleWithArray
вот что-то не так делаю JSONExtract(_airbyte_data, 'changelog', 'histories', 'Array( Tuple( author String, created String, items Array( Tuple( field Nullable(String), fromString Nullable(String), toString Nullable(String) ))))') as histories, arrayMap( (x) -> Tuple( author x.author, created x.created, items arrayFilter( (y) -> y.field = 'status', x.items)), histories) as res_arr
Сложно читать и тем более синтаксический разбор делать - не работал с этим в клике. Это паттерн матчинг такой? Логически ход мысли правильный
типа того, ок, очевидно это слишком наверченно, нужно упростить всё. Потом фиг разберёшься, если сломается
А что вообще в этом json'е нужно? Почему не распарить его в строчки и со столбиками отдельно работать?
это changelog жиротаски. Хотел сделать массив изменения статусов таски. Гранулярность таблицы: таска. Не хотелось делать лишние развороты в строки. Т.к. это будет уже другая размерность (хотя можно через cte оформить и потом приджойнить по ключу таски)
я по простому, без имен: with [('a1','c1',[('f11','fs11','ts11'),('status','fs12','ts12')]),('a2','c2',[('f21','fs21','ts21'),('fs22','fs22','ts22')])] as data select arrayFilter(z->length(z.3) > 0, arrayMap( x -> (x.1,x.2, arrayFilter(y->y.1 = 'status',x.3)), data));
Большое спасибо, все работает
Обсуждают сегодня