他在广告技术领域工作,每天要翻看几十遍 Parquet 文件——投递数据、合作伙伴导出、受众快照。之前所有的读取方式都让人难受:要开 Jupyter、装 Python 包、要么忍受 JVM 的笨重。直到他把自己常用的命令行习惯揉进一个 50MB 的 Rust 二进制程序里,起名 pq——对,就是 Parquet 版本的 jq,专为终端单行命令和管道而生。
从 v0.5 开始,pq 就成了他看 Parquet 的默认工具。一行代码就能分组、求和、排序:pq sales.parquet 'group_by .country | sum .revenue | top 3 by sum_revenue',返回像美国 19065.00、法国 999.99、德国 312.00 这样的表,干净利落。v0.13 在 5 月发布时已经支持大文件流式输出、Ctrl-C 中断、元数据快速统计和异步预览,但项目板上有三个 issue 始终没划掉。
这三个待办事项在他笔记里积了三周的 // TODO 注释。第 2 号任务是让 JSON 输出也能流式化——此前除了 JSON,其他格式都流式了,唯独 JSON 因为写入时需要用方括号包裹整个数组,得先把所有结果缓冲到 Vec 里。第 3 号是 Explain 面板里增加行组裁剪比例,这是大家最想看到的可观测性指标:到底我的过滤条件有没有用?第 4 号是 pq diff,用来在 CI 中自动检测 schema 漂移。
一个周末,他把这三个功能全追了回来。现在 pq big.parquet '.id, .country' -o json | head -c 200 能在 40GB 文件上瞬间返回数据,不再等全部刷完。schema 漂移检测的门禁也直接可用:pq diff baseline.parquet candidate.parquet 如果发现新增列比如 country VARCHAR,就退出非零码,不必再写脚本包装。最让他得意的是 Explain 面板里的行组裁剪仪表——按 E 键能看到一次扫描实际读取了 83.3 万行,剪掉了 83% 的行组,而且绿色代表裁剪率≥50%,金色表示有裁剪,灰色则 0%,一旦遇到灰色还会提示:“可能该列缺少 min/max 统计(常见于老 Spark 写入的 STRING 类型)”。
这些细腻的提示,以前得开 DuckDB 的 EXPLAIN ANALYZE 再加计算器才能搞明白。现在他把这种体验压进了一个单文件工具,持续打磨的命令行手感,都在 v0.14 里了。
热门跟贴