Parquet 是一种列式存储(columnar storage)文件格式:它把一张表按“列”而不是按“行”写到磁盘上,所以只读需要的几列时,其余列的字节根本不用碰。
打个比方
把一张表想成一栋宿舍楼:每行是一个房间,每列是一种家具。
行式存储(row-oriented)像按房间打包——101 室的床、桌、台灯全装一箱。你想统计“全楼有多少盏台灯”,就得把每个箱子都拆开,翻出台灯,再把桌椅扔回去。
列式存储像按家具类型打包——所有台灯一箱,所有椅子一箱。统计台灯只开一个箱子,别的箱子碰都不用碰。Parquet 用的是后一种打包方式。
为什么快
少读。分析查询通常只关心少数几列,比如“按城市统计订单金额”,100 列的表里只用 3 列。按列存放时,磁盘上只需读这 3 列,扫描量按比例掉下来。
好压。同一列里类型一致、取值还常常重复(“城市”列反复就是那几个名字),字典编码(dictionary encoding)、游程编码(run-length encoding)这类手段能压得很狠。文件更小,读得更少,两头都省。
能跳。Parquet 把数据切成若干行组(row group),每组记录各列的统计信息,比如最大值、最小值。查询只要某段范围的数据,落在范围外的行组整块跳过——这叫谓词下推(predicate pushdown)。
和邻居比
| 维度 | CSV | Parquet |
|---|---|---|
| 布局 | 按行 | 按列 |
| 类型 | 靠猜 | 写在 schema 里 |
| 只读 3 列 | 整个文件读一遍 | 只读这 3 列 |
| 人眼可读 | 能直接打开 | 二进制,要工具 |
| 擅长 | 交换、小数据、手工看 | 分析、大规模管道 |
CSV 是行式文本格式,胜在人人可读;Parquet 是二进制格式,胜在机器算得快。ORC 也是列式文件格式,生态略有不同。另外要分清:Parquet 是文件格式,不是数据库——Spark、Pandas、DuckDB、云数仓大多能读写它,具体支持以官方文档为准。
对你的意义
写数据管道时,中间落地优先用 Parquet,查询时明确列出需要的列,别习惯性 SELECT *,否则列存的好处就白占了;小文件太多反而拖慢,分区方式和文件大小值得调一调。
做 AI 的,训练和评测数据常以 Parquet 存放,按列加载能省内存和 I/O。
普通职场人:Excel 双击打不开 .parquet,得转换或用支持它的工具。记住一点就够了——这个后缀是给程序算的,不是给人看的。
