You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Blog post about parquet vs custom file formats / test Optimized Parquet with ClickBench #16149
ClickBench keeps me convinced that Parquet can be quite fast. There is only a 2.3x performance difference vs @duckdb 's own format and unoptimized parquet: https://tinyurl.com/5aexvsfw. I am surprised that the (closed source) Umbra only reports 3.3x faster than DuckDB on parquet
Describe the solution you'd like
I would love to make a blog post about how much faster/slower custom file formats are compared to parquet. I am typing this ticket now that it is on my mind so I don't forget it.
The basic thesis is that
Custom file formats only get you XX% more performance than parquet
Many of the historic performance differences are due to engineering investment rather than format
Parquet has many other benefits (like a very large ecosystem)
==> therefore parquet is the format that really matters
A fun experiment might be to "fix" the clickbench partitioned dataset by
resorting and writing with page indexes (could use a bunch of DataFusion COPY commands pretty easily to do this). The sort order should be some subset of the predicate columns. Perhaps EventTime and then maybe SearchPhrase / URL.
Interestingly, Clickbench being quite a bit faster again for 1.3 (ClickHouse/ClickBench#376 ) seems mostly related to using predicate pushdown more effectively during Parquet decoding (which they already might have implemented for their own format).
Interestingly, Clickbench being quite a bit faster again for 1.3 (ClickHouse/ClickBench#376 ) seems mostly related to using predicate pushdown more effectively during Parquet decoding (which they already might have implemented for their own format).
Indeed -- unsurprisingly the more effort that is put into parquet readers the faster they go 😆 and the open nature / wide spread adoption of the format makes it easier to gather that required effort.
A fun experiment might be to "fix" the clickbench partitioned dataset by
resorting and writing with page indexes (could use a bunch of DataFusion COPY commands pretty easily to do this). The sort order should be some subset of the predicate columns. Perhaps EventTime and then maybe SearchPhrase / URL.
disabling compression
This is very interesting, maybe we can also do this for arrow-rs clickbench benchmark to see the result.
A fun experiment might be to "fix" the clickbench partitioned dataset by
resorting and writing with page indexes (could use a bunch of DataFusion COPY commands pretty easily to do this). The sort order should be some subset of the predicate columns. Perhaps EventTime and then maybe SearchPhrase / URL.
disabling compression
This is very interesting, maybe we can also do this for arrow-rs clickbench benchmark to see the result.
cc @alamb@Dandandan I do some experiment now, here is the result, mostly it will benefit from page_index with uncompressed parquet data:
Hi @alamb@zhuqi-lucas, I recently read this issue, and it is very nice. Thanks.
I am also curious: Why would uncompressed Parquet be considered an optimization over Snappy-compressed Parquet? Is the decompression overhead of Snappy significant enough to slow down read performance?
I am also curious: Why would uncompressed Parquet be considered an optimization over Snappy-compressed Parquet? Is the decompression overhead of Snappy significant enough to slow down read performance?
Yes, exactly this -- once you have the data locally, the speed of block decompression like snappy often dominates the query performance. Of course using no decompression comes at a tradeoff of file size / more network required
changed the title [-]Blog post about parquet vs custom file formats[/-][+]Blog post about parquet vs custom file formats / test Optimized Parquet with ClickBench[/+]on Oct 15, 2025
Activity
Dandandan commentedon May 22, 2025
Interestingly, Clickbench being quite a bit faster again for 1.3 (ClickHouse/ClickBench#376 ) seems mostly related to using predicate pushdown more effectively during Parquet decoding (which they already might have implemented for their own format).
alamb commentedon May 22, 2025
Indeed -- unsurprisingly the more effort that is put into parquet readers the faster they go 😆 and the open nature / wide spread adoption of the format makes it easier to gather that required effort.
BTW, I am working on the same for DataFusion with @zhuqi-lucas in apache/arrow-rs#7456
I hope we will have some major improvements to share in another week or two
zhuqi-lucas commentedon May 23, 2025
This is very interesting, maybe we can also do this for arrow-rs clickbench benchmark to see the result.
zhuqi-lucas commentedon May 29, 2025
cc @alamb @Dandandan I do some experiment now, here is the result, mostly it will benefit from page_index with uncompressed parquet data:
Do some changes in arrow-rs clickbench benchmark:
alamb commentedon May 29, 2025
3x faster for Q21 is pretty neat to see
alamb commentedon May 30, 2025
Do I understand that the changes you report are due to simply rewriting the parquet files to have a page index and be uncompressed?
zhuqi-lucas commentedon May 30, 2025
Yeah @alamb , this's the reason. Thanks.
alamb commentedon Jun 3, 2025
I posted about this on twitter too in case anyone is interested: https://x.com/andrewlamb1111/status/1929852296323547273
zhuqi-lucas commentedon Jun 3, 2025
Thank you @alamb!
alamb commentedon Jun 6, 2025
Here is a related blog about doing this on clickhouse:
JigaoLuo commentedon Jun 14, 2025
Hi @alamb @zhuqi-lucas, I recently read this issue, and it is very nice. Thanks.
I am also curious: Why would uncompressed Parquet be considered an optimization over Snappy-compressed Parquet? Is the decompression overhead of Snappy significant enough to slow down read performance?
[Update] I recall the BtrBlock paper Figure1 with S3 and Figure 8 in-memory that uncompressed parquet is always faster to be loaded on CPU: https://www.cs.cit.tum.de/fileadmin/w00cfj/dis/papers/btrblocks.pdf
alamb commentedon Jun 16, 2025
Yes, exactly this -- once you have the data locally, the speed of block decompression like snappy often dominates the query performance. Of course using no decompression comes at a tradeoff of file size / more network required
[-]Blog post about parquet vs custom file formats[/-][+]Blog post about parquet vs custom file formats / test Optimized Parquet with ClickBench[/+]