Skip to content

Commit 2f81f9a

Browse files
Backport #92419 to 25.11: Inherit source part serialization info settings during mutation in MergeTree
1 parent 243b69d commit 2f81f9a

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

src/Storages/MergeTree/MutateTask.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -520,13 +520,25 @@ getColumnsForNewDataPart(
520520
}
521521
}
522522

523-
SerializationInfo::Settings settings
523+
SerializationInfo::Settings settings;
524+
/// If mutations doesn't affect all columns we must use serialization info settings from source part,
525+
/// because data files of some columns might be copied without actual serialization, so changes in serialization
526+
/// settings will not be applied for them (for example, new serialization versions for data types).
527+
if (!affects_all_columns)
524528
{
525-
(*source_part->storage.getSettings())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
526-
false,
527-
(*source_part->storage.getSettings())[MergeTreeSetting::serialization_info_version],
528-
(*source_part->storage.getSettings())[MergeTreeSetting::string_serialization_version],
529-
};
529+
settings = serialization_infos.getSettings();
530+
}
531+
/// Otherwise use fresh settings from storage.
532+
else
533+
{
534+
settings = SerializationInfo::Settings
535+
{
536+
(*source_part->storage.getSettings())[MergeTreeSetting::ratio_of_defaults_for_sparse_serialization],
537+
false,
538+
(*source_part->storage.getSettings())[MergeTreeSetting::serialization_info_version],
539+
(*source_part->storage.getSettings())[MergeTreeSetting::string_serialization_version],
540+
};
541+
}
530542

531543
SerializationInfoByName new_serialization_infos(settings);
532544
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)