From 21faea1f6845591c71b255d6a7de6abfc5cf69be Mon Sep 17 00:00:00 2001 From: alesapin Date: Wed, 10 Feb 2021 13:43:31 +0300 Subject: [PATCH 1/2] Relax check in data writer for non adaptive tables --- .../MergeTree/MergeTreeDataPartWriterWide.cpp | 4 +-- ...ptive_granularity_vertical_merge.reference | 6 ++++ ...no_adaptive_granularity_vertical_merge.sql | 30 +++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.reference create mode 100644 tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql diff --git a/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp b/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp index 81a6539780c..f2bbf53bd97 100644 --- a/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp +++ b/src/Storages/MergeTree/MergeTreeDataPartWriterWide.cpp @@ -140,7 +140,7 @@ void MergeTreeDataPartWriterWide::shiftCurrentMark(const Granules & granules_wri /// If we didn't finished last granule than we will continue to write it from new block if (!last_granule.is_complete) { - if (settings.blocks_are_granules_size) + if (settings.can_use_adaptive_granularity && settings.blocks_are_granules_size) throw Exception(ErrorCodes::LOGICAL_ERROR, "Incomplete granules are not allowed while blocks are granules size. " "Mark number {} (rows {}), rows written in last mark {}, rows to write in last mark from block {} (from row {}), total marks currently {}", last_granule.mark_number, index_granularity.getMarkRows(last_granule.mark_number), rows_written_in_last_mark, @@ -506,7 +506,7 @@ void MergeTreeDataPartWriterWide::finishDataSerialization(IMergeTreeDataPart::Ch WrittenOffsetColumns offset_columns; if (rows_written_in_last_mark > 0) { - if (settings.blocks_are_granules_size) + if (settings.can_use_adaptive_granularity && settings.blocks_are_granules_size) throw Exception(ErrorCodes::LOGICAL_ERROR, "Incomplete granule is not allowed while blocks are granules size even for last granule. " "Mark number {} (rows {}), rows written for last mark {}, total marks {}", getCurrentMark(), index_granularity.getMarkRows(getCurrentMark()), rows_written_in_last_mark, index_granularity.getMarksCount()); diff --git a/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.reference b/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.reference new file mode 100644 index 00000000000..51acb066394 --- /dev/null +++ b/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.reference @@ -0,0 +1,6 @@ +1 1 +2 2 +1 1 +2 2 +1 1 +2 2 diff --git a/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql b/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql new file mode 100644 index 00000000000..e744de3c27d --- /dev/null +++ b/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql @@ -0,0 +1,30 @@ +DROP TABLE IF EXISTS old_school_table; + +CREATE TABLE old_school_table +( + key UInt64, + value String +) +ENGINE = MergeTree() +ORDER BY key +SETTINGS index_granularity_bytes = 0, enable_mixed_granularity_parts = 0, +vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 1; + +INSERT INTO old_school_table VALUES (1, '1'); +INSERT INTO old_school_table VALUES (2, '2'); + +OPTIMIZE TABLE old_school_table FINAL; + +SELECT * FROM old_school_table ORDER BY key; + +OPTIMIZE TABLE old_school_table FINAL; -- just to be sure + +SELECT * FROM old_school_table ORDER BY key; + +ALTER TABLE old_school_table MODIFY SETTING vertical_merge_algorithm_min_rows_to_activate = 10000, vertical_merge_algorithm_min_columns_to_activate = 10000; + +OPTIMIZE TABLE old_school_table FINAL; -- and horizontal merge + +SELECT * FROM old_school_table ORDER BY key; + +DROP TABLE IF EXISTS old_school_table; From 1227ca3d7a1d75d83144bb6729b4b7c82e7ceade Mon Sep 17 00:00:00 2001 From: alesapin Date: Wed, 10 Feb 2021 14:49:41 +0300 Subject: [PATCH 2/2] Fix min bytes for wide parts --- .../01712_no_adaptive_granularity_vertical_merge.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql b/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql index e744de3c27d..0acf6992c1e 100644 --- a/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql +++ b/tests/queries/0_stateless/01712_no_adaptive_granularity_vertical_merge.sql @@ -7,7 +7,7 @@ CREATE TABLE old_school_table ) ENGINE = MergeTree() ORDER BY key -SETTINGS index_granularity_bytes = 0, enable_mixed_granularity_parts = 0, +SETTINGS index_granularity_bytes = 0, enable_mixed_granularity_parts = 0, min_bytes_for_wide_part = 0, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 1; INSERT INTO old_school_table VALUES (1, '1');