Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
149 commits
Select commit Hold shift + click to select a range
521e47e
separate the pyarrow filter pushdown to separate file, cleanup direct…
Tishj Sep 15, 2025
b64b344
remove Makefile
Tishj Sep 15, 2025
94dbf24
Merge branch 'v1.4-andium' into pyarrow_filter_pushdown
evertlammerts Sep 16, 2025
9916b99
add hash method
Tishj Sep 17, 2025
b348aa6
Packaging workflow should respect the 'minimal' input param
evertlammerts Sep 17, 2025
0ed02bb
Merge branch 'v1.4-andium' into pytype_hash
evertlammerts Sep 17, 2025
7a70392
[Dev] Move PyArrow filter pushdown to separate file (#51)
evertlammerts Sep 17, 2025
10f0c0e
Merge remote-tracking branch 'upstream/v1.4-andium' into pytype_hash
Tishj Sep 17, 2025
ed6b2c5
avoid collision with windows define
Tishj Sep 17, 2025
f3ab971
third attempt at making windows happy
Tishj Sep 17, 2025
134b784
[DuckDBPyType] Add `__hash__` method overload (#61)
evertlammerts Sep 18, 2025
7d6f470
ruff conf: exclude pyi from linting
evertlammerts Sep 9, 2025
db57889
Ruff UP006: dont use typing module for dict and list typehints
evertlammerts Sep 9, 2025
c23b65d
Ruff ANN204: return type annotations
evertlammerts Sep 9, 2025
83cdb9c
Ruff config: line-length to 120 and fixable no longer top level
evertlammerts Sep 9, 2025
d10c477
Ruff format fixes
evertlammerts Sep 9, 2025
0ec0572
Ruff linter fixes
evertlammerts Sep 9, 2025
c499e40
Ruff format fixes
evertlammerts Sep 9, 2025
cde722e
Ruff config: dont add future annotations
evertlammerts Sep 9, 2025
89c6387
Ruff config: temporarily skip import checks
evertlammerts Sep 9, 2025
6370653
Ruff EM: Error messages assigned to a var first
evertlammerts Sep 9, 2025
6445bde
Ruff D: Docstring fixes
evertlammerts Sep 9, 2025
2119fb0
Ruff D301: Make docstring raw if they contain backslashes
evertlammerts Sep 9, 2025
b6fb52a
Fix testfixture yield
evertlammerts Sep 10, 2025
4ff4147
Ruff config: disable docstring checks for tests
evertlammerts Sep 10, 2025
f983b69
Ruff noqa D205 on tests: no need to check newline between summary and
evertlammerts Sep 10, 2025
12c0f48
Ruff noqa D205: dont need the newline in docstrings for existing code
evertlammerts Sep 10, 2025
c0a94d2
Ruff config: will not check sqlogic
evertlammerts Sep 10, 2025
5cea343
Ruff config: will not check scripts for D
evertlammerts Sep 10, 2025
a1675c8
Ruff noqa D10x: ignore docstring issues in existing code
evertlammerts Sep 10, 2025
5a6deb4
Ruff config: F403 ignore * imports in pyspark tests
evertlammerts Sep 10, 2025
0041aab
Ruff F403: fix star imports
evertlammerts Sep 10, 2025
ebe92af
Ruff format
evertlammerts Sep 10, 2025
7301a4d
Ruff linting fixes
evertlammerts Sep 10, 2025
664c37b
Ruff F401: fixed unused imports
evertlammerts Sep 10, 2025
f7930af
Ruff config: disable ANN001 for tests and scripts, no need for type h…
evertlammerts Sep 10, 2025
63b902c
Ruff ANN001: fixed missing annotations for function args
evertlammerts Sep 10, 2025
a6e9d4e
Ruff linting
evertlammerts Sep 10, 2025
25d3ab0
Ruff format
evertlammerts Sep 10, 2025
6561517
Ruff config: ANN201 no need for return value type hints in tests and …
evertlammerts Sep 10, 2025
efe66bb
Ruff ANN201: fixed return value type annotations
evertlammerts Sep 10, 2025
6fae540
Ruff F841: fixes and noqa for unused variables
evertlammerts Sep 11, 2025
a88cb67
Ruff linting
evertlammerts Sep 11, 2025
052be91
Ruff config: dont check E402 (imports at top of file) for spark tests…
evertlammerts Sep 11, 2025
888c9d7
Ruff E402: imports must be at top of file
evertlammerts Sep 11, 2025
d0120bf
Ruff format
evertlammerts Sep 11, 2025
000d0bc
Ruff E501: fixed and noqa'd too long lines
evertlammerts Sep 11, 2025
1bac4fa
Ruff C419: Unsafe-fixed all unneeded list comprehensions
evertlammerts Sep 11, 2025
6db0c58
Ruff ANN202: Unsafe-fixed return type annotations in tests only
evertlammerts Sep 11, 2025
c36ac0f
Ruff ANN202: Unsafe-fixed return type annotations
evertlammerts Sep 11, 2025
ad82673
Ruff ANN202: no need for private return value annotations in tests
evertlammerts Sep 11, 2025
d72bd4c
Ruff ANN202: fixed private function return value type annotations
evertlammerts Sep 11, 2025
74bc341
Ruff linting
evertlammerts Sep 11, 2025
694115f
Ruff PTH118: pathlib everywhere except for tests, which get a noqa fo…
evertlammerts Sep 11, 2025
a899e5e
Ruff linting & format
evertlammerts Sep 11, 2025
908675f
Ruff B018: fixed useless expressions
evertlammerts Sep 11, 2025
8c02e95
Ruff ANN401: specialized Any type hints where possible
evertlammerts Sep 12, 2025
8a88e98
Ruff FBT001: Spark API is out of our hands and may include boolean pa…
evertlammerts Sep 12, 2025
339eb85
Ruff FBT001: fixed most boolean params
evertlammerts Sep 12, 2025
42a6f2f
Ruff linting
evertlammerts Sep 12, 2025
69cc744
Ruff format
evertlammerts Sep 12, 2025
f783f6b
Ruff format
evertlammerts Sep 18, 2025
15226c7
Ruff linting
evertlammerts Sep 18, 2025
4fc1323
Ruff E722: no empty except
evertlammerts Sep 18, 2025
b0519be
Ruff E711: compare to None should be identity equality (is), not valu…
evertlammerts Sep 18, 2025
92c2990
Ruff PTH120: Use pathlib instead of os.path
evertlammerts Sep 18, 2025
af4d663
Ruff TD001: Replace invalid FIXME tag with TODO
evertlammerts Sep 18, 2025
2ac0176
Ruff TD002 and TD003: added noqa for author and issue links in existi…
evertlammerts Sep 18, 2025
6356b2a
Ruff E712: don't compare with True or False
evertlammerts Sep 18, 2025
dc2b16b
Remove >=py310 only union syntax
evertlammerts Sep 18, 2025
facdde1
Ruff PT009: don't use pytest's assertEqual, prefer the assert builtin
evertlammerts Sep 18, 2025
44c18a4
Ruff UP031: replace percent style string interpolation with string fo…
evertlammerts Sep 18, 2025
fb99768
Ruff linting: replaced format strings with f-strings where possible
evertlammerts Sep 18, 2025
ed4f181
Ruff PTH: moved to pathlib anywhere I could
evertlammerts Sep 18, 2025
7ea544f
Ruff PT003: removed unneeded implicit fixture scope
evertlammerts Sep 18, 2025
86c1066
Ruff PT018: broke up multi-part asserts
evertlammerts Sep 18, 2025
f6f118e
Ruff PT013: no subpackage import of pytest
evertlammerts Sep 18, 2025
4086efe
make sure the PyErr is cleared before we throw a python exception
Tishj Sep 18, 2025
d02d0f5
Ruff PT007: give pytest.parameterize list of tuples
evertlammerts Sep 18, 2025
f2ab732
Ruff PT006: fir param for pytest.parameterize should be a tuple, not …
evertlammerts Sep 18, 2025
2a2a8b4
Ruff PT012: pytest.raises contextmanagers should only have a single s…
evertlammerts Sep 18, 2025
ed90ded
Ruff format
evertlammerts Sep 18, 2025
735cf0a
Making tests pass
evertlammerts Sep 18, 2025
9849a19
Ruff format
evertlammerts Sep 18, 2025
863e043
Ruff PT: fixed remaining pytest linting issues
evertlammerts Sep 18, 2025
11b0851
Ruff linting
evertlammerts Sep 18, 2025
5ad0a0e
Ruff B: Fixed last bugbear linting issues
evertlammerts Sep 18, 2025
7f0ff48
Ruff C416: use list() instead of comprehension where possible
evertlammerts Sep 18, 2025
7ad26fb
Ruff config: ignore C901, function complexity
evertlammerts Sep 18, 2025
16fcbbc
Ruff C408: rewrite dict() calls as literals
evertlammerts Sep 18, 2025
d65d2b6
Ruff C417: changed map() to comprehensions and generator where possible
evertlammerts Sep 18, 2025
92a0698
Ruff format
evertlammerts Sep 18, 2025
c86008b
Ruff ignore ANN002 and ANN003
evertlammerts Sep 18, 2025
928b4f8
Ruff ANN: fixed remaining annotation linting issues
evertlammerts Sep 18, 2025
13d2e08
Fix tests
evertlammerts Sep 18, 2025
7f3104b
Ruff SIM: fixed all remaining simplify linting issues
evertlammerts Sep 18, 2025
61ba166
Ruff RUF: fixed all remaining ruff specific linter issues
evertlammerts Sep 18, 2025
a0e2b04
Ruff ignore PERF for duckdb_packaging
evertlammerts Sep 18, 2025
6de2ab7
Ruff PERF: fixed all remaining performance linting issues
evertlammerts Sep 18, 2025
1ee6b42
Ruff format
evertlammerts Sep 18, 2025
dc95538
Ruff linting - remaining unsafe fixes
evertlammerts Sep 18, 2025
534bd76
Ruff linting - fixed all remaining issues
evertlammerts Sep 18, 2025
4016ae1
Ruff format
evertlammerts Sep 18, 2025
bbac5a5
Fixed test
evertlammerts Sep 18, 2025
cd396c8
Added pre-commit
evertlammerts Sep 18, 2025
bd2469f
Added ruff and clang-format to pre-commit
evertlammerts Sep 18, 2025
9adacb5
Added cmake-format to pre-commit
evertlammerts Sep 18, 2025
b9c1bd4
Added post-checkout hook to pre-commit config
evertlammerts Sep 18, 2025
c13599a
Run pre-commit on-push
evertlammerts Sep 18, 2025
cdf0ee0
Very subtle typing problem in the tests
evertlammerts Sep 18, 2025
ba86441
Add code quality workflow
evertlammerts Sep 18, 2025
da516cb
fix sdist build
evertlammerts Sep 18, 2025
c96b325
Add linting and formatting (#72)
evertlammerts Sep 22, 2025
0bfc31d
re-added adbc_driver_duckdb to exported packages
evertlammerts Sep 22, 2025
9e00936
Merge branch 'v1.4-andium' into reset_pyerr_before_throwing
evertlammerts Sep 23, 2025
34a7c35
Fixed adbc driver and force tests to run
evertlammerts Sep 23, 2025
dc5e746
Reset PyErr before throwing (#69)
evertlammerts Sep 23, 2025
51c2b7d
Cleaned up
evertlammerts Sep 23, 2025
c9d37ac
double extern?
evertlammerts Sep 24, 2025
fa397d9
try to force inclusion with msvc and gcc as well
evertlammerts Sep 24, 2025
a5d32a3
Merge branch 'v1.4-andium' into adbc_driver
evertlammerts Sep 24, 2025
9a293ed
pinning adbc-driver-manager to 1.7.0
evertlammerts Sep 25, 2025
6d5a8c1
xfail adbc tests on windows
evertlammerts Sep 25, 2025
27b1d79
Fix adbc driver (#81)
evertlammerts Sep 25, 2025
e5f55d9
bumped submodule
evertlammerts Oct 1, 2025
236713a
added stubs and mypy
evertlammerts Oct 1, 2025
c0257a2
mypy passing
evertlammerts Oct 1, 2025
dfc8d2a
make sure all constants are in
evertlammerts Oct 1, 2025
46a34be
fixed tests
evertlammerts Oct 1, 2025
b2d572e
added missing overloads
evertlammerts Oct 1, 2025
f5d4e42
fixed stub mypy errors
evertlammerts Oct 2, 2025
83218b6
deprecate typing and functional
evertlammerts Oct 2, 2025
21762d5
add stubs to sdist
evertlammerts Oct 2, 2025
89f2b8f
Adding stubs and making mypy pass (#96)
evertlammerts Oct 2, 2025
737c3ca
Bump submodule
evertlammerts Oct 2, 2025
511d5e2
disable lazy pushdown with hugeint test for now
evertlammerts Oct 3, 2025
92943cc
patch hugeint to polars decimal
evertlammerts Oct 4, 2025
252a35d
tests
evertlammerts Oct 4, 2025
dca3ccb
tests
evertlammerts Oct 4, 2025
c1ed4fa
Fix Polars expr pushdown (#102)
evertlammerts Oct 4, 2025
4164cff
bump duckdb submodule to 1.4.1 sha
evertlammerts Oct 6, 2025
e821b9c
pre-commit mypy config
evertlammerts Oct 4, 2025
26bc5c6
pre-commit mypy config (#106)
evertlammerts Oct 6, 2025
6c903ad
fix versioning
evertlammerts Oct 6, 2025
8db7c51
no need to check for dirty versions
evertlammerts Oct 6, 2025
9d94c34
added changelog
evertlammerts Oct 7, 2025
1d03380
Merge branch 'v1.4-andium'
evertlammerts Oct 7, 2025
9be6d81
fixed linter warnings
evertlammerts Oct 7, 2025
1fb5fe3
fix arrow import issues in tests for py314
evertlammerts Oct 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
45 changes: 45 additions & 0 deletions .github/workflows/code_quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Code Quality Checks
on:
workflow_dispatch:
inputs:
git_ref:
type: string
description: Git ref of the DuckDB python package
required: false
workflow_call:
inputs:
git_ref:
type: string
description: Git ref of the DuckDB python package
required: false

defaults:
run:
shell: bash

jobs:
run_checks:
name: Run linting, formatting and static type checker
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.git_ref }}
fetch-depth: 0
persist-credentials: false

- name: Install Astral UV
uses: astral-sh/setup-uv@v6
with:
version: "0.7.14"
python-version: 3.9

- name: pre-commit (cache)
uses: actions/cache@v4
with:
path: ~/.cache/pre-commit
key: pre-commit-${{ hashFiles('.pre-commit-config.yaml') }}

- name: pre-commit (--all-files)
run: |
uvx pre-commit run --show-diff-on-failure --color=always --all-files
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -151,4 +151,4 @@ jobs:
echo "### C++ Coverage Summary" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo "$SUMMARY_CPP" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
9 changes: 7 additions & 2 deletions .github/workflows/on_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,14 @@ jobs:
name: Make sure submodule is in a sane state
uses: ./.github/workflows/submodule_sanity.yml

code_quality:
name: Code-quality checks
needs: submodule_sanity_guard
uses: ./.github/workflows/code_quality.yml

packaging_test:
name: Build a minimal set of packages and run all tests on them
needs: submodule_sanity_guard
needs: code_quality
# Skip packaging tests for draft PRs
if: ${{ github.event_name != 'pull_request' || github.event.pull_request.draft == false }}
uses: ./.github/workflows/packaging.yml
Expand All @@ -36,7 +41,7 @@ jobs:

coverage_test:
name: Run coverage tests
needs: submodule_sanity_guard
needs: code_quality
# Only run coverage test for draft PRs
if: ${{ github.event_name == 'pull_request' && github.event.pull_request.draft == true }}
uses: ./.github/workflows/coverage.yml
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/on_push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,13 @@ concurrency:
cancel-in-progress: true

jobs:
code_quality:
name: Code-quality checks
uses: ./.github/workflows/code_quality.yml

test:
name: Run coverage tests
needs: code_quality
uses: ./.github/workflows/coverage.yml
with:
git_ref: ${{ github.ref }}
Expand Down
37 changes: 37 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.13.3
hooks:
# Run the linter.
- id: ruff-check
# Run the formatter.
- id: ruff-format

- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v21.1.2 # pick the version of clang-format you want
hooks:
- id: clang-format
files: \.(c|cpp|cc|h|hpp|cxx|hxx)$

- repo: https://github.com/cheshirekow/cmake-format-precommit
rev: v0.6.13
hooks:
- id: cmake-format

- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.18.2
hooks:
- id: mypy
entry: mypy -v
files: ^(duckdb/|_duckdb-stubs/)
exclude: ^duckdb/(experimental|query_graph)/
additional_dependencies: [ numpy, polars ]

- repo: local
hooks:
- id: post-checkout-submodules
name: Update submodule post-checkout
entry: .githooks/post-checkout
language: script
stages: [ post-checkout ]
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Changelog

## v1.4.1
**DuckDB Core**: v1.4.1

### Bug Fixes
- **ADBC Driver**: Fixed ADBC driver implementation (#81)
- **SQLAlchemy compatibility**: Added `__hash__` method overload (#61)
- **Error Handling**: Reset PyErr before throwing Python exceptions (#69)
- **Polars Lazyframes**: Fixed Polars expression pushdown (#102)

### Code Quality Improvements & Developer Experience
- **MyPy Support**: MyPy is functional again and better integrated with the dev workflow
- **Stubs**: Re-created and manually curated stubs for the binary extension
- **Type Shadowing**: Deprecated `typing` and `functional` modules
- **Linting & Formatting**: Comprehensive code quality improvements with Ruff
- **Type Annotations**: Added missing overloads and improved type coverage
- **Pre-commit Integration**: Added ruff, clang-format, cmake-format and mypy configs
- **CI/CD**: Added code quality workflow
80 changes: 57 additions & 23 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,50 +48,84 @@ duckdb_add_library(duckdb_target)

# Bundle in INTERFACE library
add_library(_duckdb_dependencies INTERFACE)
target_link_libraries(_duckdb_dependencies INTERFACE
pybind11::pybind11
duckdb_target
)
target_link_libraries(_duckdb_dependencies INTERFACE pybind11::pybind11
duckdb_target)
# Also add include directory
target_include_directories(_duckdb_dependencies INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/duckdb_py/include>
target_include_directories(
_duckdb_dependencies
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/duckdb_py/include>
)

# ────────────────────────────────────────────
# Descend into the real DuckDB‑Python sources
# ────────────────────────────────────────────
add_subdirectory(src/duckdb_py)

pybind11_add_module(_duckdb
$<TARGET_OBJECTS:python_src>
$<TARGET_OBJECTS:python_arrow>
$<TARGET_OBJECTS:python_common>
$<TARGET_OBJECTS:python_functional>
$<TARGET_OBJECTS:python_jupyter>
$<TARGET_OBJECTS:python_native>
$<TARGET_OBJECTS:python_numpy>
$<TARGET_OBJECTS:python_pandas>
$<TARGET_OBJECTS:python_pybind11>
$<TARGET_OBJECTS:python_connection>
$<TARGET_OBJECTS:python_expression>
$<TARGET_OBJECTS:python_relation>
$<TARGET_OBJECTS:python_type>
)
pybind11_add_module(
_duckdb
$<TARGET_OBJECTS:python_src>
$<TARGET_OBJECTS:python_arrow>
$<TARGET_OBJECTS:python_common>
$<TARGET_OBJECTS:python_functional>
$<TARGET_OBJECTS:python_jupyter>
$<TARGET_OBJECTS:python_native>
$<TARGET_OBJECTS:python_numpy>
$<TARGET_OBJECTS:python_pandas>
$<TARGET_OBJECTS:python_pybind11>
$<TARGET_OBJECTS:python_connection>
$<TARGET_OBJECTS:python_expression>
$<TARGET_OBJECTS:python_relation>
$<TARGET_OBJECTS:python_type>)
# add _duckdb_dependencies
target_link_libraries(_duckdb PRIVATE _duckdb_dependencies)

# ────────────────────────────────────────────
# Controlling symbol export
#
# We want to export exactly two symbols: - PyInit__duckdb: this allows CPython
# to load the module - duckdb_adbc_init: the DuckDB ADBC driver
#
# The export of symbols on OSX and Linux is controlled by: - Visibility
# annotations in the code (for this lib we use the PYBIND11_EXPORT macro) -
# Telling the linker which symbols we want exported, which we do below
#
# For Windows, we rely on just the visbility annotations.
# ────────────────────────────────────────────
set_target_properties(
_duckdb
PROPERTIES CXX_VISIBILITY_PRESET hidden
C_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON)

if(APPLE)
target_link_options(
_duckdb PRIVATE "LINKER:-exported_symbol,_duckdb_adbc_init"
"LINKER:-exported_symbol,_PyInit__duckdb")
elseif(UNIX AND NOT APPLE)
target_link_options(
_duckdb PRIVATE "LINKER:--export-dynamic-symbol=duckdb_adbc_init"
"LINKER:--export-dynamic-symbol=PyInit__duckdb")
elseif(WIN32)
target_link_options(_duckdb PRIVATE "/EXPORT:duckdb_adbc_init"
"/EXPORT:PyInit__duckdb")
endif()

# ────────────────────────────────────────────
# Put the object file in the correct place
# ────────────────────────────────────────────

# If we're not building through scikit-build-core then we have to set a different dest dir
# If we're not building through scikit-build-core then we have to set a
# different dest dir
include(GNUInstallDirs)
if(DEFINED SKBUILD_PLATLIB_DIR)
set(_DUCKDB_PY_INSTALL_DIR "${SKBUILD_PLATLIB_DIR}")
elseif(DEFINED Python_SITEARCH)
set(_DUCKDB_PY_INSTALL_DIR "${Python_SITEARCH}")
else()
message(WARNING "Could not determine Python install dir. Falling back to CMAKE_INSTALL_LIBDIR.")
message(
WARNING
"Could not determine Python install dir. Falling back to CMAKE_INSTALL_LIBDIR."
)
set(_DUCKDB_PY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
endif()

Expand Down
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,14 @@
<a href="https://duckdb.org/docs/stable/clients/python/overview">API Docs (Python)</a>
</p>

# The [DuckDB](https://github.com/duckdb/duckdb) Python Package
# DuckDB: A Fast, In-Process, Portable, Open Source, Analytical Database System

* **Simple**: DuckDB is easy to install and deploy. It has zero external dependencies and runs in-process in its host application or as a single binary.
* **Portable**: DuckDB runs on Linux, macOS, Windows, Android, iOS and all popular hardware architectures. It has idiomatic client APIs for major programming languages.
* **Feature-rich**: DuckDB offers a rich SQL dialect. It can read and write file formats such as CSV, Parquet, and JSON, to and from the local file system and remote endpoints such as S3 buckets.
* **Fast**: DuckDB runs analytical queries at blazing speed thanks to its columnar engine, which supports parallel execution and can process larger-than-memory workloads.
* **Extensible**: DuckDB is extensible by third-party features such as new data types, functions, file formats and new SQL syntax. User contributions are available as community extensions.
* **Free**: DuckDB and its core extensions are open-source under the permissive MIT License. The intellectual property of the project is held by the DuckDB Foundation.

## Installation

Expand Down
Loading