概要
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 testREPLACE ステートメントを使用すると、すべてのデータを消去できます。
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