Skip to content

Latest commit

 

History

History

flink-table-planner

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Table Planner

This module connects Table/SQL API and runtime. It is responsible for translating and optimizing a table program into a Flink pipeline. For user documentation, check the table documentation.

This README contains some development info for table planner contributors.

Immutables for rules

Calcite's @ImmutableBeans.Property has been removed in Calcite 1.28.0.

Since Flink 1.17, planner rules use Immutables to generate immutable classes for rule configs based on the provided interface. A config should be annotated with @Value.Immutable. In case the config is a nested class, the enclosing one should be annotated with @Value.Enclosing.

Once a new rule config is written and annotated, compile the module to generate the immutable class for that config. Generated code will be placed in target/generated-sources/annotations. The config can then be instantiated with the help of the generated immutable class like Immutable<EnclosingClassName>.<ConfigClassName>.

In case of issues, please double-check if a required generated class is present. As an example have a look at org.apache.flink.table.planner.plan.rules.logical.EventTimeTemporalJoinRewriteRule. See also org.apache.calcite.plan.RelRule for detailed explanation from Calcite.

Json Plan unit tests

Unit tests verifying the JSON plan changes (e.g. Java tests in org.apache.flink.table.planner.plan.nodes.exec.stream) can regenerate all the files setting the environment variable PLAN_TEST_FORCE_OVERWRITE=true.