Cloud Parts

Query engines

Compute that runs SQL over data it doesn’t own, and scales separately from the storage.

31 technologies on this page ↓
Live model
What you’re watchingTwo engines share one copy of the data. Analysts’ queries go to a coordinator that hands them to a pool of workers, which grows with demand and shrinks when it’s quiet. A nightly job spins up its own Spark cluster, reads the same files and shuts down again. Neither engine owns the storage.

How it works

A query engine parses your SQL, asks a catalog which files hold the table, and splits the work into tasks that many workers run in parallel. Each worker reads its share of Parquet files straight from object storage, then results are shuffled, aggregated and returned through a coordinator. Because the data stays in open files, several engines can share it: an interactive SQL engine for dashboards, Spark for heavy batch and ML jobs, DuckDB on a laptop. Each one scales up, or shuts down, without moving any data.

Think of it as

Researchers in a public library. You can bring in one or a hundred and they all read the same shelves. When they go home, the books stay put.

Reach for it when

  • Interactive SQL over a data lake without loading it into a warehouse first
  • Several teams or tools that need the same tables through different engines
  • Spiky analytics, where paying per query or per second beats an always-on cluster

Think twice when

  • Sub-second lookups for an app; use a database or a cache
  • Small data: DuckDB or a single Postgres is simpler than a distributed cluster

A real example

A retailer keeps three years of clickstream as Iceberg tables in S3. Analysts run Athena queries that each scan a few GB and pay per TB scanned. A nightly Spark job on EMR builds features from the same tables, and an engineer debugs one day’s partition with DuckDB on a laptop.

Technologies

Specific products, and what each does differently.

Distributed engines and MPP databases

Clusters that split one query across many machines.

Managed and serverless engines

Someone else runs the machines; you pay per query, scan or use.

Single-node and embedded engines

One process, often a library inside your program, sometimes wrapped as a small server.

DuckDBOpen sourceAn in-process analytical SQL database: a library with no server that queries Parquet, CSV, Iceberg and S3 directly.chDBOpen sourceThe ClickHouse engine packaged as a library: run ClickHouse SQL inside a Python, Go, Rust or Node.js program, with no server.PolarsOpen sourceA DataFrame library with a Rust query engine underneath: you write Python (or Rust, SQL, Node.js, R) and it plans, optimises and runs the query on every core, streaming data bigger than memory.GlareDBDormantOpen sourceA small, embeddable SQL engine in Rust for querying Parquet and CSV files locally, over HTTP or in S3 and GCS, from a CLI, Python or the browser. It began as a DataFusion-based federated query service and was rewritten in 2025 on its own engine, and it has had no release since June 2025.RayforceOpen sourceA small embeddable engine in pure C that runs columnar analytics, graph traversals and recursive Datalog queries in one optimised plan.GizmoSQLOpen sourceA database server that wraps DuckDB (or SQLite) and serves it to many clients over Arrow Flight SQL, with TLS and authentication.Spice.ai OSSOpen sourceA single-binary SQL engine in Rust, built on DataFusion and Arrow, that federates queries across databases, warehouses and lakes, keeps hot datasets in a local accelerated copy, and adds search and LLM APIs on top.PivotOpen sourceA young open-source analytics server in Rust that speaks the PostgreSQL protocol and queries Iceberg and Delta Lake tables straight from object storage.Mainly Real-time analytics databases

Building blocks for engine builders

Parsers, planners and execution libraries that other engines are made of.

What each provider calls it

AWS
Athena, Redshift Spectrum, EMR (Spark, Trino), Glue
Google Cloud
BigQuery (incl. BigLake tables), Managed Service for Apache Spark (formerly Dataproc)
Azure
Microsoft Fabric (SQL endpoint, Spark), Azure Databricks, Synapse serverless SQL
Open source & others
Trino, Presto, Apache Spark, Apache Hive, Apache Impala, DuckDB, Polars (a DataFrame library with a streaming engine), StarRocks, ClickHouse, Apache DataFusion (a library to build engines on), chDB (ClickHouse as a library), GizmoSQL (DuckDB served over Arrow Flight SQL), Spice.ai OSS (federates sources and caches them locally, built on DataFusion); also Dremio (now part of SAP), Starburst

See it in a real stack

Architectures that use query engines

In code · python

import duckdb

con = duckdb.connect()
con.sql("CREATE SECRET (TYPE s3, PROVIDER credential_chain)")

# DuckDB reads only the columns and row groups this query needs
con.sql("""
    SELECT date_trunc('day', ts) AS day, count(*) AS views
    FROM read_parquet('s3://lake/clicks/2026/09/*.parquet')
    GROUP BY day ORDER BY day
""").show()

Benchmarks

How to read a benchmark →

Often confused with

Where it came from2009–2018

For most of database history, the SQL engine and the storage were one product: to query data, you loaded it into the database, in the database’s own format. In the late 2000s, companies such as Facebook began keeping huge datasets as plain files in Hadoop’s HDFS, because traditional warehouses had become prohibitively expensive at that size. But querying those files meant writing low-level MapReduce programs that were hard to maintain and reuse.

Facebook’s Hive, described at VLDB 2009, put SQL on top of those files. A table was just a directory, a catalog (the Hive Metastore) recorded schemas and formats, and each query compiled into MapReduce jobs; Facebook’s Hive warehouse already held over 700 TB. Hive was slow, so a wave of engines followed that read the same files without MapReduce: Google’s Dremel paper (2010) showed interactive SQL on data in place, Cloudera announced Impala and Facebook built Presto in 2012, and Spark SQL followed. AWS made the idea serverless with Athena in 2016, billing per byte scanned.

Sharing files between engines had a weakness: no transactions, so a half-finished write could corrupt a table. Table formats such as Apache Iceberg, created at Netflix in 2017, added that, which is why several engines can now safely work on the same tables.

Why it’s built this way

A catalog that maps tables to files
Once storage was just files, an engine needed somewhere to learn which files make up a table and how to read them. Hive’s Metastore filled that role, and later catalogs such as Glue and Iceberg REST catalogs followed the same idea.
Pipelined, in-memory execution instead of MapReduce
Hive’s MapReduce jobs wrote every stage to disk. Presto and Dremel-style engines stream results between stages in memory, trading some fault tolerance for interactive speed.
Open columnar file formats
Dremel’s encoding for nested columns was adopted by Apache Parquet in 2013, so any engine could read only the columns a query needs, without one vendor owning the format.

Timeline

  1. 2009

    Facebook describes Hive, SQL over files in Hadoop

  2. 2010

    Google’s Dremel paper shows interactive SQL on data in place

  3. 2012

    Cloudera announces Impala; Facebook starts Presto

  4. 2013

    Presto open-sourced; Twitter and Cloudera announce Parquet

  5. 2016

    Amazon Athena offers serverless SQL over S3, billed per byte scanned

  6. 2018

    Netflix’s Iceberg table format enters the Apache Incubator

Sources27

Improve this page on GitHub