THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
There is a very narrow subset of expressions that already follow this guideline. If an expression comes from the Planner and is backed by a `RexNode` it can be serialized to its SQL representation: https://github.com/apache/flink/blob/fa0dd3559e9697e21795a2634d8d99a0b7efdcf3/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/delegation/ParserImpl.java#L118
Example:
Code Block |
---|
env.from("customers")
.filter($("gender").isNotNull())
.filter($("has_newsletter").isEqual(true))
.filter($("date_of_birth").isGreaterOrEqual(LocalDate.parse("1980-01-01")))
.select(
$("name").upperCase(),
$("date_of_birth")) |
results in:
Code Block |
---|
Project: (projections: [upper(name), date_of_birth, AddressNormalizer(street, zip_code, city)])
Filter: (condition: [greaterThanOrEqual(date_of_birth, 1980-01-01)])
Filter: (condition: [equals(has_newsletter, true)])
Filter: (condition: [isNotNull(gender)])
CatalogTable: (identifier: [default_catalog.default_database.customers], fields: [name, date_of_birth, street, zip_code, city, gender, has_newsletter]) |
which would get translated into a SQL:
Code Block |
---|
SELECT upper(name), date_of_birth FROM (
SELECT * FROM (
SELECT * FROM (
SELECT * FROM (
SELECT name, date_of_birth, street, zip_code, city, gender, has_newsletter FROM `default_catalog`.`default_database`.`customers`;
) WHERE gender IS NOT NULL
) WHERE has_newsletter = true
) WHERE date_of_birth >= 1980-01-01
) |
Functions requiring special syntax
...