Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Ignite community is willing to work on a prototype of alternate SQL engines and selected Apache Calcite as the first candidate.

Info

Intro to Apache Calcite:


Below you can see a list of the limitations of the current SQL engine outlined technically:

...

There are several example of successful Calcite integrations (Apache Drill, Apache Flink, Hive, etc)

Calcite based SQL engine requirements

...

  1. It has to generate Generate the same execution plan as H2 for commonly used queries (co-located queries) - only two phases, this means there is no intermediate local task having a Sender on top of execution sub-graph and a Receiver at the bottom for such query (except cases when such behavior is forced by hints - it's helpful to delegate results aggregation to server nodes in case a requesting client have a little free memory).

  2. It has to provide Provide an ability to execute any non-recursive non-collocated queries in reasonable period of time.
  3. Ability to obtain execution plan in human readable form (explain plan).
  4. Provide It has to provide memory management abilities to defend the application from OOM (lazy result retrieval, memory quotes, using disk for intermediate results, etc).
  5. It has to provide Provide SQL enhancement abilities (system functions, user defined functions, hints, etc).
  6. Generate It has to generate optimal execution plan for non-recursive non-collocated queries taking into consideration two factors: a) transferring data amount, b) each local subtask execution complexity.
  7. Ability to setup query timeout and cancel running query manually.
  8. Leverage primary and secondary indices.
  9. Provide It has to provide enhancement points for future improvements (new transformation rules, different source data structure types support - indexes and tables initially and prefix trees or spatial indexes in future, possible column based storage support in future, etc).

The list may be increased.

Implementation details

...

Apache Calcite uses graph based representation of relational operators, each node has node specific meta information (join type, projection columns, sort operation direction) and general outgoing data properties (traits in terms of Calcite). Each node may have limited count of trait types (equal to count of registered Trait definitions for a planner). Trait types are defined for whole graph before its construction. Calcite framework transforms nodes (node specific properties), data traits and even nodes position based on initial nodes meta information, data traits and relative position.

...

Gliffy Diagram
nameOptimized physical plan
pagePin1

Expected integration steps

...

  1. Ignite logical convention implementing (Relational graph nodes, converter rules), so, Calcite can use Ignite's own operations costs, we have a control on what variant of graph is preferable.
  2. Index Scan rules implementing - Apache Phoenix experience may be reused. Range filters, sorted scans, some projections transform into index scans.
  3. Exchange related rules implementing (affinity aware) - Apache Drill experience may be reused. SINGLETON, RANDOM, HASH and BROADCAST distribution types needed.
  4. Sender/Receiver infrastructure implementing. - Each Exchange rewrites into a pair of Receiver and Sender where Receiver is a relation node and Sender is an infrastructure object which is used to stream target Exchange subgraph result to a particular remote receiver.
  5. Physical convention implementing - as a start point we may use one of provided by Calcite conventions (Bindable, Enumerable, Interpretable) rewriting particular relational nodes and converter/transform rules into our own implementations one by one.

...

https://drill.apache.org/

Apache Calcite-powered SQL Engine Roadmap

Apache Calcite-powered SQL Engine Roadmap

Tickets

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyIGNITE-12248

...

Jira
serverASF JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
maximumIssues20
jqlQueryproject = IGNITE AND labels = h2-limitation
serverId5aa69414-a9e9-3523-82ec-879b028fb15b

Related documents

Volcano/Cascades optimizer

Columbia optimizer