mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Don't create empty parts on INSERT
This commit is contained in:
parent
a94e223cee
commit
f0163c2acf
@ -29,6 +29,12 @@ void MergeTreeBlockOutputStream::write(const Block & block)
|
|||||||
Stopwatch watch;
|
Stopwatch watch;
|
||||||
|
|
||||||
MergeTreeData::MutableDataPartPtr part = storage.writer.writeTempPart(current_block, metadata_snapshot, optimize_on_insert);
|
MergeTreeData::MutableDataPartPtr part = storage.writer.writeTempPart(current_block, metadata_snapshot, optimize_on_insert);
|
||||||
|
|
||||||
|
/// If optimize_on_insert setting is true, current_block could become empty after merge
|
||||||
|
/// and we didn't create part.
|
||||||
|
if (!part)
|
||||||
|
continue;
|
||||||
|
|
||||||
storage.renameTempPartAndAdd(part, &storage.increment);
|
storage.renameTempPartAndAdd(part, &storage.increment);
|
||||||
|
|
||||||
PartLog::addNewPart(storage.global_context, part, watch.elapsed());
|
PartLog::addNewPart(storage.global_context, part, watch.elapsed());
|
||||||
|
@ -327,6 +327,11 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataWriter::writeTempPart(BlockWithPa
|
|||||||
/// Size of part would not be greater than block.bytes() + epsilon
|
/// Size of part would not be greater than block.bytes() + epsilon
|
||||||
size_t expected_size = block.bytes();
|
size_t expected_size = block.bytes();
|
||||||
|
|
||||||
|
/// If optimize_on_insert is true, block may become empty after merge.
|
||||||
|
/// There is no need to create empty part.
|
||||||
|
if (expected_size == 0)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
DB::IMergeTreeDataPart::TTLInfos move_ttl_infos;
|
DB::IMergeTreeDataPart::TTLInfos move_ttl_infos;
|
||||||
const auto & move_ttl_entries = metadata_snapshot->getMoveTTLs();
|
const auto & move_ttl_entries = metadata_snapshot->getMoveTTLs();
|
||||||
for (const auto & ttl_entry : move_ttl_entries)
|
for (const auto & ttl_entry : move_ttl_entries)
|
||||||
|
@ -144,6 +144,11 @@ void ReplicatedMergeTreeBlockOutputStream::write(const Block & block)
|
|||||||
|
|
||||||
MergeTreeData::MutableDataPartPtr part = storage.writer.writeTempPart(current_block, metadata_snapshot, optimize_on_insert);
|
MergeTreeData::MutableDataPartPtr part = storage.writer.writeTempPart(current_block, metadata_snapshot, optimize_on_insert);
|
||||||
|
|
||||||
|
/// If optimize_on_insert setting is true, current_block could become empty after merge
|
||||||
|
/// and we didn't create part.
|
||||||
|
if (!part)
|
||||||
|
continue;
|
||||||
|
|
||||||
String block_id;
|
String block_id;
|
||||||
|
|
||||||
if (deduplicate)
|
if (deduplicate)
|
||||||
|
@ -11,3 +11,4 @@ Summing Merge Tree
|
|||||||
Aggregating Merge Tree
|
Aggregating Merge Tree
|
||||||
1 5 2020-01-01 00:00:00
|
1 5 2020-01-01 00:00:00
|
||||||
2 5 2020-01-02 00:00:00
|
2 5 2020-01-02 00:00:00
|
||||||
|
Check creating empty parts
|
||||||
|
@ -33,3 +33,10 @@ INSERT INTO aggregating_merge_tree VALUES (1, 1, '2020-01-01'), (2, 1, '2020-01-
|
|||||||
SELECT * FROM aggregating_merge_tree ORDER BY key;
|
SELECT * FROM aggregating_merge_tree ORDER BY key;
|
||||||
DROP TABLE aggregating_merge_tree;
|
DROP TABLE aggregating_merge_tree;
|
||||||
|
|
||||||
|
SELECT 'Check creating empty parts';
|
||||||
|
DROP TABLE IF EXISTS empty;
|
||||||
|
CREATE TABLE empty (key UInt32, val UInt32, date Datetime) ENGINE=SummingMergeTree(val) PARTITION BY date ORDER BY key;
|
||||||
|
INSERT INTO empty VALUES (1, 1, '2020-01-01'), (1, 1, '2020-01-01'), (1, -2, '2020-01-01');
|
||||||
|
SELECT * FROM empty ORDER BY key;
|
||||||
|
SELECT table, partition, active FROM system.parts where table = 'empty' and active = 1;
|
||||||
|
DROP TABLE empty;
|
||||||
|
Loading…
Reference in New Issue
Block a user