This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 93a865c3e8 [improvement](join) Avoid reading from left child while
hash table is empty(right join) (#17655)
93a865c3e8 is described below
commit 93a865c3e88f5d483ae413c74e8e8bcb8816e904
Author: Jerry Hu <[email protected]>
AuthorDate: Mon Mar 13 09:03:17 2023 +0800
[improvement](join) Avoid reading from left child while hash table is
empty(right join) (#17655)
When the right (build) side is empty in a right outer join, there is no
need to read data from the left child.
---
be/src/vec/exec/join/vhash_join_node.cpp | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/be/src/vec/exec/join/vhash_join_node.cpp
b/be/src/vec/exec/join/vhash_join_node.cpp
index face23f898..45847960f7 100644
--- a/be/src/vec/exec/join/vhash_join_node.cpp
+++ b/be/src/vec/exec/join/vhash_join_node.cpp
@@ -598,6 +598,22 @@ Status HashJoinNode::get_next(RuntimeState* state, Block*
output_block, bool* eo
*eos = true;
return Status::OK();
}
+
+ if (_join_op == TJoinOp::RIGHT_OUTER_JOIN) {
+ const auto hash_table_empty = std::visit(
+ Overload {[&](std::monostate&) -> bool {
+ LOG(FATAL) << "FATAL: uninited hash table";
+ __builtin_unreachable();
+ },
+ [&](auto&& arg) -> bool { return
arg.hash_table.size() == 0; }},
+ *_hash_table_variants);
+
+ if (hash_table_empty) {
+ *eos = true;
+ return Status::OK();
+ }
+ }
+
while (need_more_input_data()) {
prepare_for_next();
SCOPED_TIMER(_probe_next_timer);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]