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