Druid的精确不同计数

mwg9r5ms  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(501)

我已经从Hive将数据加载到Druid,但我没有使用任何hll列。
当我运行一个 COUNT(DISTINCT mycol) 在Druid查询,我没有得到确切的计数。计数似乎很接近,但与我在Hive里的不匹配。
为什么Druid不能给出一个确切的计数,即使我没有提到任何关于hll?或者,有没有一种方法可以得到Druid的精确计数?
找到了一篇2014年关于同一问题的老帖子https://groups.google.com/forum/#!topic/druid development/amsovgx5phq,我不确定当前版本的druid是否支持精确计数distincts。

qfe3c7zg

qfe3c7zg1#

默认情况下,count(distinct col)聚合函数使用hyperloglog的一个变体,hyperloglog是一种快速近似的distinct计数算法。如果通过查询上下文或代理配置将“useapproximatecountdistinct”设置为“false”,DruidSQL将切换到精确的不同计数http://druid.io/docs/latest/querying/sql.html )
要获取实际的不同计数,请将druid.sql.planner.useapproximatecountdistinct设置为false。(参考http://druid.io/docs/latest/configuration/index.html#broker-节点配置)还请注意,在精确模式下有限制,每个查询只允许一个不同的计数。

2jcobegt

2jcobegt2#

我有类似的问题,在我的情况下,这是因为数据汇总斯利姆在他的回答中提到。
基本上,如果您的数据比您的数据粒度更细粒度,那么它将自动汇总。如果您将segmentgranularity设置为none,那么它就不会卷起来。
在我的例子中我观察到的另一件事是,即使我没有段粒度,但是如果我的时间戳和两个不同行的所有其他列相同,那么它会自动合并到一行中。
这种特殊的行为对我来说是可以的,因为我也像你一样寻找不同的计数。

ny6fqffe

ny6fqffe3#

如果没有DDL和更多的线索很难判断发生了什么。。。我猜数据是在被Druid索引时收集起来的。当您使用非“无”粒度索引数据时,它可以上卷到粒度级别。

相关问题