개요
REPLACE SQL 문을 사용하면 테이블을 원자적으로 업데이트할 수 있습니다.
일반적으로 테이블에서 일부 데이터를 삭제하려면,
원하지 않는 데이터를 조회하지 않는 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 SQL 문을 사용해 모든 데이터를 삭제할 수 있습니다.
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 SQL 문을 사용해 테이블 구조를 변경할 수 있습니다.
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 SQL 문을 사용해 모든 데이터를 삭제할 수 있습니다.
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 SQL 문을 사용해 테이블 구조를 변경할 수 있습니다.
REPLACE TABLE base.t1 (n UInt64)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (3);
SELECT * FROM base.t1;
3