У меня есть рабочий запрос Spark SQL в этом формате:
String flinkSqlQuery =
"SELECT " +
" MAP( " +
" 'mId', memberId, " +
" 'rId', IFNULL(readId, ''), " +
" 'VIEWED', 1, " +
" 'UDF1', UDF1(param1) " +
" ) AS requestContext, " +
" CAST(1.0 AS FLOAT) AS FIXVAL, " +
" CAST(0.0 AS FLOAT) AS RESPONSE " +
"FROM testingTable";
Я пытаюсь преобразовать его в Flink Sql для запуска с использованием API таблиц Flink:
String flinkSqlQuery =
"SELECT " +
" MAP( " +
" 'mId', memberId, " +
" 'rId', COALESCE(readId, ''), " +
" 'VIEWED', 1, " +
" 'UDF1', UDF1(param1) " +
" ) AS requestContext, " +
" CAST(1.0 AS FLOAT) AS FIXVAL, " +
" CAST(0.0 AS FLOAT) AS RESPONSE " +
"FROM testingTable";
Но я сталкиваюсь со следующей ошибкой:
Вызвано: org.apache.flink.client.program.ProgramInvocationException: Основной метод вызвал ошибку: не удалось выполнить анализ SQL. Незапрос выражение, встречающееся в незаконном контексте
Подскажите, пожалуйста, правильный ли это способ создания MAP в Flink Sql.
Синтаксис, используемый Flink SQL для создания карты (или массива), включает в себя квадратные скобки, а не круглые скобки. Вместо этого должно быть так:
String flinkSqlQuery =
"SELECT " +
" MAP[ " +
" 'mId', memberId, " +
" 'rId', IFNULL(readId, ''), " +
" 'VIEWED', 1, " +
" 'UDF1', UDF1(param1) " +
" ] AS requestContext, " +
" CAST(1.0 AS FLOAT) AS FIXVAL, " +
" CAST(0.0 AS FLOAT) AS RESPONSE " +
"FROM testingTable";
Дополнительную информацию смотрите в документации .
Поскольку символы [] используются для заключения в скобки необязательного содержимого, я считаю, что '[' - это попытка указать, что вы буквально используете символ [ - поэтому я бы щедро описал это как сбивающее с толку, а не неправильное.
Нет ли ошибки в документации? КАРТА ‘[’ значение1, значение2 [, значение3, значение4 ]* ‘]’