蜂巢查询较大的地方

  • 本文关键字:查询 蜂巢 hive hiveql
  • 更新时间 :
  • 英文 :


我正在编写一个蜂巢查询,以从桌子上拉出大约2,000个唯一的键。

我不断遇到此错误-Java.lang.stackoverflowerror

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

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

我的WHERE子句一直延伸到2000年的唯一ID,我收到了上面的错误。有人知道这样做的更有效的方法或让此查询工作吗?

谢谢!

您可以使用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 
); 

使用之间的子句之间而不是指定所有唯一ID:

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

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

最新更新