Hive 具有大WHERE条件的配置单元查询
我正在编写一个配置单元查询,以从表中提取大约2000个唯一键 我一直收到这个错误-java.lang.StackOverflowerError 我的查询是基本查询,但如下所示:Hive 具有大WHERE条件的配置单元查询,hive,hiveql,Hive,Hiveql,我正在编写一个配置单元查询,以从表中提取大约2000个唯一键 我一直收到这个错误-java.lang.StackOverflowerError 我的查询是基本查询,但如下所示: SELECT * FROM table WHERE (Id = 1 or Id = 2 or Id = 3 Id = 4) 我的WHERE子句一直到2000个唯一id,我收到上面的错误。有没有人知道一种更有效的方法来实现这一点,或者让这个查询工作起来 谢谢 使用Between子句而不是指定所有唯一ID: SELECT
SELECT * FROM table WHERE (Id = 1 or Id = 2 or Id = 3 Id = 4)
我的WHERE子句一直到2000个唯一id,我收到上面的错误。有没有人知道一种更有效的方法来实现这一点,或者让这个查询工作起来
谢谢 使用Between子句而不是指定所有唯一ID:
SELECT ID FROM table WHERE ID BETWEEN 1 AND 2000 GROUP BY ID;
您可以使用拆分和分解将逗号分隔的字符串转换为行,然后在中或存在中使用
用于
使用存在
i您可以为这些id创建一个表,并在使用新表中的exist条件后仅获取您的特定id是否有可能将所有id放入一个列表中,并将它们连接起来您可以将unque键放入另一个表中;SELECT*FROM表格,其中id在SELECT keys FROM uniq_id中,id实际上不按顺序排列。它们到处都是——比如123kdinwo2、234ksikj3等等。。。所以我不确定这是否有效
SELECT * FROM yourtable t WHERE
t.ID IN
(
SELECT
explode(split('1,2,3,4,5,6,1998,1999,2000',',')) as id
) ;
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
);