Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e93ed3b5
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
Star
22019
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看板
提交
e93ed3b5
编写于
8月 16, 2023
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enhance: table san type and disable partition tags optimize for tag scan
上级
d7c55cf8
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
19 addition
and
24 deletion
+19
-24
source/libs/executor/inc/executil.h
source/libs/executor/inc/executil.h
+1
-1
source/libs/executor/src/cachescanoperator.c
source/libs/executor/src/cachescanoperator.c
+1
-1
source/libs/executor/src/executil.c
source/libs/executor/src/executil.c
+1
-1
source/libs/executor/src/scanoperator.c
source/libs/executor/src/scanoperator.c
+5
-10
source/libs/planner/src/planLogicCreater.c
source/libs/planner/src/planLogicCreater.c
+9
-10
source/libs/planner/src/planOptimizer.c
source/libs/planner/src/planOptimizer.c
+2
-1
未找到文件。
source/libs/executor/inc/executil.h
浏览文件 @
e93ed3b5
...
@@ -117,7 +117,7 @@ void* tableListDestroy(STableListInfo* pTableListInfo);
...
@@ -117,7 +117,7 @@ void* tableListDestroy(STableListInfo* pTableListInfo);
void
tableListClear
(
STableListInfo
*
pTableListInfo
);
void
tableListClear
(
STableListInfo
*
pTableListInfo
);
int32_t
tableListGetOutputGroups
(
const
STableListInfo
*
pTableList
);
int32_t
tableListGetOutputGroups
(
const
STableListInfo
*
pTableList
);
bool
oneTableForEachGroup
(
const
STableListInfo
*
pTableList
);
bool
oneTableForEachGroup
(
const
STableListInfo
*
pTableList
);
uint64_t
g
etTableGroupId
(
const
STableListInfo
*
pTableList
,
uint64_t
tableUid
);
uint64_t
tableListG
etTableGroupId
(
const
STableListInfo
*
pTableList
,
uint64_t
tableUid
);
int32_t
tableListAddTableInfo
(
STableListInfo
*
pTableList
,
uint64_t
uid
,
uint64_t
gid
);
int32_t
tableListAddTableInfo
(
STableListInfo
*
pTableList
,
uint64_t
uid
,
uint64_t
gid
);
int32_t
tableListGetGroupList
(
const
STableListInfo
*
pTableList
,
int32_t
ordinalIndex
,
STableKeyInfo
**
pKeyInfo
,
int32_t
tableListGetGroupList
(
const
STableListInfo
*
pTableList
,
int32_t
ordinalIndex
,
STableKeyInfo
**
pKeyInfo
,
int32_t
*
num
);
int32_t
*
num
);
...
...
source/libs/executor/src/cachescanoperator.c
浏览文件 @
e93ed3b5
...
@@ -218,7 +218,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
...
@@ -218,7 +218,7 @@ SSDataBlock* doScanCache(SOperatorInfo* pOperator) {
return
NULL
;
return
NULL
;
}
}
pRes
->
info
.
id
.
groupId
=
g
etTableGroupId
(
pTableList
,
pRes
->
info
.
id
.
uid
);
pRes
->
info
.
id
.
groupId
=
tableListG
etTableGroupId
(
pTableList
,
pRes
->
info
.
id
.
uid
);
pInfo
->
indexOfBufferedRes
+=
1
;
pInfo
->
indexOfBufferedRes
+=
1
;
return
pRes
;
return
pRes
;
}
else
{
}
else
{
...
...
source/libs/executor/src/executil.c
浏览文件 @
e93ed3b5
...
@@ -1930,7 +1930,7 @@ void tableListGetSourceTableInfo(const STableListInfo* pTableList, uint64_t* psu
...
@@ -1930,7 +1930,7 @@ void tableListGetSourceTableInfo(const STableListInfo* pTableList, uint64_t* psu
*
type
=
pTableList
->
idInfo
.
tableType
;
*
type
=
pTableList
->
idInfo
.
tableType
;
}
}
uint64_t
g
etTableGroupId
(
const
STableListInfo
*
pTableList
,
uint64_t
tableUid
)
{
uint64_t
tableListG
etTableGroupId
(
const
STableListInfo
*
pTableList
,
uint64_t
tableUid
)
{
int32_t
*
slot
=
taosHashGet
(
pTableList
->
map
,
&
tableUid
,
sizeof
(
tableUid
));
int32_t
*
slot
=
taosHashGet
(
pTableList
->
map
,
&
tableUid
,
sizeof
(
tableUid
));
ASSERT
(
pTableList
->
map
!=
NULL
&&
slot
!=
NULL
);
ASSERT
(
pTableList
->
map
!=
NULL
&&
slot
!=
NULL
);
...
...
source/libs/executor/src/scanoperator.c
浏览文件 @
e93ed3b5
...
@@ -693,7 +693,7 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) {
...
@@ -693,7 +693,7 @@ static SSDataBlock* doTableScanImpl(SOperatorInfo* pOperator) {
}
}
if
(
pBlock
->
info
.
id
.
uid
)
{
if
(
pBlock
->
info
.
id
.
uid
)
{
pBlock
->
info
.
id
.
groupId
=
g
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
pBlock
->
info
.
id
.
groupId
=
tableListG
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
}
}
uint32_t
status
=
0
;
uint32_t
status
=
0
;
...
@@ -1088,7 +1088,7 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU
...
@@ -1088,7 +1088,7 @@ static SSDataBlock* readPreVersionData(SOperatorInfo* pTableScanOp, uint64_t tbU
if
(
hasNext
)
{
if
(
hasNext
)
{
/*SSDataBlock* p = */
pAPI
->
tsdReader
.
tsdReaderRetrieveDataBlock
(
pReader
,
NULL
);
/*SSDataBlock* p = */
pAPI
->
tsdReader
.
tsdReaderRetrieveDataBlock
(
pReader
,
NULL
);
doSetTagColumnData
(
&
pTableScanInfo
->
base
,
pBlock
,
pTaskInfo
,
pBlock
->
info
.
rows
);
doSetTagColumnData
(
&
pTableScanInfo
->
base
,
pBlock
,
pTaskInfo
,
pBlock
->
info
.
rows
);
pBlock
->
info
.
id
.
groupId
=
g
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
pBlock
->
info
.
id
.
groupId
=
tableListG
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
}
}
pAPI
->
tsdReader
.
tsdReaderClose
(
pReader
);
pAPI
->
tsdReader
.
tsdReaderClose
(
pReader
);
...
@@ -1110,7 +1110,7 @@ static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts,
...
@@ -1110,7 +1110,7 @@ static uint64_t getGroupIdByCol(SStreamScanInfo* pInfo, uint64_t uid, TSKEY ts,
static
uint64_t
getGroupIdByUid
(
SStreamScanInfo
*
pInfo
,
uint64_t
uid
)
{
static
uint64_t
getGroupIdByUid
(
SStreamScanInfo
*
pInfo
,
uint64_t
uid
)
{
STableScanInfo
*
pTableScanInfo
=
pInfo
->
pTableScanOp
->
info
;
STableScanInfo
*
pTableScanInfo
=
pInfo
->
pTableScanOp
->
info
;
return
g
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
uid
);
return
tableListG
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
uid
);
}
}
static
uint64_t
getGroupIdByData
(
SStreamScanInfo
*
pInfo
,
uint64_t
uid
,
TSKEY
ts
,
int64_t
maxVersion
)
{
static
uint64_t
getGroupIdByData
(
SStreamScanInfo
*
pInfo
,
uint64_t
uid
,
TSKEY
ts
,
int64_t
maxVersion
)
{
...
@@ -1651,7 +1651,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock
...
@@ -1651,7 +1651,7 @@ static int32_t setBlockIntoRes(SStreamScanInfo* pInfo, const SSDataBlock* pBlock
pBlockInfo
->
version
=
pBlock
->
info
.
version
;
pBlockInfo
->
version
=
pBlock
->
info
.
version
;
STableScanInfo
*
pTableScanInfo
=
pInfo
->
pTableScanOp
->
info
;
STableScanInfo
*
pTableScanInfo
=
pInfo
->
pTableScanOp
->
info
;
pBlockInfo
->
id
.
groupId
=
g
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
pBlockInfo
->
id
.
groupId
=
tableListG
etTableGroupId
(
pTableScanInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
// todo extract method
// todo extract method
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
);
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pInfo
->
matchInfo
.
pList
);
++
i
)
{
...
@@ -2795,11 +2795,6 @@ static void tagScanFilterByTagCond(SArray* aUidTags, SNode* pTagCond, SArray* aF
...
@@ -2795,11 +2795,6 @@ static void tagScanFilterByTagCond(SArray* aUidTags, SNode* pTagCond, SArray* aF
static
void
tagScanFillOneCellWithTag
(
const
STUidTagInfo
*
pUidTagInfo
,
SExprInfo
*
pExprInfo
,
SColumnInfoData
*
pColInfo
,
int
rowIndex
,
const
SStorageAPI
*
pAPI
,
void
*
pVnode
)
{
static
void
tagScanFillOneCellWithTag
(
const
STUidTagInfo
*
pUidTagInfo
,
SExprInfo
*
pExprInfo
,
SColumnInfoData
*
pColInfo
,
int
rowIndex
,
const
SStorageAPI
*
pAPI
,
void
*
pVnode
)
{
if
(
fmIsScanPseudoColumnFunc
(
pExprInfo
->
pExpr
->
_function
.
functionId
))
{
// tbname
if
(
fmIsScanPseudoColumnFunc
(
pExprInfo
->
pExpr
->
_function
.
functionId
))
{
// tbname
char
str
[
TSDB_TABLE_FNAME_LEN
+
VARSTR_HEADER_SIZE
]
=
{
0
};
char
str
[
TSDB_TABLE_FNAME_LEN
+
VARSTR_HEADER_SIZE
]
=
{
0
};
// if (pUidTagInfo->name != NULL) {
// STR_TO_VARSTR(str, pUidTagInfo->name);
// } else { // name is not retrieved during filter
// pAPI->metaFn.getTableNameByUid(pVnode, pUidTagInfo->uid, str);
// }
STR_TO_VARSTR
(
str
,
"ctbidx"
);
STR_TO_VARSTR
(
str
,
"ctbidx"
);
colDataSetVal
(
pColInfo
,
rowIndex
,
str
,
false
);
colDataSetVal
(
pColInfo
,
rowIndex
,
str
,
false
);
...
@@ -3106,7 +3101,7 @@ static SSDataBlock* getBlockForTableMergeScan(void* param) {
...
@@ -3106,7 +3101,7 @@ static SSDataBlock* getBlockForTableMergeScan(void* param) {
continue
;
continue
;
}
}
pBlock
->
info
.
id
.
groupId
=
g
etTableGroupId
(
pInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
pBlock
->
info
.
id
.
groupId
=
tableListG
etTableGroupId
(
pInfo
->
base
.
pTableListInfo
,
pBlock
->
info
.
id
.
uid
);
pOperator
->
resultInfo
.
totalRows
+=
pBlock
->
info
.
rows
;
pOperator
->
resultInfo
.
totalRows
+=
pBlock
->
info
.
rows
;
pInfo
->
base
.
readRecorder
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
)
/
1000
.
0
;
pInfo
->
base
.
readRecorder
.
elapsedTime
+=
(
taosGetTimestampUs
()
-
st
)
/
1000
.
0
;
...
...
source/libs/planner/src/planLogicCreater.c
浏览文件 @
e93ed3b5
...
@@ -253,7 +253,7 @@ static EScanType getScanType(SLogicPlanContext* pCxt, SNodeList* pScanPseudoCols
...
@@ -253,7 +253,7 @@ static EScanType getScanType(SLogicPlanContext* pCxt, SNodeList* pScanPseudoCols
return
SCAN_TYPE_SYSTEM_TABLE
;
return
SCAN_TYPE_SYSTEM_TABLE
;
}
}
if
(
tagScan
)
{
if
(
tagScan
&&
0
==
LIST_LENGTH
(
pScanCols
)
&&
0
!=
LIST_LENGTH
(
pScanPseudoCols
)
)
{
return
SCAN_TYPE_TAG
;
return
SCAN_TYPE_TAG
;
}
}
...
@@ -366,17 +366,16 @@ static bool tagScanNodeHasTbname(SNode* pKeys) {
...
@@ -366,17 +366,16 @@ static bool tagScanNodeHasTbname(SNode* pKeys) {
return
hasTbname
;
return
hasTbname
;
}
}
static
int32_t
setTagScanExecutionMode
(
SScanLogicNode
*
pScan
)
{
static
int32_t
tagScanSetExecutionMode
(
SScanLogicNode
*
pScan
)
{
//TODO: set pScan->onlyMetaCtbIdx
pScan
->
onlyMetaCtbIdx
=
false
;
bool
bOnlyMetaCtbIdx
=
false
;
if
(
tagScanNodeListHasTbname
(
pScan
->
pScanPseudoCols
))
{
if
(
tagScanNodeListHasTbname
(
pScan
->
pScanPseudoCols
))
{
bO
nlyMetaCtbIdx
=
false
;
pScan
->
o
nlyMetaCtbIdx
=
false
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
if
(
pScan
->
node
.
pConditions
==
NULL
)
{
if
(
pScan
->
node
.
pConditions
==
NULL
)
{
bO
nlyMetaCtbIdx
=
true
;
pScan
->
o
nlyMetaCtbIdx
=
true
;
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
...
@@ -385,9 +384,9 @@ static int32_t setTagScanExecutionMode(SScanLogicNode* pScan) {
...
@@ -385,9 +384,9 @@ static int32_t setTagScanExecutionMode(SScanLogicNode* pScan) {
SNode
*
pTagIndexCond
=
NULL
;
SNode
*
pTagIndexCond
=
NULL
;
filterPartitionCond
(
&
pCond
,
NULL
,
&
pTagIndexCond
,
&
pTagCond
,
NULL
);
filterPartitionCond
(
&
pCond
,
NULL
,
&
pTagIndexCond
,
&
pTagCond
,
NULL
);
if
(
pTagIndexCond
||
tagScanNodeHasTbname
(
pTagCond
))
{
if
(
pTagIndexCond
||
tagScanNodeHasTbname
(
pTagCond
))
{
bO
nlyMetaCtbIdx
=
false
;
pScan
->
o
nlyMetaCtbIdx
=
false
;
}
else
{
}
else
{
bO
nlyMetaCtbIdx
=
true
;
pScan
->
o
nlyMetaCtbIdx
=
true
;
}
}
nodesDestroyNode
(
pCond
);
nodesDestroyNode
(
pCond
);
nodesDestroyNode
(
pTagIndexCond
);
nodesDestroyNode
(
pTagIndexCond
);
...
@@ -462,8 +461,8 @@ static int32_t createScanLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect
...
@@ -462,8 +461,8 @@ static int32_t createScanLogicNode(SLogicPlanContext* pCxt, SSelectStmt* pSelect
code
=
createColumnByRewriteExprs
(
pScan
->
pScanPseudoCols
,
&
pScan
->
node
.
pTargets
);
code
=
createColumnByRewriteExprs
(
pScan
->
pScanPseudoCols
,
&
pScan
->
node
.
pTargets
);
}
}
if
(
pS
elect
->
tagScan
)
{
if
(
pS
can
->
scanType
==
SCAN_TYPE_TAG
)
{
code
=
setTagScan
ExecutionMode
(
pScan
);
code
=
tagScanSet
ExecutionMode
(
pScan
);
}
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
if
(
TSDB_CODE_SUCCESS
==
code
)
{
...
...
source/libs/planner/src/planOptimizer.c
浏览文件 @
e93ed3b5
...
@@ -1563,7 +1563,8 @@ static bool planOptNodeListHasTbname(SNodeList* pKeys) {
...
@@ -1563,7 +1563,8 @@ static bool planOptNodeListHasTbname(SNodeList* pKeys) {
static
bool
partTagsIsOptimizableNode
(
SLogicNode
*
pNode
)
{
static
bool
partTagsIsOptimizableNode
(
SLogicNode
*
pNode
)
{
bool
ret
=
1
==
LIST_LENGTH
(
pNode
->
pChildren
)
&&
bool
ret
=
1
==
LIST_LENGTH
(
pNode
->
pChildren
)
&&
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
nodesListGetNode
(
pNode
->
pChildren
,
0
));
QUERY_NODE_LOGIC_PLAN_SCAN
==
nodeType
(
nodesListGetNode
(
pNode
->
pChildren
,
0
)
&&
SCAN_TYPE_TAG
!=
((
SScanLogicNode
*
)(
nodesListGetNode
(
pNode
->
pChildren
,
0
)))
->
scanType
);
if
(
!
ret
)
return
ret
;
if
(
!
ret
)
return
ret
;
switch
(
nodeType
(
pNode
))
{
switch
(
nodeType
(
pNode
))
{
case
QUERY_NODE_LOGIC_PLAN_PARTITION
:
{
case
QUERY_NODE_LOGIC_PLAN_PARTITION
:
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录