Apache Drill is a distributed SQL engine for files, object storage and NoSQL databases. Point it at a directory, a bucket or a collection and query it in place, with nothing loaded and no schema declared.
-- a prefix full of JSON. no table, no schema SELECT country, count(*) AS hits FROM s3.`logs/2025/*.json` GROUP BY country ORDER BY 2 DESC;
| country | hits |
|---|---|
| United States | 418,203 |
| India | 233,944 |
| Germany | 96,510 |
No data loading, no schema creation and maintenance, no transformations standing between a question and an answer.
Query multi-structured and nested data in non-relational stores directly, without flattening or restricting it first.
ANSI SQL:2003 with ODBC and JDBC drivers, so existing skills and BI tools work unchanged.
Traditional SQL-on-Hadoop engines need the data prepared before anyone can ask a question. Drill removes those steps rather than automating them.
| Apache Drill | Hive, Impala and similar | |
|---|---|---|
| User experience | Point and query | Ingest the data, define schemas, maintain them, then query |
| Use case | Self-service, in-situ, SQL-based analytics | Data warehouse offload |
| Data sources | Files, object storage, NoSQL and relational databases, several at once in one query | A single Hadoop cluster |
| Data model | Schema-free JSON, the same model as MongoDB | Relational, fixed schema |
Drill is the only columnar execution engine that handles complex, schema-free data. Documents are shredded into an in-memory columnar representation, so nested JSON runs at columnar speed without being flattened first.
-- reach into a nested document without flattening it SELECT t.payload.device.os AS os, t.payload.device.model AS model, count(*) AS sessions FROM dfs.`/events/2025/*.json` t WHERE t.payload.app.version > '4.2' GROUP BY 1, 2 ORDER BY 3 DESC; -- join a Mongo collection to a directory of logs SELECT u.plan, sum(e.bytes) FROM mongo.web.users u JOIN dfs.`/events/` e ON e.uid = u._id GROUP BY u.plan;
Storage plugins and format readers ship with Drill. Adding one that is not here is a Java class and a JSON configuration; many of these were contributed that way.
dfs
HDFS dfs
Amazon S3 s3
Azure Blob Storage azure
Google Cloud Storage gcs
Oracle Cloud Object Storage oci
Dropbox dfs
mongo
Apache HBase hbase
Apache Accumulo accumulo
Apache Cassandra cassandra
Apache Kudu kudu
Apache Phoenix phoenix
Apache Druid druid
Elasticsearch elastic
Apache Kafka kafka
OpenTSDB openTSDB
Splunk splunk
hive
Any JDBC database jdbc
REST APIs http
Google Sheets googlesheets
Another Drill cluster drill
parquet
Apache Avro avro
Delta Lake delta
Apache Iceberg iceberg
Apache Paimon paimon
MapR-DB and Streams maprdb
json
CSV, TSV and PSV text
XML xml
Excel excel
PDF tables pdf
Microsoft Access msaccess
LTSV ltsv
logRegex
HTTPD and NGINX logs httpd
Syslog syslog
PCAP and PCAP-NG pcap
sas
SPSS spss
HDF5 hdf5
Esri shapefiles shp
Apache Daffodil daffodil
Image metadata image
Download the tarball, unpack it and start Drill in embedded mode. It runs on a laptop and on a cluster of thousands of nodes with the same symmetrical architecture.
$ tar xzf apache-drill-1.22.0.tar.gz $ cd apache-drill-1.22.0 $ bin/drill-embedded apache drill> SELECT * FROM dfs.`~/Downloads/*.csv` LIMIT 3; -- nothing was loaded to make that work