diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp index 4f4b83168e47..e0ff41bba739 100644 --- a/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp +++ b/ydb/library/yql/minikql/comp_nodes/mkql_grace_join.cpp @@ -584,7 +584,6 @@ class TGraceJoinSpillingSupportState : public TComputationValue(false)) , HaveMoreLeftRows(std::make_unique(true)) , HaveMoreRightRows(std::make_unique(true)) - , JoinedTuple(std::make_unique>() ) , IsSelfJoin_(isSelfJoin) , SelfJoinSameKeys_(isSelfJoin && (leftKeyColumns == rightKeyColumns)) , IsSpillingAllowed(isSpillingAllowed) @@ -989,7 +988,6 @@ EFetchResult ProcessSpilledData(TComputationContext&, NUdf::TUnboxedValue*const* const std::unique_ptr PartialJoinCompleted; const std::unique_ptr HaveMoreLeftRows; const std::unique_ptr HaveMoreRightRows; - const std::unique_ptr> JoinedTuple; const bool IsSelfJoin_; const bool SelfJoinSameKeys_; const bool IsSpillingAllowed; diff --git a/ydb/library/yql/minikql/comp_nodes/mkql_grace_join_imp.cpp b/ydb/library/yql/minikql/comp_nodes/mkql_grace_join_imp.cpp index dc79431f1550..0ad22b072942 100644 --- a/ydb/library/yql/minikql/comp_nodes/mkql_grace_join_imp.cpp +++ b/ydb/library/yql/minikql/comp_nodes/mkql_grace_join_imp.cpp @@ -75,18 +75,13 @@ TTable::EAddTupleResult TTable::AddTuple( ui64 * intColumns, char ** stringColu } } - TempTuple[0] &= ui64(0x1); // Setting only nulls in key bit, all other bits are ignored for key hash - for (ui32 i = 1; i < NullsBitmapSize_; i ++) { - TempTuple[i] = 0; - } - XXH64_hash_t hash = XXH64(TempTuple.data() + NullsBitmapSize_, (TempTuple.size() - NullsBitmapSize_) * sizeof(ui64), 0); if (!hash) hash = 1; ui64 bucket = hash & BucketsMask; - if (other.TableBucketsStats[bucket].BloomFilter.IsFinalized()) { + if (!IsAny_ && other.TableBucketsStats[bucket].BloomFilter.IsFinalized()) { auto bucket2 = &other.TableBucketsStats[bucket]; auto &bloomFilter = bucket2->BloomFilter; ++BloomLookups_; @@ -105,8 +100,7 @@ TTable::EAddTupleResult TTable::AddTuple( ui64 * intColumns, char ** stringColu ui32 offset = keyIntVals.size(); // Offset of tuple inside the keyIntVals vector keyIntVals.push_back(hash); - keyIntVals.insert(keyIntVals.end(), intColumns, intColumns + NullsBitmapSize_); - keyIntVals.insert(keyIntVals.end(), TempTuple.begin() + NullsBitmapSize_, TempTuple.end()); + keyIntVals.insert(keyIntVals.end(), TempTuple.begin(), TempTuple.end()); if (IsAny_) { if ( !AddKeysToHashTable(kh, keyIntVals.begin() + offset, iColumns) ) { @@ -114,6 +108,17 @@ TTable::EAddTupleResult TTable::AddTuple( ui64 * intColumns, char ** stringColu ++AnyFiltered_; return EAddTupleResult::AnyMatch; } + + if (other.TableBucketsStats[bucket].BloomFilter.IsFinalized()) { + auto bucket2 = &other.TableBucketsStats[bucket]; + auto &bloomFilter = bucket2->BloomFilter; + ++BloomLookups_; + if (bloomFilter.IsMissing(hash)) { + keyIntVals.resize(offset); + ++BloomHits_; + return EAddTupleResult::Unmatched; + } + } } TableBucketsStats[bucket].TuplesNum++;