提交 72ef2157 编写于 作者: wmmhello's avatar wmmhello

add hyperloglog function

上级 9c59bca4
......@@ -4154,7 +4154,8 @@ int32_t tscTansformFuncForSTableQuery(SQueryInfo* pQueryInfo) {
(functionId == TSDB_FUNC_HISTOGRAM) ||
(functionId == TSDB_FUNC_UNIQUE) ||
(functionId == TSDB_FUNC_MODE) ||
(functionId == TSDB_FUNC_TAIL)) {
(functionId == TSDB_FUNC_TAIL) ||
(functionId == TSDB_FUNC_HYPERLOGLOG)) {
if (getResultDataInfo(pSrcSchema->type, pSrcSchema->bytes, functionId, (int32_t)pExpr->base.param[0].i64, &type, &bytes,
&interBytes, 0, true, NULL) != TSDB_CODE_SUCCESS) {
return TSDB_CODE_TSC_INVALID_OPERATION;
......
......@@ -350,21 +350,18 @@ static uint64_t hllCountCnt(uint8_t *buckets) {
return (uint64_t) E;
}
static int hllCountNum(void *ele, int32_t elesize, int32_t *buk) {
uint64_t hash, bit, index;
int count;
hash = MurmurHash3_64(ele,elesize);
index = hash & HLL_BUCKET_MASK;
static uint8_t hllCountNum(void *ele, int32_t elesize, int32_t *buk) {
uint64_t hash = MurmurHash3_64(ele,elesize);
int32_t index = hash & HLL_BUCKET_MASK;
hash >>= HLL_BUCKET_BITS;
hash |= ((uint64_t)1<<HLL_DATA_BITS);
bit = 1;
count = 1;
uint64_t bit = 1;
uint8_t count = 1;
while((hash & bit) == 0) {
count++;
bit <<= 1;
}
*buk = (int32_t) index;
*buk = index;
return count;
}
......@@ -380,7 +377,7 @@ static void hll_function(SQLFunctionCtx *pCtx) {
elesize = varDataLen(val);
val = varDataVal(val);
}
int32_t index;
int32_t index = 0;
uint8_t count = hllCountNum(val,elesize,&index);
uint8_t oldcount = pHLLInfo->buckets[index];
if (count > oldcount) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册