DuckDB v1.3.0 significantly improved the scalability of geospatial joins with a dedicated SPATIAL_JOIN operator.| DuckDB
Redirecting…| duckdb.org
List of Core Extensions Name GitHub Description Stage Aliases autocomplete Adds support for autocomplete in the shell stable avro GitHub Add support for reading Avro files stable aws GitHub Provides features that depend on the AWS SDK stable azure GitHub Adds a filesystem abstraction for Azure blob storage to DuckDB stable delta GitHub Adds support for Delta Lake experimental ducklake GitHub Adds support for DuckLake experimental encodings GitHub Adds support for encoding...| DuckDB
The independent non-profit DuckDB Foundation safeguards the long-term maintenance and development of DuckDB.| DuckDB
The iceberg extension implements support for the Apache Iceberg open table format and can connect to Iceberg REST Catalogs. For information on how to connect to an Iceberg REST Catalog, please see the Iceberg REST Catalogs page. Installing and Loading To install the iceberg extension, run: INSTALL iceberg; Note that the iceberg extension is not autoloadable. Therefore, you need to load it before using it: LOAD iceberg; Updating the Extension The iceberg extension often receives updates betwee...| DuckDB
The delta extension adds support for the Delta Lake open-source storage format. It is built using the Delta Kernel. The extension offers read support for Delta tables, both local and remote. For implementation details, see the announcement blog post. Warning The delta extension is currently experimental and is only supported on given platforms. Installing and Loading The delta extension will be transparently autoloaded on first use from the official extension repository. If you would like to ...| DuckDB
The DuckDB team is happy to announce that today we're releasing DuckDB version 1.3.0, codenamed “Ossivalis”.| DuckDB
DuckDB provides functions to serialize and deserialize SELECT statements between SQL and JSON, as well as executing JSON serialized statements. Function Type Description json_deserialize_sql(json) Scalar Deserialize one or many json serialized statements back to an equivalent SQL string. json_execute_serialized_sql(varchar) Table Execute json serialized statements and return the resulting rows. Only one statement at a time is supported for now. json_serialize_sql(varchar, skip_default := bool...| DuckDB
The UNPIVOT statement allows multiple columns to be stacked into fewer columns. In the basic case, multiple columns are stacked into two columns: a NAME column (which contains the name of the source column) and a VALUE column (which contains the value from the source column). DuckDB implements both the SQL Standard UNPIVOT syntax and a simplified UNPIVOT syntax. Both can utilize a COLUMNS expression to automatically detect the columns to unpivot. PIVOT_LONGER may also be used in place of the ...| DuckDB
The PIVOT statement allows distinct values within a column to be separated into their own columns. The values within those new columns are calculated using an aggregate function on the subset of rows that match each distinct value. DuckDB implements both the SQL Standard PIVOT syntax and a simplified PIVOT syntax that automatically detects the columns to create while pivoting. PIVOT_WIDER may also be used in place of the PIVOT keyword. For details on how the PIVOT statement is implemented, se...| DuckDB
The FROM clause specifies the source of the data on which the remainder of the query should operate. Logically, the FROM clause is where the query starts execution. The FROM clause can contain a single table, a combination of multiple tables that are joined together using JOIN clauses, or another SELECT query inside a subquery node. DuckDB also has an optional FROM-first syntax which enables you to also query without a SELECT statement. Examples Select all columns from the table called table_...| DuckDB
There are five nested data types: Name Type page Functions page ARRAY ARRAY type ARRAY functions LIST LIST type LIST functions MAP MAP type MAP functions STRUCT STRUCT type STRUCT functions UNION UNION type UNION functions| DuckDB
Examples Read a set of CSV files combining columns by position: SELECT * FROM read_csv('flights*.csv'); Read a set of CSV files combining columns by name: SELECT * FROM read_csv('flights*.csv', union_by_name = true); Combining Schemas When reading from multiple files, we have to combine schemas from those files. That is because each file has its own schema that can differ from the other files. DuckDB offers two ways of unifying schemas of multiple files: by column position and by column name....| DuckDB
The httpfs extension is an autoloadable extension implementing a file system that allows reading remote/writing remote files. For plain HTTP(S), only file reading is supported. For object storage using the S3 API, the httpfs extension supports reading/writing/globbing files. Installation and Loading The httpfs extension will be, by default, autoloaded on first use of any functionality exposed by this extension. To manually install and load the httpfs extension, run: INSTALL httpfs; LOAD httpf...| DuckDB
DuckDB is an in-process SQL database management system focused on analytical query processing. It is designed to be easy to install and easy to use. DuckDB has no external dependencies. DuckDB has bindings for C/C++, Python, R, Java, Node.js, Go and other languages.| DuckDB
DuckDB is an in-process SQL database management system focused on analytical query processing. It is designed to be easy to install and easy to use. DuckDB has no external dependencies. DuckDB has bindings for C/C++, Python, R, Java, Node.js, Go and other languages.| DuckDB
We recently improved DuckDB's JSON extension so JSON files can be directly queried as if they were tables.| DuckDB
The H2O.ai db-benchmark has been updated with new results. In addition, the AWS EC2 instance used for benchmarking has been changed to a c6id.metal for improved repeatability and fairness across libraries. DuckDB is the fastest library for both join and group by queries at almost every data size.| DuckDB
DuckDB has a fully parallelized aggregate hash table that can efficiently aggregate over millions of groups.| DuckDB
DuckDB is an in-process SQL database management system focused on analytical query processing. It is designed to be easy to install and easy to use. DuckDB has no external dependencies. DuckDB has bindings for C/C++, Python, R, Java, Node.js, Go and other languages.| DuckDB
Polars is a DataFrames library built in Rust with bindings for Python and Node.js. It uses Apache Arrow's columnar format as its memory model. DuckDB can read Polars DataFrames and convert query results to Polars DataFrames. It does this internally using the efficient Apache Arrow integration. Note that the pyarrow library must be installed for the integration to work. Installation pip install -U duckdb 'polars[pyarrow]' Polars to DuckDB DuckDB can natively query Polars DataFrames by referrin...| DuckDB
Several operators in DuckDB exhibit non-deterministic behavior. Most notably, SQL uses set semantics, which allows results to be returned in a different order. DuckDB exploits this to improve performance, particularly when performing multi-threaded query execution. Other factors, such as using different compilers, operating systems, and hardware architectures, can also cause changes in ordering. This page documents the cases where non-determinism is an expected behavior. If you would like to ...| DuckDB
We have reached 30 000 stars on GitHub! Here's what happened while we accumulated the last 5 000 stars.| DuckDB
DuckDB is an in-process SQL OLAP database management system. Simple, feature-rich, fast & open source.| DuckDB
The iceberg extension supports reading Iceberg tables through the Amazon SageMaker Lakehouse (a.k.a. AWS Glue) catalog. Make sure you have the Iceberg extension installed by following the steps at Installing and Loading Connecting to Amazon SageMaker Lakehouse Configure your role, region, and credential provider (or explicit credentials) using the Secrets Manager: CREATE SECRET ( TYPE s3, PROVIDER credential_chain, CHAIN sts, ASSUME_ROLE_ARN 'arn:aws:iam::account_id:role/role', REGION 'us-eas...| DuckDB
DuckLake has been released in May 2025. Read the announcement blog post. The ducklake extension add support for attaching to databases stored in the DuckLake format: Installing and Loading To install ducklake, run: INSTALL ducklake; The ducklake extension will be transparently autoloaded on first use in an ATTACH clause. If you would like to load it manually, run: LOAD ducklake; Usage ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'data_files'); USE my_ducklake; Tables In DuckD...| DuckDB
DuckLake simplifies lakehouses by using a standard SQL database for all metadata, instead of complex file-based systems, while still storing data in open formats like Parquet. This makes it more reliable, faster, and easier to manage.| DuckDB
DuckDB continues to push the boundaries of SQL syntax to both simplify queries and make more advanced analyses possible. Highlights include dynamic column selection, queries that start with the FROM clause, function chaining, and list comprehensions. We boldly go where no SQL engine has gone before! For more details, see the documentation for friendly SQL features.| DuckDB
We've resurrected the H2O.ai database-like ops benchmark with up to date libraries and plan to keep re-running it.| DuckDB
We are happy to announce a new preview feature that adds support for Apache Iceberg REST Catalogs, enabling DuckDB users to connect to Amazon S3 Tables and Amazon SageMaker Lakehouse with ease.| DuckDB
The DuckDB team and MotherDuck are excited to announce the release of a local UI for DuckDB shipped as part of the ui extension.| DuckDB
The DuckDB team is happy to announce that today we're releasing DuckDB version 1.2.0, codenamed “Histrionicus”.| DuckDB
Examples Produce a single row containing the sum of the amount column: SELECT sum(amount) FROM sales; Produce one row per unique region, containing the sum of amount for each group: SELECT region, sum(amount) FROM sales GROUP BY region; Return only the regions that have a sum of amount higher than 100: SELECT region FROM sales GROUP BY region HAVING sum(amount) > 100; Return the number of unique values in the region column: SELECT count(DISTINCT region) FROM sales; Return two values, the tota...| DuckDB
The zero-copy integration between DuckDB and Apache Arrow allows for rapid analysis of larger than memory datasets in Python and R using either SQL or relational APIs.| DuckDB
Examples Read a CSV file into the lineitem table, using auto-detected CSV options: COPY lineitem FROM 'lineitem.csv'; Read a CSV file into the lineitem table, using manually specified CSV options: COPY lineitem FROM 'lineitem.csv' (DELIMITER '|'); Read a Parquet file into the lineitem table: COPY lineitem FROM 'lineitem.pq' (FORMAT PARQUET); Read a JSON file into the lineitem table, using auto-detected options: COPY lineitem FROM 'lineitem.json' (FORMAT JSON, AUTO_DETECT true); Read a CSV fil...| DuckDB
DuckDB, a free and open source analytical data management system, can run SQL queries directly on Parquet files and automatically take advantage of the advanced features of the Parquet format.| DuckDB
Function Syntax Function Chaining via the Dot Operator DuckDB supports the dot syntax for function chaining. This allows the function call fn(arg1, arg2, arg3, ...) to be rewritten as arg1.fn(arg2, arg3, ...). For example, take the following use of the replace function: SELECT replace(goose_name, 'goose', 'duck') AS duck_name FROM unnest(['African goose', 'Faroese goose', 'Hungarian goose', 'Pomeranian goose']) breed(goose_name); This can be rewritten as follows: SELECT goose_name.replace('go...| DuckDB
DuckDB offers several extensions to the SQL syntax. For a full list of these features, see the Friendly SQL documentation page.| DuckDB
DuckDB is an in-process SQL database management system focused on analytical query processing. It is designed to be easy to install and easy to use. DuckDB has no external dependencies. DuckDB has bindings for C/C++, Python, R, Java, Node.js, Go and other languages.| DuckDB
DuckDB can now directly query tables stored in PostgreSQL and speed up complex analytical queries without duplicating data.| DuckDB