diff --git a/dbms/include/DB/AggregateFunctions/AggregateFunctionUniq.h b/dbms/include/DB/AggregateFunctions/AggregateFunctionUniq.h index dfd18f203d1..6766f065f1a 100644 --- a/dbms/include/DB/AggregateFunctions/AggregateFunctionUniq.h +++ b/dbms/include/DB/AggregateFunctions/AggregateFunctionUniq.h @@ -39,6 +39,7 @@ struct AggregateFunctionUniqUniquesHashSetData static String getName() { return "uniq"; } }; +/// Для функции, принимающей несколько аргументов. Такая функция сама заранее их хэширует, поэтому здесь используется TrivialHash. struct AggregateFunctionUniqUniquesHashSetDataForVariadic { typedef UniquesHashSet Set; @@ -68,6 +69,15 @@ struct AggregateFunctionUniqHLL12Data static String getName() { return "uniqHLL12"; } }; +struct AggregateFunctionUniqHLL12DataForVariadic +{ + typedef HyperLogLogWithSmallSetOptimization Set; + Set set; + + static String getName() { return "uniqHLL12"; } +}; + + /// uniqExact template @@ -361,8 +371,6 @@ public: /** Для нескольких аргументов. Для вычисления, хэширует их. * Можно передать несколько аргументов как есть; также можно передать один аргумент - кортеж. * Но (для возможности эффективной реализации), нельзя передать несколько аргументов, среди которых есть кортежи. - * - * TODO В Data для uniqHLL12 и uniqCombined должен использоваться TrivialHash. */ template class AggregateFunctionUniqVariadic final : public IAggregateFunctionHelper diff --git a/dbms/src/AggregateFunctions/AggregateFunctionsUniq.cpp b/dbms/src/AggregateFunctions/AggregateFunctionsUniq.cpp index b108474d796..01def64d5dd 100644 --- a/dbms/src/AggregateFunctions/AggregateFunctionsUniq.cpp +++ b/dbms/src/AggregateFunctions/AggregateFunctionsUniq.cpp @@ -96,7 +96,7 @@ void registerAggregateFunctionsUniq(AggregateFunctionFactory & factory) createAggregateFunctionUniq); factory.registerFunction({"uniqHLL12"}, - createAggregateFunctionUniq>); + createAggregateFunctionUniq); factory.registerFunction({"uniqExact"}, createAggregateFunctionUniq>);