Skip to content

Commit

Permalink
Optimize (left outer) (anti) semi join with other conditions (#8339)
Browse files Browse the repository at this point in the history
close #8262
  • Loading branch information
gengliqi committed Dec 6, 2023
1 parent 514f974 commit 88f9912
Show file tree
Hide file tree
Showing 12 changed files with 1,475 additions and 489 deletions.
353 changes: 331 additions & 22 deletions dbms/src/Flash/tests/gtest_join_executor.cpp

Large diffs are not rendered by default.

356 changes: 234 additions & 122 deletions dbms/src/Interpreters/Join.cpp

Large diffs are not rendered by default.

17 changes: 12 additions & 5 deletions dbms/src/Interpreters/Join.h
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,9 @@ class Join
Block joinBlockHash(ProbeProcessInfo & probe_process_info) const;
Block doJoinBlockHash(ProbeProcessInfo & probe_process_info, const JoinBuildInfo & join_build_info) const;

Block joinBlockNullAware(ProbeProcessInfo & probe_process_info) const;
Block joinBlockNullAwareSemi(ProbeProcessInfo & probe_process_info) const;

Block joinBlockSemi(ProbeProcessInfo & probe_process_info) const;

Block joinBlockCross(ProbeProcessInfo & probe_process_info) const;

Expand All @@ -471,23 +473,28 @@ class Join
*/
void handleOtherConditions(
Block & block,
std::unique_ptr<IColumn::Filter> & filter,
std::unique_ptr<IColumn::Offsets> & offsets_to_replicate,
IColumn::Filter * filter,
IColumn::Offsets * offsets_to_replicate,
const std::vector<size_t> & right_table_column) const;

void handleOtherConditionsForOneProbeRow(Block & block, ProbeProcessInfo & probe_process_info) const;

Block doJoinBlockCross(ProbeProcessInfo & probe_process_info) const;

template <ASTTableJoin::Kind KIND, ASTTableJoin::Strictness STRICTNESS, typename Maps>
void joinBlockNullAwareImpl(
void joinBlockNullAwareSemiImpl(
Block & block,
size_t left_columns,
const ColumnRawPtrs & key_columns,
const ConstNullMapPtr & null_map,
const ConstNullMapPtr & filter_map,
const ConstNullMapPtr & all_key_null_map) const;

template <ASTTableJoin::Kind KIND, ASTTableJoin::Strictness STRICTNESS, typename Maps>
void joinBlockSemiImpl(
Block & block,
const JoinBuildInfo & join_build_info,
const ProbeProcessInfo & probe_process_info) const;

IColumn::Selector hashToSelector(const WeakHash32 & hash) const;
IColumn::Selector selectDispatchBlock(const Strings & key_columns_names, const Block & from_block);

Expand Down

0 comments on commit 88f9912

Please sign in to comment.