【问题标题】:How to write subquery like: column=(select xx from table) in Hive?如何在 Hive 中编写子查询,例如:column=(select xx from table)?
【发布时间】:2019-10-25 07:47:23
【问题描述】:

我有一个场景,例如:

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,因为join会很慢,我只是想作为参考。 就像在MySQL 中一样,您可以将结果设置为参考:

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

而Hive可以达到将查询结果存储在shell的效果。检查:HiveQL: Using query results as variables

Hive 可以在 SQL 模式下支持这样的功能吗?

【问题讨论】:

  • 加入不会慢子查询很慢

标签: hive hql


【解决方案1】:

在 Hive 中,您可以如下实现:

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

其他方式: 您还可以在 hive 中创建临时表,这将有助于复制上面的 Oracle 查询。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多