三个交互演示:① LowCardinality 字典编码 · ② Nullable 双列布局 · ③ Array / Map / Nested 列存物理布局
输入一组重复字符串值(每行一个),点「▶ 编码」看:原列 → 字典 → codes 三段布局,以及节省的字节数。
滑动控制 NULL 比例,看 Nullable 列是怎么由「原值列 + null mask 列」两列拼起来的,以及多花多少存储:
.null.bin,每行 1 字节。原列越窄、NULL 比例越高,相对开销越显著(UInt8 列直接翻倍)。生产建议:能用 -1 / '' 替代就别上 Nullable。
选一种复合类型,看同一份 JSON 数据在磁盘上拆成几个文件、怎么布局:
| 类型 | 底层布局 | 典型用途 | 注意 |
|---|---|---|---|
Array(T) | size 列 + data 扁平数组 | 标签 / 分数 / 元素列表 | 大量高阶函数支持 |
Tuple(T1,T2,...) | 每个字段独立列存 | (lng,lat)、复合键、临时打包 | 本质是「多列封装」 |
Map(K,V) | 等价 Tuple(Array(K), Array(V)) | 少量稀疏 KV | 取 key 是 O(N),不要乱用 |
Nested(...) | 多列并行数组 | 订单 items、子表场景 | 各字段长度必须相等 |
JSON / Object | 动态 schema | 日志 / 半结构化 | 实验性,生产慎用 |