2016-05-31 2 views
0

У меня есть вопрос о Hive UNION ALL.Улей должен указывать фактический источник данных (ОТ) с UNION ALL

Этот запрос является допустимым запросом на удержание.

SELECT 
    1 as id, 
    'Tom' as name 

Это задание возвращает правильный результат записи, как и ожидалось.

+----------+----------------+ 
| id |  name  | 
+----------+----------------+ 
|  1 |  Tom  | 
+----------+----------------+ 

Но когда этот запрос передается с UNION ALL, я столкнулся вопрос.

SELECT 
    id, 
    name 
FROM 
    members 
UNION ALL 
SELECT 
    1 as id, 
    'Tom' as name, 

Этот SQL производит исключение Error: java.lang.IllegalArgumentException: Can not create a Path from an empty string. Я нашел, что все подзапросы UNION ALL должны иметь фактический источник данных с FROM. Например, выше запрос может работать как ожидается после перезаписи, как показано ниже.

SELECT 
    id, 
    name 
FROM 
    members 
UNION ALL 
SELECT 
    1 as id, 
'Tom' as name 
FROM (
    SELECT COUNT(1) FROM members 
) t 

Является ли это спецификацией SQL или Hive? Не можем ли мы запустить запрос без предложения FROM? Или это ошибка самого улья? Версия Hive, которую я использую, - 0.13 с Hadoop 2.4.

ответ

1

Все SELECT заявления необходимы FROM.

Даже ваш первый запрос SELECT 1 as id, 'Tom' as name дает ошибку, как показано ниже: enter image description here

Принимая во внимание, если мы запустим SELECT 1 as id, 'Tom' as name FROM table1 где table1 это таблица в моей базе данных, то есть результат, как показано ниже: enter image description here

Так выше два запроса доказывают, что предложение FROM необходимо во всех инструкциях SELECT.

Не имеет значения UNION ALL или что-то еще.

Это особенность базы данных Hive.

Надеюсь, это поможет вам !!!

+0

Спасибо за замечание. Но в моей среде запрос выше успешно. Какую версию вы использовали? '' 'hive> SELECT 1 как id, 'tom' как имя; OK Том Время, затраченное на: 22,205 секунд, Получено: 1 ряд (ы) '' ' –

+0

Я использую Hive 1.2.x, какую версию вы используете? – Farooque

+0

Я использую 0.13, HDP2. –