Impala вызывает «Исключение анализа: синтаксическая ошибка» при использовании ROW_NUMBER() НАД

#sql #hive #subquery #impala

#sql #улей #подзапрос #импала

Вопрос:

У меня есть такой вопрос:

 SELECT MONTH_ID, 'Total' AS cola, colb FROM (  SELECT A.*, ROW_NUMBER()OVER(PARTITION BY MONTH_ID,col3 ORDER BY col4 DESC) AS ROWN  FROM   (  SELECT A.*, B.col3  FROM table1 A  LEFT JOIN table2 B  ON A.col1 = B.col1  ) A ) WHERE ROWN=1 GROUP BY MONTH_ID  

Если я создам промежуточную таблицу с подзапросами, этот запрос может сработать. Но когда я запущу все это, Impala вызовет: «Исключение анализа: Синтаксическая ошибка в строке 12:не определено: ГДЕ СТРОКА = 1 ^ Встречается: ГДЕ ожидается: КАК, ПО УМОЛЧАНИЮ, ИДЕНТИФИКАТОР, ВЫЗВАННЫЙ: Исключение: Синтаксическая ошибка»

Я попытался запустить это в улье, отображается другая ошибка: «Ошибка при компиляции инструкции: СБОЙ: Исключение синтаксического анализа строка 20:4 не может распознать ввод рядом с» ГДЕ «»СТРОКА» » = «в источнике подзапроса»

Затем я попробовал тот же запрос в oracle, он работает…

Кто-нибудь может объяснить, почему это происходит и как это решить? Спасибо вам за вашу помощь 😉

Ответ №1:

Подзапрос должен иметь такой псевдоним (см. Комментарий в коде).:

 SELECT MONTH_ID, 'Total' AS cola, colb FROM (  SELECT A.*, ROW_NUMBER()OVER(PARTITION BY MONTH_ID,col3 ORDER BY col4 DESC) AS ROWN  FROM   (  SELECT A.*, B.col3  FROM table1 A  LEFT JOIN table2 B  ON A.col1 = B.col1  ) A ) B ----------------------------Alias is a must -------------- WHERE ROWN=1 GROUP BY MONTH_ID, colb -----All columns which are not aggregated and not constants should be in GROUP BY  

Комментарии:

1. Большое вам спасибо! Это сработало!!! Оператор group by находится прямо в моем исходном запросе, я просто обленился, когда вводил вопрос xd, но спасибо, что указали.