diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp b/be/src/olap/rowset/segment_v2/column_reader.cpp index cb632400751c13..4a2e646cf3ff52 100644 --- a/be/src/olap/rowset/segment_v2/column_reader.cpp +++ b/be/src/olap/rowset/segment_v2/column_reader.cpp @@ -679,6 +679,7 @@ Status FileColumnIterator::read_by_rowids(const rowid_t* rowids, const size_t co auto* null_col = vectorized::check_and_get_column(dst); if (UNLIKELY(null_col == nullptr)) { + LOG(WARNING) << "Column " << dst->get_name() << " should be Nullable"; return Status::InternalError("unexpected column type in column reader"); } diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 3f109bb68b84a6..35dc9085462d5e 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -939,8 +939,12 @@ Status SegmentIterator::next_batch(vectorized::Block* block) { // the segment of c do not effective delete condition, but it still need read the column // to match the schema. // TODO: skip read the not effective delete column to speed up segment read. - _current_return_columns[cid] = - Schema::get_data_type_ptr(column_desc->type())->create_column(); + auto data_type = Schema::get_data_type_ptr(column_desc->type()); + if (column_desc->is_nullable()) { + data_type = + std::make_shared(std::move(data_type)); + } + _current_return_columns[cid] = data_type->create_column(); _current_return_columns[cid]->reserve(_opts.block_row_max); } }