Skip decode steps in Parquet reader when nullable columns have no nulls - #15332
Conversation
|
@abellina when you have a chance I'd be curious to see how this works with your benchmarks. cc @nvdbaranec |
|
@etseidl I'll take a look at this and we will try to run with our benchmarks, but I think it might be early next week. I am sorry about the delay in responding, I have to fix some communication settings on my end. I would not block this PR as we will detect regressions quickly in our benchmark runs. |
|
/ok to test |
|
The idea and changes look good to me. I would like to see improvement results from benchmarks as well. As always, thanks Ed for a great effort! 🙂 |
vuule
left a comment
There was a problem hiding this comment.
few comments got left behind, otherwise 💯
Co-authored-by: Vukasin Milovanovic <vmilovanovic@nvidia.com>
|
/ok to test |
|
Apologies for leaving a trailing whitespace in one of the comments. As they say, "this little maneuver will cost us 51 years" |
… to developer negligence
|
/ok to test |
😬 I'm fine with waiting to see how this works in the spark environment. It's easier to not commit than to have to revert 😄 |
|
I should have numbers for this today @etseidl sorry for the delay. |
|
Thanks for testing this @abellina 🙏 |
|
@etseidl I am not seeing a difference in our tests. I am having trouble getting baselines to be as fast as normal in this environment, so take this with a grain of salt, but if I compare last night's nightly against this branch it's just noise, some are higher some are lower, and the queries I expect to see impact from scan (query9, query88) don't really see a change. |
|
Thanks @abellina. Looks like there are no regressions, this is good to merge. |
|
/merge |
Description
Closes #15266.
Some block and warp operations and some atomics can be avoided during Parquet page decoding when nullable columns are known to not contain any null values. One issue, however, is that since the columns are nullable, the null mask has to be set. My approach in this PR was to initialize nullable column buffers with an
ALL_VALIDmask rather thanALL_NULL. This will work when nulls are present becausestore_validity()sets the bitmask to all zeros before ORing in the passedvalid_mask.Benchmarks modified to not emit nulls showed a good improvement in decoding time for fixed-width data types.
Checklist