我注意到当我的查询使用带有多个字段的“分组依据”时,Impala“估计的每个主机要求”可能会增长。我想它会计算加入所需的最大资源:
EXPLAIN select field1, field2
from mytable where field1=123
group by field1, field2
order by field1, field2
limit 100;
我想知道是否有办法减少Impala的估算值,因为真正需要的资源远低于估计的数量(300 MB)。
重要的是要说“field1”和“field2”是String。
答案 0 :(得分:0)
不幸的是,很难根据查询计划时间已知的信息来估计所需的内存,这些信息基于可用的有限统计信息,尤其是在处理依赖于分组/连接exprs的选择性的聚合和连接时。 / p>
首先,您确定您有关于您正在使用的表格的最新统计数据吗?运行COMPUTE STATS [table]
即可。
如果您仍然遇到此问题的正确统计信息,您可以设置set mem_limit=XM
查询选项,告诉Impala查询不应使用超过X MB的内存,这样它就会从中请求大量内存骆驼而不是规划的估计。如果您确定查询的使用量不超过300MB,则可以发出set mem_limit=300M;
然后发出查询。如果您在同一会话之后运行其他查询,则之后清除查询选项。