① 标题党#
主标题:DuckDB 也配叫"小"?VARIANT 半结构化玩出花
备选A:日志、JSON 一股脑,DuckDB 的 VARIANT 说:不用管 schema
备选B(短视频):脏数据,DuckDB 也能优雅地接
② 开场钩子#
做数据平台最烦的不是数据多,是数据乱——这个字段有、那个字段没有,一天一个样。直到 DuckDB 的 VARIANT 出现,说:你不用管它长什么样。
③ 主角特性:VARIANT 类型(半结构化)#
- VARIANT(v1.5+ 引入):一个列里每行可以存不同结构的 JSON 式数据,不用强约束 schema。
- 自动”撕碎”(shred)公共结构 → 既能保持灵活,又能压缩好、执行快。
- 天然适合实时日志 / 埋点 / 半结构化摄取,不强制定义死 schema。
取舍:灵活牺牲了强类型保证;但换来”先存进来再说,查询时才整形”的从容。
④ 最小可复现#
-- 一列里每行 JSON 结构不同,也能放进去
CREATE TABLE logs (v VARIANT);
INSERT INTO logs VALUES ('{"a":1}'), ('{"b":"x","c":[1,2]}'), ('{"a":2,"d":null}');
-- 灵活取用
SELECT v['a'] FROM logs;sql⑤ 结论#
VARIANT 让我敢把”没想好 schema”的数据先接进来。DuckDB 不只快,还学会了容忍世界的混乱。
⑥ 配图脚本#
乱结构 JSON 汇入 / MULTI-shape 示意 / 查询取字段 / 结论卡