Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

REPLACE TABLE

Обзор

Оператор 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;

Navigation