268 | 48.0k | } _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.41k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.06k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.06k | *has_null_key = true; | 222 | 1.06k | } | 223 | 1.06k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.06k | } | 227 | | | 228 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.41k | bool keep_null_key = false; | 242 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.41k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.41k | } else if (_parent->parent() | 248 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.41k | .is_null_safe_eq_join() | 250 | 1.41k | .size() == 1 && | 251 | 1.41k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.41k | _rows, keep_null_key); | 260 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.41k | return Status::OK(); | 268 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.41k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.05k | } | 227 | | | 228 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.41k | bool keep_null_key = false; | 242 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.41k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.41k | } else if (_parent->parent() | 248 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.41k | .is_null_safe_eq_join() | 250 | 1.41k | .size() == 1 && | 251 | 1.41k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.41k | _rows, keep_null_key); | 260 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.41k | return Status::OK(); | 268 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.41k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.05k | } | 227 | | | 228 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.41k | bool keep_null_key = false; | 242 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.41k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.41k | } else if (_parent->parent() | 248 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.41k | .is_null_safe_eq_join() | 250 | 1.41k | .size() == 1 && | 251 | 1.41k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.41k | _rows, keep_null_key); | 260 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.41k | return Status::OK(); | 268 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.41k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.41k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.41k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.41k | } | 227 | | | 228 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.41k | bool keep_null_key = false; | 242 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.41k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.41k | } else if (_parent->parent() | 248 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.41k | .is_null_safe_eq_join() | 250 | 1.41k | .size() == 1 && | 251 | 1.41k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.41k | _rows, keep_null_key); | 260 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.41k | return Status::OK(); | 268 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.41k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.41k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.41k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.41k | } | 227 | | | 228 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.41k | bool keep_null_key = false; | 242 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.41k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.41k | } else if (_parent->parent() | 248 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.41k | .is_null_safe_eq_join() | 250 | 1.41k | .size() == 1 && | 251 | 1.41k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.41k | _rows, keep_null_key); | 260 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.41k | return Status::OK(); | 268 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.41k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.05k | } | 227 | | | 228 | 1.41k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.41k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.41k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.41k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.41k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.41k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.41k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.41k | bool keep_null_key = false; | 242 | 1.41k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.41k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.41k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.41k | } else if (_parent->parent() | 248 | 1.41k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.41k | .is_null_safe_eq_join() | 250 | 1.41k | .size() == 1 && | 251 | 1.41k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.41k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.41k | _rows, keep_null_key); | 260 | 1.41k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.41k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.41k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.41k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.41k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.41k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.41k | return Status::OK(); | 268 | 1.41k | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.40k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.40k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.05k | } | 227 | | | 228 | 1.40k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.40k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.40k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.40k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.40k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.40k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.40k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.40k | bool keep_null_key = false; | 242 | 1.40k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.40k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.40k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.40k | } else if (_parent->parent() | 248 | 1.40k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.40k | .is_null_safe_eq_join() | 250 | 1.40k | .size() == 1 && | 251 | 1.40k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.40k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.40k | _rows, keep_null_key); | 260 | 1.40k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.40k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.40k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.40k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.40k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.40k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.40k | return Status::OK(); | 268 | 1.40k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.40k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.40k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.05k | } | 227 | | | 228 | 1.40k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.40k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.40k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.40k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.40k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.40k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.40k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.40k | bool keep_null_key = false; | 242 | 1.40k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.40k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.40k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.40k | } else if (_parent->parent() | 248 | 1.40k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.40k | .is_null_safe_eq_join() | 250 | 1.40k | .size() == 1 && | 251 | 1.40k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.40k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.40k | _rows, keep_null_key); | 260 | 1.40k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.40k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.40k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.40k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.40k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.40k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.40k | return Status::OK(); | 268 | 1.40k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.41k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.41k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.41k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.06k | *has_null_key = true; | 222 | 1.06k | } | 223 | 1.41k | if (short_circuit_for_null && *has_null_key) { | 224 | 1.05k | return Status::OK(); | 225 | 1.05k | } | 226 | 1.41k | } | 227 | | | 228 | 355 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 355 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 355 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 355 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 355 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 355 | null_map ? null_map->data() : nullptr, true, true, | 239 | 355 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 355 | bool keep_null_key = false; | 242 | 355 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 355 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 355 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 355 | } else if (_parent->parent() | 248 | 355 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 355 | .is_null_safe_eq_join() | 250 | 355 | .size() == 1 && | 251 | 355 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 355 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 355 | _rows, keep_null_key); | 260 | 355 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 355 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 355 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 355 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 355 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 355 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 355 | return Status::OK(); | 268 | 1.41k | } |
_ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 1.40k | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 1.40k | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 1.05k | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 1.05k | *has_null_key = true; | 222 | 1.05k | } | 223 | 1.05k | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 1.05k | } | 227 | | | 228 | 1.40k | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 1.40k | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 1.40k | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 1.40k | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 1.40k | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 1.40k | null_map ? null_map->data() : nullptr, true, true, | 239 | 1.40k | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 1.40k | bool keep_null_key = false; | 242 | 1.40k | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 1.40k | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 1.40k | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 1.40k | } else if (_parent->parent() | 248 | 1.40k | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 1.40k | .is_null_safe_eq_join() | 250 | 1.40k | .size() == 1 && | 251 | 1.40k | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 1.40k | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 1.40k | _rows, keep_null_key); | 260 | 1.40k | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 1.40k | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 1.40k | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 1.40k | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 1.40k | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 1.40k | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 1.40k | return Status::OK(); | 268 | 1.40k | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_16MethodSerializedINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIhNS_13JoinHashTableIh9HashCRC32IhELb0EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberItNS_13JoinHashTableIt9HashCRC32ItELb0EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIjNS_13JoinHashTableIj9HashCRC32IjELb0EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberImNS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodOneNumberIN4wide7integerILm256EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb0EEEEEE3runILi14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 8 | return Status::OK(); | 225 | 8 | } | 226 | 16 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 16 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 16 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 16 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 8 | *has_null_key = true; | 222 | 8 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 8 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 8 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 16 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIhNS_13JoinHashTableIh9HashCRC32IhELb1EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 4 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 4 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 4 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 4 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 4 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 4 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 8 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 4 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 4 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 4 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 4 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 4 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 4 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 8 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 8 | if (short_circuit_for_null && *has_null_key) { | 224 | 4 | return Status::OK(); | 225 | 4 | } | 226 | 8 | } | 227 | | | 228 | 4 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 4 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 4 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 4 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 4 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 4 | null_map ? null_map->data() : nullptr, true, true, | 239 | 4 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 4 | bool keep_null_key = false; | 242 | 4 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 4 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 4 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 4 | } else if (_parent->parent() | 248 | 4 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 4 | .is_null_safe_eq_join() | 250 | 4 | .size() == 1 && | 251 | 4 | _parent->parent() | 252 | 4 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 4 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 4 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 4 | _rows, keep_null_key); | 260 | 4 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 4 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 4 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 4 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 4 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 4 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 4 | return Status::OK(); | 268 | 8 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 8 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 8 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 4 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 4 | *has_null_key = true; | 222 | 4 | } | 223 | 4 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 4 | } | 227 | | | 228 | 8 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 8 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 8 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 8 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 4 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 4 | } | 236 | | | 237 | 8 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 8 | null_map ? null_map->data() : nullptr, true, true, | 239 | 8 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 8 | bool keep_null_key = false; | 242 | 8 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 8 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 8 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 8 | } else if (_parent->parent() | 248 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 8 | .is_null_safe_eq_join() | 250 | 8 | .size() == 1 && | 251 | 8 | _parent->parent() | 252 | 8 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 8 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 8 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 8 | _rows, keep_null_key); | 260 | 8 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 8 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 8 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 8 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 8 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 8 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 8 | return Status::OK(); | 268 | 8 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectItNS_13JoinHashTableIt9HashCRC32ItELb1EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 34 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 34 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 34 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 34 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 34 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 34 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 34 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 34 | null_map ? null_map->data() : nullptr, true, true, | 239 | 34 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 34 | bool keep_null_key = false; | 242 | 34 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 34 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 34 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 34 | } else if (_parent->parent() | 248 | 34 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 34 | .is_null_safe_eq_join() | 250 | 34 | .size() == 1 && | 251 | 34 | _parent->parent() | 252 | 34 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 34 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 34 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 34 | _rows, keep_null_key); | 260 | 34 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 34 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 34 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 34 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 34 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 34 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 34 | return Status::OK(); | 268 | 34 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 32 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 32 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 32 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 32 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 32 | if (short_circuit_for_null && *has_null_key) { | 224 | 16 | return Status::OK(); | 225 | 16 | } | 226 | 32 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIjNS_13JoinHashTableIj9HashCRC32IjELb1EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 40 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 40 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 40 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 40 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 40 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 40 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 80 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 80 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 80 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 80 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 80 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 80 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 40 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 40 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 40 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 40 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 40 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 40 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 80 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 80 | if (short_circuit_for_null && *has_null_key) { | 224 | 40 | return Status::OK(); | 225 | 40 | } | 226 | 80 | } | 227 | | | 228 | 40 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 40 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 40 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 40 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 40 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 40 | null_map ? null_map->data() : nullptr, true, true, | 239 | 40 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 40 | bool keep_null_key = false; | 242 | 40 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 40 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 40 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 40 | } else if (_parent->parent() | 248 | 40 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 40 | .is_null_safe_eq_join() | 250 | 40 | .size() == 1 && | 251 | 40 | _parent->parent() | 252 | 40 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 40 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 40 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 40 | _rows, keep_null_key); | 260 | 40 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 40 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 40 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 40 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 40 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 40 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 40 | return Status::OK(); | 268 | 80 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 80 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 80 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 40 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 40 | *has_null_key = true; | 222 | 40 | } | 223 | 40 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 40 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 40 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 40 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 80 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 80 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectImNS_13JoinHashTableIm9HashCRC32ImELb1EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 12 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 12 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 12 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 12 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 12 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 12 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 24 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 24 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 24 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 24 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 24 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 24 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 12 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 12 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 12 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 12 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 12 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 12 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 24 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 24 | if (short_circuit_for_null && *has_null_key) { | 224 | 12 | return Status::OK(); | 225 | 12 | } | 226 | 24 | } | 227 | | | 228 | 12 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 12 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 12 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 12 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 12 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 12 | null_map ? null_map->data() : nullptr, true, true, | 239 | 12 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 12 | bool keep_null_key = false; | 242 | 12 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 12 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 12 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 12 | } else if (_parent->parent() | 248 | 12 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 12 | .is_null_safe_eq_join() | 250 | 12 | .size() == 1 && | 251 | 12 | _parent->parent() | 252 | 12 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 12 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 12 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 12 | _rows, keep_null_key); | 260 | 12 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 12 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 12 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 12 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 12 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 12 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 12 | return Status::OK(); | 268 | 24 | } |
_ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 24 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 24 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 12 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 12 | *has_null_key = true; | 222 | 12 | } | 223 | 12 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 12 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 12 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 12 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 24 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 24 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_21MethodOneNumberDirectIN4wide7integerILm128EjEENS_13JoinHashTableIS4_9HashCRC32IS4_ELb1EEEEEE3runILi14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi0EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 294 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 294 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi2EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 294 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 294 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi8EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 294 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 294 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi1EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 392 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 392 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 392 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi4EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 392 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 392 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 392 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi3EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 294 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 294 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi5EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi7EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 294 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 294 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi9EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 294 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 294 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi10EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 392 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 392 | if (short_circuit_for_null && *has_null_key) { | 224 | 294 | return Status::OK(); | 225 | 294 | } | 226 | 392 | } | 227 | | | 228 | 98 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 98 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 98 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 98 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 98 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 98 | null_map ? null_map->data() : nullptr, true, true, | 239 | 98 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 98 | bool keep_null_key = false; | 242 | 98 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 98 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 98 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 98 | } else if (_parent->parent() | 248 | 98 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 98 | .is_null_safe_eq_join() | 250 | 98 | .size() == 1 && | 251 | 98 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 98 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 98 | _rows, keep_null_key); | 260 | 98 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 98 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 98 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 98 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 98 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 98 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 98 | return Status::OK(); | 268 | 392 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi11EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 392 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 392 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 294 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 294 | *has_null_key = true; | 222 | 294 | } | 223 | 294 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 294 | } | 227 | | | 228 | 392 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 392 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 392 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 392 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 392 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 392 | null_map ? null_map->data() : nullptr, true, true, | 239 | 392 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 392 | bool keep_null_key = false; | 242 | 392 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 392 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 392 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 392 | } else if (_parent->parent() | 248 | 392 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 392 | .is_null_safe_eq_join() | 250 | 392 | .size() == 1 && | 251 | 392 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 392 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 392 | _rows, keep_null_key); | 260 | 392 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 392 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 392 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 392 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 392 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 392 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 392 | return Status::OK(); | 268 | 392 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi12EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIm9HashCRC32ImELb0EEEEEE3runILi14EEENS_6StatusERS6_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 240 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 240 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 240 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 240 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 240 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 240 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 320 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 320 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 320 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 320 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 320 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 320 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 240 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 240 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 240 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 240 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 240 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 240 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 320 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 320 | if (short_circuit_for_null && *has_null_key) { | 224 | 240 | return Status::OK(); | 225 | 240 | } | 226 | 320 | } | 227 | | | 228 | 80 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 80 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 80 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 80 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 80 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 80 | null_map ? null_map->data() : nullptr, true, true, | 239 | 80 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 80 | bool keep_null_key = false; | 242 | 80 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 80 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 80 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 80 | } else if (_parent->parent() | 248 | 80 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 80 | .is_null_safe_eq_join() | 250 | 80 | .size() == 1 && | 251 | 80 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 80 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 80 | _rows, keep_null_key); | 260 | 80 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 80 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 80 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 80 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 80 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 80 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 80 | return Status::OK(); | 268 | 320 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 320 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 320 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 240 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 240 | *has_null_key = true; | 222 | 240 | } | 223 | 240 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 240 | } | 227 | | | 228 | 320 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 320 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 320 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 320 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 320 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 320 | null_map ? null_map->data() : nullptr, true, true, | 239 | 320 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 320 | bool keep_null_key = false; | 242 | 320 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 320 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 320 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 320 | } else if (_parent->parent() | 248 | 320 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 320 | .is_null_safe_eq_join() | 250 | 320 | .size() == 1 && | 251 | 320 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 320 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 320 | _rows, keep_null_key); | 260 | 320 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 320 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 320 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 320 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 320 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 320 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 320 | return Status::OK(); | 268 | 320 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt72E9HashCRC32IS3_ELb0EEEEEE3runILi14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 800 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 800 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 800 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 800 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 800 | if (short_circuit_for_null && *has_null_key) { | 224 | 600 | return Status::OK(); | 225 | 600 | } | 226 | 800 | } | 227 | | | 228 | 200 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 200 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 200 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 200 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 200 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 200 | null_map ? null_map->data() : nullptr, true, true, | 239 | 200 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 200 | bool keep_null_key = false; | 242 | 200 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 200 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 200 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 200 | } else if (_parent->parent() | 248 | 200 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 200 | .is_null_safe_eq_join() | 250 | 200 | .size() == 1 && | 251 | 200 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 200 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 200 | _rows, keep_null_key); | 260 | 200 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 200 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 200 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 200 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 200 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 200 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 200 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_6UInt96E9HashCRC32IS3_ELb0EEEEEE3runILi14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt104E9HashCRC32IS3_ELb0EEEEEE3runILi14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 800 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 800 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 800 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 800 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 800 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 800 | if (short_circuit_for_null && *has_null_key) { | 224 | 600 | return Status::OK(); | 225 | 600 | } | 226 | 800 | } | 227 | | | 228 | 200 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 200 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 200 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 200 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 200 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 200 | null_map ? null_map->data() : nullptr, true, true, | 239 | 200 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 200 | bool keep_null_key = false; | 242 | 200 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 200 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 200 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 200 | } else if (_parent->parent() | 248 | 200 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 200 | .is_null_safe_eq_join() | 250 | 200 | .size() == 1 && | 251 | 200 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 200 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 200 | _rows, keep_null_key); | 260 | 200 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 200 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 200 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 200 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 200 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 200 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 200 | return Status::OK(); | 268 | 800 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 800 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 800 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 600 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 600 | *has_null_key = true; | 222 | 600 | } | 223 | 600 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 600 | } | 227 | | | 228 | 800 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 800 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 800 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 800 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 800 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 800 | null_map ? null_map->data() : nullptr, true, true, | 239 | 800 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 800 | bool keep_null_key = false; | 242 | 800 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 800 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 800 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 800 | } else if (_parent->parent() | 248 | 800 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 800 | .is_null_safe_eq_join() | 250 | 800 | .size() == 1 && | 251 | 800 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 800 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 800 | _rows, keep_null_key); | 260 | 800 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 800 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 800 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 800 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 800 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 800 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 800 | return Status::OK(); | 268 | 800 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm128EjEE9HashCRC32IS5_ELb0EEEEEE3runILi14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 72 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 72 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 72 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 72 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 72 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 72 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 96 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 96 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 96 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 96 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 96 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 96 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 72 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 72 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 72 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 72 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 72 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 72 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 96 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 96 | if (short_circuit_for_null && *has_null_key) { | 224 | 72 | return Status::OK(); | 225 | 72 | } | 226 | 96 | } | 227 | | | 228 | 24 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 24 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 24 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 24 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 24 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 24 | null_map ? null_map->data() : nullptr, true, true, | 239 | 24 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 24 | bool keep_null_key = false; | 242 | 24 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 24 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 24 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 24 | } else if (_parent->parent() | 248 | 24 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 24 | .is_null_safe_eq_join() | 250 | 24 | .size() == 1 && | 251 | 24 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 24 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 24 | _rows, keep_null_key); | 260 | 24 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 24 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 24 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 24 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 24 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 24 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 24 | return Status::OK(); | 268 | 96 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 96 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 96 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 72 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 72 | *has_null_key = true; | 222 | 72 | } | 223 | 72 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 72 | } | 227 | | | 228 | 96 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 96 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 96 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 96 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 96 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 96 | null_map ? null_map->data() : nullptr, true, true, | 239 | 96 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 96 | bool keep_null_key = false; | 242 | 96 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 96 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 96 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 96 | } else if (_parent->parent() | 248 | 96 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 96 | .is_null_safe_eq_join() | 250 | 96 | .size() == 1 && | 251 | 96 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 96 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 96 | _rows, keep_null_key); | 260 | 96 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 96 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 96 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 96 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 96 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 96 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 96 | return Status::OK(); | 268 | 96 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableINS_7UInt136E9HashCRC32IS3_ELb0EEEEEE3runILi14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi0EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 594 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 594 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi2EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 594 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 594 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi8EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 594 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 594 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi1EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 792 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 792 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 792 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi4EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 792 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 792 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 792 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi3EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 594 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 594 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi5EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi7EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 594 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 594 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi9EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 594 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 594 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi10EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 792 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 792 | if (short_circuit_for_null && *has_null_key) { | 224 | 594 | return Status::OK(); | 225 | 594 | } | 226 | 792 | } | 227 | | | 228 | 198 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 198 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 198 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 198 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 198 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 198 | null_map ? null_map->data() : nullptr, true, true, | 239 | 198 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 198 | bool keep_null_key = false; | 242 | 198 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 198 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 198 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 198 | } else if (_parent->parent() | 248 | 198 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 198 | .is_null_safe_eq_join() | 250 | 198 | .size() == 1 && | 251 | 198 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 198 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 198 | _rows, keep_null_key); | 260 | 198 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 198 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 198 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 198 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 198 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 198 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 198 | return Status::OK(); | 268 | 792 | } |
_ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi11EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 792 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 792 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 594 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 594 | *has_null_key = true; | 222 | 594 | } | 223 | 594 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 594 | } | 227 | | | 228 | 792 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 792 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 792 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 792 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 792 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 792 | null_map ? null_map->data() : nullptr, true, true, | 239 | 792 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 792 | bool keep_null_key = false; | 242 | 792 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 792 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 792 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 792 | } else if (_parent->parent() | 248 | 792 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 792 | .is_null_safe_eq_join() | 250 | 792 | .size() == 1 && | 251 | 792 | _parent->parent() | 252 | 0 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 0 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 792 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 792 | _rows, keep_null_key); | 260 | 792 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 792 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 792 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 792 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 792 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 792 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 792 | return Status::OK(); | 268 | 792 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi12EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_15MethodKeysFixedINS_13JoinHashTableIN4wide7integerILm256EjEE9HashCRC32IS5_ELb0EEEEEE3runILi14EEENS_6StatusERS9_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi0EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi2EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 33 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 33 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 17 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 17 | *has_null_key = true; | 222 | 17 | } | 223 | 17 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 17 | } | 227 | | | 228 | 33 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 33 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 33 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 33 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 17 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 17 | } | 236 | | | 237 | 33 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 33 | null_map ? null_map->data() : nullptr, true, true, | 239 | 33 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 33 | bool keep_null_key = false; | 242 | 33 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 33 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 33 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 33 | } else if (_parent->parent() | 248 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 33 | .is_null_safe_eq_join() | 250 | 33 | .size() == 1 && | 251 | 33 | _parent->parent() | 252 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 33 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 33 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 33 | _rows, keep_null_key); | 260 | 33 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 33 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 33 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 33 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 33 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 33 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 33 | return Status::OK(); | 268 | 33 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi8EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 34 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 34 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 18 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 18 | *has_null_key = true; | 222 | 18 | } | 223 | 18 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 18 | } | 227 | | | 228 | 34 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 34 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 34 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 34 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 18 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 18 | } | 236 | | | 237 | 34 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 34 | null_map ? null_map->data() : nullptr, true, true, | 239 | 34 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 34 | bool keep_null_key = false; | 242 | 34 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 34 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 34 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 34 | } else if (_parent->parent() | 248 | 34 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 34 | .is_null_safe_eq_join() | 250 | 34 | .size() == 1 && | 251 | 34 | _parent->parent() | 252 | 34 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 34 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 34 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 34 | _rows, keep_null_key); | 260 | 34 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 34 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 34 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 34 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 34 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 34 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 34 | return Status::OK(); | 268 | 34 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi1EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 32 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 32 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi4EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 32 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 32 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi3EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi5EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi7EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 33 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 33 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 17 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 17 | *has_null_key = true; | 222 | 17 | } | 223 | 17 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 17 | } | 227 | | | 228 | 33 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 33 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 33 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 33 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 17 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 17 | } | 236 | | | 237 | 33 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 33 | null_map ? null_map->data() : nullptr, true, true, | 239 | 33 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 33 | bool keep_null_key = false; | 242 | 33 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 33 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 33 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 33 | } else if (_parent->parent() | 248 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 33 | .is_null_safe_eq_join() | 250 | 33 | .size() == 1 && | 251 | 33 | _parent->parent() | 252 | 33 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 33 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 33 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 33 | _rows, keep_null_key); | 260 | 33 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 33 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 33 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 33 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 33 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 33 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 33 | return Status::OK(); | 268 | 33 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi9EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi10EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 32 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 32 | if (short_circuit_for_null && *has_null_key) { | 224 | 16 | return Status::OK(); | 225 | 16 | } | 226 | 32 | } | 227 | | | 228 | 16 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 16 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 16 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 16 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 0 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 0 | } | 236 | | | 237 | 16 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 16 | null_map ? null_map->data() : nullptr, true, true, | 239 | 16 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 16 | bool keep_null_key = false; | 242 | 16 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 16 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 16 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 16 | } else if (_parent->parent() | 248 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 16 | .is_null_safe_eq_join() | 250 | 16 | .size() == 1 && | 251 | 16 | _parent->parent() | 252 | 16 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 16 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 16 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 16 | _rows, keep_null_key); | 260 | 16 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 16 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 16 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 16 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 16 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 16 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 16 | return Status::OK(); | 268 | 32 | } |
_ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi11EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Line | Count | Source | 217 | 32 | bool short_circuit_for_null, bool with_other_conjuncts) { | 218 | 32 | if (null_map) { | 219 | | // first row is mocked and is null | 220 | 16 | if (simd::contain_one(null_map->data() + 1, _rows - 1)) { | 221 | 16 | *has_null_key = true; | 222 | 16 | } | 223 | 16 | if (short_circuit_for_null && *has_null_key) { | 224 | 0 | return Status::OK(); | 225 | 0 | } | 226 | 16 | } | 227 | | | 228 | 32 | SCOPED_TIMER(_parent->_build_table_insert_timer); | 229 | 32 | hash_table_ctx.hash_table->template prepare_build<JoinOpType>( | 230 | 32 | _rows, _batch_size, *has_null_key, hash_table_ctx.direct_mapping_range()); | 231 | | | 232 | | // In order to make the null keys equal when using single null eq, all null keys need to be set to default value. | 233 | 32 | if (_build_raw_ptrs.size() == 1 && null_map && *has_null_key) { | 234 | 16 | _build_raw_ptrs[0]->assume_mutable()->replace_column_null_data(null_map->data()); | 235 | 16 | } | 236 | | | 237 | 32 | hash_table_ctx.init_serialized_keys(_build_raw_ptrs, _rows, | 238 | 32 | null_map ? null_map->data() : nullptr, true, true, | 239 | 32 | hash_table_ctx.hash_table->get_bucket_size()); | 240 | | // only 2 cases need to access the null value in hash table | 241 | 32 | bool keep_null_key = false; | 242 | 32 | if ((JoinOpType == TJoinOp::NULL_AWARE_LEFT_ANTI_JOIN || | 243 | 32 | JoinOpType == TJoinOp::NULL_AWARE_LEFT_SEMI_JOIN) && | 244 | 32 | with_other_conjuncts) { | 245 | | // null aware join with other conjuncts | 246 | 0 | keep_null_key = true; | 247 | 32 | } else if (_parent->parent() | 248 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 249 | 32 | .is_null_safe_eq_join() | 250 | 32 | .size() == 1 && | 251 | 32 | _parent->parent() | 252 | 32 | ->cast<HashJoinBuildSinkOperatorX>() | 253 | 32 | .is_null_safe_eq_join()[0]) { | 254 | | // single null safe eq | 255 | 0 | keep_null_key = true; | 256 | 0 | } | 257 | | | 258 | 32 | hash_table_ctx.hash_table->build(hash_table_ctx.keys, hash_table_ctx.bucket_nums.data(), | 259 | 32 | _rows, keep_null_key); | 260 | 32 | hash_table_ctx.bucket_nums.resize(_batch_size); | 261 | 32 | hash_table_ctx.bucket_nums.shrink_to_fit(); | 262 | | | 263 | 32 | COUNTER_SET(_parent->_hash_table_memory_usage, | 264 | 32 | (int64_t)hash_table_ctx.hash_table->get_byte_size()); | 265 | 32 | COUNTER_SET(_parent->_build_arena_memory_usage, | 266 | 32 | (int64_t)hash_table_ctx.serialized_keys_size(true)); | 267 | 32 | return Status::OK(); | 268 | 32 | } |
Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi12EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb Unexecuted instantiation: _ZN5doris21ProcessHashTableBuildINS_19MethodStringNoCacheINS_13JoinHashTableINS_9StringRefE11DefaultHashIS3_vELb0EEEEEE3runILi14EEENS_6StatusERS7_PKNS_8PODArrayIhLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEPbbb |