DuckDB Athena Extension
April 27, 2026 ยท View on GitHub
Work-in-progress DuckDB extension for querying Amazon Athena tables with athena_scan.
Requirements
- Rust stable
- DuckDB CLI v1.5+
- AWS credentials with Athena, Glue, and S3 access
Required IAM actions:
athena:StartQueryExecutionathena:GetQueryExecutionathena:GetQueryResultsglue:GetTables3:PutObjects3:GetObject
Build
make
This builds target/release/duckdb_athena.duckdb_extension using the Rust packager in src/bin/package_extension.rs.
Load
duckdb -unsigned -cmd "LOAD 'target/release/duckdb_athena.duckdb_extension';"
Usage
SELECT *
FROM athena_scan('my_table', 's3://my-results-bucket/prefix/');
Options:
database: Glue database, defaultdefault.workgroup: Athena workgroup, defaultprimary.maxrows: AthenaLIMIT, default10000; pass-1to disable.predicate: trusted raw Athena SQLWHEREexpression for manual pushdown.verbose: print Athena status and scan stats, defaultfalse.
Examples:
SELECT *
FROM athena_scan(
'my_table',
's3://my-results-bucket/prefix/',
database='analytics',
workgroup='analytics',
predicate='year = 2024',
maxrows=1000
);
SELECT COUNT(*)
FROM athena_scan('my_table', 's3://my-results-bucket/prefix/');
DuckDB projection pushdown is enabled, so selecting fewer columns submits a narrower Athena SELECT list. Normal DuckDB WHERE clauses are still evaluated locally unless passed through predicate.
Tests
cargo fmt --check
cargo test
cargo clippy --all-targets --all-features -- -D warnings
AWS integration tests are opt-in:
make
export ATHENA_TEST_DATABASE=my_database
export ATHENA_TEST_TABLE=my_table
export ATHENA_TEST_OUTPUT=s3://my-results-bucket/prefix/
cargo test --test aws_integration
Optional integration variables:
ATHENA_TEST_WORKGROUPATHENA_TEST_PROJECTION_COLUMNATHENA_TEST_PREDICATEATHENA_TEST_PAGINATION_ROWSATHENA_EXTENSION_PATH
Limitations
- Complex Athena types such as
array,map, andstructare not supported. predicateis raw Athena SQL for trusted callers, not a full SQL parser.- Automatic DuckDB filter pushdown is not implemented.