七万号·数据平台实战手记

Back

① 标题党#

主标题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 示意 / 查询取字段 / 结论卡


VARIANT:半结构化也能'脏乱差'地存
https://realcpf.tech/blog/duckdb-05
Author 刘佳成
Published at 2026年9月3日