получить значение из подзапроса в улье - PullRequest
2 голосов
/ 04 июня 2019

Я пытался параметризировать значение в улье, а не жестко кодировать его в запросе. Ниже приведен запрос.

select * from employee where sal >30000

Но вместо использования значения 30000 в качестве жестко запрограммированного, мне нужно, чтобы он исходил из того же запроса, как показано ниже. Но я сталкиваюсь с проблемами:

select * from employee where sal > (select max(sal) from employee)

Любая помощь приветствуется.

Спасибо

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Hive не поддерживает такие подзапросы, а также не позволяет вычислять переменные, переменные в Hive представляют собой простую подстановку текста без вычисления.Вы можете вычислить предикат в оболочке и перейти к сценарию улья, как в этом ответе: https://stackoverflow.com/a/37821218/2700344

Если вы хотите сделать это в том же запросе улья, ничего плохого в вычислении подзапроса и в перекрестном соединении сэто результат, затем фильтр.сначала вычисляется подзапрос, затем его результат помещается в распределенный кеш и применяется в фильтре в каждом преобразователе, читающем таблицу:

with sub as(--this is example only and makes no sense
            --replace with real query
            --of course there is no rows with sal>max sal in the same table
select max(S.sal) AS MaxSal from employee S  
)

select * 
  from employee e 
       cross join sub s  
where e.sal>s.MaxSal 

Если вы пишете без CROSS JOIN, просто from employee e, sub s илиПрисоединение без условия, это все то же самое перекрестное соединение, лучше написать это явно, используя перекрестное соединение .

1 голос
/ 04 июня 2019

Вы можете попробовать использовать эту форму запроса Hive.Это позволит получать зарплату сотрудников, равную самой высокой зарплате.

SELECT e1.* FROM employee e1 
JOIN
(SELECT MAX(sal) as max_sal FROM employee) e2
ON e1.sal = e2.max_sal;

Пример:

Table: employee
id  fname   sal
1   AAA     15000
2   BBB     35000
3   CCC     12000
4   DDD     35000
5   EEE     9000

Результат выполнения запроса:

2   BBB     35000
4   DDD     35000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...