Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d9e51723
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1191
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d9e51723
编写于
7月 07, 2022
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(query): set the correct sma data
上级
9a0e15f1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
56 addition
and
63 deletion
+56
-63
source/client/test/clientTests.cpp
source/client/test/clientTests.cpp
+5
-4
source/dnode/vnode/src/tsdb/tsdbRead.c
source/dnode/vnode/src/tsdb/tsdbRead.c
+41
-38
source/libs/function/src/builtinsimpl.c
source/libs/function/src/builtinsimpl.c
+10
-21
未找到文件。
source/client/test/clientTests.cpp
浏览文件 @
d9e51723
...
...
@@ -750,7 +750,7 @@ TEST(testCase, projection_query_stables) {
taos_close(pConn);
}
#endif
TEST
(
testCase
,
agg_query_tables
)
{
TAOS
*
pConn
=
taos_connect
(
"localhost"
,
"root"
,
"taosdata"
,
NULL
,
0
);
ASSERT_NE
(
pConn
,
nullptr
);
...
...
@@ -763,7 +763,7 @@ TEST(testCase, agg_query_tables) {
}
taos_free_result
(
pRes
);
pRes = taos_query(pConn, "show table distributed
st1
");
pRes
=
taos_query
(
pConn
,
"show table distributed
tup
"
);
if
(
taos_errno
(
pRes
)
!=
0
)
{
printf
(
"failed to select from table, reason:%s
\n
"
,
taos_errstr
(
pRes
));
taos_free_result
(
pRes
);
...
...
@@ -775,6 +775,7 @@ TEST(testCase, agg_query_tables) {
taos_close
(
pConn
);
}
#if 0
/*
--- copy the following script in the shell to setup the environment ---
...
...
@@ -820,7 +821,7 @@ TEST(testCase, async_api_test) {
getchar();
taos_close(pConn);
}
#endif
TEST(testCase, update_test) {
TAOS* pConn = taos_connect("localhost", "root", "taosdata", NULL, 0);
...
...
@@ -857,5 +858,5 @@ TEST(testCase, update_test) {
taos_free_result(pRes);
}
}
#endif
#pragma GCC diagnostic pop
source/dnode/vnode/src/tsdb/tsdbRead.c
浏览文件 @
d9e51723
...
...
@@ -55,7 +55,7 @@ typedef struct SIOCostSummary {
}
SIOCostSummary
;
typedef
struct
SBlockLoadSuppInfo
{
SColumnDataAgg
*
pstatis
;
SColumnDataAgg
tsColAgg
;
SColumnDataAgg
**
plist
;
int16_t
*
colIds
;
// column ids for loading file block data
int32_t
*
slotIds
;
// colId to slotId
...
...
@@ -364,13 +364,14 @@ static int32_t tsdbReaderCreate(SVnode* pVnode, SQueryTableDataCond* pCond, STsd
// allocate buffer in order to load data blocks from file
SBlockLoadSuppInfo
*
pSup
=
&
pReader
->
suppInfo
;
pSup
->
pstatis
=
taosMemoryCalloc
(
pCond
->
numOfCols
,
sizeof
(
SColumnDataAgg
));
pSup
->
plist
=
taosMemoryCalloc
(
pCond
->
numOfCols
,
POINTER_BYTES
);
if
(
pSup
->
p
statis
==
NULL
||
pSup
->
p
list
==
NULL
)
{
if
(
pSup
->
plist
==
NULL
)
{
code
=
TSDB_CODE_OUT_OF_MEMORY
;
goto
_end
;
}
pSup
->
tsColAgg
.
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
pReader
->
pResBlock
=
createResBlock
(
pCond
,
pReader
->
capacity
);
if
(
pReader
->
pResBlock
==
NULL
)
{
code
=
terrno
;
...
...
@@ -2647,8 +2648,6 @@ void tsdbReaderClose(STsdbReader* pReader) {
}
blockDataDestroy
(
pReader
->
pResBlock
);
taosMemoryFreeClear
(
pReader
->
suppInfo
.
pstatis
);
taosMemoryFreeClear
(
pReader
->
suppInfo
.
plist
);
taosMemoryFree
(
pReader
->
suppInfo
.
slotIds
);
...
...
@@ -2744,56 +2743,48 @@ int32_t tsdbRetrieveDataBlockStatisInfo(STsdbReader* pReader, SColumnDataAgg***
int64_t
stime
=
taosGetTimestampUs
();
SArray
*
pColAgg
=
taosArrayInit
(
4
,
sizeof
(
SColumnDataAgg
));
if
(
tBlockHasSma
(
pBlock
))
{
SArray
*
pColAgg
=
taosArrayInit
(
4
,
sizeof
(
SColumnDataAgg
));
code
=
tsdbReadBlockSma
(
pReader
->
pFileReader
,
pBlock
,
pColAgg
,
NULL
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
tsdbDebug
(
"vgId:%d, failed to load block SMA for uid %"
PRIu64
", code:%s, %s"
,
0
,
pFBlock
->
uid
,
tstrerror
(
code
),
pReader
->
idStr
);
return
code
;
}
}
else
{
*
pBlockStatis
=
NULL
;
return
TSDB_CODE_SUCCESS
;
}
int64_t
el
=
taosGetTimestampUs
()
-
stime
;
tsdbDebug
(
"vgId:%d, succeed to load block SMA for uid %"
PRIu64
", elapsed time:%"
PRId64
"us, %s"
,
0
,
pFBlock
->
uid
,
el
,
pReader
->
idStr
);
// int16_t* colIds = pReader->suppInfo.defaultLoadColumn->pData;
// size_t numOfCols = QH_GET_NUM_OF_COLS(pReader);
// memset(pReader->suppInfo.plist, 0, numOfCols * POINTER_BYTES);
// memset(pReader->suppInfo.pstatis, 0, numOfCols * sizeof(SColumnDataAgg));
// for (int32_t i = 0; i < numOfCols; ++i) {
// pReader->suppInfo.pstatis[i].colId = colIds[i];
// }
// *allHave = true;
// tsdbGetBlockStatis(&pReader->rhelper, pReader->suppInfo.pstatis, (int)numOfCols, pBlockInfo->compBlock);
*
allHave
=
true
;
// always load the first primary timestamp column data
SColumnDataAgg
*
pTsAgg
=
&
pReader
->
suppInfo
.
pstatis
[
0
];
assert
(
pTsAgg
->
colId
==
PRIMARYKEY_TIMESTAMP_COL_ID
);
SColumnDataAgg
*
pTsAgg
=
&
pReader
->
suppInfo
.
tsColAgg
;
pTsAgg
->
numOfNull
=
0
;
pTsAgg
->
numOfNull
=
0
;
pTsAgg
->
colId
=
PRIMARYKEY_TIMESTAMP_COL_ID
;
pTsAgg
->
min
=
pReader
->
pResBlock
->
info
.
window
.
skey
;
pTsAgg
->
max
=
pReader
->
pResBlock
->
info
.
window
.
ekey
;
pReader
->
suppInfo
.
plist
[
0
]
=
&
pReader
->
suppInfo
.
pstatis
[
0
]
;
pReader
->
suppInfo
.
plist
[
0
]
=
pTsAgg
;
// update the number of NULL data rows
size_t
numOfCols
=
blockDataGetNumOfCols
(
pReader
->
pResBlock
);
int32_t
*
slotIds
=
pReader
->
suppInfo
.
slotIds
;
for
(
int32_t
i
=
1
;
i
<
numOfCols
;
++
i
)
{
// ASSERT(colIds[i] == pReader->pSchema->columns[slotIds[i]].colId);
if
(
IS_BSMA_ON
(
&
(
pReader
->
pSchema
->
columns
[
slotIds
[
i
]])))
{
if
(
pReader
->
suppInfo
.
pstatis
[
i
].
numOfNull
==
-
1
)
{
// set the column data are all NULL
// pReader->suppInfo.pstatis[i].numOfNull = pBlockInfo->compBlock->numOfRows;
int32_t
i
=
0
,
j
=
0
;
while
(
j
<
numOfCols
&&
i
<
taosArrayGetSize
(
pColAgg
))
{
SColumnDataAgg
*
pAgg
=
taosArrayGet
(
pColAgg
,
i
);
if
(
pAgg
->
colId
==
pReader
->
suppInfo
.
colIds
[
j
])
{
if
(
IS_BSMA_ON
(
&
(
pReader
->
pSchema
->
columns
[
i
])))
{
pReader
->
suppInfo
.
plist
[
j
]
=
pAgg
;
i
+=
1
;
j
+=
1
;
}
else
{
*
allHave
=
false
;
}
pReader
->
suppInfo
.
plist
[
i
]
=
&
pReader
->
suppInfo
.
pstatis
[
i
]
;
}
else
{
*
allHave
=
false
;
}
else
if
(
pAgg
->
colId
<
pReader
->
suppInfo
.
colIds
[
j
])
{
i
+=
1
;
}
else
if
(
pReader
->
suppInfo
.
colIds
[
j
]
<
pAgg
->
colId
)
{
j
+=
1
;
}
}
...
...
@@ -2801,6 +2792,10 @@ int32_t tsdbRetrieveDataBlockStatisInfo(STsdbReader* pReader, SColumnDataAgg***
pReader
->
cost
.
smaLoadTime
+=
elapsed
;
*
pBlockStatis
=
pReader
->
suppInfo
.
plist
;
tsdbDebug
(
"vgId:%d, succeed to load block SMA for uid %"
PRIu64
", elapsed time:%"
PRId64
"us, %s"
,
0
,
pFBlock
->
uid
,
elapsed
,
pReader
->
idStr
);
return
code
;
}
...
...
@@ -2843,7 +2838,7 @@ int32_t tsdbReaderReset(STsdbReader* pReader, SQueryTableDataCond* pCond, int32_
pReader
->
window
=
updateQueryTimeWindow
(
pReader
->
pTsdb
,
&
pCond
->
twindows
[
tWinIdx
]);
// allocate buffer in order to load data blocks from file
memset
(
pReader
->
suppInfo
.
pstatis
,
0
,
sizeof
(
SColumnDataAgg
));
memset
(
&
pReader
->
suppInfo
.
tsColAgg
,
0
,
sizeof
(
SColumnDataAgg
));
memset
(
pReader
->
suppInfo
.
plist
,
0
,
POINTER_BYTES
);
// todo set the correct numOfTables
...
...
@@ -2899,9 +2894,9 @@ int32_t tsdbGetFileBlocksDistInfo(STsdbReader* pReader, STableBlockDistInfo* pTa
pTableBlockInfo
->
numOfBlocks
+=
pBlockIter
->
numOfBlocks
;
pTableBlockInfo
->
numOfTables
=
numOfTables
;
bool
hasNext
=
true
;
while
(
true
)
{
bool
hasNext
=
blockIteratorNext
(
&
pStatus
->
blockIter
);
if
(
hasNext
)
{
SFileDataBlockInfo
*
pFBlock
=
getCurrentBlockInfo
(
pBlockIter
);
STableBlockScanInfo
*
pScanInfo
=
taosHashGet
(
pStatus
->
pTableMap
,
&
pFBlock
->
uid
,
sizeof
(
pFBlock
->
uid
));
...
...
@@ -2924,6 +2919,9 @@ int32_t tsdbGetFileBlocksDistInfo(STsdbReader* pReader, STableBlockDistInfo* pTa
int32_t
bucketIndex
=
getBucketIndex
(
pTableBlockInfo
->
defMinRows
,
bucketRange
,
numOfRows
);
pTableBlockInfo
->
blockRowsHisto
[
bucketIndex
]
++
;
hasNext
=
blockIteratorNext
(
&
pStatus
->
blockIter
);
}
else
{
code
=
initForFirstBlockInFile
(
pReader
,
pBlockIter
);
if
((
code
!=
TSDB_CODE_SUCCESS
)
||
(
pReader
->
status
.
loadFromFile
==
false
))
{
...
...
@@ -2933,6 +2931,11 @@ int32_t tsdbGetFileBlocksDistInfo(STsdbReader* pReader, STableBlockDistInfo* pTa
pTableBlockInfo
->
numOfBlocks
+=
pBlockIter
->
numOfBlocks
;
}
/*
hasNext = blockIteratorNext(&pStatus->blockIter);
*/
// tsdbDebug("%p %d blocks found in file for %d table(s), fid:%d, %s", pReader, numOfBlocks, numOfTables,
// pReader->pFileGroup->fid, pReader->idStr);
}
...
...
source/libs/function/src/builtinsimpl.c
浏览文件 @
d9e51723
...
...
@@ -5547,30 +5547,18 @@ int32_t blockDistFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
}
}
int32_t
delta
=
maxVal
-
minVal
;
int32_t
step
=
delta
/
50
;
if
(
step
==
0
)
{
step
=
1
;
}
// maximum number of step is 80
double
factor
=
pData
->
numOfBlocks
/
80
.
0
;
int32_t
numOfBuckets
=
sizeof
(
pData
->
blockRowsHisto
)
/
sizeof
(
pData
->
blockRowsHisto
[
0
]);
int32_t
bucketRange
=
(
pData
->
maxRows
-
pData
->
minRows
)
/
numOfBuckets
;
bool
singleModel
=
false
;
if
(
bucketRange
==
0
)
{
singleModel
=
true
;
step
=
20
;
bucketRange
=
(
pData
->
defMaxRows
-
pData
->
defMinRows
)
/
numOfBuckets
;
}
int32_t
bucketRange
=
(
pData
->
defMaxRows
-
pData
->
defMinRows
)
/
numOfBuckets
;
for
(
int32_t
i
=
0
;
i
<
tListLen
(
pData
->
blockRowsHisto
);
++
i
)
{
len
=
sprintf
(
st
+
VARSTR_HEADER_SIZE
,
"%04d |"
,
pData
->
defMinRows
+
bucketRange
*
(
i
+
1
)
);
len
=
sprintf
(
st
+
VARSTR_HEADER_SIZE
,
"%04d |"
,
pData
->
defMinRows
+
bucketRange
*
i
);
int32_t
num
=
0
;
if
(
singleModel
&&
pData
->
blockRowsHisto
[
i
]
>
0
)
{
num
=
20
;
}
else
{
num
=
(
pData
->
blockRowsHisto
[
i
]
+
step
-
1
)
/
step
;
if
(
pData
->
blockRowsHisto
[
i
]
>
0
)
{
num
=
(
pData
->
blockRowsHisto
[
i
])
/
factor
;
}
for
(
int32_t
j
=
0
;
j
<
num
;
++
j
)
{
...
...
@@ -5578,9 +5566,10 @@ int32_t blockDistFinalize(SqlFunctionCtx* pCtx, SSDataBlock* pBlock) {
len
+=
x
;
}
double
v
=
pData
->
blockRowsHisto
[
i
]
*
100
.
0
/
pData
->
numOfBlocks
;
len
+=
sprintf
(
st
+
VARSTR_HEADER_SIZE
+
len
,
" %d (%.2f%c)"
,
pData
->
blockRowsHisto
[
i
],
v
,
'%'
);
printf
(
"%s
\n
"
,
st
);
if
(
num
>
0
)
{
double
v
=
pData
->
blockRowsHisto
[
i
]
*
100
.
0
/
pData
->
numOfBlocks
;
len
+=
sprintf
(
st
+
VARSTR_HEADER_SIZE
+
len
,
" %d (%.2f%c)"
,
pData
->
blockRowsHisto
[
i
],
v
,
'%'
);
}
varDataSetLen
(
st
,
len
);
colDataAppend
(
pColInfo
,
row
++
,
st
,
false
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录