Comparison SedonaDB vs. DuckDB for spatial SQL on one machine SedonaDB and DuckDB both run spatial SQL on one machine. SedonaDB adds a geography type, coordinate reference system (CRS) checks before a query runs, spatial joins that spill to disk and raster functions. DuckDB adds spatial SQL to a general-purpose embedded database. Get started with SedonaDB Talk to us Single-node engines Both run in process on one machine. Spatial and KNN joins SedonaDB joins spill to disk. Raster and vector SedonaDB reads rasters in SQL. Feature comparison SedonaDB and DuckDB side by side Each answer comes from the project’s own documentation, release posts or repository, linked below the table. SedonaDB 0.5.0 and DuckDB 1.5.6 are the current releases. SedonaDB DuckDB SedonaDB and DuckDB side by side Capability Apache Sedona SedonaDB Single-node spatial engine in Rust, on Apache Arrow and DataFusion. Embedded database DuckDB In-process analytical database with the spatial extension. Engine and license Query engine What runs the SQL Built on Apache DataFusion (Rust); general-purpose SQL works alongside spatial functions DuckDB's own columnar-vectorized engine; spatial through the spatial extension Execution model Single node, written in Rust on Apache Arrow and Apache DataFusion In process, embedded in the host application License Apache License 2.0, an Apache Software Foundation project MIT, held by the DuckDB Foundation APIs SQL, Python (apache-sedona[db]), R and Rust SQL, Python, R, Rust, CLI, and clients for C, Java, Go, Node.js and Wasm Spatial types and functions Geometry type Included: Geometry Included: GEOMETRY, a built-in type since 1.5 Geography type Calculations on the sphere or spheroid Included: Geography, built on s2geography since 0.4.0 Partial: No geography type; _Spheroid functions such as ST_Distance_Spheroid Spatial functions Included: 212 functions in the SQL reference (141 ST_, 67 RS_), compatible with SedonaSpark Included: 158 functions in the spatial function index, including aggregate and table functions Coordinate reference system Included: CRS carried in the column type and read from Parquet; mismatched CRSs fail at planning Included: Optional CRS in the GEOMETRY type since 1.5; functions check that inputs share a CRS Raster data Raster functions in SQL Included: RS_ functions since 0.3.0, including RS_ZonalStats and RS_Clip Not included: Raster formats are not supported Raster and vector in one query Statistics of raster pixels inside vector polygons Included: RS_ZonalStats over polygons in SQL Not included: No raster support Spatial joins Spatial join Included: Spatial index join with automatic disk spilling for larger-than-memory joins Included: In-memory R-tree join; the right side must fit in memory KNN join Find the k nearest features to each record Included: ST_KNN in the join condition Not included: Not documented GPU acceleration Included: Optional GPU spatial join since 0.4 Not included: Not documented Data formats GeoParquet Included: Read, and write GeoParquet 1.1 Included: Read and write Parquet geometry and geography types Included: Write since 0.4.0 Not included: Not documented GeoArrow Included: GeoArrow integration Included: Arrow import and export since 1.5 GDAL vector formats Shapefile, GeoPackage, FlatGeobuf and more Included: Read and write through GDAL/OGR Included: ST_Read and COPY through GDAL Remote files Included: S3 and HTTPS Included: S3 read and write, HTTP(S) read Sources: Apache DataFusion; DuckDB Why DuckDB; SedonaDB repository, documentation, CRS examples, SQL joins and release posts for 0.3.0, 0.4.0 and 0.5.0; DuckDB why DuckDB, GEOMETRY type, spatial functions, GDAL integration, spatial joins, DuckDB 1.5.0 and httpfs. Checked October 2026. “Not documented” means the project’s documentation does not describe the capability. SpatialBench SpatialBench results on one machine The Apache Sedona project published these SpatialBench single-node results from a run on September 22, 2025. The run used SpatialBench v0.1.0, SedonaDB 0.1.0 and DuckDB 1.4.0 on an AWS EC2 m7i.2xlarge with 8 CPUs and 32 GB of RAM. Each query had a 1,200-second timeout. Times are in seconds at scale factor 10 and include loading data from Parquet. Both engines have shipped newer releases since. SedonaDB 0.1.0 DuckDB 1.4.0 SpatialBench results on one machine Capability Apache Sedona SedonaDB 0.1.0 Embedded database DuckDB 1.4.0 Scale factor 10 Queries completed 12 queries Included: 12 of 12 Partial: 9 of 12 Q1 distance filter ST_DWithin 3.04 4.58 Q2 point-in-polygon filter 8.89 8.26 Q5 convex hull aggregation 50.81 14.40 Q9 building self-join Intersection over union 0.38 942.98 Q10 spatial left join 42.02 Not included: Error Q11 multi-way spatial join 97.52 Not included: Error Q12 KNN join 145.66 Not included: Error Source: SpatialBench single-node benchmarks, which lists all 12 queries at scale factors 1 and 10, plus GeoPandas. SpatialBench comes from the Apache Sedona project, and SedonaDB is an Apache Sedona engine; the benchmark code is open at apache/sedona-spatialbench for anyone to rerun. Function reference Every spatial SQL function in SedonaDB and DuckDB Search 280 spatial SQL functions from the SedonaDB SQL reference and the DuckDB spatial function index, filter by vector or raster, and see which engine has each one. Functions match by name, and the same operation can have a different name in each engine, such as ST_GeomFromWKT in SedonaDB and ST_GeomFromText in DuckDB. Search functions Data type Vector and raster Vector Raster Availability All platforms Available in SedonaDB Available in DuckDB Only in SedonaDB Only in DuckDB Category All categories Affine Transformations Aggregate Functions Band Accessors Bounding Box Functions Engine Utilities Geography Type Functions Geometry Accessors Geometry Constructors Geometry Editors Geometry Output / Export Geometry Processing Geometry Validation Linear Referencing Measurement Functions Operators Output Overlay Functions Pixel Functions Predicates / Topological Relationships Raster Accessors Raster Constructors Raster Functions Raster Geometry Functions Spatial Indexing Spatial Reference System Table Functions Tiles 280 functions Function Category SedonaDB DuckDB What it does DuckDB_PROJ_Compiled_Version Engine Utilities Not available Available Returns a text description of the PROJ library version that this instance of DuckDB was compiled against. DuckDB_Proj_Version Engine Utilities Not available Available Returns a text description of the PROJ library version that is being used by this instance of DuckDB. RS_AsGeoTiff Output Available Not available Encodes a raster as a GeoTIFF and returns the bytes as binary, with optional compression and tiling. RS_AsRaster Operators Available Not available Rasterizes a geometry using the grid of a reference raster. RS_BandIsNoData Band Accessors Available Not available Returns true if every pixel of the band holds the band’s nodata value. Returns false if any pixel holds data, or if the band has no nodata value. RS_BandNoDataValue Band Accessors Available Not available Returns the nodata value of the specified band as a double. Returns null if the band has no nodata value defined. RS_BandPath Raster Accessors Available Not available Retrieves the file path of an out-of-database (out-db) raster band, returning the external raster file location referenced by the raster. RS_BandPixelType Band Accessors Available Not available Returns the pixel data type of the specified band as a string. RS_BandToDim Raster Functions Available Not available Collapses all bands into a single band with a new dimension. RS_Clip Operators Available Not available Clips a raster to a geometry, setting pixels outside the geometry to nodata and (by default) cropping to the geometry’s bounding box. RS_Contains Predicates / Topological Relationships Available Not available Returns true if the first argument’s extent contains the second. RS_ConvexHull Raster Geometry Functions Available Not available Returns the convex hull geometry of a raster. RS_CRS Operators Available Not available Returns the CRS string for a raster. RS_DimNames Raster Functions Available Not available Returns the ordered list of dimension names for a raster band. RS_DimSize Raster Functions Available Not available Returns the size of a named dimension in a raster band. RS_DimToBand Raster Functions Available Not available Promotes a within-band dimension into separate bands. RS_Envelope Raster Geometry Functions Available Not available Returns the envelope (bounding box) of a raster as a geometry. RS_Example Raster Functions Available Not available Creates a simple example raster for testing and demos. RS_FromGDALRaster Raster Functions Available Not available Decodes a GDAL-readable raster (e.g. a GeoTIFF) from binary content into an in-database raster. RS_FromPath Raster Constructors Available Not available Creates an out-of-database raster from a raster file path. RS_GeoReference Raster Accessors Available Not available Returns the georeference metadata of raster as a string in GDAL or ESRI format as commonly seen in a world file. Default is GDAL if not specified. Both formats output six lines: scalex, skewy, skewx, scaley, upperleftx, upperlefty. In GDAL format the upper-left coordinates refer to the corner of the upper-left pixel, while in ESRI format they are shifted to the center of the upper-left pixel. RS_GeoTransform Raster Accessors Available Not available Returns the raster’s geotransform decomposed into a struct of six doubles, matching Sedona Spark’s RS_GeoTransform: magnitudeI and magnitudeJ (pixel sizes along the transformed i and j axes), thetaI (rotation of the raster in radians, positive clockwise), thetaIJ (angle from the transformed i axis to the transformed j axis in radians, positive counter-clockwise), and offsetX and offsetY (the upper-left corner of the upper-left pixel). For the raw affine coefficients instead of this decomposition, use the individual accessors (RS_ScaleX, RS_SkewX, RS_UpperLeftX, …) or RS_GeoReference. RS_Height Raster Accessors Available Not available Returns the height of a raster in pixels. RS_Intersects Predicates / Topological Relationships Available Not available Returns true if the extents of the two arguments intersect. RS_IsEmpty Raster Functions Available Not available Returns true when the raster has zero visible volume — some dimension has length 0, so it holds no cells. This is visible-volume emptiness, not byte-emptiness: a lazy raster whose pixels are resolved on demand carries no bytes but is not empty. RS_MakeEmptyRaster Raster Constructors Available Not available Creates an in-database raster from a grid definition: a pixel count, a placement (an extent geometry, or an upper-left corner with pixel size or a full affine transform), and a number of zero-filled bands. Use it to define a target grid for RS_AsRaster or as a template for other rasters. RS_MetaData Operators Available Not available Returns raster metadata as a struct. RS_MinConvexHull Raster Geometry Functions Available Not available Returns the footprint of the raster’s data pixels: the polygon over the smallest pixel-aligned rectangle of the grid that holds every pixel not equal to its band’s nodata value. Returns null if no pixel holds data. RS_NumBands Operators Available Not available Returns the number of bands in the raster. RS_NumDimensions Raster Functions Available Not available Returns the number of dimensions in a raster band. RS_PixelAsCentroid Pixel Functions Available Not available Returns the centroid of the specified pixel as a Point geometry. RS_PixelAsPoint Pixel Functions Available Not available Returns the upper-left corner of the specified pixel as a Point geometry. RS_PixelAsPolygon Pixel Functions Available Not available Returns the bounding polygon of the specified pixel. RS_Polygonize Pixel Functions Available Not available Converts a raster band into polygons grouped by connected pixel value regions. RS_RasterToWorldCoord Raster Accessors Available Not available Converts raster pixel coordinates to world coordinates as a point. RS_RasterToWorldCoordX Raster Accessors Available Not available Converts raster pixel coordinates to world X coordinate. RS_RasterToWorldCoordY Raster Accessors Available Not available Converts raster pixel coordinates to world Y coordinate. RS_ReplaceBandNoDataValue Raster Functions Available Not available Moves a band’s nodata value to a new value, carrying the nodata pixels with it: every pixel that reads as nodata is rewritten to the new value, which then becomes the band’s nodata, so the same pixels read as nodata before and after. RS_ReprojectMatch Operators Available Not available Reprojects a raster onto a reference raster’s CRS, grid, and extent. RS_Resample Operators Available Not available Resamples a raster onto a new pixel grid — a new width/height, a new pixel size, and/or a snapped origin — in the same CRS. RS_Rotation Raster Accessors Available Not available Returns the raster rotation in radians based on skew parameters. RS_ScaleX Raster Accessors Available Not available Returns the pixel width (scale X) of a raster. RS_ScaleY Raster Accessors Available Not available Returns the pixel height (scale Y) of a raster. RS_SetBandNoDataValue Operators Available Not available Sets the nodata value of the specified band, packing the value into the band’s native data type. A null raster or band yields a null raster; a null nodata value instead clears the addressed band’s nodata. This is metadata-only: raster cell values are not modified. RS_SetCRS Operators Available Not available Sets the Coordinate Reference System (CRS) for a raster. RS_SetGeoReference Operators Available Not available Sets the affine geotransform of a raster from a world-file georeference string of six whitespace-separated numbers in the order scalex, skewy, skewx, scaley, upperleftx, upperlefty — the same order RS_GeoReference emits. The format is ‘GDAL’ (default) or ‘ESRI’; in GDAL the upper-left coordinates refer to the corner of the upper-left pixel, while in ESRI they refer to its center. The transform can also be given as six numeric arguments instead of a string, always as GDAL/corner coordinates. This is metadata-only: raster cell values are not resampled. RS_SetSRID Operators Available Not available Sets the SRID (spatial reference identifier) for a raster. RS_SetValue Operators Available Not available Returns the raster with one pixel of a band set to a new value. RS_Shape Raster Functions Available Not available Returns the shape (size of each dimension) of a raster band. RS_SkewX Raster Accessors Available Not available Returns the X skew (rotation) parameter of a raster. Available Not available Show all 280 functions No functions match these filters. Check marks link to each engine’s documentation for the function. Sources: the SedonaDB SQL reference and the DuckDB spatial function index, checked October 2026. Which engine fits your work Spatial filters inside an application DuckDB fits teams that already embed DuckDB and need point-in-polygon and distance filters on data that fits on one machine, from any of its language clients. Spatial joins, geography and rasters on one machine SedonaDB fits spatial joins and k-nearest-neighbor (KNN) joins larger than memory, calculations on the sphere, columns that must keep their CRS, and raster statistics inside polygons. It runs from SQL, Python, R or Rust. The same engine runs the non-spatial joins, aggregations and window functions in the pipeline, through Apache DataFusion. Workloads larger than one machine SedonaDB functions are compatible with SedonaSpark, so the same spatial SQL moves to a cluster. Wherobots Cloud runs it fully managed, with 389 spatial SQL functions and RasterFlow. See the Wherobots vs. Apache Sedona comparison. SedonaDB vs. DuckDB FAQ What is SedonaDB? SedonaDB is a single-node analytical engine from the Apache Sedona project, written in Rust on Apache Arrow and Apache DataFusion, with geometry and geography as core types. It is free under the Apache License 2.0 and installs with pip install "apache-sedona[db]". Can SedonaDB run regular SQL, not just spatial queries? Yes. SedonaDB is built on Apache DataFusion, a general-purpose SQL query engine written in Rust, so joins, aggregations and window functions run in the same queries as spatial functions. See the SedonaDB documentation and the DataFusion SQL reference. Does DuckDB support spatial data? Yes. GEOMETRY is a built-in DuckDB type since version 1.5, and the spatial extension adds ST_ functions, an R-tree index and GDAL vector file formats. It does not read raster formats. Which is faster for spatial joins, SedonaDB or DuckDB? In the published SpatialBench run at scale factor 10, SedonaDB 0.1.0 completed all 12 queries. DuckDB 1.4.0 returned errors on the spatial left join, the multi-way join and the KNN join. DuckDB was faster on the convex hull aggregation. Both engines have released newer versions since that run. Can SedonaDB and DuckDB read GeoParquet? Yes. Both read and write GeoParquet, and SedonaDB also writes the native Parquet geometry and geography types. When does a single-node engine stop being enough? When the data or a join outgrows one machine, a distributed engine splits the work across a cluster. SedonaDB functions are compatible with SedonaSpark, and WherobotsDB runs the same spatial SQL fully managed in Wherobots Cloud. See what a spatial join is. Who builds SedonaDB? SedonaDB is part of Apache Sedona, an Apache Software Foundation project. Engineers at Wherobots, founded by the original creators of Apache Sedona, contribute to it alongside the Sedona community. Take your spatial SQL from one machine to a cluster Bring a SedonaDB or DuckDB query and we will run it with you on Wherobots Cloud. Schedule use case review