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

Reply via email to