我正在编写一个HIVE查询,从表中提取大约2,000个唯一键。
我一直收到此错误 - java.lang.StackOverflowError
我的查询是基本的,但看起来像这样:
SELECT * FROM table WHERE (Id = 1 or Id = 2 or Id = 3 Id = 4)
我的WHERE子句一直到2000个唯一ID,我收到上面的错误。有没有人知道更有效的方法来执行此操作或使此查询工作?
谢谢!
答案 0 :(得分:2)
您可以使用SPLIT
和EXPLODE
将逗号分隔的字符串转换为行,然后使用IN
或EXISTS
。
使用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