REPLACE TABLE
REPLACE TABLE
REPLACE 문은 테이블을 원자적으로 업데이트할 수 있게 해줘요.
이 문은 ClickHouse와 ClickHouse Cloud의 기본 데이터베이스 엔진인 Atomic 및 Replicated 데이터베이스 엔진에서 지원됩니다.
출처: 문서
본문
Overview
일반적으로 테이블에서 일부 데이터를 삭제해야 한다면, 원하지 않는 데이터를 검색하지 않는 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;
Syntax
{CREATE [OR REPLACE] | REPLACE} TABLE [db.]table_name
CREATE 문의 모든 문법 형태는 이 문에서도 동작합니다. 존재하지 않는 테이블에 REPLACE를 호출하면 오류가 발생합니다.
Examples
- Local
- Cloud
다음 테이블을 고려해 보세요:
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;
┌─n─┬─s────┐
│ 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;
┌─n─┬─s──┐
│ 2 │ \N │
└───┴────┘
또는 REPLACE 문으로 테이블 구조를 바꿀 수 있어요:
REPLACE TABLE base.t1 (n UInt64)
ENGINE = MergeTree
ORDER BY n;
INSERT INTO base.t1 VALUES (3);
SELECT * FROM base.t1;
┌─n─┐
│ 3 │
└───┘
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