具有大WHERE条件的Hive查询

时间:2018-02-16 19:19:15

标签: hive hiveql

我正在编写一个HIVE查询,从表中提取大约2,000个唯一键。

我一直收到此错误 - java.lang.StackOverflowError

我的查询是基本的,但看起来像这样:

SELECT * FROM table WHERE (Id = 1 or Id = 2 or Id = 3 Id = 4)

我的WHERE子句一直到2000个唯一ID,我收到上面的错误。有没有人知道更有效的方法来执行此操作或使此查询工作?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用SPLITEXPLODE将逗号分隔的字符串转换为行,然后使用INEXISTS

使用IN

SELECT * FROM yourtable t WHERE
  t.ID IN
( 
 SELECT 
    explode(split('1,2,3,4,5,6,1998,1999,2000',',')) as id
)  ;

使用EXISTS

SELECT * FROM yourtable t WHERE
  EXISTS 
  ( 
   SELECT 1 FROM ( 
      SELECT 
        explode(split('1,2,3,4,5,6,1998,1999,2000',',')) as id
  ) s 

  WHERE s.id = t.id 
); 

答案 1 :(得分:0)

使用Between子句而不是指定所有唯一ID:

SELECT ID FROM table WHERE ID BETWEEN 1 AND 2000 GROUP BY ID;

答案 2 :(得分:0)

i您可以为这些ID创建一个表,并在使用新表中的存在条件后仅获取您的特定ID