Flink: Каковы лучшие альтернативы использованию UDF Python в MATCH_RECOGNIZE?
Когда я пытаюсь использовать MATCH_RECOGNIZE в своих SQL-запросах с UDFPython, я получаю сообщение об ошибке
Python Function can not be used in MATCH_RECOGNIZE for now.
Например, не поддерживается следующее:
SELECT T.aa as ta
FROM MyTable
MATCH_RECOGNIZE (
ORDER BY proctime
MEASURES
A.a as aa,
pyFunc(1,2) as bb
PATTERN (A B)
DEFINE
A AS a = 1,
B AS b = 'b'
) AS T
Это вызывает несколько вопросов:
Почему планировщику Blink требуется поддержка функций Python?
Где я могу найти в документации такое отсутствие поддержки? В документации по этой функции не упоминается Python. Ожидается ли, что я выполню синтаксический разбор проверочных тестов ?
(основной вопрос) Является ли лучшей альтернативой MATCH_RECOGNIZE функция Python для агрегирования таблиц, определяемая пользователем? Я хочу найти последовательно только два события (в пределах часового окна). Я знаю, что могу сделать это с помощью самостоятельного присоединения, но я хотел бы посмотреть, есть ли более эффективная / чистая возможность.
1 ответ
В качестве обходного пути для невозможности использовать UDF Python в предложении меры кажется, что вы могли бы создать в качестве вывода из MATCH_RECOGNIZE данные, необходимые в качестве входных данных для UDF, а затем применить UDF на следующем шаге.
Что-то вроде этого:
SELECT
T.aa AS ta,
pyFunc(T.one, T.two) AS tb
FROM MyTable
MATCH_RECOGNIZE (
ORDER BY proctime
MEASURES
A.a AS aa,
1 AS one,
2 AS two
PATTERN (A B)
DEFINE
A AS a = 1,
B AS b = 'b'
) AS T
Использование самосоединения с ограничением интервала для атрибутов времени должно дать эффективный план, если вы решите использовать этот подход вместо этого.