This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new 90db2c4fd47 branch-4.0: (fix)[variant] enhance VARIANT bloom filter &
inverted index validation #59921 (#60056)
90db2c4fd47 is described below
commit 90db2c4fd47956a560ad7e59bfe97e08e915d6d8
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Jan 20 23:51:41 2026 +0800
branch-4.0: (fix)[variant] enhance VARIANT bloom filter & inverted index
validation #59921 (#60056)
Cherry-picked from #59921
Co-authored-by: Gary <[email protected]>
---
be/src/vec/common/schema_util.cpp | 34 ++-
be/src/vec/common/schema_util.h | 3 +
.../trees/plans/commands/info/CreateTableInfo.java | 10 +
.../trees/plans/CreateTableCommandTest.java | 33 +++
.../test_variant_bf_skip_unsupported_subcolumn.out | 5 +
.../predefine/test_predefine_type_index.groovy | 4 +-
...ant_field_pattern_invalid_inverted_index.groovy | 242 +++++++++++++++++++++
.../test_array_contains_with_inverted_index.groovy | 2 +-
...st_variant_bf_skip_unsupported_subcolumn.groovy | 39 ++++
9 files changed, 364 insertions(+), 8 deletions(-)
diff --git a/be/src/vec/common/schema_util.cpp
b/be/src/vec/common/schema_util.cpp
index c77079b8644..27e3c3ec7f4 100644
--- a/be/src/vec/common/schema_util.cpp
+++ b/be/src/vec/common/schema_util.cpp
@@ -393,6 +393,34 @@ Status update_least_common_schema(const
std::vector<TabletSchemaSPtr>& schemas,
typed_columns, path_set);
}
+// Keep variant subcolumn BF support aligned with FE DDL checks.
+bool is_bf_supported_by_fe_for_variant_subcolumn(FieldType type) {
+ switch (type) {
+ case FieldType::OLAP_FIELD_TYPE_SMALLINT:
+ case FieldType::OLAP_FIELD_TYPE_INT:
+ case FieldType::OLAP_FIELD_TYPE_BIGINT:
+ case FieldType::OLAP_FIELD_TYPE_LARGEINT:
+ case FieldType::OLAP_FIELD_TYPE_CHAR:
+ case FieldType::OLAP_FIELD_TYPE_VARCHAR:
+ case FieldType::OLAP_FIELD_TYPE_STRING:
+ case FieldType::OLAP_FIELD_TYPE_DATE:
+ case FieldType::OLAP_FIELD_TYPE_DATETIME:
+ case FieldType::OLAP_FIELD_TYPE_DATEV2:
+ case FieldType::OLAP_FIELD_TYPE_DATETIMEV2:
+ case FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ:
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL:
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL32:
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL64:
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL128I:
+ case FieldType::OLAP_FIELD_TYPE_DECIMAL256:
+ case FieldType::OLAP_FIELD_TYPE_IPV4:
+ case FieldType::OLAP_FIELD_TYPE_IPV6:
+ return true;
+ default:
+ return false;
+ }
+}
+
void inherit_column_attributes(const TabletColumn& source, TabletColumn&
target,
TabletSchemaSPtr* target_schema) {
if (!target.is_extracted_column()) {
@@ -401,11 +429,7 @@ void inherit_column_attributes(const TabletColumn& source,
TabletColumn& target,
target.set_aggregation_method(source.aggregation());
// 1. bloom filter
- if (target.type() != FieldType::OLAP_FIELD_TYPE_TINYINT &&
- target.type() != FieldType::OLAP_FIELD_TYPE_ARRAY &&
- target.type() != FieldType::OLAP_FIELD_TYPE_DOUBLE &&
- target.type() != FieldType::OLAP_FIELD_TYPE_FLOAT) {
- // above types are not supported in bf
+ if (is_bf_supported_by_fe_for_variant_subcolumn(target.type())) {
target.set_is_bf_column(source.is_bf_column());
}
diff --git a/be/src/vec/common/schema_util.h b/be/src/vec/common/schema_util.h
index ef59caaaf5a..8e738ee3c10 100644
--- a/be/src/vec/common/schema_util.h
+++ b/be/src/vec/common/schema_util.h
@@ -121,6 +121,9 @@ void inherit_column_attributes(TabletSchemaSPtr& schema);
void inherit_column_attributes(const TabletColumn& source, TabletColumn&
target,
TabletSchemaSPtr* target_schema = nullptr);
+// Align variant subcolumn BF inheritance with FE BF-supported types.
+bool is_bf_supported_by_fe_for_variant_subcolumn(FieldType type);
+
// get sorted subcolumns of variant
vectorized::ColumnVariant::Subcolumns get_sorted_subcolumns(
const vectorized::ColumnVariant::Subcolumns& subcolumns);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
index 53bd7f773f4..c897a216268 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/info/CreateTableInfo.java
@@ -1383,6 +1383,16 @@ public class CreateTableInfo {
+ fieldPattern + " is not
supported for inverted index"
+ " of column: " +
column.getName());
}
+
+ // keep variant subcolumn checks aligned with
ordinary column rules
+ try {
+
InvertedIndexUtil.checkInvertedIndexParser(column.getName(),
+
field.getDataType().toCatalogDataType().getPrimitiveType(),
+ indexDef.getProperties(),
invertedIndexFileStorageFormat);
+ } catch (Exception ex) {
+ throw new AnalysisException("invalid
INVERTED index: field pattern: "
+ + fieldPattern + ", " +
ex.getMessage(), ex);
+ }
fieldPatternToIndexDef.computeIfAbsent(fieldPattern, k -> new ArrayList<>())
.add(indexDef);
fieldPatternToDataType.put(fieldPattern,
field.getDataType());
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/CreateTableCommandTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/CreateTableCommandTest.java
index 9a83840474a..07a702b2308 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/CreateTableCommandTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/plans/CreateTableCommandTest.java
@@ -1087,6 +1087,39 @@ public class CreateTableCommandTest extends
TestWithFeService {
return command.getCreateMTMVInfo();
}
+ @Test
+ public void testVariantFieldPatternDictCompressionValidation() {
+ String invalidSql = "create table test.tbl_variant_dict_invalid\n"
+ + "(k1 int, v variant<\n"
+ + " MATCH_NAME 'metrics.score' : int\n"
+ + "> null,\n"
+ + "INDEX idx_v (v) USING INVERTED PROPERTIES(\n"
+ + " \"field_pattern\" = \"metrics.score\",\n"
+ + " \"dict_compression\" = \"true\"\n"
+ + "))\n"
+ + "duplicate key(k1)\n"
+ + "distributed by hash(k1) buckets 1\n"
+ + "properties('replication_num' = '1',
'inverted_index_storage_format' = 'V3');";
+
+ AnalysisException ex =
Assertions.assertThrows(AnalysisException.class, () -> createTable(invalidSql));
+ Assertions.assertTrue(ex.getMessage().contains("invalid INVERTED
index: field pattern: metrics.score"));
+ Assertions.assertTrue(ex.getMessage().contains("dict_compression can
only be set for StringType columns"));
+
+ String validSql = "create table test.tbl_variant_dict_valid\n"
+ + "(k1 int, v variant<\n"
+ + " MATCH_NAME 'metrics.score' : string\n"
+ + "> null,\n"
+ + "INDEX idx_v (v) USING INVERTED PROPERTIES(\n"
+ + " \"field_pattern\" = \"metrics.score\",\n"
+ + " \"dict_compression\" = \"true\"\n"
+ + "))\n"
+ + "duplicate key(k1)\n"
+ + "distributed by hash(k1) buckets 1\n"
+ + "properties('replication_num' = '1',
'inverted_index_storage_format' = 'V3');";
+
+ Assertions.assertDoesNotThrow(() -> createTable(validSql));
+ }
+
@Test
public void testMTMVRejectVarbinary() throws Exception {
String mv = "CREATE MATERIALIZED VIEW mv_vb\n"
diff --git
a/regression-test/data/variant_p0/with_index/test_variant_bf_skip_unsupported_subcolumn.out
b/regression-test/data/variant_p0/with_index/test_variant_bf_skip_unsupported_subcolumn.out
new file mode 100644
index 00000000000..f16b97f85d1
--- /dev/null
+++
b/regression-test/data/variant_p0/with_index/test_variant_bf_skip_unsupported_subcolumn.out
@@ -0,0 +1,5 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !sql --
+1.23
+4.56
+
diff --git
a/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy
b/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy
index 667313f8f84..7558d4ba3a2 100644
---
a/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy
+++
b/regression-test/suites/variant_p0/predefine/test_predefine_type_index.groovy
@@ -31,7 +31,7 @@ suite("test_variant_predefine_index_type", "p0"){
MATCH_NAME 'path.string' : string,
properties("variant_max_subcolumns_count" = "10")
> NULL,
- INDEX idx_a_b (var) USING INVERTED
PROPERTIES("field_pattern"="path.int", "parser"="unicode", "support_phrase" =
"true") COMMENT '',
+ INDEX idx_a_b (var) USING INVERTED
PROPERTIES("field_pattern"="path.int", "support_phrase" = "true") COMMENT '',
INDEX idx_a_c (var) USING INVERTED
PROPERTIES("field_pattern"="path.decimal") COMMENT '',
INDEX idx_a_d (var) USING INVERTED
PROPERTIES("field_pattern"="path.string", "parser"="unicode", "support_phrase"
= "true") COMMENT ''
) ENGINE=OLAP DUPLICATE KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 1
PROPERTIES ( "replication_allocation" = "tag.location.default: 1",
"disable_auto_compaction" = "true")"""
@@ -75,7 +75,7 @@ suite("test_variant_predefine_index_type", "p0"){
properties("variant_max_subcolumns_count" = "10")
> NULL,
INDEX idx1 (`overflow_properties`) USING INVERTED PROPERTIES(
"field_pattern" = "color", "support_phrase" = "true", "parser" = "english",
"lower_case" = "true"),
- INDEX idx2 (`overflow_properties`) USING INVERTED PROPERTIES(
"field_pattern" = "tags", "support_phrase" = "true", "parser" = "english",
"lower_case" = "true")
+ INDEX idx2 (`overflow_properties`) USING INVERTED PROPERTIES(
"field_pattern" = "tags", "support_phrase" = "true", "lower_case" = "true")
) ENGINE=OLAP
DUPLICATE KEY(`id`)
DISTRIBUTED BY RANDOM BUCKETS 1
diff --git
a/regression-test/suites/variant_p0/predefine/test_variant_field_pattern_invalid_inverted_index.groovy
b/regression-test/suites/variant_p0/predefine/test_variant_field_pattern_invalid_inverted_index.groovy
new file mode 100644
index 00000000000..95d7282a4f4
--- /dev/null
+++
b/regression-test/suites/variant_p0/predefine/test_variant_field_pattern_invalid_inverted_index.groovy
@@ -0,0 +1,242 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_variant_field_pattern_invalid_inverted_index", "p0") {
+ def tableName = "test_variant_field_pattern_invalid_inverted_index"
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'settings.enabled*' : boolean
+ > NULL,
+ INDEX idx_enabled (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "settings.enabled*",
+ "analyzer" = "unicode"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("invalid INVERTED index: field pattern: settings.enabled*")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'settings.tags' : array<string>
+ > NULL,
+ INDEX idx_tags (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "settings.tags",
+ "normalizer" = "lowercase"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("invalid INVERTED index: field pattern: settings.tags")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'metrics.count' : int
+ > NULL,
+ INDEX idx_count (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "metrics.count",
+ "parser" = "english"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("invalid INVERTED index: field pattern: metrics.count")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'metrics.score' : int
+ > NULL,
+ INDEX idx_score (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "metrics.score",
+ "dict_compression" = "true"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("invalid INVERTED index: field pattern: metrics.score")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'metrics.price' : decimal(10, 2)
+ > NULL,
+ INDEX idx_price (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "metrics.price",
+ "analyzer" = "standard"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("invalid INVERTED index: field pattern: metrics.price")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'metrics.day' : date
+ > NULL,
+ INDEX idx_day (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "metrics.day",
+ "parser" = "english"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("invalid INVERTED index: field pattern: metrics.day")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'settings.tags_parser' : array<string>
+ > NULL,
+ INDEX idx_tags_parser (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "settings.tags_parser",
+ "parser" = "english"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("INVERTED index with parser: english is not supported for
array column")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'labels.name' : string
+ > NULL,
+ INDEX idx_name (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "labels.name",
+ "analyzer" = "unicode",
+ "parser" = "english"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("Cannot specify more than one of 'analyzer', 'parser', or
'normalizer' properties.")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'labels.desc' : string
+ > NULL,
+ INDEX idx_desc (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "labels.desc",
+ "parser" = "unknown"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("Invalid inverted index 'parser' value: unknown")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'labels.detail' : string
+ > NULL,
+ INDEX idx_detail (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "labels.detail",
+ "parser" = "english",
+ "parser_mode" = "fine_grained"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("parser_mode is only available for chinese and ik parser")
+ }
+
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ test {
+ sql """
+ CREATE TABLE ${tableName} (
+ `id` bigint NULL,
+ `var` variant<
+ MATCH_NAME 'labels.code' : string
+ > NULL,
+ INDEX idx_code (var) USING INVERTED PROPERTIES(
+ "field_pattern" = "labels.code",
+ "dict_compression" = "maybe"
+ ) COMMENT ''
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`id`)
+ DISTRIBUTED BY HASH(`id`) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1")
+ """
+ exception("Invalid inverted index 'dict_compression' value: maybe")
+ }
+}
diff --git
a/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy
b/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy
index a725400c328..27aa9f4c4dd 100644
---
a/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy
+++
b/regression-test/suites/variant_p0/with_index/test_array_contains_with_inverted_index.groovy
@@ -38,7 +38,7 @@ suite("test_array_contains_with_inverted_index") {
`inventors` variant<
MATCH_NAME 'inventors' : array<text>
> NULL COMMENT '',
- INDEX index_inverted_inventors(inventors) USING INVERTED PROPERTIES(
"field_pattern" = "inventors", "support_phrase" = "true", "parser" = "english",
"lower_case" = "true") COMMENT ''
+ INDEX index_inverted_inventors(inventors) USING INVERTED PROPERTIES(
"field_pattern" = "inventors", "support_phrase" = "true", "lower_case" =
"true") COMMENT ''
) ENGINE=OLAP
DUPLICATE KEY(`apply_date`, `id`)
COMMENT 'OLAP'
diff --git
a/regression-test/suites/variant_p0/with_index/test_variant_bf_skip_unsupported_subcolumn.groovy
b/regression-test/suites/variant_p0/with_index/test_variant_bf_skip_unsupported_subcolumn.groovy
new file mode 100644
index 00000000000..e4ee75a5082
--- /dev/null
+++
b/regression-test/suites/variant_p0/with_index/test_variant_bf_skip_unsupported_subcolumn.groovy
@@ -0,0 +1,39 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_variant_bf_skip_unsupported_subcolumn", "p0") {
+ def tableName = "variant_bf_skip_unsupported_subcolumn"
+ sql "DROP TABLE IF EXISTS ${tableName}"
+ sql """
+ CREATE TABLE ${tableName} (
+ k bigint,
+ v variant<'m.d' : double, properties(
+ "variant_max_subcolumns_count" = "0",
+ "variant_enable_typed_paths_to_sparse" = "false")>
+ )
+ DUPLICATE KEY(`k`)
+ DISTRIBUTED BY HASH(k) BUCKETS 1
+ PROPERTIES(
+ "replication_num" = "1",
+ "bloom_filter_columns" = "v",
+ "storage_format" = "V3"
+ );
+ """
+ sql """INSERT INTO ${tableName} VALUES (1, '{"m":{"d":1.23}}')"""
+ sql """INSERT INTO ${tableName} VALUES (2, '{"m":{"d":4.56}}')"""
+ qt_sql """select cast(v['m']['d'] as double) from ${tableName} order by
k"""
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]