Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Iotdb
提交
b63c4aba
I
Iotdb
项目概览
apache
/
Iotdb
大约 1 年 前同步成功
通知
25
Star
3344
Fork
916
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
Iotdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
b63c4aba
编写于
8月 10, 2022
作者:
L
Liao Lanyu
提交者:
GitHub
8月 10, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[IOTDB-4010] Use FilterAndProjectOperator for query that does not contain non-mappable UDF (#6929)
上级
6421f4ea
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
68 addition
and
2 deletion
+68
-2
server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/FilterAndProjectOperator.java
.../execution/operator/process/FilterAndProjectOperator.java
+10
-1
server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
...otdb/db/mpp/plan/expression/multi/FunctionExpression.java
+3
-0
server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/OperatorTreeGenerator.java
...ache/iotdb/db/mpp/plan/planner/OperatorTreeGenerator.java
+55
-1
未找到文件。
server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/FilterAndProjectOperator.java
浏览文件 @
b63c4aba
...
...
@@ -56,6 +56,9 @@ public class FilterAndProjectOperator implements ProcessOperator {
private
final
OperatorContext
operatorContext
;
// false when we only need to do projection
private
final
boolean
hasFilter
;
public
FilterAndProjectOperator
(
OperatorContext
operatorContext
,
Operator
inputOperator
,
...
...
@@ -65,7 +68,8 @@ public class FilterAndProjectOperator implements ProcessOperator {
List
<
ColumnTransformer
>
commonTransformerList
,
List
<
LeafColumnTransformer
>
projectLeafColumnTransformerList
,
List
<
ColumnTransformer
>
projectOutputTransformerList
,
boolean
hasNonMappableUDF
)
{
boolean
hasNonMappableUDF
,
boolean
hasFilter
)
{
this
.
operatorContext
=
operatorContext
;
this
.
inputOperator
=
inputOperator
;
this
.
filterLeafColumnTransformerList
=
filterLeafColumnTransformerList
;
...
...
@@ -75,6 +79,7 @@ public class FilterAndProjectOperator implements ProcessOperator {
this
.
projectOutputTransformerList
=
projectOutputTransformerList
;
this
.
hasNonMappableUDF
=
hasNonMappableUDF
;
this
.
filterTsBlockBuilder
=
new
TsBlockBuilder
(
8
,
filterOutputDataTypes
);
this
.
hasFilter
=
hasFilter
;
}
@Override
...
...
@@ -89,6 +94,10 @@ public class FilterAndProjectOperator implements ProcessOperator {
return
null
;
}
if
(!
hasFilter
)
{
return
getTransformedTsBlock
(
input
);
}
TsBlock
filterResult
=
getFilterTsBlock
(
input
);
// contains non-mappable udf, we leave calculation for TransformOperator
...
...
server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
浏览文件 @
b63c4aba
...
...
@@ -431,6 +431,9 @@ public class FunctionExpression extends Expression {
@Override
public
boolean
isMappable
(
TypeProvider
typeProvider
)
{
if
(
isBuiltInAggregationFunctionExpression
)
{
return
false
;
}
return
new
UDTFInformationInferrer
(
functionName
)
.
getAccessStrategy
(
expressions
.
stream
().
map
(
Expression:
:
toString
).
collect
(
Collectors
.
toList
()),
...
...
server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/OperatorTreeGenerator.java
浏览文件 @
b63c4aba
...
...
@@ -796,9 +796,62 @@ public class OperatorTreeGenerator extends PlanVisitor<Operator, LocalExecutionP
final
Operator
inputOperator
=
generateOnlyChildOperator
(
node
,
context
);
final
List
<
TSDataType
>
inputDataTypes
=
getInputColumnTypes
(
node
,
context
.
getTypeProvider
());
final
Map
<
String
,
List
<
InputLocation
>>
inputLocations
=
makeLayout
(
node
);
final
Expression
[]
projectExpressions
=
node
.
getOutputExpressions
();
final
TypeProvider
typeProvider
=
context
.
getTypeProvider
();
context
.
getTimeSliceAllocator
().
recordExecutionWeight
(
operatorContext
,
1
);
boolean
hasNonMappableUDF
=
false
;
for
(
Expression
expression
:
projectExpressions
)
{
if
(!
expression
.
isMappable
(
typeProvider
))
{
hasNonMappableUDF
=
true
;
break
;
}
}
// Use FilterAndProject Operator when project expressions are all mappable
if
(!
hasNonMappableUDF
)
{
// init project UDTFContext
UDTFContext
projectContext
=
new
UDTFContext
(
node
.
getZoneId
());
projectContext
.
constructUdfExecutors
(
projectExpressions
);
List
<
ColumnTransformer
>
projectOutputTransformerList
=
new
ArrayList
<>();
Map
<
Expression
,
ColumnTransformer
>
projectExpressionColumnTransformerMap
=
new
HashMap
<>();
// records LeafColumnTransformer of project expressions
List
<
LeafColumnTransformer
>
projectLeafColumnTransformerList
=
new
ArrayList
<>();
ColumnTransformerVisitor
visitor
=
new
ColumnTransformerVisitor
();
ColumnTransformerVisitor
.
ColumnTransformerVisitorContext
projectColumnTransformerContext
=
new
ColumnTransformerVisitor
.
ColumnTransformerVisitorContext
(
projectContext
,
typeProvider
,
projectLeafColumnTransformerList
,
inputLocations
,
projectExpressionColumnTransformerMap
,
ImmutableMap
.
of
(),
ImmutableList
.
of
(),
inputDataTypes
,
inputLocations
.
size
());
for
(
Expression
expression
:
projectExpressions
)
{
projectOutputTransformerList
.
add
(
visitor
.
process
(
expression
,
projectColumnTransformerContext
));
}
return
new
FilterAndProjectOperator
(
operatorContext
,
inputOperator
,
inputDataTypes
,
ImmutableList
.
of
(),
null
,
ImmutableList
.
of
(),
projectLeafColumnTransformerList
,
projectOutputTransformerList
,
false
,
false
);
}
try
{
return
new
TransformOperator
(
operatorContext
,
...
...
@@ -918,7 +971,8 @@ public class OperatorTreeGenerator extends PlanVisitor<Operator, LocalExecutionP
commonTransformerList
,
projectLeafColumnTransformerList
,
projectOutputTransformerList
,
hasNonMappableUDF
);
hasNonMappableUDF
,
true
);
// Project expressions don't contain Non-Mappable UDF, TransformOperator is not needed
if
(!
hasNonMappableUDF
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录