Обзор
Оператор REPLACE позволяет атомарно обновлять таблицу.
Обычно, если необходимо удалить данные из таблицы,
можно создать новую таблицу и заполнить её результатом оператора SELECT, исключающего ненужные данные,
а затем удалить старую таблицу и переименовать новую.
Этот подход показан в примере ниже:
CREATE TABLE myNewTable AS myOldTable;
INSERT INTO myNewTable
SELECT * FROM myOldTable
WHERE CounterID <12345;
DROP TABLE myOldTable;
RENAME TABLE myNewTable TO myOldTable;Вместо описанного выше подхода можно также использовать REPLACE (при использовании движков базы данных по умолчанию), чтобы добиться того же результата:
REPLACE TABLE myOldTable
ENGINE = MergeTree()
ORDER BY CounterID
AS
SELECT * FROM myOldTable
WHERE CounterID <12345;Синтаксис
{CREATE [OR REPLACE] | REPLACE} TABLE [db.]table_nameПримеры
Рассмотрим следующую таблицу:
CREATE DATABASE base
ENGINE = Atomic;
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s String
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (1, 'test');
SELECT * FROM base.t1;
┌С помощью оператора REPLACE можно очистить все данные:
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s Nullable(String)
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (2, null);
SELECT * FROM base.t1;
┌Или с помощью оператора REPLACE можно изменить структуру таблицы:
REPLACE TABLE base.t1 (n UInt64)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (3);
SELECT * FROM base.t1;
┌Рассмотрим следующую таблицу в ClickHouse Cloud:
CREATE DATABASE base;
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s String
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (1, 'test');
SELECT * FROM base.t1;
1 testС помощью оператора REPLACE можно очистить все данные:
CREATE OR REPLACE TABLE base.t1
(
n UInt64,
s Nullable(String)
)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (2, null);
SELECT * FROM base.t1;
2Или с помощью оператора REPLACE можно изменить структуру таблицы:
REPLACE TABLE base.t1 (n UInt64)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (3);
SELECT * FROM base.t1;
3