273 | 48.0k | } _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.41k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.06k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.06k | *has_null_key = true; | 227 | 1.06k | } | 228 | 1.06k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.06k | } | 232 | | | 233 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.41k | bool keep_null_key = false; | 247 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.41k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.41k | } else if (_parent->parent() | 253 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.41k | .is_null_safe_eq_join() | 255 | 1.41k | .size() == 1 && | 256 | 1.41k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.41k | _rows, keep_null_key); | 265 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.41k | return Status::OK(); | 273 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.41k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.05k | } | 232 | | | 233 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.41k | bool keep_null_key = false; | 247 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.41k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.41k | } else if (_parent->parent() | 253 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.41k | .is_null_safe_eq_join() | 255 | 1.41k | .size() == 1 && | 256 | 1.41k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.41k | _rows, keep_null_key); | 265 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.41k | return Status::OK(); | 273 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.41k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.05k | } | 232 | | | 233 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.41k | bool keep_null_key = false; | 247 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.41k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.41k | } else if (_parent->parent() | 253 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.41k | .is_null_safe_eq_join() | 255 | 1.41k | .size() == 1 && | 256 | 1.41k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.41k | _rows, keep_null_key); | 265 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.41k | return Status::OK(); | 273 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.41k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.41k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.41k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.41k | } | 232 | | | 233 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.41k | bool keep_null_key = false; | 247 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.41k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.41k | } else if (_parent->parent() | 253 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.41k | .is_null_safe_eq_join() | 255 | 1.41k | .size() == 1 && | 256 | 1.41k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.41k | _rows, keep_null_key); | 265 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.41k | return Status::OK(); | 273 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.41k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.41k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.41k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.41k | } | 232 | | | 233 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.41k | bool keep_null_key = false; | 247 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.41k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.41k | } else if (_parent->parent() | 253 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.41k | .is_null_safe_eq_join() | 255 | 1.41k | .size() == 1 && | 256 | 1.41k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.41k | _rows, keep_null_key); | 265 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.41k | return Status::OK(); | 273 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.41k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.05k | } | 232 | | | 233 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.41k | bool keep_null_key = false; | 247 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.41k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.41k | } else if (_parent->parent() | 253 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.41k | .is_null_safe_eq_join() | 255 | 1.41k | .size() == 1 && | 256 | 1.41k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.41k | _rows, keep_null_key); | 265 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.41k | return Status::OK(); | 273 | 1.41k | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.40k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.40k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.05k | } | 232 | | | 233 | 1.40k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.40k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.40k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.40k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.40k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.40k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.40k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.40k | bool keep_null_key = false; | 247 | 1.40k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.40k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.40k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.40k | } else if (_parent->parent() | 253 | 1.40k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.40k | .is_null_safe_eq_join() | 255 | 1.40k | .size() == 1 && | 256 | 1.40k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.40k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.40k | _rows, keep_null_key); | 265 | 1.40k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.40k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.40k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.40k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.40k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.40k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.40k | return Status::OK(); | 273 | 1.40k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.40k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.40k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.05k | } | 232 | | | 233 | 1.40k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.40k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.40k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.40k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.40k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.40k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.40k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.40k | bool keep_null_key = false; | 247 | 1.40k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.40k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.40k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.40k | } else if (_parent->parent() | 253 | 1.40k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.40k | .is_null_safe_eq_join() | 255 | 1.40k | .size() == 1 && | 256 | 1.40k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.40k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.40k | _rows, keep_null_key); | 265 | 1.40k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.40k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.40k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.40k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.40k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.40k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.40k | return Status::OK(); | 273 | 1.40k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.41k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.41k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.06k | *has_null_key = true; | 227 | 1.06k | } | 228 | 1.41k | if (short_circuit_for_null && *has_null_key) { | 229 | 1.05k | return Status::OK(); | 230 | 1.05k | } | 231 | 1.41k | } | 232 | | | 233 | 355 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 355 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 355 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 355 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 355 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 355 | null_map ? null_map->data() : nullptr, true, true, | 244 | 355 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 355 | bool keep_null_key = false; | 247 | 355 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 355 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 355 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 355 | } else if (_parent->parent() | 253 | 355 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 355 | .is_null_safe_eq_join() | 255 | 355 | .size() == 1 && | 256 | 355 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 355 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 355 | _rows, keep_null_key); | 265 | 355 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 355 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 355 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 355 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 355 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 355 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 355 | return Status::OK(); | 273 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 1.40k | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 1.40k | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 1.05k | *has_null_key = true; | 227 | 1.05k | } | 228 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 1.05k | } | 232 | | | 233 | 1.40k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 1.40k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 1.40k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 1.40k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 1.40k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 1.40k | null_map ? null_map->data() : nullptr, true, true, | 244 | 1.40k | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 1.40k | bool keep_null_key = false; | 247 | 1.40k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 1.40k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 1.40k | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 1.40k | } else if (_parent->parent() | 253 | 1.40k | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 1.40k | .is_null_safe_eq_join() | 255 | 1.40k | .size() == 1 && | 256 | 1.40k | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 1.40k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 1.40k | _rows, keep_null_key); | 265 | 1.40k | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 1.40k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 1.40k | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 1.40k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 1.40k | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 1.40k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 1.40k | return Status::OK(); | 273 | 1.40k | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 8 | return Status::OK(); | 230 | 8 | } | 231 | 16 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 16 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 8 | *has_null_key = true; | 227 | 8 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 8 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 8 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 16 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIhNS_17HashCRC32Return32IhEELb1EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 4 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 4 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 4 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 4 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 4 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 4 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 8 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 4 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 4 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 4 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 4 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 4 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 4 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 8 | if (short_circuit_for_null && *has_null_key) { | 229 | 4 | return Status::OK(); | 230 | 4 | } | 231 | 8 | } | 232 | | | 233 | 4 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 4 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 4 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 4 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 4 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 4 | null_map ? null_map->data() : nullptr, true, true, | 244 | 4 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 4 | bool keep_null_key = false; | 247 | 4 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 4 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 4 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 4 | } else if (_parent->parent() | 253 | 4 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 4 | .is_null_safe_eq_join() | 255 | 4 | .size() == 1 && | 256 | 4 | _parent->parent() | 257 | 4 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 4 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 4 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 4 | _rows, keep_null_key); | 265 | 4 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 4 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 4 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 4 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 4 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 4 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 4 | return Status::OK(); | 273 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 8 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 4 | *has_null_key = true; | 227 | 4 | } | 228 | 4 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 4 | } | 232 | | | 233 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 4 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 4 | } | 241 | | | 242 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 8 | null_map ? null_map->data() : nullptr, true, true, | 244 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 8 | bool keep_null_key = false; | 247 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 8 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 8 | } else if (_parent->parent() | 253 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 8 | .is_null_safe_eq_join() | 255 | 8 | .size() == 1 && | 256 | 8 | _parent->parent() | 257 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 8 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 8 | _rows, keep_null_key); | 265 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 8 | return Status::OK(); | 273 | 8 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableItNS_17HashCRC32Return32ItEELb1EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 35 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 35 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 35 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 35 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 35 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 35 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 35 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 35 | null_map ? null_map->data() : nullptr, true, true, | 244 | 35 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 35 | bool keep_null_key = false; | 247 | 35 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 35 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 35 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 35 | } else if (_parent->parent() | 253 | 35 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 35 | .is_null_safe_eq_join() | 255 | 35 | .size() == 1 && | 256 | 35 | _parent->parent() | 257 | 35 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 35 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 35 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 35 | _rows, keep_null_key); | 265 | 35 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 35 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 35 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 35 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 35 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 35 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 35 | return Status::OK(); | 273 | 35 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 32 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 32 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 32 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 32 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 32 | if (short_circuit_for_null && *has_null_key) { | 229 | 16 | return Status::OK(); | 230 | 16 | } | 231 | 32 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIjNS_17HashCRC32Return32IjEELb1EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 40 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 40 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 40 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 40 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 40 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 40 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 80 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 80 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 80 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 80 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 80 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 80 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 40 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 40 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 40 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 40 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 40 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 40 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 80 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 80 | if (short_circuit_for_null && *has_null_key) { | 229 | 40 | return Status::OK(); | 230 | 40 | } | 231 | 80 | } | 232 | | | 233 | 40 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 40 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 40 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 40 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 40 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 40 | null_map ? null_map->data() : nullptr, true, true, | 244 | 40 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 40 | bool keep_null_key = false; | 247 | 40 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 40 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 40 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 40 | } else if (_parent->parent() | 253 | 40 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 40 | .is_null_safe_eq_join() | 255 | 40 | .size() == 1 && | 256 | 40 | _parent->parent() | 257 | 40 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 40 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 40 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 40 | _rows, keep_null_key); | 265 | 40 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 40 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 40 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 40 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 40 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 40 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 40 | return Status::OK(); | 273 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 80 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 40 | *has_null_key = true; | 227 | 40 | } | 228 | 40 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 40 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 40 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 40 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 80 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 80 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableImNS_17HashCRC32Return32ImEELb1EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 12 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 12 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 12 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 12 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 12 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 12 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 24 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 24 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 24 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 24 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 24 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 24 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 12 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 12 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 12 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 12 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 12 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 12 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 24 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 24 | if (short_circuit_for_null && *has_null_key) { | 229 | 12 | return Status::OK(); | 230 | 12 | } | 231 | 24 | } | 232 | | | 233 | 12 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 12 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 12 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 12 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 12 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 12 | null_map ? null_map->data() : nullptr, true, true, | 244 | 12 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 12 | bool keep_null_key = false; | 247 | 12 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 12 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 12 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 12 | } else if (_parent->parent() | 253 | 12 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 12 | .is_null_safe_eq_join() | 255 | 12 | .size() == 1 && | 256 | 12 | _parent->parent() | 257 | 12 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 12 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 12 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 12 | _rows, keep_null_key); | 265 | 12 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 12 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 12 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 12 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 12 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 12 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 12 | return Status::OK(); | 273 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 24 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 12 | *has_null_key = true; | 227 | 12 | } | 228 | 12 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 12 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 12 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 12 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 24 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 24 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_NS_17HashCRC32Return32IS4_EELb1EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 294 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 294 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 294 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 294 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 294 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 294 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 392 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 392 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 392 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 392 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 392 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 392 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 294 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 294 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 294 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 294 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 294 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 294 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 392 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 392 | if (short_circuit_for_null && *has_null_key) { | 229 | 294 | return Status::OK(); | 230 | 294 | } | 231 | 392 | } | 232 | | | 233 | 98 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 98 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 98 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 98 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 98 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 98 | null_map ? null_map->data() : nullptr, true, true, | 244 | 98 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 98 | bool keep_null_key = false; | 247 | 98 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 98 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 98 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 98 | } else if (_parent->parent() | 253 | 98 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 98 | .is_null_safe_eq_join() | 255 | 98 | .size() == 1 && | 256 | 98 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 98 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 98 | _rows, keep_null_key); | 265 | 98 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 98 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 98 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 98 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 98 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 98 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 98 | return Status::OK(); | 273 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 392 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 294 | *has_null_key = true; | 227 | 294 | } | 228 | 294 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 294 | } | 232 | | | 233 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 392 | null_map ? null_map->data() : nullptr, true, true, | 244 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 392 | bool keep_null_key = false; | 247 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 392 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 392 | } else if (_parent->parent() | 253 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 392 | .is_null_safe_eq_join() | 255 | 392 | .size() == 1 && | 256 | 392 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 392 | _rows, keep_null_key); | 265 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 392 | return Status::OK(); | 273 | 392 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableImNS_17HashCRC32Return32ImEELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 240 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 240 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 240 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 240 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 240 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 240 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 320 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 320 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 320 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 320 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 320 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 320 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 240 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 240 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 240 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 240 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 240 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 240 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 320 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 320 | if (short_circuit_for_null && *has_null_key) { | 229 | 240 | return Status::OK(); | 230 | 240 | } | 231 | 320 | } | 232 | | | 233 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 80 | null_map ? null_map->data() : nullptr, true, true, | 244 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 80 | bool keep_null_key = false; | 247 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 80 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 80 | } else if (_parent->parent() | 253 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 80 | .is_null_safe_eq_join() | 255 | 80 | .size() == 1 && | 256 | 80 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 80 | _rows, keep_null_key); | 265 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 80 | return Status::OK(); | 273 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 320 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 240 | *has_null_key = true; | 227 | 240 | } | 228 | 240 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 240 | } | 232 | | | 233 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 320 | null_map ? null_map->data() : nullptr, true, true, | 244 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 320 | bool keep_null_key = false; | 247 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 320 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 320 | } else if (_parent->parent() | 253 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 320 | .is_null_safe_eq_join() | 255 | 320 | .size() == 1 && | 256 | 320 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 320 | _rows, keep_null_key); | 265 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 320 | return Status::OK(); | 273 | 320 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 800 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 800 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 800 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 800 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 800 | if (short_circuit_for_null && *has_null_key) { | 229 | 600 | return Status::OK(); | 230 | 600 | } | 231 | 800 | } | 232 | | | 233 | 200 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 200 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 200 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 200 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 200 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 200 | null_map ? null_map->data() : nullptr, true, true, | 244 | 200 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 200 | bool keep_null_key = false; | 247 | 200 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 200 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 200 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 200 | } else if (_parent->parent() | 253 | 200 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 200 | .is_null_safe_eq_join() | 255 | 200 | .size() == 1 && | 256 | 200 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 200 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 200 | _rows, keep_null_key); | 265 | 200 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 200 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 200 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 200 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 200 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 200 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 200 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 800 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 800 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 800 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 800 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 800 | if (short_circuit_for_null && *has_null_key) { | 229 | 600 | return Status::OK(); | 230 | 600 | } | 231 | 800 | } | 232 | | | 233 | 200 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 200 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 200 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 200 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 200 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 200 | null_map ? null_map->data() : nullptr, true, true, | 244 | 200 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 200 | bool keep_null_key = false; | 247 | 200 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 200 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 200 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 200 | } else if (_parent->parent() | 253 | 200 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 200 | .is_null_safe_eq_join() | 255 | 200 | .size() == 1 && | 256 | 200 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 200 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 200 | _rows, keep_null_key); | 265 | 200 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 200 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 200 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 200 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 200 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 200 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 200 | return Status::OK(); | 273 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 800 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 600 | *has_null_key = true; | 227 | 600 | } | 228 | 600 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 600 | } | 232 | | | 233 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 800 | null_map ? null_map->data() : nullptr, true, true, | 244 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 800 | bool keep_null_key = false; | 247 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 800 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 800 | } else if (_parent->parent() | 253 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 800 | .is_null_safe_eq_join() | 255 | 800 | .size() == 1 && | 256 | 800 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 800 | _rows, keep_null_key); | 265 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 800 | return Status::OK(); | 273 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 72 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 72 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 72 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 72 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 72 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 72 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 96 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 96 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 96 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 96 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 96 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 96 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 72 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 72 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 72 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 72 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 72 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 72 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 96 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 96 | if (short_circuit_for_null && *has_null_key) { | 229 | 72 | return Status::OK(); | 230 | 72 | } | 231 | 96 | } | 232 | | | 233 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 24 | null_map ? null_map->data() : nullptr, true, true, | 244 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 24 | bool keep_null_key = false; | 247 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 24 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 24 | } else if (_parent->parent() | 253 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 24 | .is_null_safe_eq_join() | 255 | 24 | .size() == 1 && | 256 | 24 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 24 | _rows, keep_null_key); | 265 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 24 | return Status::OK(); | 273 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 96 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 72 | *has_null_key = true; | 227 | 72 | } | 228 | 72 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 72 | } | 232 | | | 233 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 96 | null_map ? null_map->data() : nullptr, true, true, | 244 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 96 | bool keep_null_key = false; | 247 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 96 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 96 | } else if (_parent->parent() | 253 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 96 | .is_null_safe_eq_join() | 255 | 96 | .size() == 1 && | 256 | 96 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 96 | _rows, keep_null_key); | 265 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 96 | return Status::OK(); | 273 | 96 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136ENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 594 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 594 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 594 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 594 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 594 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 594 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 792 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 792 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 792 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 792 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 792 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 792 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 594 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 594 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 594 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 594 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 594 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 594 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 792 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 792 | if (short_circuit_for_null && *has_null_key) { | 229 | 594 | return Status::OK(); | 230 | 594 | } | 231 | 792 | } | 232 | | | 233 | 198 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 198 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 198 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 198 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 198 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 198 | null_map ? null_map->data() : nullptr, true, true, | 244 | 198 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 198 | bool keep_null_key = false; | 247 | 198 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 198 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 198 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 198 | } else if (_parent->parent() | 253 | 198 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 198 | .is_null_safe_eq_join() | 255 | 198 | .size() == 1 && | 256 | 198 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 198 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 198 | _rows, keep_null_key); | 265 | 198 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 198 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 198 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 198 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 198 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 198 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 198 | return Status::OK(); | 273 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 792 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 594 | *has_null_key = true; | 227 | 594 | } | 228 | 594 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 594 | } | 232 | | | 233 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 792 | null_map ? null_map->data() : nullptr, true, true, | 244 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 792 | bool keep_null_key = false; | 247 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 792 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 792 | } else if (_parent->parent() | 253 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 792 | .is_null_safe_eq_join() | 255 | 792 | .size() == 1 && | 256 | 792 | _parent->parent() | 257 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 0 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 792 | _rows, keep_null_key); | 265 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 792 | return Status::OK(); | 273 | 792 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEENS_17HashCRC32Return32IS5_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 33 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 33 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 17 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 17 | *has_null_key = true; | 227 | 17 | } | 228 | 17 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 17 | } | 232 | | | 233 | 33 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 33 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 33 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 33 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 17 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 17 | } | 241 | | | 242 | 33 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 33 | null_map ? null_map->data() : nullptr, true, true, | 244 | 33 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 33 | bool keep_null_key = false; | 247 | 33 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 33 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 33 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 33 | } else if (_parent->parent() | 253 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 33 | .is_null_safe_eq_join() | 255 | 33 | .size() == 1 && | 256 | 33 | _parent->parent() | 257 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 33 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 33 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 33 | _rows, keep_null_key); | 265 | 33 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 33 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 33 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 33 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 33 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 33 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 33 | return Status::OK(); | 273 | 33 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 34 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 34 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 18 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 18 | *has_null_key = true; | 227 | 18 | } | 228 | 18 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 18 | } | 232 | | | 233 | 34 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 34 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 34 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 34 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 18 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 18 | } | 241 | | | 242 | 34 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 34 | null_map ? null_map->data() : nullptr, true, true, | 244 | 34 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 34 | bool keep_null_key = false; | 247 | 34 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 34 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 34 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 34 | } else if (_parent->parent() | 253 | 34 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 34 | .is_null_safe_eq_join() | 255 | 34 | .size() == 1 && | 256 | 34 | _parent->parent() | 257 | 34 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 34 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 34 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 34 | _rows, keep_null_key); | 265 | 34 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 34 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 34 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 34 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 34 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 34 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 34 | return Status::OK(); | 273 | 34 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 32 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 32 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 32 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 32 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 33 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 33 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 17 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 17 | *has_null_key = true; | 227 | 17 | } | 228 | 17 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 17 | } | 232 | | | 233 | 33 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 33 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 33 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 33 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 17 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 17 | } | 241 | | | 242 | 33 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 33 | null_map ? null_map->data() : nullptr, true, true, | 244 | 33 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 33 | bool keep_null_key = false; | 247 | 33 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 33 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 33 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 33 | } else if (_parent->parent() | 253 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 33 | .is_null_safe_eq_join() | 255 | 33 | .size() == 1 && | 256 | 33 | _parent->parent() | 257 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 33 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 33 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 33 | _rows, keep_null_key); | 265 | 33 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 33 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 33 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 33 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 33 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 33 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 33 | return Status::OK(); | 273 | 33 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 32 | if (short_circuit_for_null && *has_null_key) { | 229 | 16 | return Status::OK(); | 230 | 16 | } | 231 | 32 | } | 232 | | | 233 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 0 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 0 | } | 241 | | | 242 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 16 | null_map ? null_map->data() : nullptr, true, true, | 244 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 16 | bool keep_null_key = false; | 247 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 16 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 16 | } else if (_parent->parent() | 253 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 16 | .is_null_safe_eq_join() | 255 | 16 | .size() == 1 && | 256 | 16 | _parent->parent() | 257 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 16 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 16 | _rows, keep_null_key); | 265 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 16 | return Status::OK(); | 273 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 222 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 223 | 32 | if (null_map) { | 224 | | // first row is mocked and is null | 225 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 226 | 16 | *has_null_key = true; | 227 | 16 | } | 228 | 16 | if (short_circuit_for_null && *has_null_key) { | 229 | 0 | return Status::OK(); | 230 | 0 | } | 231 | 16 | } | 232 | | | 233 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 234 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 235 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 236 | | | 237 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 238 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 239 | 16 | const_cast<IColumn*>(_build_raw_ptrs[0])->replace_column_null_data(null_map->data()); | 240 | 16 | } | 241 | | | 242 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 243 | 32 | null_map ? null_map->data() : nullptr, true, true, | 244 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 245 | | // only 2 cases need to access the null value in hash table | 246 | 32 | bool keep_null_key = false; | 247 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 248 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 249 | 32 | with_other_conjuncts) { | 250 | | // null aware join with other conjuncts | 251 | 0 | keep_null_key = true; | 252 | 32 | } else if (_parent->parent() | 253 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 254 | 32 | .is_null_safe_eq_join() | 255 | 32 | .size() == 1 && | 256 | 32 | _parent->parent() | 257 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 258 | 32 | .is_null_safe_eq_join()[0]) { | 259 | | // single null safe eq | 260 | 0 | keep_null_key = true; | 261 | 0 | } | 262 | | | 263 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 264 | 32 | _rows, keep_null_key); | 265 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 266 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 267 | | | 268 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 269 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 270 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 271 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 272 | 32 | return Status::OK(); | 273 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefENS_17HashCRC32Return32IS3_EELb0EEEEEE3runILNS_7TJoinOp4typeE14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb |