@@ -33,6 +33,7 @@ use databend_common_expression::RawExpr;
3333use databend_common_expression:: Scalar ;
3434use databend_common_functions:: BUILTIN_FUNCTIONS ;
3535use fastbloom:: BloomFilter ;
36+ use fastbloom:: DefaultHasher ;
3637
3738use super :: builder:: should_enable_runtime_filter;
3839use super :: packet:: JoinRuntimeFilterPacket ;
@@ -252,9 +253,12 @@ async fn build_bloom_filter(
252253 let probe_key = probe_key. as_column_ref ( ) . unwrap ( ) ;
253254 let column_name = probe_key. id . to_string ( ) ;
254255 let total_items = bloom. len ( ) ;
256+ let hasher = DefaultHasher :: default ( ) ;
255257
256258 if total_items < 50000 {
257- let filter = BloomFilter :: with_false_pos ( 0.01 ) . items ( bloom) ;
259+ let filter = BloomFilter :: with_false_pos ( 0.01 )
260+ . hasher ( hasher)
261+ . items ( bloom) ;
258262 return Ok ( RuntimeFilterBloom {
259263 column_name,
260264 filter,
@@ -271,11 +275,12 @@ async fn build_bloom_filter(
271275 let tasks: Vec < _ > = chunks
272276 . into_iter ( )
273277 . map ( |chunk| {
278+ let hasher = hasher. clone ( ) ;
274279 databend_common_base:: runtime:: spawn ( async move {
275- let mut filter = BloomFilter :: with_false_pos ( 0.01 ) . expected_items ( total_items ) ;
276- for hash in chunk {
277- filter . insert_hash ( hash ) ;
278- }
280+ let mut filter = BloomFilter :: with_false_pos ( 0.01 )
281+ . hasher ( hasher )
282+ . expected_items ( total_items ) ;
283+ filter . extend ( chunk ) ;
279284 Ok :: < BloomFilter , ErrorCode > ( filter)
280285 } )
281286 } )
0 commit comments