@@ -550,17 +550,24 @@ StorageObjectStorageSource::ReaderHolder StorageObjectStorageSource::createReade
550550
551551 builder.init (Pipe (input_format));
552552
553- std::shared_ptr<const ActionsDAG> transformer;
554- if (object_info->data_lake_metadata )
555- transformer = object_info->data_lake_metadata ->transform ;
553+ std::optional<ActionsDAG> transformer;
554+ if (object_info->data_lake_metadata && object_info->data_lake_metadata ->transform )
555+ {
556+ transformer = object_info->data_lake_metadata ->transform ->clone ();
557+ // / FIXME: This is currently not done for the below case (configuration->getSchemaTransformer())
558+ // / because it is an iceberg case where transformer contains columns ids (just increasing numbers)
559+ // / which do not match requested_columns (while here requested_columns were adjusted to match physical columns).
560+ transformer->removeUnusedActions (read_from_format_info.requested_columns .getNames ());
561+ }
556562 if (!transformer)
557- transformer = configuration->getSchemaTransformer (context_, object_info->getPath ());
563+ {
564+ if (auto schema_transformer = configuration->getSchemaTransformer (context_, object_info->getPath ()))
565+ transformer = schema_transformer->clone ();
566+ }
558567
559- if (transformer)
568+ if (transformer. has_value () )
560569 {
561- auto transformer_copy = transformer->clone ();
562- transformer_copy.removeUnusedActions (read_from_format_info.requested_columns .getNames ());
563- auto schema_modifying_actions = std::make_shared<ExpressionActions>(std::move (transformer_copy));
570+ auto schema_modifying_actions = std::make_shared<ExpressionActions>(std::move (transformer.value ()));
564571 builder.addSimpleTransform ([&](const SharedHeader & header)
565572 {
566573 return std::make_shared<ExpressionTransform>(header, schema_modifying_actions);
0 commit comments