Convert to FixedHashTable for hash join with small int key range by m-selmi · Pull Request #99275 · ClickHouse/ClickHouse · GitHub
Skip to content

Convert to FixedHashTable for hash join with small int key range #99275

Merged
m-selmi merged 50 commits into
ClickHouse:masterfrom
m-selmi:introduce-fixed-range-hash-table
Apr 17, 2026
Merged

Convert to FixedHashTable for hash join with small int key range #99275
m-selmi merged 50 commits into
ClickHouse:masterfrom
m-selmi:introduce-fixed-range-hash-table

Conversation

@m-selmi

@m-selmi m-selmi commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

relates to #41398 ( #97882 )

In case the join keys of a hash join are integers with a small range, the hash table can be replaced with an array indexed by key - min_key. This should have:

  • better lookup path
  • lower memory for dense keys

Capping the optimization at build size 2^18 makes the overhead of converting the hash table below 15 ms. In a follow up we can extract the min/max from statistics and directly build the direct lookup hash table to allow larger build sides.

Performance test:

LEFT JOIN with low selectivity:

display-name    0       SELECT p.id0, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 0       join_convert_to_fixed_hash_table.query0.prewarm0        0       0.1833493709564209
query   0       join_convert_to_fixed_hash_table.query0.run0    0       0.18002748489379883
query   0       join_convert_to_fixed_hash_table.query0.run1    0       0.18134760856628418
query   0       join_convert_to_fixed_hash_table.query0.run2    0       0.16283226013183594
...
median  0       0.18008053302764893
display-name    1       SELECT p.id0, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 1       join_convert_to_fixed_hash_table.query1.prewarm0        0       0.12644457817077637
query   1       join_convert_to_fixed_hash_table.query1.run0    0       0.1271359920501709
query   1       join_convert_to_fixed_hash_table.query1.run1    0       0.12077617645263672
query   1       join_convert_to_fixed_hash_table.query1.run2    0       0.12066817283630371
...
median  1       0.12168383598327637
display-name    2       SELECT p.id1, b.id1 FROM probe p LEFT JOIN build_10k b ON p.id1 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 2       join_convert_to_fixed_hash_table.query2.prewarm0        0       0.19025063514709473
query   2       join_convert_to_fixed_hash_table.query2.run0    0       0.18439221382141113
query   2       join_convert_to_fixed_hash_table.query2.run1    0       0.18043732643127441
query   2       join_convert_to_fixed_hash_table.query2.run2    0       0.18224787712097168
...
median  2       0.18065476417541504
display-name    3       SELECT p.id1, b.id1 FROM probe p LEFT JOIN build_10k b ON p.id1 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 3       join_convert_to_fixed_hash_table.query3.prewarm0        0       0.12453508377075195
query   3       join_convert_to_fixed_hash_table.query3.run0    0       0.12838315963745117
query   3       join_convert_to_fixed_hash_table.query3.run1    0       0.12383294105529785
query   3       join_convert_to_fixed_hash_table.query3.run2    0       0.1149449348449707
...
median  3       0.12236618995666504
display-name    4       SELECT p.id2, b.id2 FROM probe p LEFT JOIN build_50k b ON p.id2 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 4       join_convert_to_fixed_hash_table.query4.prewarm0        0       0.14774322509765625
query   4       join_convert_to_fixed_hash_table.query4.run0    0       0.14944934844970703
query   4       join_convert_to_fixed_hash_table.query4.run1    0       0.14705681800842285
query   4       join_convert_to_fixed_hash_table.query4.run2    0       0.13262701034545898
...
median  4       0.14212524890899658
display-name    5       SELECT p.id2, b.id2 FROM probe p LEFT JOIN build_50k b ON p.id2 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 5       join_convert_to_fixed_hash_table.query5.prewarm0        0       0.12196063995361328
query   5       join_convert_to_fixed_hash_table.query5.run0    0       0.13278698921203613
query   5       join_convert_to_fixed_hash_table.query5.run1    0       0.11975955963134766
query   5       join_convert_to_fixed_hash_table.query5.run2    0       0.12914061546325684
...
median  5       0.12599778175354004

INNER JOIN with low selectivity:

display-name    6       SELECT p.id0, b.id0 FROM probe p INNER JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 6       join_convert_to_fixed_hash_table.query6.prewarm0        0       0.10300731658935547
query   6       join_convert_to_fixed_hash_table.query6.run0    0       0.09830045700073242
query   6       join_convert_to_fixed_hash_table.query6.run1    0       0.0974583625793457
query   6       join_convert_to_fixed_hash_table.query6.run2    0       0.1009521484375
...
median  6       0.0974583625793457
display-name    7       SELECT p.id0, b.id0 FROM probe p INNER JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 7       join_convert_to_fixed_hash_table.query7.prewarm0        0       0.10037946701049805
query   7       join_convert_to_fixed_hash_table.query7.run0    0       0.10163545608520508
query   7       join_convert_to_fixed_hash_table.query7.run1    0       0.09937071800231934
query   7       join_convert_to_fixed_hash_table.query7.run2    0       0.09917187690734863
...
median  7       0.09790253639221191
display-name    8       SELECT p.id1, b.id1 FROM probe p INNER JOIN build_10k b ON p.id1 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 8       join_convert_to_fixed_hash_table.query8.prewarm0        0       0.10841727256774902
query   8       join_convert_to_fixed_hash_table.query8.run0    0       0.1069483757019043
query   8       join_convert_to_fixed_hash_table.query8.run1    0       0.10824179649353027
query   8       join_convert_to_fixed_hash_table.query8.run2    0       0.10557150840759277
...
median  8       0.10654354095458984
display-name    9       SELECT p.id1, b.id1 FROM probe p INNER JOIN build_10k b ON p.id1 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 9       join_convert_to_fixed_hash_table.query9.prewarm0        0       0.10459399223327637
query   9       join_convert_to_fixed_hash_table.query9.run0    0       0.10324239730834961
query   9       join_convert_to_fixed_hash_table.query9.run1    0       0.10093092918395996
query   9       join_convert_to_fixed_hash_table.query9.run2    0       0.10028290748596191
...
median  9       0.10217082500457764
display-name    10      SELECT p.id2, b.id2 FROM probe p INNER JOIN build_50k b ON p.id2 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 10      join_convert_to_fixed_hash_table.query10.prewarm0       0       0.16778898239135742
query   10      join_convert_to_fixed_hash_table.query10.run0   0       0.16060996055603027
query   10      join_convert_to_fixed_hash_table.query10.run1   0       0.15985321998596191
query   10      join_convert_to_fixed_hash_table.query10.run2   0       0.15698528289794922
...
median  10      0.15985321998596191
display-name    11      SELECT p.id2, b.id2 FROM probe p INNER JOIN build_50k b ON p.id2 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 11      join_convert_to_fixed_hash_table.query11.prewarm0       0       0.1654071807861328
query   11      join_convert_to_fixed_hash_table.query11.run0   0       0.16226959228515625
query   11      join_convert_to_fixed_hash_table.query11.run1   0       0.15493321418762207
query   11      join_convert_to_fixed_hash_table.query11.run2   0       0.16113018989562988
...
median  11      0.16113018989562988

LEFT JOIN with high selectivity:

display-name    12      SELECT p.id3, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id3 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 12      join_convert_to_fixed_hash_table.query12.prewarm0       0       0.14415192604064941
query   12      join_convert_to_fixed_hash_table.query12.run0   0       0.15161943435668945
query   12      join_convert_to_fixed_hash_table.query12.run1   0       0.1386244297027588
query   12      join_convert_to_fixed_hash_table.query12.run2   0       0.16128015518188477
...
median  12      0.15161943435668945
display-name    13      SELECT p.id3, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id3 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 13      join_convert_to_fixed_hash_table.query13.prewarm0       0       0.14345049858093262
query   13      join_convert_to_fixed_hash_table.query13.run0   0       0.14605355262756348
query   13      join_convert_to_fixed_hash_table.query13.run1   0       0.14837956428527832
query   13      join_convert_to_fixed_hash_table.query13.run2   0       0.14568734169006348
...
median  13      0.14000260829925537
display-name    14      SELECT p.id4, b.id1 FROM probe p LEFT JOIN build_10k b ON p.id4 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 14      join_convert_to_fixed_hash_table.query14.prewarm0       0       0.16616034507751465
query   14      join_convert_to_fixed_hash_table.query14.run0   0       0.1880347728729248
query   14      join_convert_to_fixed_hash_table.query14.run1   0       0.1839582920074463
query   14      join_convert_to_fixed_hash_table.query14.run2   0       0.18306493759155273
...
median  14      0.18138229846954346
display-name    15      SELECT p.id4, b.id1 FROM probe p LEFT JOIN build_10k b ON p.id4 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 15      join_convert_to_fixed_hash_table.query15.prewarm0       0       0.14579486846923828
query   15      join_convert_to_fixed_hash_table.query15.run0   0       0.13248085975646973
query   15      join_convert_to_fixed_hash_table.query15.run1   0       0.1412487030029297
query   15      join_convert_to_fixed_hash_table.query15.run2   0       0.14390993118286133
...
median  15      0.1425793170928955
display-name    16      SELECT p.id5, b.id2 FROM probe p LEFT JOIN build_50k b ON p.id5 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 16      join_convert_to_fixed_hash_table.query16.prewarm0       0       0.16441607475280762
query   16      join_convert_to_fixed_hash_table.query16.run0   0       0.1532902717590332
query   16      join_convert_to_fixed_hash_table.query16.run1   0       0.14643335342407227
query   16      join_convert_to_fixed_hash_table.query16.run2   0       0.16123247146606445
...
median  16      0.1532902717590332
display-name    17      SELECT p.id5, b.id2 FROM probe p LEFT JOIN build_50k b ON p.id5 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 17      join_convert_to_fixed_hash_table.query17.prewarm0       0       0.15385031700134277
query   17      join_convert_to_fixed_hash_table.query17.run0   0       0.14410138130187988
query   17      join_convert_to_fixed_hash_table.query17.run1   0       0.1515960693359375
query   17      join_convert_to_fixed_hash_table.query17.run2   0       0.1638193130493164
...
median  17      0.1515960693359375

INNER JOIN with high selectivity:

display-name    18      SELECT p.id3, b.id0 FROM probe p INNER JOIN build_5k b ON p.id3 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 18      join_convert_to_fixed_hash_table.query18.prewarm0       0       0.11940765380859375
query   18      join_convert_to_fixed_hash_table.query18.run0   0       0.13257837295532227
query   18      join_convert_to_fixed_hash_table.query18.run1   0       0.12779712677001953
query   18      join_convert_to_fixed_hash_table.query18.run2   0       0.11160945892333984
...
median  18      0.12434077262878418
display-name    19      SELECT p.id3, b.id0 FROM probe p INNER JOIN build_5k b ON p.id3 = b.id0 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 19      join_convert_to_fixed_hash_table.query19.prewarm0       0       0.11430478096008301
query   19      join_convert_to_fixed_hash_table.query19.run0   0       0.10935091972351074
query   19      join_convert_to_fixed_hash_table.query19.run1   0       0.11330628395080566
query   19      join_convert_to_fixed_hash_table.query19.run2   0       0.11635708808898926
...
median  19      0.11755609512329102
display-name    20      SELECT p.id4, b.id1 FROM probe p INNER JOIN build_10k b ON p.id4 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 20      join_convert_to_fixed_hash_table.query20.prewarm0       0       0.15051937103271484
query   20      join_convert_to_fixed_hash_table.query20.run0   0       0.1494441032409668
query   20      join_convert_to_fixed_hash_table.query20.run1   0       0.14615678787231445
query   20      join_convert_to_fixed_hash_table.query20.run2   0       0.14452171325683594
...
median  20      0.1487886905670166
display-name    21      SELECT p.id4, b.id1 FROM probe p INNER JOIN build_10k b ON p.id4 = b.id1 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 21      join_convert_to_fixed_hash_table.query21.prewarm0       0       0.12285161018371582
query   21      join_convert_to_fixed_hash_table.query21.run0   0       0.12460541725158691
query   21      join_convert_to_fixed_hash_table.query21.run1   0       0.11370539665222168
query   21      join_convert_to_fixed_hash_table.query21.run2   0       0.11903834342956543
...
median  21      0.11821508407592773
display-name    22      SELECT p.id5, b.id2 FROM probe p INNER JOIN build_50k b ON p.id5 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 0
prewarm 22      join_convert_to_fixed_hash_table.query22.prewarm0       0       0.16051506996154785
query   22      join_convert_to_fixed_hash_table.query22.run0   0       0.14917421340942383
query   22      join_convert_to_fixed_hash_table.query22.run1   0       0.13174080848693848
query   22      join_convert_to_fixed_hash_table.query22.run2   0       0.13836169242858887
...
median  22      0.1380230188369751
display-name    23      SELECT p.id5, b.id2 FROM probe p INNER JOIN build_50k b ON p.id5 = b.id2 FORMAT Null SETTINGS join_algorithm = 'hash', enable_join_fixed_hash_table_conversion = 1
prewarm 23      join_convert_to_fixed_hash_table.query23.prewarm0       0       0.15680718421936035
query   23      join_convert_to_fixed_hash_table.query23.run0   0       0.132246732711792
query   23      join_convert_to_fixed_hash_table.query23.run1   0       0.13514304161071777
query   23      join_convert_to_fixed_hash_table.query23.run2   0       0.12445354461669922
...
median  23      0.13214659690856934

LEFT JOIN with auto algorithm:

display-name    24      SELECT p.id0, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'auto', enable_join_fixed_hash_table_conversion = 0
prewarm 24      join_convert_to_fixed_hash_table.query24.prewarm0       0       0.18239378929138184
query   24      join_convert_to_fixed_hash_table.query24.run0   0       0.17319464683532715
query   24      join_convert_to_fixed_hash_table.query24.run1   0       0.17351984977722168
query   24      join_convert_to_fixed_hash_table.query24.run2   0       0.1790151596069336
...
median  24      0.17514097690582275
display-name    25      SELECT p.id0, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'auto', enable_join_fixed_hash_table_conversion = 1
prewarm 25      join_convert_to_fixed_hash_table.query25.prewarm0       0       0.11603116989135742
query   25      join_convert_to_fixed_hash_table.query25.run0   0       0.12669825553894043
query   25      join_convert_to_fixed_hash_table.query25.run1   0       0.12326169013977051
query   25      join_convert_to_fixed_hash_table.query25.run2   0       0.11374425888061523
...
median  25      0.12250781059265137

LEFT JOIN with grace_hash algorithm:

display-name    26      SELECT p.id0, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'grace_hash', enable_join_fixed_hash_table_conversion = 0
prewarm 26      join_convert_to_fixed_hash_table.query26.prewarm0       0       0.221663236618042
query   26      join_convert_to_fixed_hash_table.query26.run0   0       0.19127869606018066
query   26      join_convert_to_fixed_hash_table.query26.run1   0       0.20809626579284668
query   26      join_convert_to_fixed_hash_table.query26.run2   0       0.20948457717895508
...
median  26      0.20255231857299805
display-name    27      SELECT p.id0, b.id0 FROM probe p LEFT JOIN build_5k b ON p.id0 = b.id0 FORMAT Null SETTINGS join_algorithm = 'grace_hash', enable_join_fixed_hash_table_conversion = 1
prewarm 27      join_convert_to_fixed_hash_table.query27.prewarm0       0       0.16614127159118652
query   27      join_convert_to_fixed_hash_table.query27.run0   0       0.15943193435668945
query   27      join_convert_to_fixed_hash_table.query27.run1   0       0.15614867210388184
query   27      join_convert_to_fixed_hash_table.query27.run2   0       0.1661539077758789
...
median  27      0.15943193435668945

Changelog category (leave one):

  • Performance Improvement

Changelog entry (a user-readable short description of the changes that goes into CHANGELOG.md):

Speedup hash join on int32 and int64 keys with small range by using a direct-index hash table.

Documentation entry for user-facing changes

  • Documentation is written (mandatory for new features)

Note

Medium Risk
Changes hash join’s in-memory data structure for single Int32/Int64 key joins by optionally converting to a direct-indexed range table, which can affect join performance/memory and introduces new edge-case paths (range bounds, signed/unsigned handling). Scope is limited by size/range guards, a hard allocation cap, and added tests.

Overview
Adds a new hash-join optimization for single integer keys with a small value range: after building a HashJoin right-side map (key32/key64), the join can convert it into a flat FixedRangeHashMap indexed by key - min_key (skipping ASOF and multi-map cases, with signed min/max handling).

Introduces FixedRangeHashTable/FixedRangeHashMap implementations, new join variants range_key32/range_key64, and instruments conversion time via ProfileEvents::BuiltJoinRangeHashMapMicroseconds plus a debug log.

Adds settings enable_fixed_range_hash_table and fixed_range_hash_table_max_size (propagated through query plan serialization and join settings, with a safety cap in TableJoin), and includes performance + stateless tests to validate triggering and result correctness.

Written by Cursor Bugbot for commit fb869f2. This will update automatically on new commits. Configure here.

@clickhouse-gh

clickhouse-gh Bot commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

@clickhouse-gh clickhouse-gh Bot added the pr-performance Pull request with some performance improvements label Mar 11, 2026
Comment thread src/Common/HashTable/FixedRangeHashTable.h Outdated
Comment thread src/Common/HashTable/FixedRangeHashTable.h Outdated
Comment thread src/Core/Settings.cpp Outdated
Comment thread src/Interpreters/JoinOperator.cpp Outdated
Comment thread src/Interpreters/TableJoin.cpp Outdated
Comment thread src/Common/HashTable/FixedRangeHashTable.h Outdated
Comment thread src/Common/HashTable/FixedRangeHashTable.h Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR adds an optimization for hash joins on single Int32/Int64 keys with a small value range by converting the build-side hash map into a direct-indexed (range) table, controlled by new settings and validated with new tests/benchmarks.

Changes:

  • Implement FixedRangeHashTable/FixedRangeHashMap and add new HashJoin variants (range_key32/range_key64) plus post-build conversion logic.
  • Introduce settings enable_fixed_range_hash_table and fixed_range_hash_table_max_size (including query plan serialization plumbing and a new profile event).
  • Add stateless and performance tests for correctness and performance characterization.

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tests/queries/0_stateless/04029_join_fixed_range_hash_table.sql New stateless test for conversion trigger + join result correctness.
tests/queries/0_stateless/04029_join_fixed_range_hash_table.reference Expected output for the new stateless test.
tests/performance/join_with_fixed_range_hash_table.xml New perf test workload for comparing fixed-range vs normal hash join.
src/Processors/Transforms/JoiningTransform.cpp Trigger fixed-range conversion at end of build phase for HashJoin.
src/Processors/QueryPlan/QueryPlanSerializationSettings.cpp Add new join-related settings to plan serialization settings.
src/Interpreters/TableJoin.h Store new fixed-range settings in TableJoin and expose accessors.
src/Interpreters/TableJoin.cpp Read/cap new settings from Settings/JoinSettings into TableJoin.
src/Interpreters/JoinOperator.h Add new settings fields to JoinSettings.
src/Interpreters/JoinOperator.cpp Plumb new settings from Settings ↔ QueryPlanSerializationSettings.
src/Interpreters/HashJoin/KeyGetter.h Add key getter mappings for new range key types.
src/Interpreters/HashJoin/HashJoin.h Add range key variants and map storage for FixedRangeHashMap.
src/Interpreters/HashJoin/HashJoin.cpp Implement conversion logic + new profile event + debug log.
src/Core/SettingsChangesHistory.cpp Record compatibility history entries for the new settings.
src/Core/Settings.cpp Define the new Settings entries and defaults.
src/Common/ProfileEvents.cpp Register BuiltJoinRangeHashMapMicroseconds profile event.
src/Common/HashTable/FixedRangeHashTable.h New direct-index table implementation used by the optimization.
src/Common/HashTable/FixedRangeHashMap.h New map wrapper over FixedRangeHashTable for HashJoin use.
src/Common/HashTable/FixedHashMapCell.h Extract FixedHashMapCell into a separate header for reuse.
src/Common/HashTable/FixedHashMap.h Include the extracted FixedHashMapCell header.

Comment thread src/Core/SettingsChangesHistory.cpp Outdated
Comment thread src/Interpreters/TableJoin.cpp Outdated
Comment thread src/Interpreters/HashJoin/HashJoin.cpp Outdated
Comment thread src/Common/HashTable/FixedRangeHashTable.h Outdated
Comment thread src/Common/HashTable/FixedRangeHashTable.h Outdated
@m-selmi m-selmi marked this pull request as ready for review March 13, 2026 09:21
Comment thread src/Common/HashTable/FixedRangeHashTable.h Outdated
Comment thread src/Interpreters/TableJoin.cpp Outdated
@m-selmi m-selmi requested a review from vdimir March 13, 2026 09:41
@alexey-milovidov

Copy link
Copy Markdown
Member

The AST fuzzer (arm_asan_ubsan) failure is a known flaky UBSan issue in BSINumericIndexedVector. Fix: #100086.

@alexey-milovidov

Copy link
Copy Markdown
Member

Azure tests are fixed in #100980, you can update the branch to include the fixes.

@alexey-milovidov

Copy link
Copy Markdown
Member

The flaky check failure is fixed in #102148, let's update the branch.

@nickitat

Copy link
Copy Markdown
Member

Besides the onBuildPhaseFinish situation, LGTM

Comment thread src/Interpreters/GraceHashJoin.cpp
Comment thread tests/performance/join_convert_to_fixed_hash_table.xml
Comment thread src/Interpreters/HashJoin/HashJoin.cpp
Comment thread src/Interpreters/HashJoin/HashJoin.cpp
@clickhouse-gh

clickhouse-gh Bot commented Apr 16, 2026

Copy link
Copy Markdown
Contributor

LLVM Coverage Report

Metric Baseline Current Δ
Lines 84.00% 84.00% +0.00%
Functions 90.90% 91.10% +0.20%
Branches 76.50% 76.50% +0.00%

Changed lines: 94.51% (258/273) · Uncovered code

Full report · Diff report

@m-selmi m-selmi added this pull request to the merge queue Apr 17, 2026
Merged via the queue into ClickHouse:master with commit 533498e Apr 17, 2026
316 of 318 checks passed
@m-selmi m-selmi deleted the introduce-fixed-range-hash-table branch April 17, 2026 07:59
@robot-ch-test-poll2 robot-ch-test-poll2 added the pr-synced-to-cloud The PR is synced to the cloud repo label Apr 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr-performance Pull request with some performance improvements pr-synced-to-cloud The PR is synced to the cloud repo

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants