As usual in this release, there are new SQL features, improvements to planning rules and Avatica, and lots of bug fixes. We’ll spotlight a couple of features make it easier to handle complex queries.
allows you to represent sub-queries (
IN and scalar) as
a kind of expression in the relational algebra. Until
now, the sql-to-rel converter was burdened with expanding sub-queries,
and people creating relational algebra directly (or via
could only create ‘flat’ relational expressions. Now we have planner
rules to expand and de-correlate sub-queries.
Metadata is the fuel that powers query planning. It includes
traditional query-planning statistics such as cost and row-count
estimates, but also information such as which columns form unique
keys, unique and what predicates are known to apply to a relational
expression’s output rows. From the predicates we can deduce which
columns are constant, and following
we can now remove constant columns from
GROUP BY keys.
Metadata is often computed recursively, and it is hard to safely and
efficiently calculate metadata on a graph of
RelNodes that is large,
frequently cyclic, and constantly changing.
introduces a context to each metadata call. That context can detect
cyclic metadata calls and produce a safe answer to the metadata
request. It will also allow us to add finer-grained caching and
further tune the metadata layer.