DuckDB分页:OFFSET还是file_row_number?
Paging Through a Parquet File in DuckDB: File_row_number or Offset?

在处理包含两千万行的Parquet文件时,我本以为使用OFFSET分页会导致性能呈二次方下降,但测试发现DuckDB会自动优化。真正的问题在于Row Group的数量:文件被切分得越细,跳过无关数据的能力越强,性能提升越明显。更令人担忧的是,OFFSET分页在多线程环境下可能返回重复或缺失的行,且总行数统计完全正常,无法通过简单计数发现数据错误。与其依赖优化器的黑盒重写,不如直接使用file_row_number进行范围过滤,并用crypto_hash_agg对结果集进行哈希校验,确保数据完整性。
不要通过统计行数来验证导出数据,因为丢失的行和重复的行会相互抵消,总数依然完美。