This is an automated email from the ASF dual-hosted git repository.
eldenmoon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 405d8df83ab [feat](Variant) add variant_enable_nested_group property
and fix variant nullable issue (#61047)
405d8df83ab is described below
commit 405d8df83aba541e32ee4aff688481d10e8b276c
Author: lihangyu <[email protected]>
AuthorDate: Thu Mar 5 12:07:54 2026 +0800
[feat](Variant) add variant_enable_nested_group property and fix variant
nullable issue (#61047)
---
.../variant/variant_column_writer_impl.cpp | 27 +++++++++++-------
be/src/olap/tablet_meta.cpp | 3 ++
be/src/olap/tablet_schema.cpp | 4 +++
be/src/olap/tablet_schema.h | 6 ++++
.../vec/functions/array/function_array_utils.cpp | 5 +++-
.../java/org/apache/doris/catalog/ScalarType.java | 7 +++++
.../java/org/apache/doris/catalog/VariantType.java | 18 ++++++++++--
.../main/java/org/apache/doris/catalog/Column.java | 9 ++++++
.../apache/doris/common/util/PropertyAnalyzer.java | 33 ++++++++++++++++++++++
.../doris/nereids/parser/LogicalPlanBuilder.java | 16 +++++++++--
.../org/apache/doris/nereids/types/DataType.java | 3 +-
.../apache/doris/nereids/types/VariantType.java | 11 ++++++--
.../java/org/apache/doris/qe/SessionVariable.java | 13 +++++++++
.../ExternalFileTableValuedFunction.java | 3 +-
gensrc/proto/olap_file.proto | 1 +
gensrc/thrift/Descriptors.thrift | 1 +
16 files changed, 140 insertions(+), 20 deletions(-)
diff --git
a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp
b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp
index f5de9c1e651..e29bdb0141f 100644
--- a/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp
+++ b/be/src/olap/rowset/segment_v2/variant/variant_column_writer_impl.cpp
@@ -1308,11 +1308,13 @@ Status VariantColumnWriterImpl::finalize() {
column->parent_unique_id() == current_variant_uid;
});
if (!has_extracted_columns) {
- RETURN_IF_ERROR(build_nested_group_routing_plan(*ptr,
&_nested_group_routing_plan));
+ if (_tablet_column->variant_enable_nested_group()) {
+ RETURN_IF_ERROR(build_nested_group_routing_plan(*ptr,
&_nested_group_routing_plan));
- // Root NG dedup is handled in _process_root_column() — see the
- // has_root_ng check there. We intentionally do NOT modify the
in-memory
- // root data here because _nested_group_provider->prepare() needs it.
+ // Root NG dedup is handled in _process_root_column() — see the
+ // has_root_ng check there. We intentionally do NOT modify the
in-memory
+ // root data here because _nested_group_provider->prepare() needs
it.
+ }
}
RETURN_IF_ERROR(ptr->pick_subcolumns_to_sparse_column(
@@ -1341,9 +1343,12 @@ Status VariantColumnWriterImpl::finalize() {
}
// NestedGroup write behavior is determined by the injected provider
implementation.
- RETURN_IF_ERROR(_nested_group_provider->prepare(
- *ptr, /*include_jsonb_subcolumns=*/true, _tablet_column, _opts,
- olap_data_convertor.get(), num_rows, &column_id, &_statistics));
+ // Only invoke the provider when nested group writing is enabled.
+ if (_tablet_column->variant_enable_nested_group()) {
+ RETURN_IF_ERROR(_nested_group_provider->prepare(
+ *ptr, /*include_jsonb_subcolumns=*/true, _tablet_column, _opts,
+ olap_data_convertor.get(), num_rows, &column_id,
&_statistics));
+ }
if (_binary_writer) {
_binary_writer->merge_stats_to(&_statistics);
}
@@ -1558,9 +1563,11 @@ Status VariantSubcolumnWriter::finalize() {
_opts.meta->set_num_rows(ptr->rows());
++column_id;
- RETURN_IF_ERROR(_nested_group_provider->prepare(*ptr,
/*include_jsonb_subcolumns=*/false,
- &flush_column, _opts,
olap_data_convertor.get(),
- ptr->rows(), &column_id,
&_statistics));
+ if (parent_column.variant_enable_nested_group()) {
+ RETURN_IF_ERROR(_nested_group_provider->prepare(
+ *ptr, /*include_jsonb_subcolumns=*/false, &flush_column, _opts,
+ olap_data_convertor.get(), ptr->rows(), &column_id,
&_statistics));
+ }
_statistics.to_pb(_opts.meta->mutable_variant_statistics());
_is_finalized = true;
diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp
index 8a4c9da9fd2..be701d54f7c 100644
--- a/be/src/olap/tablet_meta.cpp
+++ b/be/src/olap/tablet_meta.cpp
@@ -562,6 +562,9 @@ void TabletMeta::init_column_from_tcolumn(uint32_t
unique_id, const TColumn& tco
if (tcolumn.__isset.variant_doc_hash_shard_count) {
column->set_variant_doc_hash_shard_count(tcolumn.variant_doc_hash_shard_count);
}
+ if (tcolumn.__isset.variant_enable_nested_group) {
+
column->set_variant_enable_nested_group(tcolumn.variant_enable_nested_group);
+ }
}
void TabletMeta::remove_rowset_delete_bitmap(const RowsetId& rowset_id, const
Version& version) {
diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp
index 051b8b075cf..a7295b6a941 100644
--- a/be/src/olap/tablet_schema.cpp
+++ b/be/src/olap/tablet_schema.cpp
@@ -678,6 +678,9 @@ void TabletColumn::init_from_pb(const ColumnPB& column) {
if (column.has_variant_doc_hash_shard_count()) {
_variant.doc_hash_shard_count = column.variant_doc_hash_shard_count();
}
+ if (column.has_variant_enable_nested_group()) {
+ _variant.enable_nested_group = column.variant_enable_nested_group();
+ }
if (column.has_pattern_type()) {
_pattern_type = column.pattern_type();
}
@@ -764,6 +767,7 @@ void TabletColumn::to_schema_pb(ColumnPB* column) const {
column->set_variant_enable_doc_mode(_variant.enable_doc_mode);
column->set_variant_doc_materialization_min_rows(_variant.doc_materialization_min_rows);
column->set_variant_doc_hash_shard_count(_variant.doc_hash_shard_count);
+ column->set_variant_enable_nested_group(_variant.enable_nested_group);
}
void TabletColumn::add_sub_column(TabletColumn& sub_column) {
diff --git a/be/src/olap/tablet_schema.h b/be/src/olap/tablet_schema.h
index 5fdd35f8a6d..96baf5c45f3 100644
--- a/be/src/olap/tablet_schema.h
+++ b/be/src/olap/tablet_schema.h
@@ -80,6 +80,8 @@ public:
bool enable_doc_mode = false;
int64_t doc_materialization_min_rows = 0;
int32_t doc_hash_shard_count = 64;
+
+ bool enable_nested_group = false;
};
TabletColumn();
@@ -279,6 +281,10 @@ public:
_variant.enable_typed_paths_to_sparse =
variant_enable_typed_paths_to_sparse;
}
+ bool variant_enable_nested_group() const { return
_variant.enable_nested_group; }
+
+ void set_variant_enable_nested_group(bool val) {
_variant.enable_nested_group = val; }
+
bool is_decimal() const { return _is_decimal; }
private:
diff --git a/be/src/vec/functions/array/function_array_utils.cpp
b/be/src/vec/functions/array/function_array_utils.cpp
index 7620d7179c8..fc96cb7288c 100644
--- a/be/src/vec/functions/array/function_array_utils.cpp
+++ b/be/src/vec/functions/array/function_array_utils.cpp
@@ -27,6 +27,7 @@
#include "vec/columns/column_variant.h"
#include "vec/columns/column_vector.h"
#include "vec/data_types/data_type.h"
+#include "vec/data_types/data_type_nullable.h"
namespace doris::vectorized {
@@ -58,7 +59,9 @@ bool extract_column_array_info(const IColumn& src,
ColumnArrayExecutionData& dat
data.nested_type->get_primitive_type() != PrimitiveType::TYPE_VARIANT)
{
// set variant root column/type to from column/type
auto variant = ColumnVariant::create(true /*always nullable*/);
- variant->create_root(data.nested_type,
make_nullable(data.nested_col)->assume_mutable());
+ auto nullable_nested_type = make_nullable(data.nested_type);
+ auto nullable_col = make_nullable(data.nested_col);
+ variant->create_root(nullable_nested_type,
std::move(*nullable_col).mutate());
data.nested_col = variant->get_ptr();
}
return true;
diff --git
a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
index 99f7ac60a21..dc73f384e14 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
@@ -1066,4 +1066,11 @@ public class ScalarType extends Type {
// Backward-compatible default bucket count used by BE doc snapshot
writer/reader.
return 128;
}
+
+ public boolean getVariantEnableNestedGroup() {
+ if (this instanceof VariantType) {
+ return ((VariantType) this).getEnableNestedGroup();
+ }
+ return false; // Default to false for backward compatibility.
+ }
}
diff --git
a/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java
b/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java
index da062d21489..69917dbf4b7 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/VariantType.java
@@ -61,6 +61,9 @@ public class VariantType extends ScalarType {
@SerializedName(value = "variantDocShardCount")
private final int variantDocShardCount;
+ @SerializedName(value = "enableNestedGroup")
+ private final boolean enableNestedGroup;
+
private Map<String, String> properties = Maps.newHashMap();
public VariantType() {
@@ -73,6 +76,7 @@ public class VariantType extends ScalarType {
this.enableVariantDocMode = false;
this.variantDocMaterializationMinRows = 0L;
this.variantDocShardCount = 64;
+ this.enableNestedGroup = false;
}
public VariantType(ArrayList<VariantField> fields) {
@@ -89,6 +93,7 @@ public class VariantType extends ScalarType {
this.enableVariantDocMode = false;
this.variantDocMaterializationMinRows = 0L;
this.variantDocShardCount = 64;
+ this.enableNestedGroup = false;
}
public VariantType(Map<String, String> properties) {
@@ -102,6 +107,7 @@ public class VariantType extends ScalarType {
this.enableVariantDocMode = false;
this.variantDocMaterializationMinRows = 0L;
this.variantDocShardCount = 64;
+ this.enableNestedGroup = false;
}
public VariantType(ArrayList<VariantField> fields, Map<String, String>
properties) {
@@ -119,6 +125,7 @@ public class VariantType extends ScalarType {
this.enableVariantDocMode = false;
this.variantDocMaterializationMinRows = 0L;
this.variantDocShardCount = 64;
+ this.enableNestedGroup = false;
}
public VariantType(ArrayList<VariantField> fields, int
variantMaxSubcolumnsCount,
@@ -127,7 +134,8 @@ public class VariantType extends ScalarType {
int
variantSparseHashShardCount,
boolean
enableVariantDocMode,
long
variantDocMaterializationMinRows,
- int
variantDocShardCount) {
+ int
variantDocShardCount,
+ boolean
enableNestedGroup) {
super(PrimitiveType.VARIANT);
Preconditions.checkNotNull(fields);
this.predefinedFields = fields;
@@ -141,6 +149,7 @@ public class VariantType extends ScalarType {
this.enableVariantDocMode = enableVariantDocMode;
this.variantDocMaterializationMinRows =
variantDocMaterializationMinRows;
this.variantDocShardCount = variantDocShardCount;
+ this.enableNestedGroup = enableNestedGroup;
}
@Override
@@ -218,7 +227,8 @@ public class VariantType extends ScalarType {
&& variantMaxSubcolumnsCount ==
otherVariantType.variantMaxSubcolumnsCount
&& enableTypedPathsToSparse ==
otherVariantType.enableTypedPathsToSparse
&& enableVariantDocMode ==
otherVariantType.enableVariantDocMode
- && variantDocMaterializationMinRows ==
otherVariantType.variantDocMaterializationMinRows;
+ && variantDocMaterializationMinRows ==
otherVariantType.variantDocMaterializationMinRows
+ && enableNestedGroup == otherVariantType.enableNestedGroup;
}
@Override
@@ -257,4 +267,8 @@ public class VariantType extends ScalarType {
public int getVariantDocShardCount() {
return variantDocShardCount;
}
+
+ public boolean getEnableNestedGroup() {
+ return enableNestedGroup;
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
index 457259856cf..bf525428061 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Column.java
@@ -659,6 +659,7 @@ public class Column implements GsonPostProcessable {
tColumn.setVariantEnableDocMode(this.getVariantEnableDocMode());
tColumn.setVariantDocMaterializationMinRows(this.getvariantDocMaterializationMinRows());
tColumn.setVariantDocHashShardCount(this.getVariantDocShardCount());
+
tColumn.setVariantEnableNestedGroup(this.getVariantEnableNestedGroup());
// ATTN:
// Currently, this `toThrift()` method is only used from
CreateReplicaTask.
// And CreateReplicaTask does not need `defineExpr` field.
@@ -886,6 +887,7 @@ public class Column implements GsonPostProcessable {
builder.setVariantEnableDocMode(this.getVariantEnableDocMode());
builder.setVariantDocMaterializationMinRows(this.getvariantDocMaterializationMinRows());
builder.setVariantDocHashShardCount(this.getVariantDocShardCount());
+
builder.setVariantEnableNestedGroup(this.getVariantEnableNestedGroup());
// variant may contain predefined structured fields
addChildren(builder);
}
@@ -977,6 +979,9 @@ public class Column implements GsonPostProcessable {
if (this.getVariantDocShardCount() !=
other.getVariantDocShardCount()) {
throw new DdlException("Can not change variant doc snapshot
shard count");
}
+ if (this.getVariantEnableNestedGroup() !=
other.getVariantEnableNestedGroup()) {
+ throw new DdlException("Can not change variant enable nested
group");
+ }
if (CollectionUtils.isNotEmpty(this.getChildren()) ||
CollectionUtils.isNotEmpty(other.getChildren())) {
throw new DdlException("Can not change variant schema
templates");
}
@@ -1336,6 +1341,10 @@ public class Column implements GsonPostProcessable {
return type.isVariantType() ? ((ScalarType)
type).getVariantDocShardCount() : 128;
}
+ public boolean getVariantEnableNestedGroup() {
+ return type.isVariantType() ? ((ScalarType)
type).getVariantEnableNestedGroup() : false;
+ }
+
public void setFieldPatternType(TPatternType type) {
fieldPatternType = type;
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
index 0d31eeb769b..4a9818aed7d 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/common/util/PropertyAnalyzer.java
@@ -259,6 +259,7 @@ public class PropertyAnalyzer {
public static final String PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT =
"variant_max_subcolumns_count";
public static final String PROPERTIES_VARIANT_ENABLE_TYPED_PATHS_TO_SPARSE
= "variant_enable_typed_paths_to_sparse";
+ public static final String PROPERTIES_VARIANT_ENABLE_NESTED_GROUP =
"variant_enable_nested_group";
public static final String PROPERTIES_TDE_ALGORITHM = "tde_algorithm";
public static final String AES256 = "AES256";
public static final String SM4 = "SM4";
@@ -2063,6 +2064,21 @@ public class PropertyAnalyzer {
return enableTypedPathsToSparse;
}
+ public static boolean analyzeEnableNestedGroup(Map<String, String>
properties,
+ boolean defaultValue) throws AnalysisException {
+ boolean enableNestedGroup = defaultValue;
+ if (properties != null &&
properties.containsKey(PROPERTIES_VARIANT_ENABLE_NESTED_GROUP)) {
+ String enableNestedGroupStr =
properties.get(PROPERTIES_VARIANT_ENABLE_NESTED_GROUP);
+ try {
+ enableNestedGroup = Boolean.parseBoolean(enableNestedGroupStr);
+ } catch (Exception e) {
+ throw new AnalysisException("variant_enable_nested_group must
be `true` or `false`");
+ }
+ properties.remove(PROPERTIES_VARIANT_ENABLE_NESTED_GROUP);
+ }
+ return enableNestedGroup;
+ }
+
public static int analyzeVariantMaxSparseColumnStatisticsSize(Map<String,
String> properties, int defuatValue)
throws AnalysisException {
int maxSparseColumnStatisticsSize = defuatValue;
@@ -2176,6 +2192,23 @@ public class PropertyAnalyzer {
+ "cannot be set together");
}
}
+ // variant_enable_nested_group=true is mutually exclusive with
+ // variant_enable_doc_mode=true and variant_max_subcolumns_count>0
+ if (properties != null &&
properties.containsKey(PROPERTIES_VARIANT_ENABLE_NESTED_GROUP)
+ &&
"true".equalsIgnoreCase(properties.get(PROPERTIES_VARIANT_ENABLE_NESTED_GROUP)))
{
+ if (properties.containsKey(PROPERTIES_VARIANT_ENABLE_DOC_MODE)
+ &&
"true".equalsIgnoreCase(properties.get(PROPERTIES_VARIANT_ENABLE_DOC_MODE))) {
+ throw new AnalysisException("variant_enable_nested_group and
variant_enable_doc_mode "
+ + "cannot both be true");
+ }
+ if
(properties.containsKey(PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT)) {
+ int count =
Integer.parseInt(properties.get(PROPERTIES_VARIANT_MAX_SUBCOLUMNS_COUNT));
+ if (count > 0) {
+ throw new AnalysisException("variant_enable_nested_group
cannot be true when "
+ + "variant_max_subcolumns_count > 0");
+ }
+ }
+ }
}
public static TEncryptionAlgorithm analyzeTDEAlgorithm(Map<String, String>
properties) throws AnalysisException {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
index af20d91c38c..2675541b4f8 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java
@@ -5155,6 +5155,9 @@ public class LogicalPlanBuilder extends
DorisParserBaseVisitor<Object> {
int variantDocHashShardCount = ConnectContext.get() == null ? 128 :
ConnectContext.get().getSessionVariable().getDefaultVariantDocHashShardCount();
+ boolean enableNestedGroup = ConnectContext.get() == null ? true :
+
ConnectContext.get().getSessionVariable().getDefaultVariantEnableNestedGroup();
+
try {
// validate properties: variant_enable_doc_mode cannot be set
together with other properties
PropertyAnalyzer.validateVariantProperties(properties);
@@ -5173,10 +5176,17 @@ public class LogicalPlanBuilder extends
DorisParserBaseVisitor<Object> {
.analyzeVariantDocMaterializationMinRows(properties,
variantDocMaterializationMinRows);
variantDocHashShardCount = PropertyAnalyzer
.analyzeVariantDocHashShardCount(properties,
variantDocHashShardCount);
+ enableNestedGroup = PropertyAnalyzer
+ .analyzeEnableNestedGroup(properties, enableNestedGroup);
} catch (org.apache.doris.common.AnalysisException e) {
throw new NotSupportedException(e.getMessage());
}
+ if (enableNestedGroup) {
+ throw new NotSupportedException(
+ "variant_enable_nested_group is not supported now");
+ }
+
// When doc mode is enabled, disable subcolumn extraction and sparse
column features
if (enableVariantDocMode) {
// Disable sparse column features
@@ -5214,12 +5224,14 @@ public class LogicalPlanBuilder extends
DorisParserBaseVisitor<Object> {
+ " and " +
PropertyAnalyzer.PROPERTIES_VARIANT_SPARSE_HASH_SHARD_COUNT
+ " and " +
PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_DOC_MODE
+ " and " +
PropertyAnalyzer.PROPERTIES_VARIANT_DOC_MATERIALIZATION_MIN_ROWS
- + " and " +
PropertyAnalyzer.PROPERTIES_VARIANT_DOC_HASH_SHARD_COUNT);
+ + " and " +
PropertyAnalyzer.PROPERTIES_VARIANT_DOC_HASH_SHARD_COUNT
+ + " and " +
PropertyAnalyzer.PROPERTIES_VARIANT_ENABLE_NESTED_GROUP);
}
return new VariantType(fields, variantMaxSubcolumnsCount,
enableTypedPathsToSparse,
variantMaxSparseColumnStatisticsSize,
variantSparseHashShardCount,
- enableVariantDocMode, variantDocMaterializationMinRows,
variantDocHashShardCount);
+ enableVariantDocMode, variantDocMaterializationMinRows,
variantDocHashShardCount,
+ enableNestedGroup);
}
private static boolean isSupportedVariantDocModeType(DataType type) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java
index 20095922991..61041674db2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java
@@ -493,7 +493,8 @@ public abstract class DataType {
((org.apache.doris.catalog.VariantType)
type).getVariantSparseHashShardCount(),
((org.apache.doris.catalog.VariantType)
type).getEnableVariantDocMode(),
((org.apache.doris.catalog.VariantType)
type).getvariantDocMaterializationMinRows(),
- ((org.apache.doris.catalog.VariantType)
type).getVariantDocShardCount());
+ ((org.apache.doris.catalog.VariantType)
type).getVariantDocShardCount(),
+ ((org.apache.doris.catalog.VariantType)
type).getEnableNestedGroup());
}
return VariantType.INSTANCE;
} else {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java
index 4ac0e597e82..16f7d72076f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/VariantType.java
@@ -55,6 +55,7 @@ public class VariantType extends PrimitiveType {
private final boolean enableVariantDocMode;
private final long variantDocMaterializationMinRows;
private final int variantDocShardCount;
+ private final boolean enableNestedGroup;
/**
* Creates a Variant type without predefined fields and only configures
the max subcolumn limit.
@@ -70,6 +71,7 @@ public class VariantType extends PrimitiveType {
this.enableVariantDocMode = false;
this.variantDocMaterializationMinRows = 0L;
this.variantDocShardCount = 64;
+ this.enableNestedGroup = false;
}
/**
@@ -84,6 +86,7 @@ public class VariantType extends PrimitiveType {
this.enableVariantDocMode = false;
this.variantDocMaterializationMinRows = 0L;
this.variantDocShardCount = 64;
+ this.enableNestedGroup = false;
}
/**
@@ -100,7 +103,8 @@ public class VariantType extends PrimitiveType {
public VariantType(List<VariantField> fields, int
variantMaxSubcolumnsCount,
boolean enableTypedPathsToSparse, int
variantMaxSparseColumnStatisticsSize,
int variantSparseHashShardCount, boolean enableVariantDocMode,
- long variantDocMaterializationMinRows, int variantDocShardCount) {
+ long variantDocMaterializationMinRows, int variantDocShardCount,
+ boolean enableNestedGroup) {
this.predefinedFields =
ImmutableList.copyOf(Objects.requireNonNull(fields, "fields should not be
null"));
this.variantMaxSubcolumnsCount = variantMaxSubcolumnsCount;
this.enableTypedPathsToSparse = enableTypedPathsToSparse;
@@ -109,6 +113,7 @@ public class VariantType extends PrimitiveType {
this.enableVariantDocMode = enableVariantDocMode;
this.variantDocMaterializationMinRows =
variantDocMaterializationMinRows;
this.variantDocShardCount = variantDocShardCount;
+ this.enableNestedGroup = enableNestedGroup;
}
@Override
@@ -117,7 +122,7 @@ public class VariantType extends PrimitiveType {
.collect(Collectors.toList()),
variantMaxSubcolumnsCount, enableTypedPathsToSparse,
variantMaxSparseColumnStatisticsSize,
variantSparseHashShardCount,
enableVariantDocMode,
variantDocMaterializationMinRows,
- variantDocShardCount);
+ variantDocShardCount, enableNestedGroup);
}
@Override
@@ -126,7 +131,7 @@ public class VariantType extends PrimitiveType {
.map(VariantField::toCatalogDataType)
.collect(Collectors.toCollection(ArrayList::new)),
variantMaxSubcolumnsCount, enableTypedPathsToSparse,
variantMaxSparseColumnStatisticsSize,
variantSparseHashShardCount, enableVariantDocMode,
- variantDocMaterializationMinRows, variantDocShardCount);
+ variantDocMaterializationMinRows, variantDocShardCount,
enableNestedGroup);
return type;
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index 362b69533d2..f92d4566f34 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -952,6 +952,8 @@ public class SessionVariable implements Serializable,
Writable {
public static final String DEFAULT_VARIANT_DOC_HASH_SHARD_COUNT =
"default_variant_doc_hash_shard_count";
+ public static final String DEFAULT_VARIANT_ENABLE_NESTED_GROUP =
"default_variant_enable_nested_group";
+
public static final String MULTI_DISTINCT_STRATEGY =
"multi_distinct_strategy";
public static final String AGG_PHASE = "agg_phase";
@@ -3443,6 +3445,13 @@ public class SessionVariable implements Serializable,
Writable {
)
public int defaultVariantDocHashShardCount = 64;
+ @VariableMgr.VarAttr(
+ name = DEFAULT_VARIANT_ENABLE_NESTED_GROUP,
+ needForward = true,
+ fuzzy = true
+ )
+ public boolean defaultVariantEnableNestedGroup = false;
+
@VariableMgr.VarAttr(
name = "use_v3_storage_format",
fuzzy = true,
@@ -6153,6 +6162,10 @@ public class SessionVariable implements Serializable,
Writable {
return defaultVariantDocHashShardCount;
}
+ public boolean getDefaultVariantEnableNestedGroup() {
+ return defaultVariantEnableNestedGroup;
+ }
+
public void readAffectQueryResultVariables(BiConsumer<String, Object>
variablesReader) {
for (Field affectQueryResultField : affectQueryResultFields) {
String name = affectQueryResultField.getName();
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
index 5470c83222f..df1a6bd6a10 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/ExternalFileTableValuedFunction.java
@@ -402,7 +402,8 @@ public abstract class ExternalFileTableValuedFunction
extends TableValuedFunctio
/*variantSparseHashShardCount*/ 0,
/*variantEnableDocMode*/ false,
/*variantDocMaterializationMinRows*/ 0,
- /*variantDocShardCount*/ 0);
+ /*variantDocShardCount*/ 0,
+ /*enableNestedGroup*/ false);
parsedNodes = 1;
} else {
type =
ScalarType.createType(PrimitiveType.fromThrift(tPrimitiveType),
diff --git a/gensrc/proto/olap_file.proto b/gensrc/proto/olap_file.proto
index ff54f54aed7..aadacd37879 100644
--- a/gensrc/proto/olap_file.proto
+++ b/gensrc/proto/olap_file.proto
@@ -390,6 +390,7 @@ message ColumnPB {
optional int64 variant_doc_materialization_min_rows = 32;
// Number of buckets used to store doc map in variant doc mode.
optional int32 variant_doc_hash_shard_count = 33 [default = 64];
+ optional bool variant_enable_nested_group = 34 [default = false];
}
// Dictionary of Schema info, to reduce TabletSchemaCloudPB fdb kv size
diff --git a/gensrc/thrift/Descriptors.thrift b/gensrc/thrift/Descriptors.thrift
index 6f71a29f72a..eb12834fa18 100644
--- a/gensrc/thrift/Descriptors.thrift
+++ b/gensrc/thrift/Descriptors.thrift
@@ -99,6 +99,7 @@ struct TColumn {
26: optional bool variant_enable_doc_mode
27: optional i64 variant_doc_materialization_min_rows
28: optional i32 variant_doc_hash_shard_count
+ 29: optional bool variant_enable_nested_group
}
struct TSlotDescriptor {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]