diff --git a/be/src/olap/compaction.cpp b/be/src/olap/compaction.cpp index ade099f0f2dc92..15ad98784dd8aa 100644 --- a/be/src/olap/compaction.cpp +++ b/be/src/olap/compaction.cpp @@ -837,6 +837,11 @@ void Compaction::construct_index_compaction_columns(RowsetWriterContext& ctx) { continue; } auto col_unique_id = col_unique_ids[0]; + if (!_cur_tablet_schema->has_column_unique_id(col_unique_id)) { + LOG(WARNING) << "tablet[" << _tablet->tablet_id() << "] column_unique_id[" + << col_unique_id << "] not found, will skip index compaction"; + continue; + } // Avoid doing inverted index compaction on non-slice type columns if (!field_is_slice_type(_cur_tablet_schema->column_by_uid(col_unique_id).type())) { continue; diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp index 7b6b5f313c144e..82bc268d6a3497 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -1360,6 +1360,10 @@ bool TabletSchema::exist_column(const std::string& field_name) const { return _field_name_to_index.contains(StringRef {field_name}); } +bool TabletSchema::has_column_unique_id(int32_t col_unique_id) const { + return _field_id_to_index.contains(col_unique_id); +} + Status TabletSchema::have_column(const std::string& field_name) const { if (!_field_name_to_index.contains(StringRef(field_name))) { return Status::Error( diff --git a/be/src/olap/tablet_schema.h b/be/src/olap/tablet_schema.h index 1948b234087d8d..fbb135188a03ef 100644 --- a/be/src/olap/tablet_schema.h +++ b/be/src/olap/tablet_schema.h @@ -345,6 +345,7 @@ class TabletSchema : public MetadataAdder { Result column(const std::string& field_name) const; Status have_column(const std::string& field_name) const; bool exist_column(const std::string& field_name) const; + bool has_column_unique_id(int32_t col_unique_id) const; const TabletColumn& column_by_uid(int32_t col_unique_id) const; TabletColumn& mutable_column_by_uid(int32_t col_unique_id); TabletColumn& mutable_column(size_t ordinal);