我们正在测试Apache Impala,并注意到使用GROUP BY和LIKE一起工作非常缓慢 - 单独的查询工作得更快。以下是两个例子:
mydata<-fread("data.csv", sep="," , header=TRUE)
f <- function(pars, xx)
with(pars,(a + b*(tc - xx)^m * (1 + c * cos(omega*log(tc - xx) + phi))))`
resids <- function(p, observed, xx) {mydata$Logp - f(p,xx)}
nls.out <- nls.lm(par=list(a=1,b=-1,tc=100, m=0.5, omega=1, phi=1, c=1 ),
fn = resids, observed = mydata$Logp, xx = mydata$day,
control=nls.lm.control(maxiter=10000, ftol=1e-6, maxfev=1e6))
# 1.37s 1.08s 1.35s
SELECT * FROM hive.default.pcopy1B where
(lower("by") like '%part%' and lower("by") like '%and%' and lower("by") like '%the%')
or (lower(title) like '%part%' and lower(title) like '%and%' and lower(title) like '%the%')
or (lower(url) like '%part%' and lower(url) like '%and%' and lower(url) like '%the%')
or (lower(text) like '%part%' and lower(text) like '%and%' and lower(text) like '%the%')
limit 100;
有人可以解释为什么会出现此问题,以及是否有任何变通方法?
答案 0 :(得分:1)
2个查询之间存在基本差异。
第一次查询
要点:
WHERE
子句的100行,就会将其标记为已完成,并返回100条记录。第二次查询
要点:
GROUP BY
子句生成结果。WHERE
子句GROUP BY
条款。ORDER BY
条款。因此,您提供的查询可能看起来很相似,但它们完全不同,并且可以解决所有目的。
我希望这会对你有所帮助。