Skip to content

Commit 25e87a1

Browse files
committed
[fix](olap) The tablet schema cache caused incorrect behavior in the complex-type column pruning functionality
1 parent 3b36b4d commit 25e87a1

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

be/src/vec/exec/scan/olap_scanner.cpp

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -169,16 +169,37 @@ Status OlapScanner::prepare() {
169169
// value (e.g. select a from t where a .. and b ... limit 1),
170170
// it will be very slow when reading data in segment iterator
171171
_tablet_reader->set_batch_size(_state->batch_size());
172-
173172
TabletSchemaSPtr cached_schema;
174173
std::string schema_key;
175174
{
176175
TOlapScanNode& olap_scan_node = local_state->olap_scan_node();
177-
if (olap_scan_node.__isset.schema_version && olap_scan_node.__isset.columns_desc &&
178-
!olap_scan_node.columns_desc.empty() &&
179-
olap_scan_node.columns_desc[0].col_unique_id >= 0 && // Why check first column?
180-
tablet->tablet_schema()->num_variant_columns() == 0 &&
181-
tablet->tablet_schema()->num_virtual_columns() == 0) {
176+
177+
auto check_can_use_cache = [&]() {
178+
if (!(olap_scan_node.__isset.schema_version && olap_scan_node.__isset.columns_desc &&
179+
!olap_scan_node.columns_desc.empty() &&
180+
olap_scan_node.columns_desc[0].col_unique_id >= 0 && // Why check first column?
181+
tablet->tablet_schema()->num_variant_columns() == 0 &&
182+
tablet->tablet_schema()->num_virtual_columns() == 0)) {
183+
return false;
184+
}
185+
186+
const bool has_pruned_column =
187+
std::ranges::any_of(_output_tuple_desc->slots(), [](const auto& slot) {
188+
if (!slot->is_materialized()) {
189+
return false;
190+
}
191+
if ((slot->type()->get_primitive_type() == PrimitiveType::TYPE_STRUCT ||
192+
slot->type()->get_primitive_type() == PrimitiveType::TYPE_MAP ||
193+
slot->type()->get_primitive_type() == PrimitiveType::TYPE_ARRAY) &&
194+
!slot->all_access_paths().empty()) {
195+
return true;
196+
}
197+
return false;
198+
});
199+
return !has_pruned_column;
200+
};
201+
202+
if (check_can_use_cache()) {
182203
schema_key =
183204
SchemaCache::get_schema_key(tablet->tablet_id(), olap_scan_node.columns_desc,
184205
olap_scan_node.schema_version);

0 commit comments

Comments
 (0)