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.
[CALCITE-816]
allows you to represent sub-queries (EXISTS
, IN
and scalar) as
RexSubQuery,
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
RelBuilder)
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
[CALCITE-1023]
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 RelNode
s that is large,
frequently cyclic, and constantly changing.
[CALCITE-794]
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.
See the release notes; download the release.