Skip to content

Commit a8e6f7c

Browse files
Backport #92419 to 25.12: Inherit source part serialization info settings during mutation in MergeTree
1 parent f2f26f4 commit a8e6f7c

File tree

3 files changed

+31
-7
lines changed

3 files changed

+31
-7
lines changed

src/Storages/MergeTree/MutateTask.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -585,14 +585,26 @@ getColumnsForNewDataPart(
585585
}
586586
}
587587

588-
SerializationInfo::Settings settings
588+
SerializationInfo::Settings settings;
589+
/// If mutations doesn't affect all columns we must use serialization info settings from source part,
590+
/// because data files of some columns might be copied without actual serialization, so changes in serialization
591+
/// settings will not be applied for them (for example, new serialization versions for data types).
592+
if (!affects_all_columns)
589593
{
590-
(*source_part->storage.getSettings())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
591-
false,
592-
(*source_part->storage.getSettings())[MergeTreeSetting::serialization_info_version],
593-
(*source_part->storage.getSettings())[MergeTreeSetting::string_serialization_version],
594-
(*source_part->storage.getSettings())[MergeTreeSetting::nullable_serialization_version],
595-
};
594+
settings = serialization_infos.getSettings();
595+
}
596+
/// Otherwise use fresh settings from storage.
597+
else
598+
{
599+
settings = SerializationInfo::Settings
600+
{
601+
(*source_part->storage.getSettings())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
602+
false,
603+
(*source_part->storage.getSettings())[MergeTreeSetting::serialization_info_version],
604+
(*source_part->storage.getSettings())[MergeTreeSetting::string_serialization_version],
605+
(*source_part->storage.getSettings())[MergeTreeSetting::nullable_serialization_version],
606+
};
607+
}
596608

597609
SerializationInfoByName new_serialization_infos(settings);
598610
for (const auto & [name, old_info] : serialization_infos)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
abc99 def
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
drop table if exists test;
2+
create table test (s String) engine=MergeTree order by tuple() settings min_bytes_for_wide_part=1, string_serialization_version='single_stream';
3+
insert into test select 'abc' || toString(number) from numbers(100);
4+
alter table test modify setting string_serialization_version='with_size_stream';
5+
alter table test add column s1 String default 'def' settings alter_sync=2;
6+
alter table test materialize column s1 settings mutations_sync=1;
7+
detach table test;
8+
attach table test;
9+
select max(s), max(s1) from test;
10+
drop table test;
11+

0 commit comments

Comments
 (0)