Skip to content

Introduce ReadPlan to encapsulate the calculation of what parquet rows to decode #7502

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 19, 2025

Conversation

alamb
Copy link
Contributor

@alamb alamb commented May 13, 2025

Which issue does this PR close?

Rationale for this change

We are trying to improve the performance of filter pushdown in the Parquet reader

This is currently challening for at least a few reasons:

  1. The filtering is spread out through several structs (RowSelection, RowFilter, limit, offset).
  2. There is non trivial duplication between the sync and async_readers when preparing these selections

This makes the complexity of trying to implement more sophisticated strategies for iteration very hard (see @zhuqi-lucas 's comment here for example #7454 (comment))

The high level plan to improve filter performance is a combination of

  1. Saving some/all of the previously evaluated filter columns somewhere to avoid decoding them a second time
  2. Changing the representation of what rows are selected based on the results of applying RowFilter (aka Adaptive Parquet Predicate Pushdown Evaluation #5523)

This I would like a place to put all "what rows to read" information so we can implement more sophisticated strategies without getting too hung up.

Here is an example of how this code is used when caching results:

What changes are included in this PR?

  1. Pull the RowSelection manipulation code into ReadPlan and `ReadPlanBuilder
  2. Remove the duplication of logic between sync/async readers

In addition to preparing for faster filter pushdown, I also happen to think this makes the code easier to understand so it would be a useful change in its own right

Are there any user-facing changes?

No. This is entirely an internal code reorganization

@github-actions github-actions bot added the parquet Changes to the parquet crate label May 13, 2025
@zhuqi-lucas
Copy link
Contributor

This is a great improvement, thank you @alamb !

Draft / WIP. TODO Items:

  • Update async reader to do the same
  • Get tests passing
  • Make a a POC for saving filter results (so that it improves performance)
  • Run performance tests on this PR alone
  • Mark ready for review

Which issue does this PR close?

Rationale for this change

We are trying to improve the performance of filter pushdown in the Parquet reader

This is currently challening for at least a few reasons:

  1. The filtering is spread out through several structs (RowSelection, RowFilter, limit, offset).
  2. There is non trivial duplication between the sync and async_readers when preparing these selections

This makes the complexity of trying to implement more sophisticated strategies for iteration very hard (see @zhuqi-lucas 's comment here for example #7454 (comment))

The high level plan to improve filter performance is some combination of

  1. Saving some/all of the previously evaluated filter columns somewhere to avoid decoding them a second time
  2. Changing the representation of what rows are selected based on the results of applying RowFilter (aka Adaptive Parquet Predicate Pushdown Evaluation #5523)

This I would like a place to put all "what rows to read" information so we can implement more sophisticated strategies without getting too hung up.

What changes are included in this PR?

  1. Pull the RowSelection manipulation code into ReadPlan and `ReadPlanBuilder
  2. Remove the duplication of logic between sync/async readers

In addition to preparing for faster filter pushdown, I also happen to think this makes the code easier to understand so it would be a useful change in its own right

Are there any user-facing changes?

No

@alamb alamb force-pushed the alamb/reader_plan branch from 68e338b to f0f3e8e Compare May 14, 2025 12:37
@alamb alamb changed the title Introduce ReadPlan to encapsulate the calculation of what rows to decode Introduce ReadPlan to encapsulate the calculation of what parquet rows to decode May 14, 2025
@alamb
Copy link
Contributor Author

alamb commented May 14, 2025

This is a great improvement, thank you @alamb !

Thanks @zhuqi-lucas -- I would like to see if I can make a POC that shows I can use this structure to make the performance of the reader faster, which I hope to do over the next day or two

@alamb
Copy link
Contributor Author

alamb commented May 15, 2025

Update: I started on a POC of using this structure in this PR (the idea is to store filtered results on the ReadPlan)

@alamb

This comment was marked as outdated.

@alamb

This comment was marked as outdated.

@alamb

This comment was marked as outdated.

1 similar comment
@alamb

This comment was marked as outdated.

@alamb

This comment was marked as outdated.

@alamb

This comment was marked as outdated.

@alamb

This comment was marked as outdated.

@alamb

This comment was marked as outdated.

1 similar comment
@alamb

This comment was marked as outdated.

@alamb alamb force-pushed the alamb/reader_plan branch from 08c433e to 9026aa5 Compare May 16, 2025 15:35
@alamb

This comment was marked as outdated.

1 similar comment
@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖 ./gh_compare_arrow.sh Benchmark Script Running
Linux aal-dev 6.11.0-1013-gcp #13~24.04.1-Ubuntu SMP Wed Apr 2 16:34:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing alamb/reader_plan (9026aa5) to 1a5999a diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=alamb_reader_plan
Results will be posted here when complete

@alamb alamb force-pushed the alamb/reader_plan branch from 9026aa5 to 2a9a72b Compare May 16, 2025 15:45
@alamb alamb marked this pull request as ready for review May 16, 2025 15:49
@@ -679,38 +680,32 @@ impl<T: ChunkReader + 'static> ParquetRecordBatchReaderBuilder<T> {
};

let mut filter = self.filter;
let mut selection = self.selection;
let mut plan_builder = ReadPlanBuilder::new(batch_size).with_selection(self.selection);
Copy link
Contributor Author

@alamb alamb May 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The high level idea is to avoid manipulating the RowSelection directly in the APIs and instead manipulate them via ReadPlanBuilder / ReadPlan

The reason to encapsulate them in a new struct is to make it feasible to add additional complexity such as cached filter results and better filter row representations

This PR simply moves code around -- it does not intended to change any of the actual logic yet

@@ -814,9 +807,10 @@ impl ParquetRecordBatchReader {
/// simplify error handling with `?`
fn next_inner(&mut self) -> Result<Option<RecordBatch>> {
let mut read_records = 0;
match self.selection.as_mut() {
let batch_size = self.batch_size();
match self.read_plan.selection_mut() {
Copy link
Contributor Author

@alamb alamb May 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea is in future PRs we will change this control loop so it can use BooleanArray when that is a more efficient representation. Specifically, I think we can follow the model @zhuqi-lucas did in #7454

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @alamb , the POC for the adaptive predicate pushdown based this PR is good:

#7524 (comment)


/// Returns `true` if `selection` is `None` or selects some rows
pub(crate) fn selects_any(selection: Option<&RowSelection>) -> bool {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this code is moved into ReadPlanBuilder

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

I think this PR is ready for review. I think @zhuqi-lucas has reviewed it though may want to do so again

Maybe @XiangpengHao , @Dandandan or @etseidl could be interested in reviewing as well

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖: Benchmark completed

Details

group                                alamb_reader_plan                      main
-----                                -----------------                      ----
arrow_reader_clickbench/async/Q1     1.00      2.4±0.02ms        ? ?/sec    1.00      2.4±0.01ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.00     13.7±0.20ms        ? ?/sec    1.03     14.2±0.13ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     15.6±0.12ms        ? ?/sec    1.03     16.1±0.12ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.03     38.8±0.23ms        ? ?/sec    1.00     37.7±0.37ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.03     52.7±0.45ms        ? ?/sec    1.00     51.3±0.41ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.02     50.1±0.34ms        ? ?/sec    1.00     49.2±0.36ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.1±0.06ms        ? ?/sec    1.00      5.1±0.08ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.02    162.6±0.78ms        ? ?/sec    1.00    158.8±1.62ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.11    225.8±0.91ms        ? ?/sec    1.00    203.4±1.10ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.26    500.2±2.15ms        ? ?/sec    1.00    395.9±1.66ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.00   488.8±10.26ms        ? ?/sec    1.00    491.0±6.70ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     57.9±0.91ms        ? ?/sec    1.00     57.9±0.73ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.02    165.9±1.00ms        ? ?/sec    1.00    161.9±0.98ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.03    163.8±0.83ms        ? ?/sec    1.00    159.1±1.11ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.00     64.7±0.39ms        ? ?/sec    1.00     64.8±0.46ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.03    170.3±0.81ms        ? ?/sec    1.00    166.0±0.98ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.04    103.4±0.62ms        ? ?/sec    1.00     99.0±0.50ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     39.1±0.23ms        ? ?/sec    1.01     39.4±0.86ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.01     48.6±0.37ms        ? ?/sec    1.00     48.2±0.35ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.01     53.8±0.53ms        ? ?/sec    1.00     53.4±0.55ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.01     40.7±0.40ms        ? ?/sec    1.00     40.5±0.40ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     14.5±0.10ms        ? ?/sec    1.00     14.5±0.18ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.2±0.00ms        ? ?/sec    1.00      2.2±0.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.00     12.6±0.07ms        ? ?/sec    1.03     13.0±0.09ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.00     14.5±0.05ms        ? ?/sec    1.03     14.9±0.13ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.05     41.0±0.24ms        ? ?/sec    1.00     38.9±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.03     53.9±0.50ms        ? ?/sec    1.00     52.1±0.47ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.02     52.1±0.40ms        ? ?/sec    1.00     50.9±0.38ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.3±0.02ms        ? ?/sec    1.01      4.3±0.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.02    178.9±1.04ms        ? ?/sec    1.00    175.0±0.82ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.03    236.9±1.79ms        ? ?/sec    1.00    230.3±1.39ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.04    490.9±2.36ms        ? ?/sec    1.00    472.0±3.36ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.01   439.0±17.33ms        ? ?/sec    1.00   433.8±14.83ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     55.0±0.69ms        ? ?/sec    1.01     55.4±0.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.03    156.8±1.01ms        ? ?/sec    1.00    151.8±0.88ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.04    155.7±1.26ms        ? ?/sec    1.00    150.0±0.85ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.01     63.0±0.35ms        ? ?/sec    1.00     62.5±0.34ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.02    160.3±1.03ms        ? ?/sec    1.00    157.3±1.30ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.04     95.6±0.55ms        ? ?/sec    1.00     92.0±0.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     31.9±0.20ms        ? ?/sec    1.00     31.9±0.27ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.02     34.8±0.30ms        ? ?/sec    1.00     34.2±0.30ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     50.1±0.37ms        ? ?/sec    1.00     50.2±0.48ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     37.5±0.28ms        ? ?/sec    1.01     37.8±0.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.00     13.6±0.08ms        ? ?/sec    1.00     13.6±0.07ms        ? ?/sec

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖 ./gh_compare_arrow.sh Benchmark Script Running
Linux aal-dev 6.11.0-1013-gcp #13~24.04.1-Ubuntu SMP Wed Apr 2 16:34:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing alamb/reader_plan (2a9a72b) to 1a5999a diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async --bench arrow_reader_row_filter
BENCH_FILTER=
BENCH_BRANCH_NAME=alamb_reader_plan
Results will be posted here when complete

@etseidl etseidl self-requested a review May 16, 2025 16:09
@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖: Benchmark completed

Details

group                                                                                 alamb_reader_plan                      main
-----                                                                                 -----------------                      ----
arrow_reader_row_filter/Composite/all_columns/async                                   1.00  1685.8±11.42µs        ? ?/sec    1.00  1691.0±11.95µs        ? ?/sec
arrow_reader_row_filter/Composite/all_columns/sync                                    1.00  1895.4±12.58µs        ? ?/sec    1.00  1895.5±19.54µs        ? ?/sec
arrow_reader_row_filter/Composite/exclude_filter_column/async                         1.01   1347.0±8.73µs        ? ?/sec    1.00   1339.1±7.30µs        ? ?/sec
arrow_reader_row_filter/Composite/exclude_filter_column/sync                          1.02  1486.9±10.67µs        ? ?/sec    1.00   1459.0±9.89µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/all_columns/async                1.01   1280.1±8.39µs        ? ?/sec    1.00  1271.5±10.43µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/all_columns/sync                 1.01  1432.1±10.06µs        ? ?/sec    1.00   1413.7±9.07µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/exclude_filter_column/async      1.00   1152.3±6.35µs        ? ?/sec    1.00   1147.5±6.76µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/exclude_filter_column/sync       1.02   1301.8±8.48µs        ? ?/sec    1.00  1278.7±18.22µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/all_columns/async              1.00      4.8±0.02ms        ? ?/sec    1.05      5.0±0.03ms        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/all_columns/sync               1.00      4.8±0.02ms        ? ?/sec    1.01      4.9±0.02ms        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/exclude_filter_column/async    1.00      4.0±0.02ms        ? ?/sec    1.05      4.2±0.02ms        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/exclude_filter_column/sync     1.00      4.0±0.01ms        ? ?/sec    1.00      4.0±0.02ms        ? ?/sec
arrow_reader_row_filter/PointLookup/all_columns/async                                 1.01    873.6±5.76µs        ? ?/sec    1.00    867.5±6.80µs        ? ?/sec
arrow_reader_row_filter/PointLookup/all_columns/sync                                  1.02   1013.9±6.43µs        ? ?/sec    1.00    992.1±6.65µs        ? ?/sec
arrow_reader_row_filter/PointLookup/exclude_filter_column/async                       1.01    867.3±6.22µs        ? ?/sec    1.00    862.7±4.13µs        ? ?/sec
arrow_reader_row_filter/PointLookup/exclude_filter_column/sync                        1.02   1000.7±7.63µs        ? ?/sec    1.00    983.2±4.40µs        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/all_columns/async                        1.01  1944.9±27.92µs        ? ?/sec    1.00  1923.8±10.62µs        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/all_columns/sync                         1.01      2.1±0.01ms        ? ?/sec    1.00      2.1±0.01ms        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/exclude_filter_column/async              1.00   1615.9±9.04µs        ? ?/sec    1.00   1618.0±8.11µs        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/exclude_filter_column/sync               1.02   1726.9±6.38µs        ? ?/sec    1.00   1699.5±7.40µs        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/all_columns/async                        1.00      2.0±0.01ms        ? ?/sec    1.00      2.0±0.01ms        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/all_columns/sync                         1.00      2.2±0.01ms        ? ?/sec    1.02      2.2±0.02ms        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/exclude_filter_column/async              1.00   1775.7±6.79µs        ? ?/sec    1.01  1793.0±13.10µs        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/exclude_filter_column/sync               1.00   1920.4±9.13µs        ? ?/sec    1.01  1936.4±24.30µs        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/all_columns/async                      1.00  1948.6±14.15µs        ? ?/sec    1.00  1952.7±11.17µs        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/all_columns/sync                       1.01      2.1±0.01ms        ? ?/sec    1.00      2.1±0.01ms        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/exclude_filter_column/async            1.00  1613.6±11.86µs        ? ?/sec    1.01   1636.2±9.41µs        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/exclude_filter_column/sync             1.01   1731.1±7.51µs        ? ?/sec    1.00  1721.1±19.91µs        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/all_columns/async                            1.00      5.8±0.03ms        ? ?/sec    1.03      6.0±0.02ms        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/all_columns/sync                             1.00      5.8±0.02ms        ? ?/sec    1.01      5.9±0.02ms        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/exclude_filter_column/async                  1.00      4.4±0.02ms        ? ?/sec    1.04      4.5±0.01ms        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/exclude_filter_column/sync                   1.00      4.4±0.01ms        ? ?/sec    1.01      4.4±0.01ms        ? ?/sec

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖 ./gh_compare_arrow.sh Benchmark Script Running
Linux aal-dev 6.11.0-1013-gcp #13~24.04.1-Ubuntu SMP Wed Apr 2 16:34:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing alamb/reader_plan (2a9a72b) to 1a5999a diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=alamb_reader_plan
Results will be posted here when complete

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖 ./gh_compare_arrow.sh Benchmark Script Running
Linux aal-dev 6.11.0-1013-gcp #13~24.04.1-Ubuntu SMP Wed Apr 2 16:34:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing alamb/reader_plan (2a9a72b) to 1a5999a diff
BENCH_NAME=arrow_reader_clickbench
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader_clickbench
BENCH_FILTER=
BENCH_BRANCH_NAME=alamb_reader_plan
Results will be posted here when complete

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖: Benchmark completed

Details

group                                alamb_reader_plan                      main
-----                                -----------------                      ----
arrow_reader_clickbench/async/Q1     1.00      2.4±0.01ms        ? ?/sec    1.00      2.4±0.01ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.02     14.1±0.19ms        ? ?/sec    1.00     13.9±0.12ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.03     16.3±0.26ms        ? ?/sec    1.00     15.8±0.12ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.00     38.0±0.29ms        ? ?/sec    1.03     38.9±0.29ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.00     52.1±0.90ms        ? ?/sec    1.01     52.8±0.38ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.00     50.0±0.51ms        ? ?/sec    1.01     50.5±0.28ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.07      5.4±0.14ms        ? ?/sec    1.00      5.1±0.06ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.00    160.1±0.97ms        ? ?/sec    1.02    163.4±0.89ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.00    210.2±1.27ms        ? ?/sec    1.08    227.8±1.07ms        ? ?/sec
arrow_reader_clickbench/async/Q22    1.00    467.0±1.89ms        ? ?/sec    1.09    506.9±1.91ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.00   489.2±16.25ms        ? ?/sec    1.03   506.3±11.57ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.00     57.6±0.48ms        ? ?/sec    1.03     59.2±1.63ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.00    163.5±1.93ms        ? ?/sec    1.02    166.3±1.25ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.00    161.7±1.14ms        ? ?/sec    1.02    164.8±1.00ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.02     65.5±0.44ms        ? ?/sec    1.00     64.2±0.45ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.00    165.5±0.76ms        ? ?/sec    1.03    169.8±1.11ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.00     99.8±0.50ms        ? ?/sec    1.03    103.1±0.46ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     38.9±0.44ms        ? ?/sec    1.00     38.8±0.30ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     48.6±0.73ms        ? ?/sec    1.00     48.8±0.27ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.01     54.1±0.99ms        ? ?/sec    1.00     53.6±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.01     40.3±0.24ms        ? ?/sec    1.00     40.1±0.39ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     14.4±0.12ms        ? ?/sec    1.01     14.5±0.14ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      2.2±0.00ms        ? ?/sec    1.00      2.2±0.01ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.03     13.0±0.09ms        ? ?/sec    1.00     12.6±0.07ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.02     14.8±0.07ms        ? ?/sec    1.00     14.5±0.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.00     36.5±0.46ms        ? ?/sec    1.12     40.8±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.00     49.2±0.78ms        ? ?/sec    1.08     53.3±0.51ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.00     47.5±0.30ms        ? ?/sec    1.10     52.0±0.44ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.01      4.3±0.02ms        ? ?/sec    1.00      4.2±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.00    173.7±0.60ms        ? ?/sec    1.03    178.6±0.58ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.00    230.0±1.47ms        ? ?/sec    1.04    238.5±1.38ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.00    473.7±2.99ms        ? ?/sec    1.05    497.6±3.32ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.00   437.6±14.52ms        ? ?/sec    1.03   452.0±14.59ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.00     53.6±0.64ms        ? ?/sec    1.05     56.1±1.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.00    151.4±1.22ms        ? ?/sec    1.03    156.5±0.83ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.00    150.8±0.91ms        ? ?/sec    1.02    154.4±0.66ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.00     62.6±0.41ms        ? ?/sec    1.01     63.4±0.48ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.00    155.5±1.02ms        ? ?/sec    1.03    159.5±0.89ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.00     91.8±0.57ms        ? ?/sec    1.04     95.6±0.47ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.00     31.9±0.21ms        ? ?/sec    1.00     32.1±0.26ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.00     34.4±0.31ms        ? ?/sec    1.02     35.2±0.39ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.01     50.8±2.38ms        ? ?/sec    1.00     50.1±0.50ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.01     37.8±0.28ms        ? ?/sec    1.00     37.3±0.28ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.01     13.8±0.14ms        ? ?/sec    1.00     13.7±0.08ms        ? ?/sec

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖 ./gh_compare_arrow.sh Benchmark Script Running
Linux aal-dev 6.11.0-1013-gcp #13~24.04.1-Ubuntu SMP Wed Apr 2 16:34:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing alamb/reader_plan (2a9a72b) to 1a5999a diff
BENCH_NAME=arrow_reader_row_filter
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader_row_filter
BENCH_FILTER=
BENCH_BRANCH_NAME=alamb_reader_plan
Results will be posted here when complete

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖: Benchmark completed

Details

group                                                                                 alamb_reader_plan                      main
-----                                                                                 -----------------                      ----
arrow_reader_row_filter/Composite/all_columns/async                                   1.02  1711.6±15.34µs        ? ?/sec    1.00  1675.0±11.30µs        ? ?/sec
arrow_reader_row_filter/Composite/all_columns/sync                                    1.02  1934.9±16.95µs        ? ?/sec    1.00  1903.4±16.54µs        ? ?/sec
arrow_reader_row_filter/Composite/exclude_filter_column/async                         1.01  1357.6±10.34µs        ? ?/sec    1.00   1343.0±6.55µs        ? ?/sec
arrow_reader_row_filter/Composite/exclude_filter_column/sync                          1.00  1492.2±11.66µs        ? ?/sec    1.00   1489.7±7.90µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/all_columns/async                1.00   1265.1±5.65µs        ? ?/sec    1.01   1273.5±8.52µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/all_columns/sync                 1.00   1431.9±8.47µs        ? ?/sec    1.00   1425.9±7.67µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/exclude_filter_column/async      1.01   1161.5±9.16µs        ? ?/sec    1.00   1151.0±6.49µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveClustered/exclude_filter_column/sync       1.00  1291.5±12.15µs        ? ?/sec    1.00   1286.0±9.66µs        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/all_columns/async              1.02      5.0±0.02ms        ? ?/sec    1.00      4.9±0.01ms        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/all_columns/sync               1.02      4.9±0.02ms        ? ?/sec    1.00      4.9±0.02ms        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/exclude_filter_column/async    1.02      4.1±0.04ms        ? ?/sec    1.00      4.0±0.01ms        ? ?/sec
arrow_reader_row_filter/ModeratelySelectiveUnclustered/exclude_filter_column/sync     1.02      4.1±0.01ms        ? ?/sec    1.00      4.0±0.01ms        ? ?/sec
arrow_reader_row_filter/PointLookup/all_columns/async                                 1.02    879.6±8.32µs        ? ?/sec    1.00    866.4±7.42µs        ? ?/sec
arrow_reader_row_filter/PointLookup/all_columns/sync                                  1.00    998.7±6.00µs        ? ?/sec    1.00    994.1±8.93µs        ? ?/sec
arrow_reader_row_filter/PointLookup/exclude_filter_column/async                       1.02    872.4±9.41µs        ? ?/sec    1.00    856.4±4.23µs        ? ?/sec
arrow_reader_row_filter/PointLookup/exclude_filter_column/sync                        1.02    992.5±7.93µs        ? ?/sec    1.00   977.7±12.31µs        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/all_columns/async                        1.01  1944.8±17.36µs        ? ?/sec    1.00  1918.7±10.99µs        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/all_columns/sync                         1.01      2.1±0.01ms        ? ?/sec    1.00      2.1±0.02ms        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/exclude_filter_column/async              1.01  1637.6±12.23µs        ? ?/sec    1.00  1622.1±11.06µs        ? ?/sec
arrow_reader_row_filter/SelectiveUnclustered/exclude_filter_column/sync               1.02  1727.8±11.09µs        ? ?/sec    1.00   1701.0±8.52µs        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/all_columns/async                        1.01      2.1±0.01ms        ? ?/sec    1.00      2.0±0.01ms        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/all_columns/sync                         1.01      2.2±0.02ms        ? ?/sec    1.00      2.2±0.01ms        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/exclude_filter_column/async              1.00  1800.1±12.55µs        ? ?/sec    1.00  1801.3±14.38µs        ? ?/sec
arrow_reader_row_filter/UnselectiveClustered/exclude_filter_column/sync               1.00  1937.9±16.81µs        ? ?/sec    1.01   1957.2±6.74µs        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/all_columns/async                      1.02   1945.2±8.70µs        ? ?/sec    1.00   1915.0±7.68µs        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/all_columns/sync                       1.01      2.1±0.02ms        ? ?/sec    1.00      2.1±0.02ms        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/exclude_filter_column/async            1.02   1635.4±7.69µs        ? ?/sec    1.00   1607.7±7.99µs        ? ?/sec
arrow_reader_row_filter/UnselectiveUnclustered/exclude_filter_column/sync             1.00   1736.9±8.79µs        ? ?/sec    1.00   1742.7±7.34µs        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/all_columns/async                            1.00      5.9±0.02ms        ? ?/sec    1.00      5.9±0.02ms        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/all_columns/sync                             1.01      6.0±0.03ms        ? ?/sec    1.00      5.9±0.02ms        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/exclude_filter_column/async                  1.00      4.4±0.01ms        ? ?/sec    1.01      4.5±0.02ms        ? ?/sec
arrow_reader_row_filter/Utf8ViewNonEmpty/exclude_filter_column/sync                   1.00      4.4±0.03ms        ? ?/sec    1.01      4.5±0.02ms        ? ?/sec

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖 ./gh_compare_arrow.sh Benchmark Script Running
Linux aal-dev 6.11.0-1013-gcp #13~24.04.1-Ubuntu SMP Wed Apr 2 16:34:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing alamb/reader_plan (2a9a72b) to 1a5999a diff
BENCH_NAME=arrow_reader
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental --bench arrow_reader
BENCH_FILTER=
BENCH_BRANCH_NAME=alamb_reader_plan
Results will be posted here when complete

@alamb
Copy link
Contributor Author

alamb commented May 16, 2025

🤖: Benchmark completed

Details

group                                                                                                      alamb_reader_plan                      main
-----                                                                                                      -----------------                      ----
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                           1.05   1352.0±7.92µs        ? ?/sec    1.00   1290.9±1.92µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                          1.04   1352.0±7.35µs        ? ?/sec    1.00   1298.1±6.39µs        ? ?/sec
arrow_array_reader/BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                            1.05   1361.3±1.88µs        ? ?/sec    1.00   1298.6±2.23µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, mandatory, no NULLs                                     1.00    504.7±3.10µs        ? ?/sec    1.00    504.7±3.59µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, half NULLs                                    1.03    695.5±2.15µs        ? ?/sec    1.00    672.1±1.93µs        ? ?/sec
arrow_array_reader/BinaryArray/dictionary encoded, optional, no NULLs                                      1.00   514.5±13.40µs        ? ?/sec    1.01    520.8±3.98µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, mandatory, no NULLs                                          1.05    612.3±2.43µs        ? ?/sec    1.00    580.4±1.52µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, half NULLs                                         1.04    778.7±3.08µs        ? ?/sec    1.00    751.1±2.97µs        ? ?/sec
arrow_array_reader/BinaryArray/plain encoded, optional, no NULLs                                           1.05    626.3±3.01µs        ? ?/sec    1.00    594.2±3.31µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    239.2±2.58µs        ? ?/sec    1.00    240.1±3.42µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, half NULLs                                1.00    228.1±0.57µs        ? ?/sec    1.01    229.9±0.78µs        ? ?/sec
arrow_array_reader/BinaryViewArray/dictionary encoded, optional, no NULLs                                  1.01    245.5±3.52µs        ? ?/sec    1.00    243.9±2.98µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs                                      1.01    336.5±2.18µs        ? ?/sec    1.00    334.0±1.46µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, mandatory, no NULLs, short string                        1.00    304.6±1.09µs        ? ?/sec    1.02    310.2±1.10µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, half NULLs                                     1.00    283.1±1.01µs        ? ?/sec    1.02    287.7±0.93µs        ? ?/sec
arrow_array_reader/BinaryViewArray/plain encoded, optional, no NULLs                                       1.01    345.0±1.46µs        ? ?/sec    1.00    342.8±1.08µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs     1.04   1071.5±2.49µs        ? ?/sec    1.00   1027.9±2.76µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, half NULLs    1.01    898.6±3.39µs        ? ?/sec    1.00    892.4±2.76µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/byte_stream_split encoded, optional, no NULLs      1.05  1083.7±25.64µs        ? ?/sec    1.00   1034.2±2.89µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, mandatory, no NULLs                 1.00    400.6±2.62µs        ? ?/sec    1.04    415.2±3.95µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, half NULLs                1.00    549.5±3.29µs        ? ?/sec    1.02    563.1±2.44µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Decimal128Array/plain encoded, optional, no NULLs                  1.00    406.4±2.90µs        ? ?/sec    1.03    418.7±2.23µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, mandatory, no NULLs        1.05    161.0±0.57µs        ? ?/sec    1.00    153.0±0.47µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, half NULLs       1.00    247.9±0.61µs        ? ?/sec    1.16    287.2±0.46µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/byte_stream_split encoded, optional, no NULLs         1.05    166.3±0.31µs        ? ?/sec    1.00    158.5±0.42µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, mandatory, no NULLs                    1.00     77.4±0.16µs        ? ?/sec    1.00     77.6±0.35µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, half NULLs                   1.00    203.9±0.44µs        ? ?/sec    1.22    249.4±0.43µs        ? ?/sec
arrow_array_reader/FIXED_LEN_BYTE_ARRAY/Float16Array/plain encoded, optional, no NULLs                     1.00     81.8±0.27µs        ? ?/sec    1.00     81.7±0.21µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, mandatory, no NULLs                    1.06    735.7±1.46µs        ? ?/sec    1.00    691.8±1.99µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, half NULLs                   1.04    546.3±1.73µs        ? ?/sec    1.00    527.4±1.54µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/byte_stream_split encoded, optional, no NULLs                     1.06    742.0±6.17µs        ? ?/sec    1.00    700.7±1.90µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, mandatory, no NULLs                                1.00     54.3±4.45µs        ? ?/sec    1.27     69.1±5.07µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, half NULLs                               1.00    212.3±1.10µs        ? ?/sec    1.05    223.6±1.70µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(16)/plain encoded, optional, no NULLs                                 1.00     62.7±5.23µs        ? ?/sec    1.12     70.0±4.75µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, mandatory, no NULLs                     1.11     94.2±0.39µs        ? ?/sec    1.00     85.1±0.24µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, half NULLs                    1.00    180.4±0.35µs        ? ?/sec    1.21    219.0±1.21µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/byte_stream_split encoded, optional, no NULLs                      1.08     99.4±0.46µs        ? ?/sec    1.00     91.7±0.23µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, mandatory, no NULLs                                 1.02      9.5±0.22µs        ? ?/sec    1.00      9.3±0.18µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, half NULLs                                1.00    139.8±0.25µs        ? ?/sec    1.29    180.8±0.57µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(2)/plain encoded, optional, no NULLs                                  1.00     14.6±0.17µs        ? ?/sec    1.01     14.6±0.14µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, mandatory, no NULLs                     1.08    183.7±0.48µs        ? ?/sec    1.00    170.4±0.85µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, half NULLs                    1.00    274.4±1.86µs        ? ?/sec    1.20    329.2±0.86µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/byte_stream_split encoded, optional, no NULLs                      1.08    189.5±0.54µs        ? ?/sec    1.00    175.4±0.56µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, mandatory, no NULLs                                 1.00     13.0±0.16µs        ? ?/sec    1.04     13.6±0.25µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, half NULLs                                1.00    191.5±0.46µs        ? ?/sec    1.32    252.4±0.55µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(4)/plain encoded, optional, no NULLs                                  1.00     19.8±0.38µs        ? ?/sec    1.01     20.0±0.27µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, mandatory, no NULLs                     1.08    365.9±0.70µs        ? ?/sec    1.00    340.1±0.64µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, half NULLs                    1.01    346.3±0.87µs        ? ?/sec    1.00    342.8±1.42µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/byte_stream_split encoded, optional, no NULLs                      1.07    372.7±0.79µs        ? ?/sec    1.00    347.3±0.68µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, mandatory, no NULLs                                 1.03     26.4±0.37µs        ? ?/sec    1.00     25.6±0.39µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, half NULLs                                1.00    178.3±0.51µs        ? ?/sec    1.05    187.6±0.61µs        ? ?/sec
arrow_array_reader/FixedLenByteArray(8)/plain encoded, optional, no NULLs                                  1.00     32.4±0.38µs        ? ?/sec    1.02     33.2±0.37µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.00    129.2±0.46µs        ? ?/sec    1.00    128.8±0.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    140.3±0.59µs        ? ?/sec    1.00    139.9±0.32µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed skip, optional, no NULLs                            1.00    130.7±0.40µs        ? ?/sec    1.01    132.2±0.32µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    185.4±1.70µs        ? ?/sec    1.03    190.9±0.37µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, half NULLs                               1.00    236.8±0.91µs        ? ?/sec    1.01    239.0±0.77µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/binary packed, optional, no NULLs                                 1.00    189.8±0.38µs        ? ?/sec    1.04    196.8±0.40µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00     75.8±0.32µs        ? ?/sec    1.03     77.8±0.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    180.8±0.50µs        ? ?/sec    1.00    179.9±0.38µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00     82.5±0.25µs        ? ?/sec    1.01     83.5±0.18µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.01    138.6±0.50µs        ? ?/sec    1.00    137.5±0.49µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, half NULLs                          1.01    214.1±2.35µs        ? ?/sec    1.00    212.7±0.37µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    143.1±0.28µs        ? ?/sec    1.00    142.5±0.34µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, mandatory, no NULLs                                1.00     73.2±0.16µs        ? ?/sec    1.05     76.9±0.45µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, half NULLs                               1.00    177.3±0.73µs        ? ?/sec    1.00    177.8±0.77µs        ? ?/sec
arrow_array_reader/INT32/Decimal128Array/plain encoded, optional, no NULLs                                 1.00     79.2±0.92µs        ? ?/sec    1.01     80.0±0.35µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, mandatory, no NULLs                           1.01    110.3±0.28µs        ? ?/sec    1.00    109.4±0.22µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, half NULLs                          1.00    140.2±0.30µs        ? ?/sec    1.00    140.4±0.29µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed skip, optional, no NULLs                            1.01    113.2±0.41µs        ? ?/sec    1.00    112.5±0.46µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, mandatory, no NULLs                                1.00    163.2±0.43µs        ? ?/sec    1.00    162.7±0.41µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, half NULLs                               1.01    247.8±0.62µs        ? ?/sec    1.00    244.3±1.20µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/binary packed, optional, no NULLs                                 1.00    168.6±0.54µs        ? ?/sec    1.00    168.0±0.35µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, mandatory, no NULLs                    1.00    204.4±0.63µs        ? ?/sec    1.00    203.6±0.34µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, half NULLs                   1.00    262.3±0.55µs        ? ?/sec    1.00    261.9±0.53µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/byte_stream_split encoded, optional, no NULLs                     1.00    210.3±0.54µs        ? ?/sec    1.01    212.5±0.68µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, mandatory, no NULLs                           1.00    143.7±0.68µs        ? ?/sec    1.00    144.0±0.53µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, half NULLs                          1.01    230.3±0.33µs        ? ?/sec    1.00    228.9±0.57µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/dictionary encoded, optional, no NULLs                            1.00    149.7±0.46µs        ? ?/sec    1.00    149.7±0.50µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, mandatory, no NULLs                                1.06    111.5±2.16µs        ? ?/sec    1.00    105.4±0.49µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, half NULLs                               1.01    210.6±3.32µs        ? ?/sec    1.00    207.9±1.00µs        ? ?/sec
arrow_array_reader/INT64/Decimal128Array/plain encoded, optional, no NULLs                                 1.06    114.8±1.52µs        ? ?/sec    1.00    108.7±1.37µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, mandatory, no NULLs                                      1.00    101.9±0.18µs        ? ?/sec    1.00    101.8±0.19µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, half NULLs                                     1.01    118.8±0.18µs        ? ?/sec    1.00    118.0±0.34µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed skip, optional, no NULLs                                       1.01    105.8±0.16µs        ? ?/sec    1.00    105.2±0.22µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, mandatory, no NULLs                                           1.00    143.0±0.28µs        ? ?/sec    1.00    142.4±0.28µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, half NULLs                                          1.00    197.0±0.75µs        ? ?/sec    1.00    196.8±0.45µs        ? ?/sec
arrow_array_reader/Int16Array/binary packed, optional, no NULLs                                            1.00    148.3±0.52µs        ? ?/sec    1.00    147.9±0.27µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     44.3±0.35µs        ? ?/sec    1.01     44.8±0.21µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, half NULLs                              1.00    143.9±0.30µs        ? ?/sec    1.00    144.0±0.38µs        ? ?/sec
arrow_array_reader/Int16Array/byte_stream_split encoded, optional, no NULLs                                1.01     49.3±0.11µs        ? ?/sec    1.00     48.6±0.06µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, mandatory, no NULLs                                      1.01    105.6±0.29µs        ? ?/sec    1.00    105.0±0.30µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, half NULLs                                     1.01    179.2±0.27µs        ? ?/sec    1.00    177.6±0.41µs        ? ?/sec
arrow_array_reader/Int16Array/dictionary encoded, optional, no NULLs                                       1.01    110.5±0.35µs        ? ?/sec    1.00    109.7±0.30µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, mandatory, no NULLs                                           1.00     38.6±0.11µs        ? ?/sec    1.00     38.6±0.11µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, half NULLs                                          1.01    142.6±0.43µs        ? ?/sec    1.00    141.4±0.33µs        ? ?/sec
arrow_array_reader/Int16Array/plain encoded, optional, no NULLs                                            1.01     43.8±0.16µs        ? ?/sec    1.00     43.2±0.14µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, mandatory, no NULLs                                      1.00    100.8±0.41µs        ? ?/sec    1.03    103.8±0.31µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, half NULLs                                     1.00    113.2±0.53µs        ? ?/sec    1.01    113.9±0.85µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed skip, optional, no NULLs                                       1.00    103.7±0.32µs        ? ?/sec    1.02    105.7±0.24µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, mandatory, no NULLs                                           1.00    132.1±0.26µs        ? ?/sec    1.05    138.2±0.15µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, half NULLs                                          1.00    183.6±0.29µs        ? ?/sec    1.00    184.2±0.44µs        ? ?/sec
arrow_array_reader/Int32Array/binary packed, optional, no NULLs                                            1.00    137.5±3.08µs        ? ?/sec    1.04    142.9±0.28µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     25.3±0.28µs        ? ?/sec    1.07     27.1±0.44µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, half NULLs                              1.00    127.7±0.43µs        ? ?/sec    1.01    128.8±0.29µs        ? ?/sec
arrow_array_reader/Int32Array/byte_stream_split encoded, optional, no NULLs                                1.00     30.5±0.27µs        ? ?/sec    1.03     31.4±0.21µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, mandatory, no NULLs                                      1.00     86.6±0.26µs        ? ?/sec    1.00     86.9±0.47µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, half NULLs                                     1.01    162.0±0.48µs        ? ?/sec    1.00    160.9±1.94µs        ? ?/sec
arrow_array_reader/Int32Array/dictionary encoded, optional, no NULLs                                       1.00     90.9±0.27µs        ? ?/sec    1.00     91.4±0.35µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, mandatory, no NULLs                                           1.01     18.3±0.44µs        ? ?/sec    1.00     18.2±0.37µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, half NULLs                                          1.03    123.6±0.26µs        ? ?/sec    1.00    120.2±0.23µs        ? ?/sec
arrow_array_reader/Int32Array/plain encoded, optional, no NULLs                                            1.03     25.6±0.43µs        ? ?/sec    1.00     24.8±0.32µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, mandatory, no NULLs                                      1.00     82.1±0.30µs        ? ?/sec    1.00     82.0±0.26µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, half NULLs                                     1.00    109.9±0.33µs        ? ?/sec    1.00    110.0±0.39µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed skip, optional, no NULLs                                       1.00     85.0±0.26µs        ? ?/sec    1.00     84.7±0.40µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, mandatory, no NULLs                                           1.00    109.6±0.36µs        ? ?/sec    1.02    111.7±0.54µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, half NULLs                                          1.00    183.3±0.53µs        ? ?/sec    1.00    182.9±0.59µs        ? ?/sec
arrow_array_reader/Int64Array/binary packed, optional, no NULLs                                            1.00    112.6±0.38µs        ? ?/sec    1.02    114.3±0.45µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, mandatory, no NULLs                               1.01    150.0±0.36µs        ? ?/sec    1.00    149.1±0.51µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, half NULLs                              1.00    206.5±0.49µs        ? ?/sec    1.00    206.6±0.55µs        ? ?/sec
arrow_array_reader/Int64Array/byte_stream_split encoded, optional, no NULLs                                1.00    155.2±0.42µs        ? ?/sec    1.00    154.4±0.53µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, mandatory, no NULLs                                      1.00     92.6±0.83µs        ? ?/sec    1.00     92.4±0.52µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, half NULLs                                     1.00    175.2±0.39µs        ? ?/sec    1.00    174.9±0.90µs        ? ?/sec
arrow_array_reader/Int64Array/dictionary encoded, optional, no NULLs                                       1.01     97.5±0.51µs        ? ?/sec    1.00     97.1±0.53µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, mandatory, no NULLs                                           1.00     41.9±1.86µs        ? ?/sec    1.15     48.0±2.76µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, half NULLs                                          1.01    150.7±0.67µs        ? ?/sec    1.00    149.4±0.86µs        ? ?/sec
arrow_array_reader/Int64Array/plain encoded, optional, no NULLs                                            1.00     49.1±2.72µs        ? ?/sec    1.11     54.7±1.83µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, mandatory, no NULLs                                       1.00     97.1±0.15µs        ? ?/sec    1.09    105.9±3.57µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, half NULLs                                      1.00    113.8±0.14µs        ? ?/sec    1.03    116.8±0.26µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed skip, optional, no NULLs                                        1.00    100.7±0.17µs        ? ?/sec    1.07    107.8±0.25µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, mandatory, no NULLs                                            1.00    135.4±0.32µs        ? ?/sec    1.07    144.8±1.42µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, half NULLs                                           1.00    187.8±0.37µs        ? ?/sec    1.02    191.9±0.55µs        ? ?/sec
arrow_array_reader/Int8Array/binary packed, optional, no NULLs                                             1.00    140.5±0.40µs        ? ?/sec    1.06    149.0±0.31µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, mandatory, no NULLs                                1.00     36.7±0.11µs        ? ?/sec    1.01     37.0±0.26µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, half NULLs                               1.02    137.5±0.29µs        ? ?/sec    1.00    134.3±0.25µs        ? ?/sec
arrow_array_reader/Int8Array/byte_stream_split encoded, optional, no NULLs                                 1.00     40.2±0.09µs        ? ?/sec    1.02     41.0±0.20µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, mandatory, no NULLs                                       1.01     97.7±0.29µs        ? ?/sec    1.00     96.8±0.24µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, half NULLs                                      1.01    172.0±0.94µs        ? ?/sec    1.00    169.7±0.26µs        ? ?/sec
arrow_array_reader/Int8Array/dictionary encoded, optional, no NULLs                                        1.01    102.6±0.61µs        ? ?/sec    1.00    101.7±0.90µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, mandatory, no NULLs                                            1.00     30.9±0.09µs        ? ?/sec    1.01     31.2±0.16µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, half NULLs                                           1.01    133.6±0.26µs        ? ?/sec    1.00    132.6±0.37µs        ? ?/sec
arrow_array_reader/Int8Array/plain encoded, optional, no NULLs                                             1.01     35.9±0.10µs        ? ?/sec    1.00     35.7±0.11µs        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings half NULLs                                     1.00      7.2±0.03ms        ? ?/sec    1.01      7.2±0.02ms        ? ?/sec
arrow_array_reader/ListArray/plain encoded optional strings no NULLs                                       1.01     13.0±0.12ms        ? ?/sec    1.00     12.9±0.14ms        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, mandatory, no NULLs                                     1.01    514.1±4.91µs        ? ?/sec    1.00    510.9±4.37µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, half NULLs                                    1.04    695.8±2.22µs        ? ?/sec    1.00    671.9±1.72µs        ? ?/sec
arrow_array_reader/StringArray/dictionary encoded, optional, no NULLs                                      1.01    520.2±6.41µs        ? ?/sec    1.00    516.1±6.68µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, mandatory, no NULLs                                          1.08    679.5±7.36µs        ? ?/sec    1.00   631.8±17.11µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, half NULLs                                         1.05    813.5±3.51µs        ? ?/sec    1.00    772.7±3.58µs        ? ?/sec
arrow_array_reader/StringArray/plain encoded, optional, no NULLs                                           1.07    686.6±2.68µs        ? ?/sec    1.00    641.9±2.71µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, mandatory, no NULLs                                1.01    321.5±1.00µs        ? ?/sec    1.00    318.9±0.99µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, half NULLs                               1.00    379.4±1.50µs        ? ?/sec    1.15    434.7±1.10µs        ? ?/sec
arrow_array_reader/StringDictionary/dictionary encoded, optional, no NULLs                                 1.01    327.5±0.79µs        ? ?/sec    1.00    325.4±1.07µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, mandatory, no NULLs                                 1.00    230.3±2.97µs        ? ?/sec    1.04    238.5±3.13µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, half NULLs                                1.00    220.3±0.86µs        ? ?/sec    1.00    220.0±0.67µs        ? ?/sec
arrow_array_reader/StringViewArray/dictionary encoded, optional, no NULLs                                  1.02    239.3±3.66µs        ? ?/sec    1.00    234.7±2.93µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, mandatory, no NULLs                                      1.00    367.7±1.18µs        ? ?/sec    1.11    407.1±1.52µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, half NULLs                                     1.00    298.9±0.83µs        ? ?/sec    1.07    319.6±0.73µs        ? ?/sec
arrow_array_reader/StringViewArray/plain encoded, optional, no NULLs                                       1.00    375.7±1.74µs        ? ?/sec    1.11    416.1±1.51µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, mandatory, no NULLs                                     1.01    109.9±0.15µs        ? ?/sec    1.00    109.3±0.21µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, half NULLs                                    1.00    122.0±0.31µs        ? ?/sec    1.00    121.7±0.36µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed skip, optional, no NULLs                                      1.02    113.3±0.21µs        ? ?/sec    1.00    111.4±0.23µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, mandatory, no NULLs                                          1.00    151.4±0.49µs        ? ?/sec    1.00    151.9±0.25µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, half NULLs                                         1.00    202.9±0.38µs        ? ?/sec    1.00    202.6±0.52µs        ? ?/sec
arrow_array_reader/UInt16Array/binary packed, optional, no NULLs                                           1.00    156.7±0.25µs        ? ?/sec    1.00    156.6±0.50µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, mandatory, no NULLs                              1.04     44.7±0.08µs        ? ?/sec    1.00     43.0±0.07µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, half NULLs                             1.02    145.2±0.40µs        ? ?/sec    1.00    143.0±0.39µs        ? ?/sec
arrow_array_reader/UInt16Array/byte_stream_split encoded, optional, no NULLs                               1.05     49.7±0.16µs        ? ?/sec    1.00     47.4±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, mandatory, no NULLs                                     1.01    105.6±0.26µs        ? ?/sec    1.00    104.5±0.99µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, half NULLs                                    1.01    179.7±1.56µs        ? ?/sec    1.00    177.7±0.52µs        ? ?/sec
arrow_array_reader/UInt16Array/dictionary encoded, optional, no NULLs                                      1.01    110.3±0.19µs        ? ?/sec    1.00    109.0±0.15µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, mandatory, no NULLs                                          1.00     38.6±0.10µs        ? ?/sec    1.00     38.7±0.13µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, half NULLs                                         1.01    142.6±0.47µs        ? ?/sec    1.00    141.3±0.77µs        ? ?/sec
arrow_array_reader/UInt16Array/plain encoded, optional, no NULLs                                           1.02     44.0±0.13µs        ? ?/sec    1.00     43.2±0.25µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, mandatory, no NULLs                                     1.00    101.6±0.23µs        ? ?/sec    1.01    102.7±0.24µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, half NULLs                                    1.00    114.1±0.37µs        ? ?/sec    1.00    114.0±0.55µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed skip, optional, no NULLs                                      1.00    105.0±0.31µs        ? ?/sec    1.01    105.8±0.37µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, mandatory, no NULLs                                          1.00    133.4±0.33µs        ? ?/sec    1.05    140.2±0.34µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, half NULLs                                         1.00    184.7±0.30µs        ? ?/sec    1.01    185.7±0.39µs        ? ?/sec
arrow_array_reader/UInt32Array/binary packed, optional, no NULLs                                           1.00    137.9±0.54µs        ? ?/sec    1.05    145.0±0.49µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, mandatory, no NULLs                              1.01     26.9±0.33µs        ? ?/sec    1.00     26.5±0.18µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, half NULLs                             1.00    126.4±0.40µs        ? ?/sec    1.00    126.5±0.38µs        ? ?/sec
arrow_array_reader/UInt32Array/byte_stream_split encoded, optional, no NULLs                               1.03     31.8±0.38µs        ? ?/sec    1.00     30.8±0.24µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, mandatory, no NULLs                                     1.01     87.8±0.33µs        ? ?/sec    1.00     87.2±0.51µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, half NULLs                                    1.00    161.7±0.61µs        ? ?/sec    1.00    161.7±1.71µs        ? ?/sec
arrow_array_reader/UInt32Array/dictionary encoded, optional, no NULLs                                      1.01     92.7±0.58µs        ? ?/sec    1.00     91.4±0.29µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, mandatory, no NULLs                                          1.00     21.2±0.45µs        ? ?/sec    1.01     21.4±0.98µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, half NULLs                                         1.00    123.8±0.48µs        ? ?/sec    1.00    124.0±0.28µs        ? ?/sec
arrow_array_reader/UInt32Array/plain encoded, optional, no NULLs                                           1.00     26.6±0.55µs        ? ?/sec    1.01     27.0±0.84µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, mandatory, no NULLs                                     1.00     82.4±0.28µs        ? ?/sec    1.01     83.3±0.27µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, half NULLs                                    1.01    110.4±0.69µs        ? ?/sec    1.00    109.7±0.30µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed skip, optional, no NULLs                                      1.00     85.2±0.35µs        ? ?/sec    1.00     85.0±0.27µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, mandatory, no NULLs                                          1.00    109.4±0.39µs        ? ?/sec    1.03    112.6±1.00µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, half NULLs                                         1.00    182.6±0.30µs        ? ?/sec    1.04    190.4±0.67µs        ? ?/sec
arrow_array_reader/UInt64Array/binary packed, optional, no NULLs                                           1.00    113.2±1.03µs        ? ?/sec    1.03    116.5±0.73µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, mandatory, no NULLs                              1.00    150.1±0.32µs        ? ?/sec    1.00    149.4±0.42µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, half NULLs                             1.01    208.2±0.54µs        ? ?/sec    1.00    206.7±0.65µs        ? ?/sec
arrow_array_reader/UInt64Array/byte_stream_split encoded, optional, no NULLs                               1.01    156.3±0.45µs        ? ?/sec    1.00    155.1±0.83µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, mandatory, no NULLs                                     1.00     92.3±0.59µs        ? ?/sec    1.00     92.2±0.71µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, half NULLs                                    1.01    175.6±0.48µs        ? ?/sec    1.00    174.0±0.36µs        ? ?/sec
arrow_array_reader/UInt64Array/dictionary encoded, optional, no NULLs                                      1.01     97.2±0.40µs        ? ?/sec    1.00     96.5±0.51µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, mandatory, no NULLs                                          1.00     43.6±2.31µs        ? ?/sec    1.10     48.1±2.42µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, half NULLs                                         1.00    150.4±0.44µs        ? ?/sec    1.00    151.0±0.47µs        ? ?/sec
arrow_array_reader/UInt64Array/plain encoded, optional, no NULLs                                           1.00     52.9±3.44µs        ? ?/sec    1.05     55.5±2.53µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, mandatory, no NULLs                                      1.00    102.9±0.23µs        ? ?/sec    1.03    106.3±0.33µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, half NULLs                                     1.00    116.4±1.22µs        ? ?/sec    1.01    117.8±0.28µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed skip, optional, no NULLs                                       1.00    106.1±0.29µs        ? ?/sec    1.03    109.0±0.31µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, mandatory, no NULLs                                           1.00    141.9±0.30µs        ? ?/sec    1.03    145.9±0.38µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, half NULLs                                          1.00    192.7±0.29µs        ? ?/sec    1.01    194.2±0.38µs        ? ?/sec
arrow_array_reader/UInt8Array/binary packed, optional, no NULLs                                            1.00    147.1±0.28µs        ? ?/sec    1.02    149.9±0.39µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, mandatory, no NULLs                               1.00     35.1±0.07µs        ? ?/sec    1.00     35.2±0.10µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, half NULLs                              1.02    138.9±0.86µs        ? ?/sec    1.00    136.4±0.39µs        ? ?/sec
arrow_array_reader/UInt8Array/byte_stream_split encoded, optional, no NULLs                                1.02     40.3±0.12µs        ? ?/sec    1.00     39.7±0.15µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, mandatory, no NULLs                                      1.01     97.8±0.26µs        ? ?/sec    1.00     96.8±0.24µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, half NULLs                                     1.01    171.8±0.32µs        ? ?/sec    1.00    169.8±0.71µs        ? ?/sec
arrow_array_reader/UInt8Array/dictionary encoded, optional, no NULLs                                       1.01    102.3±0.23µs        ? ?/sec    1.00    101.8±0.26µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, mandatory, no NULLs                                           1.00     30.9±0.09µs        ? ?/sec    1.00     31.0±0.08µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, half NULLs                                          1.00    133.8±0.35µs        ? ?/sec    1.00    133.9±1.56µs        ? ?/sec
arrow_array_reader/UInt8Array/plain encoded, optional, no NULLs                                            1.00     35.8±0.08µs        ? ?/sec    1.00     35.6±0.10µs        ? ?/sec

Copy link
Contributor

@etseidl etseidl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good as far as I can tell. Can't wait for the sequel 😄

Copy link
Contributor

@zhuqi-lucas zhuqi-lucas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM Thank you @alamb !

@alamb
Copy link
Contributor Author

alamb commented May 18, 2025

Thank you for the reviews @zhuqi-lucas and @etseidl

I'll plan to merge this tomorrow unless anyone else would like time to review

@alamb alamb merged commit ce18e5b into apache:main May 19, 2025
16 checks passed
@alamb
Copy link
Contributor Author

alamb commented May 19, 2025

onwards!

@alamb alamb deleted the alamb/reader_plan branch May 19, 2025 19:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
parquet Changes to the parquet crate
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants