首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >蜂巢CBO。where子句中带有多个IN条件的Hive SQL查询的错误结果

蜂巢CBO。where子句中带有多个IN条件的Hive SQL查询的错误结果
EN

Stack Overflow用户
提问于 2022-04-11 09:17:42
回答 3查看 557关注 0票数 0

我正在Hive中运行一个SQL查询,它在启用和禁用CBO时给出了不同的结果。当启用CBO时,结果是错误的(设置hive.cbo.enable=true;)。

Prerequisites:ApacheHadoop2.10.1+ApacheHive2.3.6已安装。(我试图重现Apache 3+版本和Hadoop 3+版本的问题,它们运行得很好。)

复制的行动:

1)在Hive中创建表

创建表sample( fname字符串、sname字符串、sid字符串)行格式

'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe‘存储为INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat’OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat‘TBLPROPERTIES (’瞬态_lastDdlTime‘=’1616020251‘);

( 2)在表中插入以下值的一些记录

插入样本值("PQ“、"F”、"33");插入样本值("RK“、"A”、"11");插入样本值("AZ“、"B”、"22");

3)检查表

从样本中选择*;

代码语言:javascript
复制
PQ F 33
RK A 11
AZ B 22

4)运行以下查询。它应该提供0条记录,而不是给出所有记录

从样本中选择fname,其中sid在('11'),sid在('22');

代码语言:javascript
复制
PQ
RK
AZ

5)当我们在Hive中禁用cbo时,效果很好。

set hive.cbo.enable=false;从样本中选择fname,其中sid在('11')中,sid在(‘22’)中;

好的时间: 0.131秒

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-05-10 13:58:53

错误的结果来自于HivePointLookupOptimizerRule 1中的错误简化,这与>= 3.2.0版本中记录在HIVE-21685 2下的错误相对应。

作为解决办法,您可以通过将相应的属性设置为false来禁用相应的规则。

set hive.optimize.point.lookup=false

1

2

票数 0
EN

Stack Overflow用户

发布于 2022-04-13 14:43:13

数据类型是字符串,使用INT

最简单的解决方案是不要使用CBO,问题仍然存在,但是如果您仍然希望在更改数据类型之后检查这些内容

1.权限2.版本控制3.自动调整

票数 0
EN

Stack Overflow用户

发布于 2022-05-10 04:31:49

在查询中使用以选择多个项

从样本中选择fname,其中sid在('11','22');

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71825360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档