This is an automated email from the ASF dual-hosted git repository. huajianlan pushed a commit to branch nested_column_prune in repository https://gitbox.apache.org/repos/asf/doris.git
commit 05c28879f0b13f467503487c876a21a0781a8222 Author: Hu Shenggang <[email protected]> AuthorDate: Tue Nov 4 14:26:08 2025 +0800 fix: missed pruned type with map/array types --- be/src/http/action/debug_point_action.cpp | 4 +++- be/src/olap/rowset/segment_v2/column_reader.cpp | 2 ++ be/src/olap/tablet_schema.cpp | 5 +++- be/src/vec/exec/scan/olap_scanner.cpp | 4 +++- .../complex_types/test_pruned_columns.out | 7 ++++++ .../complex_types/test_pruned_columns.groovy | 27 ++++++++++++++++++++++ 6 files changed, 46 insertions(+), 3 deletions(-) diff --git a/be/src/http/action/debug_point_action.cpp b/be/src/http/action/debug_point_action.cpp index 04aa38efaa4..600ae645341 100644 --- a/be/src/http/action/debug_point_action.cpp +++ b/be/src/http/action/debug_point_action.cpp @@ -35,11 +35,13 @@ void BaseDebugPointAction::handle(HttpRequest* req) { "Disable debug points. please check config::enable_debug_points"); } std::string result = status.to_json(); - LOG(INFO) << "handle request result:" << result; + LOG(INFO) << "handle request result:" << result << ", status: " << status.to_string(); if (status.ok()) { + LOG(INFO) << "***** send ok"; HttpChannel::send_reply(req, HttpStatus::OK, result); } else { HttpChannel::send_reply(req, HttpStatus::INTERNAL_SERVER_ERROR, result); + LOG(INFO) << "***** send error"; } } diff --git a/be/src/olap/rowset/segment_v2/column_reader.cpp b/be/src/olap/rowset/segment_v2/column_reader.cpp index 0cecd06e60e..822b5d31332 100644 --- a/be/src/olap/rowset/segment_v2/column_reader.cpp +++ b/be/src/olap/rowset/segment_v2/column_reader.cpp @@ -945,6 +945,8 @@ Result<TColumnAccessPaths> ColumnIterator::_get_sub_access_paths( if (!name_path.data_access_path.path.empty()) { ++it; } else { + LOG(INFO) << "********* set _column_name: " << _column_name + << " need_to_read true **********"; set_need_to_read(); it = sub_access_paths.erase(it); } diff --git a/be/src/olap/tablet_schema.cpp b/be/src/olap/tablet_schema.cpp index cee5f53ae6b..e231ba88106 100644 --- a/be/src/olap/tablet_schema.cpp +++ b/be/src/olap/tablet_schema.cpp @@ -1684,11 +1684,14 @@ vectorized::Block TabletSchema::create_block( tablet_columns_need_convert_null->find(cid) != tablet_columns_need_convert_null->end()); auto data_type = vectorized::DataTypeFactory::instance().create_data_type(col, is_nullable); - if (col.type() == FieldType::OLAP_FIELD_TYPE_STRUCT) { + if (col.type() == FieldType::OLAP_FIELD_TYPE_STRUCT || + col.type() == FieldType::OLAP_FIELD_TYPE_MAP || + col.type() == FieldType::OLAP_FIELD_TYPE_ARRAY) { if (_pruned_columns_data_type.contains(col.unique_id())) { data_type = _pruned_columns_data_type.at(col.unique_id()); } } + if (_vir_col_idx_to_unique_id.contains(cid)) { block.insert({vectorized::ColumnNothing::create(0), data_type, col.name()}); VLOG_DEBUG << fmt::format( diff --git a/be/src/vec/exec/scan/olap_scanner.cpp b/be/src/vec/exec/scan/olap_scanner.cpp index 51fc4daa669..df48549895d 100644 --- a/be/src/vec/exec/scan/olap_scanner.cpp +++ b/be/src/vec/exec/scan/olap_scanner.cpp @@ -556,7 +556,9 @@ Status OlapScanner::_init_return_columns() { {column.unique_id(), slot->predicate_access_paths()}); } - if (slot->type()->get_primitive_type() == PrimitiveType::TYPE_STRUCT && + if ((slot->type()->get_primitive_type() == PrimitiveType::TYPE_STRUCT || + slot->type()->get_primitive_type() == PrimitiveType::TYPE_MAP || + slot->type()->get_primitive_type() == PrimitiveType::TYPE_ARRAY) && !slot->all_access_paths().empty()) { tablet_schema->add_pruned_columns_data_type(column.unique_id(), slot->type()); } diff --git a/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out b/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out index 74f336d27e5..870a5763074 100644 --- a/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out +++ b/regression-test/data/datatype_p0/complex_types/test_pruned_columns.out @@ -22,3 +22,10 @@ 1 beijing 2 shanghai +-- !sql6 -- +2 + +-- !sql7 -- +0.41 +0.99 + diff --git a/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy b/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy index ad032fab8f2..d54d924e97f 100644 --- a/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy +++ b/regression-test/suites/datatype_p0/complex_types/test_pruned_columns.groovy @@ -58,4 +58,31 @@ suite("test_pruned_columns") { qt_sql5 """ select id, struct_element(s, 'city') from `tbl_test_pruned_columns` where struct_element(struct_element(s, 'data')[1][2], 'b') = 40 order by 1; """ + + sql """DROP TABLE IF EXISTS `tbl_test_pruned_columns_map`""" + sql """ + CREATE TABLE `tbl_test_pruned_columns_map` ( + `id` bigint NULL, + `dynamic_attributes` map<text,struct<attribute_value:text,confidence_score:double,last_updated:datetime>> NULL + ) ENGINE=OLAP + DUPLICATE KEY(`id`) + DISTRIBUTED BY RANDOM BUCKETS AUTO + PROPERTIES ( + "replication_allocation" = "tag.location.default: 1" + ); + """ + + sql """ + insert into `tbl_test_pruned_columns_map` values + (1, '{"theme_preference":{"attribute_value":"light", "confidence_score":0.41, "last_updated":"2025-11-03 15:32:33"}, "language_setting":{"attribute_value":"es", "confidence_score":0.65, "last_updated":"2025-11-03 15:32:33"}}'), + (2, '{"theme_preference":{"attribute_value":"light", "confidence_score":0.99, "last_updated":"2025-11-03 15:32:33"}, "language_setting":{"attribute_value":"es", "confidence_score":0.92, "last_updated":"2025-11-03 15:32:33"}}'); + """ + + qt_sql6 """ + select count(struct_element(dynamic_attributes['theme_preference'], 'confidence_score')) from `tbl_test_pruned_columns_map`; + """ + + qt_sql7 """ + select struct_element(dynamic_attributes['theme_preference'], 'confidence_score') from `tbl_test_pruned_columns_map` order by id; + """ } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
