Как написать подзапрос, как: столбец = (выберите хх из таблицы) в Hive? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть сценарий, например:

with tmp as (select name from table1)
select * from table2 b 
where b.name=(select max(name) from tmp)

Однако Hive не может распознать этот синтаксис, поэтому существует ли какой-либо допустимый синтаксис для этого?

После поиска я узналон может использовать join, чтобы понять:

select table2.* from table2
join (select max(name) as name from tmp) t2
where table2.name = t2.name

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

set @max_date := select max(date) from some_table;
select * from some_other_table where date > @max_date;

В то время как Hive может добиться эффекта сохранения результата запроса в shell. Проверка: HiveQL: использование результатов запроса в качестве переменных

Может ли Hive поддерживать такую ​​функцию в режиме SQL?

1 Ответ

0 голосов
/ 27 октября 2019

В Hive вы можете добиться этого, как показано ниже:

select * from table2 b 
where b.name=(select max(name) from table1)

Другой способ: Вы также можете создать временную таблицу в кусте, которая поможет повторить ваш запрос Oracle выше.

CREATE TEMPORARY TABLE tmp AS SELECT name FROM table1;
SELECT * FROM table2 b WHERE b.name=(SELECT max(name) FROM tmp);
...