适用于鸭子迷的管道
:baby_chick: quackpipe
QuackPipe 是一个建立在 DuckDB 之上的无服务器 OLAP API,模拟和别名化 ClickHouse HTTP API
通过熟悉的 API 使用 DuckDB SQL 和云存储,无需放弃旧习惯和集成。
:hatched_chick: 演示
:hatched_chick: 尝试 s3/parquet 查询示例 在我们的 迷你游乐场 (fly.io 免费套餐, 1x-共享-vcpu, 256Mb)
:hatched_chick: 在 fly.io 上启动你自己的 免费实例
:seedling: 开始使用
🐋 使用 Docker
docker pull ghcr.io/metrico/quackpipe:latest
docker run -ti --rm -p 8123:8123 ghcr.io/metrico/quackpipe:latest
📦 下载二进制文件
curl -fsSL github.com/metrico/quackpipe/releases/latest/download/quackpipe-amd64 --output quackpipe \
&& chmod +x quackpipe
🔌 使用参数启动服务器
./quackpipe --port 8123
🔌 使用文件数据库启动服务器,只读访问
./quackpipe --port 8123 --params "/tmp/test.db?access_mode=READ_ONLY"
🔌 使用 Motherduck 认证令牌启动服务器
使用 DuckDB 参数
./quackpipe --port 8123 --params "/tmp/test.db?motherduck_token=YOUR_TOKEN_HERE"
使用系统环境变量
export motherduck_token='<token>'
./quackpipe --port 8123
使用 -h
运行以获取完整的参数列表
参数
参数 | 用途 | 默认值 |
---|---|---|
--port | HTTP API 端口 | 8123 |
--host | HTTP API 主机 | 0.0.0.0 |
--stdin | STDIN 查询模式 | false |
--format | 格式处理器 | JSONCompact |
--params | 可选参数 |
:point_right: 游乐场
使用嵌入式游乐场执行无状态查询,不进行持久化
👉 有状态查询
通过添加唯一的 HTTP 认证来执行有状态查询,实现数据持久化。无需注册。
:point_right: API
使用 POST API 执行查询
curl -X POST https://quackpipe.fly.dev
-H "Content-Type: application/json"
-d 'SELECT version()'
:point_right: 标准输入
使用标准输入执行查询
# echo "SELECT 'hello', version() as version FORMAT CSV" | ./quackpipe --stdin
hello,v0.7.1
:fist_right: 扩展
默认情况下,Docker镜像中预安装了几个扩展,包括 parquet、json、httpfs
使用HTTP API时,httpfs、parquet、json 扩展会被包装器自动预加载。
用户可以预安装扩展并使用自定义参数执行quackpipe:
echo "INSTALL httpfs;" | ./quackpipe --stdin --params "?extension_directory=/tmp/"
./quackpipe --port 8123 --host 0.0.0.0 --params "?extension_directory=/tmp/"
ClickHouse HTTP
Quackpipe可以用于查询自身的远程实例和/或使用HTTP API的ClickHouse
CREATE OR REPLACE MACRO quackpipe(query, server := 'https://play.clickhouse.com', user := 'play', format := 'JSONEachRow') AS TABLE
SELECT * FROM read_json_auto(concat(server, '/?default_format=', format, '&user=', user, '&query=', query));
SELECT * FROM quackpipe("SELECT number as once, number *2 as twice FROM numbers(10)")
ClickHouse UDF
Quackpipe可以作为可执行UDF在ClickHouse查询中输入/输出DuckDB数据:
SELECT *
FROM executable('quackpipe -stdin -format TSV', TSV, 'id UInt32, num UInt32', (
SELECT 'SELECT 1, 2'
))
Query id: dd878948-bec8-4abe-9e06-2f5813653c3a
┌─id─┬─num─┐
│ 1 │ 2 │
└────┴─────┘
1 rows in set. Elapsed: 0.155 sec.
🃏 这是什么?可以把它想象成一个SELECT嵌套在另一个SELECT中,只是语法不同。
🃏 格式混淆?使用包含的ClickHouse宏别名让DuckDB SQL感觉像ClickHouse
:construction: 功能状态
- DuckDB核心 1
- cgo绑定
- 扩展预加载
- 别名扩展
- REST API 2
- CH格式模拟
- CSV, CSVWithNames
- TSV, TSVWithNames
- JSONCompact
- Native
- Web演示平台 (来自ClickHouse,Apache2许可) 3
- CH格式模拟
- STDIN快速查询执行
- ClickHouse可执行UDF
-
:memory:
模式云存储 (s3/r2/minio, httpfs等) -
:file:
模式使用可选_参数_