我試圖在Druid環境下,在同一個查詢中使用三個投影,如下所示:
select
_時間。
count(distinct col1)。
count(distinct case when (condition1 and condition2 then (concat(col2, TIME_FORMAT(__time)) else 0 end )
from table
where condition3
GROUP BY __time
但是我得到一個錯誤,說 - 未知例外/無法建立查詢計劃
。當我在查詢中只放一個count(distinct)時,它似乎作業得非常好。
如何解決這個問題?
uj5u.com熱心網友回復:
正如Druid檔案指出的那樣:
COUNT(DISTINCT expr)計算expr的不同值,expr可以是字串、數字或hyperUnique。默認情況下,這是近似的,使用HyperLogLog的一個變體。要獲得精確的計數,請將 "useApproximateCountDistinct "設定為 "false"。如果你這樣做,expr必須是字串或數字,因為精確計數不可能使用hyperUnique列。請參見APPROX_COUNT_DISTINCT(expr)。在精確模式下,每個查詢只允許一個不同的計數。
因此,這是 Druid 的一個限制:你需要禁用精確模式,或者將自己限制在每個查詢的一個獨立計數。
從側面看,其他資料庫通常沒有這種限制。Apache Druid 是為高性能的實時分析而設計的,因此,它對 SQL 的實作有一些限制。在內部,Druid使用了一種基于JSON的查詢語言。SQL介面由一個基于Apache Calcitea的決議器和規劃器提供,它將SQL翻譯成本地的Druid查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/324209.html
標籤:
