MCPcopy Create free account
hub / github.com/bytedance/bolt / setupTable

Method setupTable

bolt/exec/HashBuild.cpp:222–306  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

220}
221
222void HashBuild::setupTable() {
223 BOLT_CHECK_NULL(table_);
224
225 const auto numKeys = keyChannels_.size();
226 std::vector<std::unique_ptr<VectorHasher>> keyHashers;
227 keyHashers.reserve(numKeys);
228 for (vector_size_t i = 0; i < numKeys; ++i) {
229 keyHashers.emplace_back(
230 VectorHasher::create(tableType_->childAt(i), keyChannels_[i]));
231 }
232
233 const auto numDependents = tableType_->size() - numKeys;
234 std::vector<TypePtr> dependentTypes;
235 dependentTypes.reserve(numDependents);
236 for (int i = numKeys; i < tableType_->size(); ++i) {
237 dependentTypes.emplace_back(tableType_->childAt(i));
238 }
239 auto& queryConfig = operatorCtx_->driverCtx()->queryConfig();
240 if (joinNode_->isRightJoin() || joinNode_->isFullJoin() ||
241 joinNode_->isRightSemiProjectJoin()) {
242 // Do not ignore null keys.
243 table_ = HashTable<false>::createForJoin(
244 std::move(keyHashers),
245 dependentTypes,
246 isDREnabled_ ? false : true, // allowDuplicates
247 true, // hasProbedFlag
248 isDREnabled_ ? BaseHashTable::HashMode::kHash
249 : BaseHashTable::HashMode::kArray,
250 queryConfig.minTableRowsForParallelJoinBuild(),
251 pool(),
252 queryConfig.enableJitRowEqVectors(),
253 hybridJoin_);
254 } else {
255 // Right semi join needs to tag build rows that were probed.
256 const bool needProbedFlag = joinNode_->isRightSemiFilterJoin();
257 if (isLeftNullAwareJoinWithFilter(joinNode_)) {
258 // We need to check null key rows in build side in case of null-aware anti
259 // or left semi project join with filter set.
260 table_ = HashTable<false>::createForJoin(
261 std::move(keyHashers),
262 dependentTypes,
263 isDREnabled_ ? false : !dropDuplicates_, // allowDuplicates
264 needProbedFlag, // hasProbedFlag
265 isDREnabled_ ? BaseHashTable::HashMode::kHash
266 : BaseHashTable::HashMode::kArray,
267 queryConfig.minTableRowsForParallelJoinBuild(),
268 pool(),
269 queryConfig.enableJitRowEqVectors(),
270 hybridJoin_);
271 } else {
272 // Ignore null keys
273 table_ = HashTable<true>::createForJoin(
274 std::move(keyHashers),
275 dependentTypes,
276 isDREnabled_ ? false : !dropDuplicates_, // allowDuplicates
277 needProbedFlag, // hasProbedFlag
278 isDREnabled_ ? BaseHashTable::HashMode::kHash
279 : BaseHashTable::HashMode::kArray,

Callers

nothing calls this directly

Calls 15

childAtMethod · 0.80
isRightJoinMethod · 0.80
isFullJoinMethod · 0.80
enableJitRowEqVectorsMethod · 0.80
isRightSemiFilterJoinMethod · 0.80
hashModeMethod · 0.80
hybridDataMethod · 0.80
setAllContainersMethod · 0.80
setReorderEnabledMethod · 0.80

Tested by

no test coverage detected