Merge pull request #12199 from taosdata/feature/3.0_glzhao
feat(query): add histogram normalized processing
This commit is contained in:
commit
022dacb566
|
@ -1964,6 +1964,9 @@ bool histogramFunctionSetup(SqlFunctionCtx *pCtx, SResultRowEntryInfo *pResultIn
|
||||||
}
|
}
|
||||||
char* binDesc = varDataVal(pCtx->param[2].param.pz);
|
char* binDesc = varDataVal(pCtx->param[2].param.pz);
|
||||||
int64_t normalized = pCtx->param[3].param.i;
|
int64_t normalized = pCtx->param[3].param.i;
|
||||||
|
if (normalized != 0 && normalized != 1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!getHistogramBinDesc(pInfo, binDesc, binType, (bool)normalized)) {
|
if (!getHistogramBinDesc(pInfo, binDesc, binType, (bool)normalized)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1972,7 +1975,6 @@ bool histogramFunctionSetup(SqlFunctionCtx *pCtx, SResultRowEntryInfo *pResultIn
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t histogramFunction(SqlFunctionCtx *pCtx) {
|
int32_t histogramFunction(SqlFunctionCtx *pCtx) {
|
||||||
int32_t numOfElems = 0;
|
|
||||||
SHistoFuncInfo* pInfo = GET_ROWCELL_INTERBUF(GET_RES_INFO(pCtx));
|
SHistoFuncInfo* pInfo = GET_ROWCELL_INTERBUF(GET_RES_INFO(pCtx));
|
||||||
|
|
||||||
SInputColumnInfoData* pInput = &pCtx->input;
|
SInputColumnInfoData* pInput = &pCtx->input;
|
||||||
|
@ -1983,6 +1985,8 @@ int32_t histogramFunction(SqlFunctionCtx *pCtx) {
|
||||||
int32_t start = pInput->startRowIndex;
|
int32_t start = pInput->startRowIndex;
|
||||||
int32_t numOfRows = pInput->numOfRows;
|
int32_t numOfRows = pInput->numOfRows;
|
||||||
|
|
||||||
|
int32_t numOfElems = 0;
|
||||||
|
int32_t totalElems = 0;
|
||||||
for (int32_t i = start; i < numOfRows + start; ++i) {
|
for (int32_t i = start; i < numOfRows + start; ++i) {
|
||||||
if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) {
|
if (pCol->hasNull && colDataIsNull_f(pCol->nullbitmap, i)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -1997,9 +2001,21 @@ int32_t histogramFunction(SqlFunctionCtx *pCtx) {
|
||||||
for (int32_t k = 0; k < pInfo->numOfBins; ++k) {
|
for (int32_t k = 0; k < pInfo->numOfBins; ++k) {
|
||||||
if (v > pInfo->bins[k].lower && v <= pInfo->bins[k].upper) {
|
if (v > pInfo->bins[k].lower && v <= pInfo->bins[k].upper) {
|
||||||
pInfo->bins[k].count++;
|
pInfo->bins[k].count++;
|
||||||
|
totalElems++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pInfo->normalized) {
|
||||||
|
for (int32_t k = 0; k < pInfo->numOfBins; ++k) {
|
||||||
|
if(totalElems != 0) {
|
||||||
|
pInfo->bins[k].percentage = pInfo->bins[k].count / (double)totalElems;
|
||||||
|
} else {
|
||||||
|
pInfo->bins[k].percentage = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SET_VAL(GET_RES_INFO(pCtx), numOfElems, pInfo->numOfBins);
|
SET_VAL(GET_RES_INFO(pCtx), numOfElems, pInfo->numOfBins);
|
||||||
|
|
|
@ -481,6 +481,7 @@ static EDealRes translateValue(STranslateContext* pCxt, SValueNode* pVal) {
|
||||||
TSDB_CODE_SUCCESS) {
|
TSDB_CODE_SUCCESS) {
|
||||||
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
return generateDealNodeErrMsg(pCxt, TSDB_CODE_PAR_WRONG_VALUE_TYPE, pVal->literal);
|
||||||
}
|
}
|
||||||
|
*(int64_t*)&pVal->typeData = pVal->datum.i;
|
||||||
} else {
|
} else {
|
||||||
switch (pVal->node.resType.type) {
|
switch (pVal->node.resType.type) {
|
||||||
case TSDB_DATA_TYPE_NULL:
|
case TSDB_DATA_TYPE_NULL:
|
||||||
|
|
Loading…
Reference in New Issue