一张表里塞着成千上万段 JSON 字符串,就像每个格子里又藏了一张小表。过去常见的办法,是先把这一列导出成 JSON 文件,再读回来整理。DuckDB 团队给出的做法省掉了这次往返:直接在 SQL 中识别字段和嵌套关系,把文本展开成可筛选、计算和汇总的类型列。
关键一步是“模式推断”——判断字段名称、数据类型和嵌套结构。json_group_structure 会汇总整列 JSON:只在部分记录出现的 duration_ms、数组 items,也能纳入统一结构;缺失字段则保留为 NULL。自动判断并非终点:JSON 本身没有时间戳类型,所以示例中的 ts 先被认作文本;团队再用 json_merge_patch 把它修订为 TIMESTAMP,并把过宽的整数类型改成 INTEGER。大表还可只抽样一万行来降低扫描成本,但代价是可能漏掉极少出现的字段。