Flink源碼-9-Flink sql翻譯Job及優化

翻譯過程

參考文檔

sqlparser
validate
優化器規則優化
codegen
SQL
AST抽象語法樹表示用SqlNode
邏輯樹RelNode
邏輯樹RelNode
物理執行計劃
Flink算子

示例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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章