cloudparts

Scans and aggregations over billions of rows

Queries that read a few columns from a very large table, filter them and group the result, such as revenue by country by day.

What it asks of a system

An analytical query touches a small number of columns but a huge number of rows: a GROUP BY over a year of orders, a funnel over a billion page views, a join of a fact table with a few dimension tables. A system built for this stores each column on its own, so a query reads only the columns it names, and it compresses those columns well because the values in one column look alike. It splits the scan across every core, and often every machine, and skips whole blocks of data whose minimum and maximum values can’t match the filter.

To tell whether a system really handles it, look at how it lays data out (columnar files or row pages), whether it can skip data by time or sort key without reading it, and whether it adds more machines to one query or only to more queries. Test with your own data at full size: a query that is fast on ten million rows can still be slow on ten billion if the engine has to read every row or shuffle the whole table between nodes for a join.

Good at it · 31

Compare side by side

Query engines

Amazon AthenaAWSRuns Trino-based SQL straight over files in S3; partitioned, compressed Parquet cuts the bytes each query reads.AWS’s serverless SQL engine for data in S3: no cluster to run, and on-demand queries cost $5 per TB scanned.Apache DataFusionOpen sourceA multi-threaded, vectorised engine on Arrow batches that skips Parquet row groups and pages that can’t match the filter.A query engine library in Rust, built on Arrow, that other projects embed and extend to build their own databases and data tools.Apache DataFusion CometOpen sourceRuns the Parquet and Iceberg scans, joins and aggregates of existing Spark jobs natively on Arrow columns, with no code changes.A Spark plugin that keeps Spark’s optimizer and scheduler but runs the physical plan on Apache DataFusion in Rust, over Arrow batches, with no changes to your Spark code, and falls back to Spark for anything it can’t run the same way.Apache HadoopOpen sourceRuns map tasks on the machines that hold each HDFS block, so big batch scans read local disks instead of crossing the network.The project that made big-data clusters normal: a distributed file system (HDFS), a cluster scheduler (YARN) and the MapReduce engine.Apache HiveOpen sourceBatch SQL over very large partitioned ORC or Parquet tables, run as fault-tolerant Tez DAGs in YARN containers.The first SQL engine for Hadoop, and the source of the Hive Metastore, the table catalog that Trino, Spark, Impala and Flink still read.Apache ImpalaOpen sourceLong-running daemons on every host split each query into fragments that run in parallel, with LLVM-compiled inner loops and spilling to disk.An MPP SQL engine in C++ for interactive queries over Hive tables on HDFS, Kudu, Iceberg and object storage; built and mainly sold by Cloudera.Apache SparkOpen sourceRuns each stage as one task per partition across many executors, shuffling between stages and spilling to disk, so jobs can outgrow RAM.The general-purpose distributed engine for large batch jobs, streaming and machine learning, in Python, SQL, Scala, Java or R.Apache GlutenOpen sourceRuns Spark’s scans, joins and aggregates on Velox or ClickHouse’s vectorized C++ engine; about 3x faster TPC-H and TPC-DS in its own runs.A Spark plugin that hands Spark’s physical plans to a native C++ engine, Velox or ClickHouse, through Substrait, so SQL and DataFrame jobs run vectorized with no code changes, and falls back to Spark for anything the engine can’t run.chDBOpen sourceRuns ClickHouse’s vectorised engine over local files, S3 objects and DataFrames in place, without loading them first.The ClickHouse engine packaged as a library: run ClickHouse SQL inside a Python, Go, Rust or Node.js program, with no server.Cloudflare Basin SQLRenamedCommercialIceberg metadata rules out manifests and Parquet files first, then workers across Cloudflare’s network scan only the row groups needed.Cloudflare’s serverless, distributed SQL engine for Apache Iceberg tables in Basin Catalog on R2, called R2 SQL until it became generally available on 1 October 2026, billed by the data it scans.DuckDBOpen sourceColumnar storage and a vectorised engine on parallel threads, reading only the columns and row groups a query needs and spilling to disk.An in-process analytical SQL database: a library with no server that queries Parquet, CSV, Iceberg and S3 directly.GizmoSQLOpen sourceShares one DuckDB engine with many network clients and sends results as Arrow columns, so BI tools get columnar scans without row conversion.A database server that wraps DuckDB (or SQLite) and serves it to many clients over Arrow Flight SQL, with TLS and authentication.PolarsOpen sourceLazy queries push filters and column choices into the file scan, then run vectorised on every core, streaming data bigger than RAM.A 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.Presto (PrestoDB)Open sourceA coordinator splits each query into stages that many workers run in parallel, passing results in memory, over lake tables and databases.Facebook’s distributed SQL engine, now governed by the Linux Foundation, moving its workers from Java to C++ on Velox. Trino is its 2019 fork.RayforceOpen sourceCompiled bytecode runs over 1,024-row chunks that stay in L1 cache, across a thread pool, on one-file-per-column tables.A small embeddable engine in pure C that runs columnar analytics, graph traversals and recursive Datalog queries in one optimised plan.SailOpen sourceRuns Spark SQL and DataFrame plans on DataFusion over Arrow batches, on all cores of one machine or across worker pods on Kubernetes.A Spark Connect server written in Rust on Apache DataFusion: your PySpark code connects to it as if it were Spark, and it runs the queries without a JVM, on one machine or on Kubernetes.TrinoOpen sourceWorkers stream intermediate results to each other in memory, stage to stage, so interactive queries over large lake tables finish in seconds.A distributed SQL engine that queries data where it lives, from Iceberg tables on S3 to a live PostgreSQL database, in one query.

Data warehouses

ClickHouseOpen sourceColumns are stored and compressed separately, and vectorised execution scans only the granules the sparse index can’t rule out, on every core.An open-source column-oriented database for real-time analytics, fast enough to serve dashboards over billions of rows.DatabendOpen sourceA vectorized pipeline engine runs across stateless nodes and prunes Parquet blocks with min/max and bloom filter indexes before reading them.A cloud data warehouse written in Rust that keeps every table as Parquet blocks and Git-like snapshots in object storage, so stateless compute clusters can start, scale and stop without moving data. Open core: Apache 2.0, with paid features under the Elastic License 2.0.Google BigQueryGoogle CloudEach query is spread over many slots from a large shared pool, scanning only the columns it names in Capacitor columnar storage.Google Cloud’s serverless data warehouse: no clusters, and you pay per TiB scanned or per slot-hour.MotherDuckCommercialDuckDB in the cloud with a Duckling per user, and dual execution runs S3 scans in MotherDuck’s region instead of over your laptop’s link.A serverless cloud data warehouse built on DuckDB, where one query can run partly on your laptop and partly in the cloud.SnowflakeCommercialCompressed columnar micro-partitions in object storage, scanned by virtual warehouses you size per workload, from X-Small to 6X-Large.A fully managed cloud data warehouse that separates storage from compute, with virtual warehouses billed per second.

Real-time analytics databases

Alibaba Cloud HologresCommercialColumn-oriented tables are scanned by HQE, a vectorised MPP engine, and MaxCompute tables are read in place from shared storage.Alibaba Cloud’s PostgreSQL-compatible real-time data warehouse, which takes streaming writes, answers analytical queries and serves key lookups from one copy of the data.Apache DorisOpen sourceAn MPP engine with vectorized operators: each query is cut into fragments that run on every backend at once, with shuffle or colocate joins.An open-source MPP analytical database, born at Baidu as Palo, that serves sub-second queries on fresh, updatable data through the MySQL protocol and also queries Iceberg, Hudi, Paimon and Hive tables in place.Apache DruidOpen sourceTime-partitioned columnar segments with a bitmap per value let filtered aggregations skip most data, and rollup shrinks rows at ingestion.An open-source real-time analytics database that makes Kafka and Kinesis events queryable within seconds and serves fast slice-and-dice queries to dashboards and APIs.FireboltCommercialTablets sorted on a primary index with a sparse index per 8,192-row granule let scans skip to the few granules that can match.A cloud data warehouse built for low-latency, high-concurrency queries behind apps and dashboards, also free to self-host as Firebolt Core.PivotOpen sourceSoft-sorted, compacted Parquet files prune well on min/max statistics, and late materialization reads wide columns only for surviving rows.A young open-source analytics server in Rust that speaks the PostgreSQL protocol and queries Iceberg and Delta Lake tables straight from object storage.StarRocksOpen sourceMPP with vectorized operators and a cost-based optimizer, shuffling rows between nodes so big joins and high-cardinality `GROUP BY` share the work.An open-source MPP analytical database with a vectorized engine that serves fast joins and real-time updates on its own tables, and also queries Iceberg, Hudi, Delta Lake and Hive tables in place.

Sources

Why each technology is listed comes from the sources on its own page.