diff --git a/be/src/olap/compaction.cpp b/be/src/olap/compaction.cpp index a59ab3180788df..1bc7fbfa2a31c1 100644 --- a/be/src/olap/compaction.cpp +++ b/be/src/olap/compaction.cpp @@ -828,6 +828,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 303d0a1dd53587..9df75a84f6a8b4 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -1352,6 +1352,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 8179fd2ccc8ef4..41eb8ccd1e3cef 100644 --- a/be/src/olap/tablet_schema.h +++ b/be/src/olap/tablet_schema.h @@ -344,6 +344,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);