mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-10-19 06:50:50 +00:00
c888903488
* Add ATTACH PARTITION FROM table for MergeTree. [#CLICKHOUSE-3546] * Implemented replicated case on non-leader replica. [#CLICKHOUSE-3546] * Disable merges in the dropping range. [#CLICKHOUSE-3546] * DROP PARTITION is atomic and simpler now. [#CLICKHOUSE-3546] * Implemented more SYSTEM queries. [#CLICKHOUSE-2931] [#CLICKHOUSE-3546] SYSTEM queries: RESTART REPLICAS SYNC REPLICA db.name STOP MERGES [db.name] START MERGES [db.name] STOP FETCHES [db.name] START FETCHES [db.name] STOP REPLICATED SENDS [db.name] START REPLICATED SENDS [db.name] STOP REPLICATION QUEUES [db.name] START REPLICATION QUEUES [db.name] * Fixed a bunch of bugs in REPLACE PARTITION. [#CLICKHOUSE-3546] * Add tests for REPLACE PARTITION and SYSTEM. [#CLICKHOUSE-3546] * Add system.part_log logging. [#CLICKHOUSE-3546] * Fixed long wait in SYNC REPLICA. [#CLICKHOUSE-3546] * Add requested changes. [#CLICKHOUSE-3546] Fixed clickhouse-client bad return code. * Add requested chenges. [#CLICKHOUSE-3546] * Add requested chenges. [#CLICKHOUSE-3546]
141 lines
5.2 KiB
SQL
141 lines
5.2 KiB
SQL
DROP TABLE IF EXISTS test.src;
|
|
DROP TABLE IF EXISTS test.dst_r1;
|
|
DROP TABLE IF EXISTS test.dst_r2;
|
|
|
|
CREATE TABLE test.src (p UInt64, k String, d UInt64) ENGINE = MergeTree PARTITION BY p ORDER BY k;
|
|
CREATE TABLE test.dst_r1 (p UInt64, k String, d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/dst_1', '1') PARTITION BY p ORDER BY k SETTINGS old_parts_lifetime=1, cleanup_delay_period=1, cleanup_delay_period_random_add=0;
|
|
CREATE TABLE test.dst_r2 (p UInt64, k String, d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/dst_1', '2') PARTITION BY p ORDER BY k SETTINGS old_parts_lifetime=1, cleanup_delay_period=1, cleanup_delay_period_random_add=0;
|
|
|
|
INSERT INTO test.src VALUES (0, '0', 1);
|
|
INSERT INTO test.src VALUES (1, '0', 1);
|
|
INSERT INTO test.src VALUES (1, '1', 1);
|
|
INSERT INTO test.src VALUES (2, '0', 1);
|
|
|
|
SELECT 'Initial';
|
|
INSERT INTO test.dst_r1 VALUES (0, '1', 2);
|
|
INSERT INTO test.dst_r1 VALUES (1, '1', 2), (1, '2', 2);
|
|
INSERT INTO test.dst_r1 VALUES (2, '1', 2);
|
|
|
|
SYSTEM SYNC REPLICA test.dst_r2;
|
|
SELECT count(), sum(d) FROM test.src;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
|
|
SELECT 'REPLACE simple';
|
|
ALTER TABLE test.dst_r1 REPLACE PARTITION 1 FROM test.src;
|
|
ALTER TABLE test.src DROP PARTITION 1;
|
|
|
|
SYSTEM SYNC REPLICA test.dst_r2;
|
|
SELECT count(), sum(d) FROM test.src;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
|
|
SELECT 'REPLACE empty';
|
|
ALTER TABLE test.src DROP PARTITION 1;
|
|
ALTER TABLE test.dst_r1 REPLACE PARTITION 1 FROM test.src;
|
|
|
|
SYSTEM SYNC REPLICA test.dst_r2;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
|
|
SELECT 'REPLACE recursive';
|
|
ALTER TABLE test.dst_r1 DROP PARTITION 1;
|
|
INSERT INTO test.dst_r1 VALUES (1, '1', 2), (1, '2', 2);
|
|
|
|
CREATE TEMPORARY table test_block_numbers (m UInt64);
|
|
INSERT INTO test_block_numbers SELECT max(max_block_number) AS m FROM system.parts WHERE database='test' AND table='dst_r1' AND active AND name LIKE '1_%';
|
|
|
|
ALTER TABLE test.dst_r1 REPLACE PARTITION 1 FROM test.dst_r1;
|
|
SYSTEM SYNC REPLICA test.dst_r2;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
INSERT INTO test_block_numbers SELECT max(max_block_number) AS m FROM system.parts WHERE database='test' AND table='dst_r1' AND active AND name LIKE '1_%';
|
|
SELECT (max(m) - min(m) > 1) AS new_block_is_generated FROM test_block_numbers;
|
|
DROP TABLE test_block_numbers;
|
|
|
|
|
|
SELECT 'ATTACH FROM';
|
|
ALTER TABLE test.dst_r1 DROP PARTITION 1;
|
|
DROP TABLE test.src;
|
|
|
|
CREATE TABLE test.src (p UInt64, k String, d UInt64) ENGINE = MergeTree PARTITION BY p ORDER BY k;
|
|
INSERT INTO test.src VALUES (1, '0', 1);
|
|
INSERT INTO test.src VALUES (1, '1', 1);
|
|
|
|
INSERT INTO test.dst_r2 VALUES (1, '1', 2);
|
|
ALTER TABLE test.dst_r2 ATTACH PARTITION 1 FROM test.src;
|
|
|
|
SYSTEM SYNC REPLICA test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
|
|
SELECT 'REPLACE with fetch';
|
|
DROP TABLE test.src;
|
|
CREATE TABLE test.src (p UInt64, k String, d UInt64) ENGINE = MergeTree PARTITION BY p ORDER BY k;
|
|
INSERT INTO test.src VALUES (1, '0', 1);
|
|
INSERT INTO test.src VALUES (1, '1', 1);
|
|
INSERT INTO test.dst_r1 VALUES (1, '1', 2); -- trash part to be deleted
|
|
|
|
-- Stop replication at the second replica and remove source table to use fetch instead of copying
|
|
SYSTEM STOP REPLICATION QUEUES test.dst_r2;
|
|
ALTER TABLE test.dst_r1 REPLACE PARTITION 1 FROM test.src;
|
|
DROP TABLE test.src;
|
|
SYSTEM START REPLICATION QUEUES test.dst_r2;
|
|
|
|
SYSTEM SYNC REPLICA test.dst_r2;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
|
|
SELECT 'REPLACE with fetch of merged';
|
|
DROP TABLE IF EXISTS test.src;
|
|
ALTER TABLE test.dst_r1 DROP PARTITION 1;
|
|
|
|
CREATE TABLE test.src (p UInt64, k String, d UInt64) ENGINE = MergeTree PARTITION BY p ORDER BY k;
|
|
INSERT INTO test.src VALUES (1, '0', 1);
|
|
INSERT INTO test.src VALUES (1, '1', 1);
|
|
INSERT INTO test.dst_r1 VALUES (1, '1', 2); -- trash part to be deleted
|
|
|
|
SYSTEM STOP MERGES test.dst_r2;
|
|
SYSTEM STOP REPLICATION QUEUES test.dst_r2;
|
|
ALTER TABLE test.dst_r1 REPLACE PARTITION 1 FROM test.src;
|
|
DROP TABLE test.src;
|
|
|
|
-- do not wait other replicas to execute OPTIMIZE
|
|
SET replication_alter_partitions_sync=0, optimize_throw_if_noop=1;
|
|
SELECT count(), sum(d), uniqExact(_part) FROM test.dst_r1;
|
|
OPTIMIZE TABLE test.dst_r1 PARTITION 1;
|
|
SET replication_alter_partitions_sync=1;
|
|
SYSTEM SYNC REPLICA test.dst_r1;
|
|
SELECT count(), sum(d), uniqExact(_part) FROM test.dst_r1;
|
|
|
|
SYSTEM START REPLICATION QUEUES test.dst_r2;
|
|
SYSTEM START MERGES test.dst_r2;
|
|
SYSTEM SYNC REPLICA test.dst_r2;
|
|
SELECT count(), sum(d), uniqExact(_part) FROM test.dst_r2;
|
|
|
|
SELECT 'After restart';
|
|
USE test;
|
|
SYSTEM RESTART REPLICA dst_r1;
|
|
SYSTEM RESTART REPLICAS;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
SELECT 'DETACH+ATTACH PARTITION';
|
|
ALTER TABLE test.dst_r1 DETACH PARTITION 0;
|
|
ALTER TABLE test.dst_r1 DETACH PARTITION 1;
|
|
ALTER TABLE test.dst_r1 DETACH PARTITION 2;
|
|
ALTER TABLE test.dst_r1 ATTACH PARTITION 1;
|
|
SELECT count(), sum(d) FROM test.dst_r1;
|
|
SYSTEM SYNC REPLICA test.dst_r2;
|
|
SELECT count(), sum(d) FROM test.dst_r2;
|
|
|
|
DROP TABLE IF EXISTS test.src;
|
|
DROP TABLE IF EXISTS test.dst_r1;
|
|
DROP TABLE IF EXISTS test.dst_r2;
|