Arrow IPC over HTTP client with array functions and bloom filters
Compatibility Matrix
This table covers all DuckDB releases that have not reached end-of-life, including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.
| Platform | 1.4.4 | 1.4.5 | 1.5.5 | 1.5.6 | 2.0.0 |
|---|---|---|---|---|---|
| Linux AMD64 | |||||
| Linux ARM64 | |||||
| macOS AMD64 | |||||
| macOS ARM64 | |||||
| Windows AMD64 | |||||
| Windows ARM64 | |||||
| WebAssembly |
Installing and Loading
INSTALL dazzleduck FROM community;
LOAD dazzleduck;
Example
For documentation and examples, visit: https://dazzleduck-web.github.io/dazzleduck-website/
About dazzleduck
DazzleDuck is a DuckDB extension that provides a client to execute queries remotely on DazzleDuck SQL Server via Arrow IPC over HTTP protocol. It also includes array utility functions and bloom filters.
Features
Arrow IPC over HTTP Client
-
dd_read_arrow(url, query): Execute queries on remote DuckDB servers via Arrow IPC over HTTP -
dd_login(url, user, pass): Authenticate and get auth token -
dd_splits(url, table): Get table splits for parallel processing (returns endpoints, query_id, query, producer_id, split_size, query_checksum) - Filter Pushdown: WHERE clause filters are automatically sent to the remote server
- Projection Pushdown: Only selected columns are fetched from the server
- Aggregation Pushdown: Automatically detects aggregation queries and pushes them to the remote server, transferring only aggregated results instead of all rows
-
Split Mode: Enable parallel execution with
split := trueparameter
Supported aggregations for pushdown:
| Aggregate | Non-split mode | Split mode |
|---|---|---|
COUNT(*) |
Yes | Yes |
COUNT(col) |
Yes | Yes |
SUM(col) |
Yes | Yes |
MIN(col) |
Yes | Yes |
MAX(col) |
Yes | Yes |
AVG(col) |
Yes | No (local fallback) |
COUNT(DISTINCT col) |
Yes | No (local fallback) |
In split mode, only split-safe aggregations (those whose partial results can be merged across splits) are pushed down. Non-split-safe aggregations like AVG and COUNT(DISTINCT ...) fall back to local execution automatically. If any aggregate in a query is not supported for pushdown, the entire query falls back to local execution.
Array Functions
-
dd_array_contains_all(haystack, needle): Check if all needle elements exist in haystack -
dd_array_contains_all(haystack, needle, bloom_filter): Optimized version with pre-computed bloom filter
Bloom Filter Functions
-
dd_bloom_filter_create(array): Create bloom filter from string array -
dd_bloom_filter_contains(filter, value): Check single value membership -
dd_bloom_filter_contains_all(filter, array): Check multiple values membership
Usage Examples
-- Check array containment
SELECT dd_array_contains_all(['a','b','c','d'], ['a','c']); -- true
-- Create and use bloom filter for large datasets
WITH products AS (SELECT dd_bloom_filter_create(list(name)) AS bf FROM catalog)
SELECT * FROM search_terms
WHERE dd_bloom_filter_contains(products.bf, term);
-- Query remote DuckDB server
SELECT * FROM dd_read_arrow('https://server:8081', sql := 'SELECT * FROM sales');
-- With filter pushdown (filters sent to server)
SELECT * FROM dd_read_arrow('https://server:8081', sql := 'SELECT * FROM orders')
WHERE status = 'pending' AND amount > 100;
-- With projection pushdown (only selected columns fetched)
SELECT name, email FROM dd_read_arrow('https://server:8081', source_table := 'users');
-- With parallel execution (split mode)
SELECT * FROM dd_read_arrow('https://server:8081', source_table := 'mydb.mytable', split := true);
-- Aggregation pushdown (aggregations executed on server)
SELECT region, count(*), sum(amount)
FROM dd_read_arrow('https://server:8081', source_table := 'orders')
WHERE status = 'pending'
GROUP BY region;
-- Inspect table splits
SELECT * FROM dd_splits('https://server:8081', source_table := 'mydb.mytable');
Added Functions
| function_name | function_type | description | comment | examples |
|---|---|---|---|---|
| dd_array_contains_all | scalar | NULL | NULL | |
| dd_bloom_filter_contains | scalar | NULL | NULL | |
| dd_bloom_filter_contains_all | scalar | NULL | NULL | |
| dd_bloom_filter_create | scalar | NULL | NULL | |
| dd_login | scalar | NULL | NULL | |
| dd_read_arrow | table | NULL | NULL | |
| dd_search | scalar | NULL | NULL | |
| dd_splits | table | NULL | NULL | |
| dd_version | scalar | NULL | NULL |
Overloaded Functions
This extension does not add any function overloads.
Added Types
This extension does not add any types.
Added Settings
This extension does not add any settings.