Подзапрос и конкатенация в улье

Я пытаюсь объединить строку и вывод подзапроса в улье. при использовании канала для конкатенации возникает ошибка. Мой вопрос таков.

select id, ('hello:' || (select distinct(name) from abc c1 where c1.id=c2.id and balanc=(select max(balanc) from abc  where c1.id=c2.id)) as description from pqr c2;

Ниже представлен стек ошибок:

не может распознать ввод рядом с 'select' 'max' '(' в спецификации выражения

Я здесь совсем новенький. Любезно помочь.


person JGS    schedule 11.05.2016    source источник


Ответы (2)


Можете ли вы сначала указать структуру таблицы abc & pqr?

person Bhavesh Gadoya    schedule 11.05.2016
comment
Структура таблицы следующая: abc (имя, баланс, идентификатор) и pqr (идентификатор). - person JGS; 11.05.2016

Поэтому, если вы хотите объединить строку и использовать подзапрос, попробуйте ниже: SELECT id, name, balanc FROM (SELECT c1.id as id, c1.name as name, c1.balanc as balanc FROM pql c2 JOIN abc c1 WHERE c1.id = c2.id) t2;

Почему-то вы не можете использовать функцию агрегирования в подзапросе, таком как MAX, когда вы возвращаете в результате более 1 столбца. Если вы хотите узнать максимальное значение из подзапроса, вы можете попробовать запрос ниже

ВЫБРАТЬ balanc FROM (SELECT MAX (c1.balanc) as balanc FROM pql c2 JOIN abc c1 WHERE c1.id = c2.id) t2

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

person Bhavesh Gadoya    schedule 11.05.2016
comment
Но я также должен объединить вывод запроса со строкой. - person JGS; 11.05.2016
comment
о, извините, я забыл применить функцию concat. попробуйте ниже: SELECT id, name, balanc FROM (SELECT c1.id as id, CONCAT (HELLO:, c1.name) as name, c1.balanc as balanc FROM pql c2 JOIN abc c1 WHERE c1.id = c2.id) t2; - person Bhavesh Gadoya; 11.05.2016
comment
если соединение не работает, попробуйте также команду ниже. установите hive.auto.convert.join = true; - person Bhavesh Gadoya; 11.05.2016
comment
Мне нужно найти имя человека с максимальным балансом, и результат этого запроса станет описанием во внешней таблице. Для описания я добавляю строку перед ее созданием. Например, привет апарна - это описание. Но здесь aparna имеет максимальный баланс, который присутствует в abc, а также в pqr. - person JGS; 11.05.2016
comment
попробуй это. : SELECT collect_set (id), collect_set (CONCAT (Hello:, name)) как desc, max (balanc) из abc - person Bhavesh Gadoya; 11.05.2016
comment
Бхавеш, мне просто нужны два поля, то есть идентификатор и описание. И Описание должно быть комбинацией строки Hello и имени человека с максимальным балансом, чей идентификатор находится в другой таблице идентификаторов, то есть pqr. Кроме того, Id здесь также должен принадлежать таблице pqr. - person JGS; 12.05.2016