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
илиПрисоединение без условия, это все то же самое перекрестное соединение, лучше написать это явно, используя перекрестное соединение .