DuckDB v2.0预览来了:3步把数据库变成服务器,VARIANT类型+quack协议上手实战

· 小白基础技术分享

今天,DuckDB 官宣了 v2.0 预览

8 月 17 日,DuckDB 团队发布了 v2.0 “Cyanoptera” 预览版。如果你做数据分析、处理 CSV/Parquet、写过轻量 SQL,一定听说过 DuckDB——”数据库界的瑞士军刀”,单文件、零配置、直接查 CSV。而 v2.0 最大的变化是:DuckDB 终于要变成一台服务器了。

别急,这教程不是让你去读官方长篇博客,而是带你把最实用的三个新特性跑起来:quack 服务器协议、CONNECT 远程查询、VARIANT 半结构化类型。全程 3 步,10 分钟搞定。

第 1 步:安装预览版

DuckDB 的预览版(preview build)已经包含 v2.0 的大部分特性。最简单的方式是用 Homebrew:

# 安装 DuckDB CLI(当前稳定版)
brew install duckdb

# 想要 v2.0 预览特性,去官网下载 preview build:
# https://duckdb.org/install/preview.html
# 或者用 pip 安装 Python 包(预览特性同样可用)
pip install duckdb --pre

装好后验证一下版本:

duckdb -c "SELECT version();"

如果看到输出里带有 v2.0 或预览标识,说明安装成功。成功验证:终端能正常返回版本号,没有报错。

第 2 步:体验 VARIANT——JSON 的”极速版”

v2.0 把 VARIANT 类型升级为”一等公民”。它和 JSON 的区别是:JSON 是文本,VARIANT 是二进制结构——DuckDB 会自动识别数据里的公共结构并压缩存储,查询还更快。对”日志流、半结构化数据”这种场景特别友好。

打开 DuckDB,执行下面的 SQL:

-- 建一张表,列类型用 VARIANT
CREATE TABLE events(payload VARIANT);

-- 插入 JSON 格式的数据(会自动转换)
INSERT INTO events VALUES
  ('{"user": {"id": 42, "tags": ["a", "b"]}}'),
  ('{"user": {"id": 43, "tags": ["c"]}}');

-- 查询结构信息
SELECT variant_type(payload), variant_keys(payload) FROM events;

-- 按内部字段过滤
SELECT * FROM events
WHERE variant_contains(payload, {'user': {'id': 42}});

如果你有真实的 JSON 日志文件,可以直接读进来试试:

# 把 JSON 文件直接查成 VARIANT
duckdb -c "CREATE TABLE logs AS SELECT * FROM read_json_auto('your_log.json');"

成功验证:variant_keys 能返回 ['user'],过滤查询能只命中 id=42 的那一行。 对比一下同样的查询在 read_json_auto 下的表现,你会感受到 VARIANT 的”不声明 schema 也能查”有多爽。

第 3 步:把 DuckDB 变成服务器(quack 协议)

这是 v2.0 最重磅的更新:quack 扩展让 DuckDB 可以对外提供服务,其他 DuckDB 客户端通过网络连上来执行 SQL。对团队协作、多机分析特别实用。

第一步,在服务器上启动 quack:

-- 加载 quack 扩展并启动服务,token 相当于访问密码
INSTALL quack;
LOAD quack;
CALL quack_serve(token = 'my_token');

第二步,在客户端连接并查询:

-- 远程挂载并切换会话
ATTACH 'quack:server.example.com' AS qk (TOKEN 'my_token');
CONNECT qk;

-- 这条查询会真正在服务器上执行,结果流式返回
SELECT count(*) FROM events;

-- 断开
DISCONNECT;

注意:v2.0 的 CONNECT 不只是给 quack 用的,它还支持直接把 SQL 下推到 PostgreSQL、MySQL——CONNECT 'postgres://localhost/mydb' 之后,你的 SELECT 会直接在 PG 上执行,不再把整张表拉回来。成功验证:客户端能查到服务器端的数据,且网络传输的是”查询 + 结果”,不是整表。

常见失败与处理

INSTALL quack 报错:确认你用的是 preview build,稳定版默认不带 quack 扩展

CONNECT 超时:检查服务器端是否执行了 quack_serve,token 是否一致,端口是否放行

VARIANT 语法不识别variant_contains 等函数在 preview 里可能命名有变化,用 SELECT * FROM pragma_functions() WHERE name LIKE 'variant%' 查一下当前可用函数

什么时候不该用 DuckDB

最后说清楚边界:DuckDB 适合分析型负载,不适合高并发 OLTP(比如你的网站用户表,还是交给 PostgreSQL)。它擅长的是”数据科学家/分析师在本地快速分析大文件”,v2.0 加了服务器模式,是为了多机协作,而不是替代生产数据库。

一句话结论:DuckDB v2.0 的预览已经可以玩了——VARIANT 让你告别 JSON 解析的痛苦,quack 让你把分析能力直接开成服务。10 分钟跑完这三步,你就比 90% 的人先摸到了下一代分析数据库的门。 想尝鲜的朋友,现在就去下载 preview build 吧。


🔥 关注LC智趣厅,每天第一时间看懂 AI 行业大事。

👇 觉得有用,点个赞让更多人看到。


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

Scroll to Top
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅