SELECT Count(1) cnt FROM XXX WHERE YYY GROUP BY ZZZ ORDER BY cnt DESC LIMIT 512
结果集很大时必须加末尾的"LIMIT 512",513都不行。 否则报错 "{ "error": { "root_cause": [ { "type": "sql_illegal_argument_exception", "reason": "The default limit [{}] for aggregate sorting has been reached; please specify a LIMIT" } ], "type": "sql_illegal_argument_exception", "reason": "The default limit [{}] for aggregate sorting has been reached; please specify a LIMIT" }, "status": 500 }"
比如这个查询:
SELECT Count(1) cnt
FROM XXX
WHERE YYY
GROUP BY ZZZ
ORDER BY cnt DESC
LIMIT 512
结果集很大时必须加末尾的"LIMIT 512",513都不行。
否则报错
"{
"error": {
"root_cause": [
{
"type": "sql_illegal_argument_exception",
"reason": "The default limit [{}] for aggregate sorting has been
reached; please specify a LIMIT"
}
],
"type": "sql_illegal_argument_exception",
"reason": "The default limit [{}] for aggregate sorting has been reached; please specify a LIMIT"
},
"status": 500
}"
什么原理?请指教!
几百万数据当然要limit
还有个分页问题吧 pagination
抛砖引玉 我也不懂
做过的说说
【 在 dawangzi (大王子*催贝卡) 的大作中提到: 】
: 比如这个查询:
: SELECT Count(1) cnt
: FROM XXX
: WHERE YYY
: GROUP BY ZZZ
: ORDER BY cnt DESC
: LIMIT 512
: 结果集很大时必须加末尾的"LIMIT 512",513都不行。
: 否则报错
: "{
: ...................
问题是不"order by"就不报错啊。
其实group一下就花费空间O(n)了,
时间O(n)也已花费。
order by无非是再花个O(nLogn),
空间重用原先那个O(n)的即可,
原地QSort.
反正我想不明白为了Sort还需Limit什么。
可能理解不深,
还请明白人说说。
【 在 plzhs (n o a h) 的大作中提到: 】
: 几百万数据当然要limit
: 还有个分页问题吧 pagination
: 抛砖引玉 我也不懂
: 做过的说说
内部数据结构决定Elasticsearch上的SQL query只是在mimic SQL的行为。 像sorting by aggregation 这种操作有limitation是没办法的事。 你不能完全把他当sql engine。 如果要大量的run这种query还是建议在上面用Presto