xiaokang commented on code in PR #26749: URL: https://github.com/apache/doris/pull/26749#discussion_r1406284149
########## be/src/vec/common/schema_util.cpp: ########## @@ -289,70 +303,140 @@ void update_least_common_schema(const std::vector<TabletSchemaSPtr>& schemas, TabletColumn common_column; // const std::string& column_name = variant_col_name + "." + tuple_paths[i].get_path(); get_column_by_type(tuple_types[i], tuple_paths[i].get_path(), common_column, - ExtraInfo {.unique_id = -1, + ExtraInfo {.unique_id = variant_col_unique_id, .parent_unique_id = variant_col_unique_id, .path_info = tuple_paths[i]}); common_schema->append_column(common_column); } } -void get_least_common_schema(const std::vector<TabletSchemaSPtr>& schemas, - TabletSchemaSPtr& common_schema) { - // Pick tablet schema with max schema version - const TabletSchemaSPtr base_schema = - *std::max_element(schemas.cbegin(), schemas.cend(), - [](const TabletSchemaSPtr a, const TabletSchemaSPtr b) { - return a->schema_version() < b->schema_version(); - }); - CHECK(base_schema); - CHECK(common_schema); - common_schema->copy_from(*base_schema); - // Merge columns from other schemas - common_schema->clear_columns(); - std::vector<int32_t> variant_column_unique_id; - // Get all columns without extracted columns and collect variant col unique id - for (const TabletColumn& col : base_schema->columns()) { - if (col.is_variant_type()) { - variant_column_unique_id.push_back(col.unique_id()); +void inherit_tablet_index(TabletSchemaSPtr& schema) { + std::unordered_map<int32_t, TabletIndex> variants_index_meta; + // Get all variants tablet index metas if exist + for (const auto& col : schema->columns()) { + auto index_meta = schema->get_inverted_index(col.unique_id(), ""); + if (col.is_variant_type() && index_meta != nullptr) { + variants_index_meta.emplace(col.unique_id(), *index_meta); } + } + + // Add index meta if extracted column is missing index meta + for (const auto& col : schema->columns()) { if (!col.is_extracted_column()) { - common_schema->append_column(col); + continue; + } + auto it = variants_index_meta.find(col.parent_unique_id()); + // variant has no index meta, ignore + if (it == variants_index_meta.end()) { + continue; + } + auto index_meta = schema->get_inverted_index(col); + // add index meta + TabletIndex index_info = it->second; + index_info.set_escaped_escaped_index_suffix_path(col.path_info().get_path()); + if (index_meta != nullptr) { + // already exist + schema->update_index(col, index_info); Review Comment: overwrite -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org