翻譯過程
示例SQL
SELECT
*
FROM
(
(
SELECT
*
FROM
OrderA
WHERE
user < 3
)
UNION ALL
(
SELECT
*
FROM
OrderB
WHERE
product <> 'rubber'
)
) OrderAll
WHERE
amount > 2
查看執行計劃和優化
這裏可以看到明顯使用了謂詞下推
提前過濾掉amount>2
== Abstract Syntax Tree ==
LogicalProject(user=[$0], product=[$1], amount=[$2])
LogicalFilter(condition=[>($2, 2)])
LogicalUnion(all=[true])
LogicalProject(user=[$0], product=[$1], amount=[$2])
LogicalFilter(condition=[<($0, 3)])
FlinkLogicalDataStreamScan(id=[1], fields=[user, product, amount])
LogicalProject(user=[$0], product=[$1], amount=[$2])
LogicalFilter(condition=[<>($1, _UTF-16LE'rubber')])
FlinkLogicalDataStreamScan(id=[2], fields=[user, product, amount])
== Optimized Logical Plan ==
DataStreamUnion(all=[true], union all=[user, product, amount])
DataStreamCalc(select=[user, product, amount], where=[AND(<(user, 3), >(amount, 2))])
DataStreamScan(id=[1], fields=[user, product, amount])
DataStreamCalc(select=[user, product, amount], where=[AND(<>(product, _UTF-16LE'rubber':VARCHAR(65536) CHARACTER SET "UTF-16LE"), >(amount, 2))])
DataStreamScan(id=[2], fields=[user, product, amount])
== Physical Execution Plan ==
Stage 1 : Data Source
content : collect elements with CollectionInputFormat
Stage 2 : Data Source
content : collect elements with CollectionInputFormat
Stage 3 : Operator
content : from: (user, product, amount)
ship_strategy : FORWARD
Stage 4 : Operator
content : where: (AND(<(user, 3), >(amount, 2))), select: (user, product, amount)
ship_strategy : FORWARD
Stage 5 : Operator
content : from: (user, product, amount)
ship_strategy : FORWARD
Stage 6 : Operator
content : where: (AND(<>(product, _UTF-16LE'rubber':VARCHAR(65536) CHARACTER SET "UTF-16LE"), >(amount, 2))), select: (user, product, amount)
ship_strategy : FORWARD