eldenmoon commented on code in PR #63970:
URL: https://github.com/apache/doris/pull/63970#discussion_r3348330696
##########
be/src/storage/segment/variant/variant_column_writer_impl.cpp:
##########
@@ -556,6 +623,220 @@ Status append_sparse_converted_column(const TabletColumn&
tablet_column, ColumnW
converter->clear_source_content(cid);
return Status::OK();
}
+
+bool has_doc_value_data(const ColumnVariant& variant) {
+ if (variant.size() == 0) {
+ return false;
+ }
+ const auto& offsets = variant.serialized_doc_value_column_offsets();
+ return !offsets.empty() && offsets[variant.size() - 1] > 0;
+}
+
+enum class VariantPayloadWritePath {
+ None,
+ ParseTimeSubcolumns,
+ RegularDocValueStaging,
+ PersistentDocValueMode,
+};
+
+struct VariantFinalizeContext {
+ bool use_regular_doc_value_staging = false;
+ bool prepare_parse_time_subcolumns = true;
+ bool prepare_sparse_payload_from_parse_tree = false;
+ VariantPayloadWritePath payload_write_path =
VariantPayloadWritePath::ParseTimeSubcolumns;
+};
+
+VariantFinalizeContext build_variant_finalize_context(const TabletColumn&
tablet_column,
+ const ColumnVariant&
variant,
+ bool
has_extracted_columns) {
+ VariantFinalizeContext context;
+
+ // Plain non-doc VARIANT may arrive as doc-value KV staging from storage
parse. The staging data
+ // is internal to this root writer and is converted into materialized
subcolumns plus sparse
+ // payload. When extracted columns own the payload, leave this writer in
metadata-only mode.
+ context.use_regular_doc_value_staging =
+ !has_extracted_columns && !tablet_column.variant_enable_doc_mode()
&&
+ !tablet_column.variant_enable_nested_group() &&
has_doc_value_data(variant);
+ context.prepare_parse_time_subcolumns =
!context.use_regular_doc_value_staging;
+ context.prepare_sparse_payload_from_parse_tree =
+ context.prepare_parse_time_subcolumns &&
+ variant_util::should_write_variant_binary_columns(tablet_column);
+
+ if (has_extracted_columns) {
+ context.payload_write_path = VariantPayloadWritePath::None;
+ } else if (context.use_regular_doc_value_staging) {
+ context.payload_write_path =
VariantPayloadWritePath::RegularDocValueStaging;
+ } else if (tablet_column.variant_enable_doc_mode()) {
+ context.payload_write_path =
VariantPayloadWritePath::PersistentDocValueMode;
+ } else {
+ context.payload_write_path =
VariantPayloadWritePath::ParseTimeSubcolumns;
Review Comment:
不是只代表 nested。这里指所有已经在 parse 阶段展开成 subcolumns 的写入路径,包括 nested group、legacy
flatten nested,以及没有走 doc-value staging 的普通 variant;nested 只是其中一种。
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]