Точный счетчик в друиде

Я загрузил данные в Druid из Hive и не использовал столбцы HLL.

Когда я запускаю COUNT(DISTINCT mycol) запрос в Druid, я не получаю точных подсчетов. Счетчики кажутся близкими, но не совпадают с тем, что у меня есть в Hive.

Почему Druid может не вести точный подсчет, даже если я ничего не упомянул о HLL? В качестве альтернативы, есть ли способ получить точное количество различий в Druid?

Нашел старую публикацию 2014 года по той же проблеме https://groups.google.com/forum/#!topic/druid-development/AMSOVGx5PhQ, я не уверен, поддерживает ли текущая версия Druid точное количество различий.


person Pratik Khadloya    schedule 17.08.2018    source источник


Ответы (3)


Функции агрегирования COUNT (DISTINCT col) по умолчанию используют вариант HyperLogLog, быстрого приблизительного алгоритма подсчета различных значений. Druid SQL переключится на точное количество отдельных подсчетов, если вы установите для параметра useApproximateCountDistinct значение false, либо через контекст запроса, либо через конфигурацию брокера. (См. http://druid.io/docs/latest/querying/sql.html)

Чтобы получить фактическое количество уникальных экземпляров, установите для druid.sql.planner.useApproximateCountDistinct значение false. (см. http://druid.io/docs/latest/configuration/index.html#broker-node-configs) Также обратите внимание, что в точном режиме существует ограничение, разрешается только один отдельный счетчик для каждого запроса.

person jaimin03    schedule 07.01.2019

Трудно сказать, что происходит без DDL и других подсказок ... Я предполагаю, что данные были собраны при индексировании Druid. Когда вы индексируете данные с гранулярностью, отличной от нулевой, они могут быть увеличены до уровня гранулярности.

person Slim Bouguerra    schedule 18.08.2018

У меня была аналогичная проблема, и в моем случае это было из-за накопления данных, как сказал Слим в своем ответе.

Обычно, если ваши данные более детализированы, чем ваш segmentGranularity, они будут автоматически объединены. Если вы установите для segmentGranularity значение None, он не будет сворачиваться.

Еще одна вещь, которую я заметил в моем случае, заключалась в том, что даже если у меня есть сегментарность None, но если моя временная метка и все другие столбцы для двух разных строк совпадают, тогда она автоматически объединяется в одну строку.

Это конкретное поведение меня устраивало, так как я, как и вы, искал четких подсчетов.

person Jainik    schedule 07.01.2019