diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 224f5effc2..659b49b6fe 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -1294,8 +1294,7 @@ Status SegmentIterator::next_batch(vectorized::Block* block) { auto cid = _schema.column_id(i); auto column_desc = _schema.column(cid); if (_is_pred_column[cid]) { - _current_return_columns[cid] = - Schema::get_predicate_column_nullable_ptr(*column_desc); + _current_return_columns[cid] = Schema::get_predicate_column_ptr(*column_desc); _current_return_columns[cid]->set_rowset_segment_id( {_segment->rowset_id(), _segment->id()}); _current_return_columns[cid]->reserve(_opts.block_row_max); diff --git a/be/src/olap/schema.cpp b/be/src/olap/schema.cpp index b4116ec0a5..cb4b9036aa 100644 --- a/be/src/olap/schema.cpp +++ b/be/src/olap/schema.cpp @@ -117,12 +117,75 @@ vectorized::IColumn::MutablePtr Schema::get_column_by_field(const Field& field) return get_data_type_ptr(field)->create_column(); } -vectorized::IColumn::MutablePtr Schema::get_predicate_column_nullable_ptr(const Field& field) { +vectorized::IColumn::MutablePtr Schema::get_predicate_column_ptr(const Field& field) { if (UNLIKELY(field.type() == OLAP_FIELD_TYPE_ARRAY)) { return get_data_type_ptr(field)->create_column(); } - vectorized::IColumn::MutablePtr ptr = Schema::get_predicate_column_ptr(field.type()); + vectorized::IColumn::MutablePtr ptr = nullptr; + switch (field.type()) { + case OLAP_FIELD_TYPE_BOOL: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_TINYINT: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_SMALLINT: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_INT: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_FLOAT: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DOUBLE: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_BIGINT: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_LARGEINT: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DATE: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DATEV2: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DATETIMEV2: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DATETIME: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_CHAR: + case OLAP_FIELD_TYPE_VARCHAR: + case OLAP_FIELD_TYPE_STRING: + if (config::enable_low_cardinality_optimize) { + ptr = doris::vectorized::ColumnDictionary::create( + field.type()); + } else { + ptr = doris::vectorized::PredicateColumnType::create(); + } + break; + case OLAP_FIELD_TYPE_DECIMAL: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DECIMAL32: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DECIMAL64: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + case OLAP_FIELD_TYPE_DECIMAL128I: + ptr = doris::vectorized::PredicateColumnType::create(); + break; + default: + LOG(FATAL) << "Unexpected type when choosing predicate column, type=" << field.type(); + } + if (field.is_nullable()) { return doris::vectorized::ColumnNullable::create(std::move(ptr), doris::vectorized::ColumnUInt8::create()); @@ -130,64 +193,4 @@ vectorized::IColumn::MutablePtr Schema::get_predicate_column_nullable_ptr(const return ptr; } -vectorized::IColumn::MutablePtr Schema::get_predicate_column_ptr(FieldType type) { - switch (type) { - case OLAP_FIELD_TYPE_BOOL: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_TINYINT: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_SMALLINT: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_INT: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_FLOAT: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_DOUBLE: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_BIGINT: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_LARGEINT: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_DATE: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_DATEV2: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_DATETIMEV2: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_DATETIME: - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_CHAR: - case OLAP_FIELD_TYPE_VARCHAR: - case OLAP_FIELD_TYPE_STRING: - if (config::enable_low_cardinality_optimize) { - return doris::vectorized::ColumnDictionary::create(type); - } - return doris::vectorized::PredicateColumnType::create(); - - case OLAP_FIELD_TYPE_DECIMAL: - return doris::vectorized::PredicateColumnType::create(); - case OLAP_FIELD_TYPE_DECIMAL32: - return doris::vectorized::PredicateColumnType::create(); - case OLAP_FIELD_TYPE_DECIMAL64: - return doris::vectorized::PredicateColumnType::create(); - case OLAP_FIELD_TYPE_DECIMAL128I: - return doris::vectorized::PredicateColumnType::create(); - - default: - LOG(FATAL) << "Unexpected type when choosing predicate column, type=" << type; - } -} - } // namespace doris diff --git a/be/src/olap/schema.h b/be/src/olap/schema.h index afbff13b00..4b06aed2b2 100644 --- a/be/src/olap/schema.h +++ b/be/src/olap/schema.h @@ -112,9 +112,7 @@ public: static vectorized::IColumn::MutablePtr get_column_by_field(const Field& field); - static vectorized::IColumn::MutablePtr get_predicate_column_ptr(FieldType type); - - static vectorized::IColumn::MutablePtr get_predicate_column_nullable_ptr(const Field& field); + static vectorized::IColumn::MutablePtr get_predicate_column_ptr(const Field& field); const std::vector& columns() const { return _cols; }