Skip to content

Poc for adaptive parquet predicate pushdown(bitmap/range) with page cache(3 data pages) #7454

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

Open
wants to merge 88 commits into
base: main
Choose a base branch
from

Conversation

zhuqi-lucas
Copy link
Contributor

@zhuqi-lucas zhuqi-lucas commented Apr 29, 2025

Which issue does this PR close?

Rationale for this change

What changes are included in this PR?

Are there any user-facing changes?

@zhuqi-lucas zhuqi-lucas changed the title Draft Poc for Unified select (Enum for bitmap and range) Draft Poc for adaptive parquet predicate pushdown with page cache(3 data pages) May 9, 2025
@zhuqi-lucas zhuqi-lucas changed the title Draft Poc for adaptive parquet predicate pushdown with page cache(3 data pages) Draft Poc for adaptive parquet predicate pushdown(bitmap/range) with page cache(3 data pages) May 9, 2025
@zhuqi-lucas
Copy link
Contributor Author

zhuqi-lucas commented May 9, 2025

@alamb
Updated this POC PR of combine adaptive parquet predicate pushdown and 3 data page cache, here is the result, it reduce the regression, almost no regression now, the most regression case is only 1.1x slower compared with the original case is 1.5x regression, and many 1.4x/1.3x regression:

./bench.sh compare  main  test_default_parquet_push_down
Comparing main and test_default_parquet_push_down
--------------------
Benchmark clickbench_1.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query        ┃      main ┃ test_default_parquet_push_down ┃        Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 00.32ms │                         0.29ms │ +1.13x faster │
│ QQuery 146.96ms │                        48.09ms │     no change │
│ QQuery 275.59ms │                        71.36ms │ +1.06x faster │
│ QQuery 374.12ms │                        83.81ms │  1.13x slower │
│ QQuery 4556.03ms │                       528.82ms │     no change │
│ QQuery 5563.52ms │                       557.09ms │     no change │
│ QQuery 60.31ms │                         0.32ms │     no change │
│ QQuery 752.23ms │                        55.85ms │  1.07x slower │
│ QQuery 8720.15ms │                       646.68ms │ +1.11x faster │
│ QQuery 9741.10ms │                       752.54ms │     no change │
│ QQuery 10171.95ms │                       175.20ms │     no change │
│ QQuery 11187.66ms │                       201.39ms │  1.07x slower │
│ QQuery 12597.16ms │                       616.24ms │     no change │
│ QQuery 13877.71ms │                       832.41ms │ +1.05x faster │
│ QQuery 14605.11ms │                       619.46ms │     no change │
│ QQuery 15630.66ms │                       618.32ms │     no change │
│ QQuery 161422.47ms │                      1333.25ms │ +1.07x faster │
│ QQuery 171221.90ms │                      1189.71ms │     no change │
│ QQuery 182773.23ms │                      2762.43ms │     no change │
│ QQuery 1966.30ms │                        65.92ms │     no change │
│ QQuery 20682.62ms │                       692.95ms │     no change │
│ QQuery 21800.86ms │                       718.37ms │ +1.11x faster │
│ QQuery 221521.09ms │                      1252.25ms │ +1.21x faster │
│ QQuery 234223.95ms │                      2965.58ms │ +1.42x faster │
│ QQuery 24286.83ms │                       323.07ms │  1.13x slower │
│ QQuery 25274.47ms │                       304.48ms │  1.11x slower │
│ QQuery 26320.45ms │                       353.38ms │  1.10x slower │
│ QQuery 27945.72ms │                       927.91ms │     no change │
│ QQuery 288206.32ms │                      8225.21ms │     no change │
│ QQuery 29459.59ms │                       448.50ms │     no change │
│ QQuery 30493.35ms │                       489.28ms │     no change │
│ QQuery 31585.82ms │                       580.06ms │     no change │
│ QQuery 322436.43ms │                      2556.73ms │     no change │
│ QQuery 332916.52ms │                      2586.42ms │ +1.13x faster │
│ QQuery 342975.16ms │                      3235.47ms │  1.09x slower │
│ QQuery 35866.75ms │                       880.71ms │     no change │
│ QQuery 36104.22ms │                        49.53ms │ +2.10x faster │
│ QQuery 3762.50ms │                        38.01ms │ +1.64x faster │
│ QQuery 38107.57ms │                        44.28ms │ +2.43x faster │
│ QQuery 39167.64ms │                        52.52ms │ +3.19x faster │
│ QQuery 4046.49ms │                        38.20ms │ +1.22x faster │
│ QQuery 4145.49ms │                        37.30ms │ +1.22x faster │
│ QQuery 4242.51ms │                        36.32ms │ +1.17x faster │
└──────────────┴───────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                             ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (main)39956.84ms │
│ Total Time (test_default_parquet_push_down)37995.72ms │
│ Average Time (main)929.23ms │
│ Average Time (test_default_parquet_push_down)883.62ms │
│ Queries Faster16 │
│ Queries Slower7 │
│ Queries with No Change20 │
└───────────────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query        ┃      main ┃ test_default_parquet_push_down ┃        Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 01.10ms │                         1.23ms │  1.12x slower │
│ QQuery 124.27ms │                        27.97ms │  1.15x slower │
│ QQuery 258.03ms │                        53.24ms │ +1.09x faster │
│ QQuery 358.91ms │                        62.60ms │  1.06x slower │
│ QQuery 4478.56ms │                       481.69ms │     no change │
│ QQuery 5549.38ms │                       526.84ms │     no change │
│ QQuery 61.18ms │                         1.19ms │     no change │
│ QQuery 740.05ms │                        41.35ms │     no change │
│ QQuery 8645.79ms │                       615.65ms │     no change │
│ QQuery 9671.10ms │                       663.80ms │     no change │
│ QQuery 10133.89ms │                       154.96ms │  1.16x slower │
│ QQuery 11159.81ms │                       172.84ms │  1.08x slower │
│ QQuery 12561.74ms │                       614.07ms │  1.09x slower │
│ QQuery 13750.14ms │                       783.97ms │     no change │
│ QQuery 14525.03ms │                       548.79ms │     no change │
│ QQuery 15553.88ms │                       557.18ms │     no change │
│ QQuery 161417.77ms │                      1373.96ms │     no change │
│ QQuery 171104.70ms │                      1170.50ms │  1.06x slower │
│ QQuery 183037.46ms │                      2778.68ms │ +1.09x faster │
│ QQuery 1945.81ms │                        47.01ms │     no change │
│ QQuery 20733.71ms │                       733.04ms │     no change │
│ QQuery 21789.70ms │                       730.95ms │ +1.08x faster │
│ QQuery 221299.84ms │                      1172.80ms │ +1.11x faster │
│ QQuery 233952.24ms │                      2819.91ms │ +1.40x faster │
│ QQuery 24273.40ms │                       317.58ms │  1.16x slower │
│ QQuery 25274.14ms │                       276.03ms │     no change │
│ QQuery 26320.12ms │                       322.94ms │     no change │
│ QQuery 27900.06ms │                       909.25ms │     no change │
│ QQuery 287812.82ms │                      7976.90ms │     no change │
│ QQuery 29390.07ms │                       396.34ms │     no change │
│ QQuery 30420.68ms │                       468.25ms │  1.11x slower │
│ QQuery 31571.58ms │                       591.13ms │     no change │
│ QQuery 322585.80ms │                      2684.39ms │     no change │
│ QQuery 332621.59ms │                      2831.80ms │  1.08x slower │
│ QQuery 343144.83ms │                      3258.26ms │     no change │
│ QQuery 35855.71ms │                       808.77ms │ +1.06x faster │
│ QQuery 3680.10ms │                        33.07ms │ +2.42x faster │
│ QQuery 3735.71ms │                        26.33ms │ +1.36x faster │
│ QQuery 3879.06ms │                        34.07ms │ +2.32x faster │
│ QQuery 39123.78ms │                        39.47ms │ +3.14x faster │
│ QQuery 4029.03ms │                        27.64ms │     no change │
│ QQuery 4127.67ms │                        25.72ms │ +1.08x faster │
│ QQuery 4225.98ms │                        24.90ms │     no change │
└──────────────┴───────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                             ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (main)38166.21ms │
│ Total Time (test_default_parquet_push_down)37187.06ms │
│ Average Time (main)887.59ms │
│ Average Time (test_default_parquet_push_down)864.82ms │
│ Queries Faster11 │
│ Queries Slower10 │
│ Queries with No Change22 │
└───────────────────────────────────────────────┴────────────┘

@alamb
Copy link
Contributor

alamb commented May 9, 2025

These results look great -- thank you @zhuqi-lucas -- I am very close to the more targeted benchmark; Hopefully we can use that to confirm your results as well as further optimize

@alamb
Copy link
Contributor

alamb commented May 9, 2025

I am testing this PR using the benchmark in

And I will report back

@alamb
Copy link
Contributor

alamb commented May 9, 2025

Testing this PR using my benchmark in

Shows measureable improvements. The only thing that looks like it may be slower is Q1 which is roughly what you observed as well

error: bench failed, to rerun pass `-p parquet --bench arrow_reader_clickbench`
group                               main                                   unified_select
-----                               ----                                   --------------
arrow_reader_clickbench/sync/Q1     1.00      3.0±0.01ms        ? ?/sec    1.19      3.6±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10    1.09     13.9±0.14ms        ? ?/sec    1.00     12.7±0.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q11    1.07     15.6±0.12ms        ? ?/sec    1.00     14.6±0.09ms        ? ?/sec
arrow_reader_clickbench/sync/Q12    1.04     41.9±0.34ms        ? ?/sec    1.00     40.5±0.41ms        ? ?/sec
arrow_reader_clickbench/sync/Q13    1.03     55.2±0.42ms        ? ?/sec    1.00     53.5±0.47ms        ? ?/sec
arrow_reader_clickbench/sync/Q14    1.05     53.8±0.49ms        ? ?/sec    1.00     51.2±0.96ms        ? ?/sec
arrow_reader_clickbench/sync/Q19    1.00      4.3±0.02ms        ? ?/sec    1.00      4.3±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q20    1.03    181.2±0.71ms        ? ?/sec    1.00    176.4±0.61ms        ? ?/sec
arrow_reader_clickbench/sync/Q21    1.04    240.3±1.20ms        ? ?/sec    1.00    231.2±1.08ms        ? ?/sec
arrow_reader_clickbench/sync/Q22    1.04    497.4±2.89ms        ? ?/sec    1.00    476.8±4.11ms        ? ?/sec
arrow_reader_clickbench/sync/Q23    1.04   458.3±13.13ms        ? ?/sec    1.00   441.3±13.66ms        ? ?/sec
arrow_reader_clickbench/sync/Q24    1.05     57.0±0.68ms        ? ?/sec    1.00     54.2±0.65ms        ? ?/sec
arrow_reader_clickbench/sync/Q27    1.03    158.2±0.81ms        ? ?/sec    1.00    153.2±1.04ms        ? ?/sec
arrow_reader_clickbench/sync/Q28    1.00    155.3±0.86ms        ? ?/sec    1.00    154.6±0.84ms        ? ?/sec
arrow_reader_clickbench/sync/Q30    1.00     63.7±0.41ms        ? ?/sec    1.00     63.5±0.46ms        ? ?/sec
arrow_reader_clickbench/sync/Q36    1.01    160.7±1.03ms        ? ?/sec    1.00    159.2±1.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q37    1.02     95.9±0.71ms        ? ?/sec    1.00     93.6±0.67ms        ? ?/sec

@zhuqi-lucas
Copy link
Contributor Author

Great work @alamb , it's big improvement for us to mock the clickbench result now.

And meantime, i will try to investigate if we also can improve the Q1 case.

Copy link
Contributor

@alamb alamb left a comment

Choose a reason for hiding this comment

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

Thanks @zhuqi-lucas -- this is pretty epic work. I rerunning the benchmarks in #7470 to get one last measurement.

Then I think we should move on to "productionizing" this code in some smaller pieces

/// Unlike intersection, the `other` [`BooleanRowSelection`] must have exactly as many set bits as `self`.
/// This method will keep only the bits in `self` that are also set in `other`
/// at the positions corresponding to `self`'s set bits.
pub fn and_then(&self, other: &Self) -> Self {
Copy link
Contributor

Choose a reason for hiding this comment

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

I think the other thing we can and should do here is change the signature to take an owned self -- also for intersection -- the API now forces a new memory allocation.

@zhuqi-lucas
Copy link
Contributor Author

zhuqi-lucas commented May 10, 2025

Thank you @alamb , i agree with you, i am thinking to remove unused code and make the code clear for our first step which performance is similar to above result, here is my plan for the PR to merge:

  1. Based original page cache PR
  2. Fix the skip page bug(It already merged)
  3. Add 3 data page cache code
  4. Add adaptive predicate pushdown
  5. Add skip improvement
  6. Remove all other unused code for current improvement including the enum select/bitmap, also the boolean_selector code, etc

And the final PR will not be huge, it will be less than 1000 line code i believe, i will do this soon! And i will still use this PR to submitted, thanks!

@alamb
Copy link
Contributor

alamb commented May 10, 2025

Thank you @alamb , i agree with you, i am thinking to remove unused code and make the code clear for our first step which performance is similar to above result, here is my plan for the PR to merge:

Thank you -- this sounds great. I'll hope to get the benchmarks merged soon so we can incrementally evaluate our progress

@alamb
Copy link
Contributor

alamb commented May 11, 2025

I completed another benchmark run now and got these results

The major difference is slow downs in the async reader for Q38-Q40:

arrow_reader_clickbench/async/Q37    1.02    104.2±0.47ms        ? ?/sec    1.00    101.6±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     41.6±0.33ms        ? ?/sec    1.23     51.1±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     50.3±0.30ms        ? ?/sec    1.32     66.2±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     55.3±0.60ms        ? ?/sec    1.22     67.4±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     42.1±0.32ms        ? ?/sec    1.12     47.3±0.56ms        ? ?/sec
+ critcmp main unified_select
group                                main                                   unified_select
-----                                ----                                   --------------
arrow_reader_clickbench/async/Q1     1.00      3.7±0.02ms        ? ?/sec    1.03      3.8±0.01ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.00     14.2±0.16ms        ? ?/sec    1.01     14.3±0.21ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     16.1±0.13ms        ? ?/sec    1.04     16.7±0.20ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.43     39.9±0.42ms        ? ?/sec    1.00     27.9±0.31ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.55     53.4±0.40ms        ? ?/sec    1.00     34.4±0.79ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.61     51.1±0.38ms        ? ?/sec    1.00     31.8±0.38ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.0±0.07ms        ? ?/sec    1.06      5.3±0.07ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.39    163.8±0.69ms        ? ?/sec    1.00    117.8±0.75ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.60    211.6±1.02ms        ? ?/sec    1.00    132.4±0.72ms        ? ?/sec
arrow_reader_clickbench/async/Q22    2.01    497.4±2.05ms        ? ?/sec    1.00    247.3±9.10ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.17    495.8±8.87ms        ? ?/sec    1.00    422.8±3.48ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.55     59.8±0.98ms        ? ?/sec    1.00     38.5±0.37ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.71    168.2±0.80ms        ? ?/sec    1.00     98.6±0.85ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.65    166.7±0.82ms        ? ?/sec    1.00    101.0±0.95ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.73     65.7±0.39ms        ? ?/sec    1.00     37.9±0.30ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.28    173.1±0.98ms        ? ?/sec    1.00    135.7±1.09ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.02    104.2±0.47ms        ? ?/sec    1.00    101.6±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     41.6±0.33ms        ? ?/sec    1.23     51.1±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     50.3±0.30ms        ? ?/sec    1.32     66.2±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     55.3±0.60ms        ? ?/sec    1.22     67.4±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     42.1±0.32ms        ? ?/sec    1.12     47.3±0.56ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     15.6±0.09ms        ? ?/sec    1.10     17.2±0.19ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      3.5±0.01ms        ? ?/sec    1.02      3.6±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.01     12.9±0.08ms        ? ?/sec    1.00     12.8±0.09ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.01     14.7±0.08ms        ? ?/sec    1.00     14.6±0.10ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.02     41.5±0.56ms        ? ?/sec    1.00     40.8±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.02     55.0±0.63ms        ? ?/sec    1.00     54.1±0.45ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.02     52.9±0.44ms        ? ?/sec    1.00     52.0±0.41ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.3±0.03ms        ? ?/sec    1.00      4.3±0.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.02    180.8±1.13ms        ? ?/sec    1.00    176.5±0.71ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.02    240.2±1.88ms        ? ?/sec    1.00    234.4±3.10ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.03    496.4±2.49ms        ? ?/sec    1.00    481.2±5.82ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.01   454.2±14.61ms        ? ?/sec    1.00   448.9±14.27ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.01     57.0±0.71ms        ? ?/sec    1.00     56.2±0.81ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.04    158.0±0.73ms        ? ?/sec    1.00    152.1±0.93ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.01    155.7±0.61ms        ? ?/sec    1.00    154.7±0.74ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.01     63.9±0.42ms        ? ?/sec    1.00     63.5±0.42ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.02    162.2±0.86ms        ? ?/sec    1.00    159.0±0.92ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.05     97.7±0.73ms        ? ?/sec    1.00     93.5±0.82ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.01     34.0±0.18ms        ? ?/sec    1.00     33.6±0.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.02     36.1±0.31ms        ? ?/sec    1.00     35.4±0.30ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     51.1±0.40ms        ? ?/sec    1.01     51.8±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     39.0±0.32ms        ? ?/sec    1.01     39.6±0.41ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.00     14.8±0.15ms        ? ?/sec    1.01     15.0±0.09ms        ? ?/sec

@zhuqi-lucas
Copy link
Contributor Author

zhuqi-lucas commented May 11, 2025

I completed another benchmark run now and got these results

The major difference is slow downs in the async reader for Q38-Q40:

arrow_reader_clickbench/async/Q37    1.02    104.2±0.47ms        ? ?/sec    1.00    101.6±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     41.6±0.33ms        ? ?/sec    1.23     51.1±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     50.3±0.30ms        ? ?/sec    1.32     66.2±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     55.3±0.60ms        ? ?/sec    1.22     67.4±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     42.1±0.32ms        ? ?/sec    1.12     47.3±0.56ms        ? ?/sec
+ critcmp main unified_select
group                                main                                   unified_select
-----                                ----                                   --------------
arrow_reader_clickbench/async/Q1     1.00      3.7±0.02ms        ? ?/sec    1.03      3.8±0.01ms        ? ?/sec
arrow_reader_clickbench/async/Q10    1.00     14.2±0.16ms        ? ?/sec    1.01     14.3±0.21ms        ? ?/sec
arrow_reader_clickbench/async/Q11    1.00     16.1±0.13ms        ? ?/sec    1.04     16.7±0.20ms        ? ?/sec
arrow_reader_clickbench/async/Q12    1.43     39.9±0.42ms        ? ?/sec    1.00     27.9±0.31ms        ? ?/sec
arrow_reader_clickbench/async/Q13    1.55     53.4±0.40ms        ? ?/sec    1.00     34.4±0.79ms        ? ?/sec
arrow_reader_clickbench/async/Q14    1.61     51.1±0.38ms        ? ?/sec    1.00     31.8±0.38ms        ? ?/sec
arrow_reader_clickbench/async/Q19    1.00      5.0±0.07ms        ? ?/sec    1.06      5.3±0.07ms        ? ?/sec
arrow_reader_clickbench/async/Q20    1.39    163.8±0.69ms        ? ?/sec    1.00    117.8±0.75ms        ? ?/sec
arrow_reader_clickbench/async/Q21    1.60    211.6±1.02ms        ? ?/sec    1.00    132.4±0.72ms        ? ?/sec
arrow_reader_clickbench/async/Q22    2.01    497.4±2.05ms        ? ?/sec    1.00    247.3±9.10ms        ? ?/sec
arrow_reader_clickbench/async/Q23    1.17    495.8±8.87ms        ? ?/sec    1.00    422.8±3.48ms        ? ?/sec
arrow_reader_clickbench/async/Q24    1.55     59.8±0.98ms        ? ?/sec    1.00     38.5±0.37ms        ? ?/sec
arrow_reader_clickbench/async/Q27    1.71    168.2±0.80ms        ? ?/sec    1.00     98.6±0.85ms        ? ?/sec
arrow_reader_clickbench/async/Q28    1.65    166.7±0.82ms        ? ?/sec    1.00    101.0±0.95ms        ? ?/sec
arrow_reader_clickbench/async/Q30    1.73     65.7±0.39ms        ? ?/sec    1.00     37.9±0.30ms        ? ?/sec
arrow_reader_clickbench/async/Q36    1.28    173.1±0.98ms        ? ?/sec    1.00    135.7±1.09ms        ? ?/sec
arrow_reader_clickbench/async/Q37    1.02    104.2±0.47ms        ? ?/sec    1.00    101.6±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q38    1.00     41.6±0.33ms        ? ?/sec    1.23     51.1±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q39    1.00     50.3±0.30ms        ? ?/sec    1.32     66.2±0.42ms        ? ?/sec
arrow_reader_clickbench/async/Q40    1.00     55.3±0.60ms        ? ?/sec    1.22     67.4±0.60ms        ? ?/sec
arrow_reader_clickbench/async/Q41    1.00     42.1±0.32ms        ? ?/sec    1.12     47.3±0.56ms        ? ?/sec
arrow_reader_clickbench/async/Q42    1.00     15.6±0.09ms        ? ?/sec    1.10     17.2±0.19ms        ? ?/sec
arrow_reader_clickbench/sync/Q1      1.00      3.5±0.01ms        ? ?/sec    1.02      3.6±0.02ms        ? ?/sec
arrow_reader_clickbench/sync/Q10     1.01     12.9±0.08ms        ? ?/sec    1.00     12.8±0.09ms        ? ?/sec
arrow_reader_clickbench/sync/Q11     1.01     14.7±0.08ms        ? ?/sec    1.00     14.6±0.10ms        ? ?/sec
arrow_reader_clickbench/sync/Q12     1.02     41.5±0.56ms        ? ?/sec    1.00     40.8±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q13     1.02     55.0±0.63ms        ? ?/sec    1.00     54.1±0.45ms        ? ?/sec
arrow_reader_clickbench/sync/Q14     1.02     52.9±0.44ms        ? ?/sec    1.00     52.0±0.41ms        ? ?/sec
arrow_reader_clickbench/sync/Q19     1.00      4.3±0.03ms        ? ?/sec    1.00      4.3±0.03ms        ? ?/sec
arrow_reader_clickbench/sync/Q20     1.02    180.8±1.13ms        ? ?/sec    1.00    176.5±0.71ms        ? ?/sec
arrow_reader_clickbench/sync/Q21     1.02    240.2±1.88ms        ? ?/sec    1.00    234.4±3.10ms        ? ?/sec
arrow_reader_clickbench/sync/Q22     1.03    496.4±2.49ms        ? ?/sec    1.00    481.2±5.82ms        ? ?/sec
arrow_reader_clickbench/sync/Q23     1.01   454.2±14.61ms        ? ?/sec    1.00   448.9±14.27ms        ? ?/sec
arrow_reader_clickbench/sync/Q24     1.01     57.0±0.71ms        ? ?/sec    1.00     56.2±0.81ms        ? ?/sec
arrow_reader_clickbench/sync/Q27     1.04    158.0±0.73ms        ? ?/sec    1.00    152.1±0.93ms        ? ?/sec
arrow_reader_clickbench/sync/Q28     1.01    155.7±0.61ms        ? ?/sec    1.00    154.7±0.74ms        ? ?/sec
arrow_reader_clickbench/sync/Q30     1.01     63.9±0.42ms        ? ?/sec    1.00     63.5±0.42ms        ? ?/sec
arrow_reader_clickbench/sync/Q36     1.02    162.2±0.86ms        ? ?/sec    1.00    159.0±0.92ms        ? ?/sec
arrow_reader_clickbench/sync/Q37     1.05     97.7±0.73ms        ? ?/sec    1.00     93.5±0.82ms        ? ?/sec
arrow_reader_clickbench/sync/Q38     1.01     34.0±0.18ms        ? ?/sec    1.00     33.6±0.25ms        ? ?/sec
arrow_reader_clickbench/sync/Q39     1.02     36.1±0.31ms        ? ?/sec    1.00     35.4±0.30ms        ? ?/sec
arrow_reader_clickbench/sync/Q40     1.00     51.1±0.40ms        ? ?/sec    1.01     51.8±0.37ms        ? ?/sec
arrow_reader_clickbench/sync/Q41     1.00     39.0±0.32ms        ? ?/sec    1.01     39.6±0.41ms        ? ?/sec
arrow_reader_clickbench/sync/Q42     1.00     14.8±0.15ms        ? ?/sec    1.01     15.0±0.09ms        ? ?/sec

Thank you @alamb and the result is also reasonable

Because, the result for me here is compared the Unified select PR with the main branch(And no parquet filter pushdown).

#7454 (comment)

So when we improve most of the regression for filter push down compared to no pushdown, it may also cause some regression to the original default push down, we can improve it further.

And the sync is no change because we still don't implement the sync version for the improvement PR. The improvement is for async.

@zhuqi-lucas zhuqi-lucas changed the title Draft Poc for adaptive parquet predicate pushdown(bitmap/range) with page cache(3 data pages) Poc for adaptive parquet predicate pushdown(bitmap/range) with page cache(3 data pages) May 11, 2025
@zhuqi-lucas zhuqi-lucas marked this pull request as ready for review May 11, 2025 14: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.

4 participants