Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Coordinator

The coordinator is the brain of SQE. It handles SQL parsing, query planning, security enforcement, and result delivery. In single-node mode, it also executes queries directly.

Responsibilities

graph TB
    subgraph Coordinator
        FLS["Flight SQL Server"] --> SM["Session Manager"]
        FLS --> QH["Query Handler"]

        QH --> PARSE["SQL Parser<br/>(sqlparser-rs)"]
        QH --> CLASS["Statement Classifier"]
        QH --> PLAN["Query Planner<br/>(DataFusion)"]
        QH --> PE["Policy Enforcer"]
        QH --> CAT["Catalog Ops<br/>(DDL)"]
        QH --> WH["Write Handler<br/>(CTAS, INSERT,<br/>DELETE, UPDATE,<br/>MERGE — CoW)"]

        SM --> AUTH["Authenticator<br/>(Keycloak OIDC)"]
        SM --> TC["Token Cache"]

        PLAN --> DF["DataFusion<br/>SessionContext"]
        DF --> SC["SessionCatalog<br/>(per-user token)"]
    end

Statement Routing

The coordinator classifies every SQL statement and routes it to the appropriate handler:

StatementHandlerDescription
SELECTexecute_queryPlan → policy enforce → execute → stream results
SHOW CATALOGShandle_show_catalogsReturns warehouse name
SHOW SCHEMAShandle_show_schemasLists namespaces from Polaris
SHOW TABLEShandle_show_tablesLists tables in namespace(s)
CREATE TABLE AS SELECThandle_ctasExecute SELECT → write Parquet → commit to Iceberg
INSERT INTOhandle_insertExecute SELECT → append Parquet → commit
CREATE VIEWhandle_create_viewPlan SELECT for schema validation → store in catalog
DROP TABLEcatalog_ops.drop_tableForward to Polaris REST
CREATE SCHEMAcatalog_ops.create_schemaCreate namespace in Polaris
DROP SCHEMAcatalog_ops.drop_schemaDrop namespace from Polaris
EXPLAINhandle_explainShow query plan
DELETE FROMhandle_deleteCoW: scan affected files, filter, rewrite via rewrite_files()
UPDATEhandle_updateCoW: scan affected files, apply SET, rewrite via rewrite_files()
MERGE INTOhandle_mergeCoW: full outer join, classify rows, rewrite via rewrite_files()
GRANT/REVOKEPolicy (Phase 5)Not yet implemented

Session Context

Each query gets a fresh DataFusion SessionContext with the user’s catalog:

sequenceDiagram
    participant QH as Query Handler
    participant SC as SessionCatalog
    participant POL as Polaris
    participant DF as DataFusion

    QH->>SC: new(catalog_url, warehouse, user_token)
    SC->>POL: list_namespaces() [user_token]
    POL-->>SC: [ns1, ns2, ns3]
    QH->>DF: register_catalog(warehouse, CatalogProvider)
    QH->>DF: sql("SELECT * FROM ns1.table1")
    DF->>SC: get_table("ns1", "table1")
    SC->>POL: load_table("ns1.table1") [user_token]
    POL-->>SC: table metadata + S3 location
    SC-->>DF: TableProvider (Iceberg scan)

This means two users running the same query may see different tables, schemas, or data — depending on what Polaris grants them.