diff --git a/be/src/vec/exec/scan/vscanner.cpp b/be/src/vec/exec/scan/vscanner.cpp index 39a9059d1d37c81..7b184e395988fb5 100644 --- a/be/src/vec/exec/scan/vscanner.cpp +++ b/be/src/vec/exec/scan/vscanner.cpp @@ -22,6 +22,7 @@ #include "common/config.h" #include "pipeline/exec/scan_operator.h" #include "runtime/descriptors.h" +#include "util/defer_op.h" #include "util/runtime_profile.h" #include "vec/core/column_with_type_and_name.h" #include "vec/exec/scan/vscan_node.h" @@ -116,6 +117,7 @@ Status VScanner::get_block(RuntimeState* state, Block* block, bool* eof) { SCOPED_TIMER(timer); RETURN_IF_ERROR(_get_block_impl(state, block, eof)); if (*eof) { + LOG(INFO) << "dump block " << block->dump_names(); DCHECK(block->rows() == 0); break; } @@ -152,6 +154,14 @@ Status VScanner::get_block(RuntimeState* state, Block* block, bool* eof) { } Status VScanner::_filter_output_block(Block* block) { + Defer clear_tmp_block([&]() { + auto all_column_names = block->get_names(); + for (auto& name : all_column_names) { + if (name.rfind(BeConsts::BLOCK_TEMP_COLUMN_PREFIX, 0) == 0) { + block->erase(name); + } + } + }); if (block->has(BeConsts::BLOCK_TEMP_COLUMN_SCANNER_FILTERED)) { // scanner filter_block is already done (only by _topn_next currently), just skip it return Status::OK(); @@ -159,12 +169,6 @@ Status VScanner::_filter_output_block(Block* block) { auto old_rows = block->rows(); Status st = VExprContext::filter_block(_conjuncts, block, block->columns()); _counter.num_rows_unselected += old_rows - block->rows(); - auto all_column_names = block->get_names(); - for (auto& name : all_column_names) { - if (name.rfind(BeConsts::BLOCK_TEMP_COLUMN_PREFIX, 0) == 0) { - block->erase(name); - } - } return st; }