使用配置单元将一个查询的结果用作另一查询的条件

时间:2019-09-24 22:19:13

标签: hive hiveql

我想将一个表中的信息用作另一查询的输入。

查询(必填输出)

SELECT * from maintable where year in ('2005','2006','2007','2008');

我在单独的表格中列出了这些年份。附图片。 此查询给我错误:

SELECT * from maintable where year in (SELECT * from picture_table) sub_data;

我们非常感谢您的帮助。预先感谢。

2 个答案:

答案 0 :(得分:1)

您忘记为maintable指定别名:

 SELECT * from maintable a where a.year in (SELECT year from picture_table);

答案 1 :(得分:1)

有两种方法可以在Hive中实现。

  1. 使用IN子句: 如果图片表具有唯一年份,则您无需在内部查询中使用DISTINCT

SELECT * FROM maintable a where a.year IN (SELECT year FROM picture_table);

如果year列在picture_tale中不是唯一的,请使用DISTINCT关键字:

SELECT * FROM maintable a where a.year IN (SELECT DISTINCT year FROM picture);

  1. 使用WHERE EXISTS子句:

SELECT * FROM maintable a WHERE EXISTS (SELECT 1 FROM picture_table b WHERE a.year = b.year);

  1. 使用JOIN

SELECT a.* FROM maintable a INNER JOIN picture_table b ON (a.year = b.year) WHERE b.year IS NOT NULL;

使用IN子句和joins的优点是,如果任何一个表都足够小,可以缓存到分布式缓存中,则该查询将被提升为map join(如果属性hive.auto.convert.join=true)。

希望这会有所帮助。