Функции должны требовать определённой функции вызова, которая сообщает ksqlDB, как применять данную лямбда-функцию к входному значению и какой результат возвращать. Для начальной поддержки лямбда-функций предлагаются следующие функции вызова:
transform_array(arr, x => y)
— применяет данную лямбда-функцию к каждому элементу входного массива, возвращая новый массив, содержащий преобразованный вывод.
transform_keys(map, k => k)
— применяет данную лямбда-функцию к каждому ключу во входной карте, возвращая новую карту, содержащую преобразованные ключи.
transform_values(map, v => v)
— применяет данную лямбда-функцию к каждому значению во входной карте, возвращая новую карту, содержащую преобразованные значения.
transform_map(map, (k, v) => new_k, (k, v) => new_v)
— применяет данные лямбда-функции к ключам и значениям входной карты соответственно. Возвращается новая карта, содержащая преобразованные ключи и значения.
filter_array(arr, x => bool)
— фильтрует входной массив с помощью данной лямбда-функции. Возвращается новый массив, содержащий только значения, для которых лямбда-функция оценивается как истина.
filter_map(map, (k, v) => bool)
— фильтрует входную карту с помощью данной лямбда-функции. Возвращается новая карта, содержащая только пары ключ-значение, для которых лямбда-функция оценивается как истина.
reduce_array(arr, s, (x, s) => s)
— сводит входной массив к одному значению. s
является начальным состоянием и передаётся в область действия лямбда-функции. Каждый вызов возвращает новое значение для s
, которое получит следующий вызов. reduce_array
вернёт окончательное значение s
.
reduce_map(map, s, (k, v, s) => s)
— сводит входную карту к одному значению. s
является начальным состоянием и передаётся в область действия лямбда-функции. Каждый вызов возвращает новое значение для s
, которое получит следующий вызов. reduce_map
вернёт окончательное значение s
.
Эти функции вызова должны быть реализованы с использованием нашего собственного интерфейса UDF, который потребует расширения интерфейса для поддержки лямбда-функций в качестве аргументов. Это позволит пользователям реализовывать свои собственные UDF, использующие преимущества лямбда-функций, а также облегчит нам введение большего количества функций вызова в будущем.
Мы должны задокументировать и предоставить примеры для двух основных аспектов лямбда-функций:
Лямбда-функции будут добавлены к грамматике ksqlDB и поэтому не должны вносить никаких несовместимостей в грамматику или общедоступные API. Однако в настоящее время неизвестно, потребует ли реализация лямбда-функции обратно несовместимых изменений во внутренних компонентах ksqlDB.
Поскольку лямбда-функции позволят использовать только те SQL-выражения, которые уже можно использовать в запросах, новые последствия для безопасности не должны возникнуть.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )