WSO2 DAS: SQL-запрос SPARK с ошибкой UNION

Была предпринята попытка выполнить следующий запрос при выполнении пакетной аналитики с помощью WSO2 DAS с использованием Spark SQL. Таблицы «Первый», «Средний» и «Третий» необходимо объединить и записать в таблицу «Все_три».

INSERT OVERWRITE TABLE All_three 
SELECT SYMBOL, VOLUME FROM First 
UNION 
SELECT SYMBOL, VOLUME FROM Middle 
UNION 
SELECT SYMBOL, VOLUME FROM Third;

При выполнении этого запроса на WSO2 DAS отображается следующая ошибка:

ERROR: [1.79] failure: ``limit'' expected but `union' found INSERT OVERWRITE TABLE X1234_All_three SELECT SYMBOL, VOLUME FROM X1234_First UNION SELECT SYMBOL, VOLUME FROM X1234_Middle UNION SELECT SYMBOL, VOLUME FROM X1234_Third ^ 

Насколько мне известно, использование LIMIT с UNION не является необходимостью. Также была предпринята попытка заключить запросы SELECT в круглые скобки, но это не сработало. Что я здесь делаю неправильно? Заранее спасибо!


person Charini Nanayakkara    schedule 07.03.2016    source источник


Ответы (2)


Я была такая же проблема.

Убедитесь, что в конце каждой строки есть пробел.

Причина в том, что он не рассматривает \n как пробел, как SSMS или другие редакторы запросов.

Таким образом, он читает ваш запрос без пробелов. Следовательно, это читается как SELECT * FROM FirstUNION, а не как SELECT * FROM First UNION.

Моя проблема была решена, и я надеюсь, что это поможет и вам.

person Midhun Siva    schedule 12.04.2016
comment
Да, я обнаружил это на собственном горьком опыте после попытки получить результаты, применяя только символ новой строки. Однако фактическая проблема заключалась в отсутствии скобок и временного элемента данных, которые можно было решить, как упомянул @Isuru Wijesinghe. - person Charini Nanayakkara; 08.05.2016
comment
Хорошо. Это нормально :-) - person Midhun Siva; 20.07.2016

Существует проблема с запросом, который вы упомянули здесь. Измените запрос, как показано ниже.

ВСТАВИТЬ ТАБЛИЦУ ПЕРЕЗАПИСИ All_three select * from ( SELECT SYMBOL, VOLUME FROM First UNION SELECT SYMBOL, VOLUME FROM Middle UNION SELECT SYMBOL, VOLUME FROM Third ) temp;

На самом деле, что мы здесь делаем, так это заключаем результат union во временный элемент данных с именем temp и выбираем оттуда все. Парсер Spark-SQL принимает только один элемент выбора в запросах на вставку, а в конце запроса на выбор он ожидает ограничение (если доступно). поэтому вам необходимо обернуть последующие операторы выбора в один элемент выбора. Надеюсь, это решит вашу проблему.

person Isuru Wijesinghe    schedule 06.05.2016
comment
Да, выяснилось, что это проблема с моим запросом. Спасибо за помощь! - person Charini Nanayakkara; 08.05.2016