REPLACE TABLE

REPLACE TABLE

REPLACE 문은 테이블을 원자적으로 업데이트할 수 있게 해줘요.

이 문은 ClickHouse와 ClickHouse Cloud의 기본 데이터베이스 엔진인 AtomicReplicated 데이터베이스 엔진에서 지원됩니다.

출처: 문서

본문

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

더 알아보기 (Learn more)