본문으로 건너뛰기
최종 수정: 에

원자적 테이블 교체

Doris는 두 OLAP 테이블 간의 원자적 교체를 지원합니다. 단일 ALTER TABLE 문으로 테이블 이름을 서로 바꾸거나 테이블 전체를 교체할 수 있어, 기존의 "먼저 삭제한 다음 데이터를 적재하는" 방식에서 발생하는 쿼리 가용성 공백을 방지합니다.

적용 시나리오​

중간에 "데이터가 비어 있는" 상태를 노출하지 않고 테이블의 모든 데이터를 다시 써야 하는 워크로드에는 원자적 테이블 교체를 사용합니다.

시나리오권장 방법
테이블 전체 재작성(예: 오프라인 전체 백필)CREATE TABLE LIKE로 새 테이블을 생성하고 새 데이터를 적재한 다음 기존 테이블을 원자적으로 교체합니다
특정 파티션만 교체임시 파티션을 참조하세요
롤백을 위해 기존 테이블 유지swap = true를 사용합니다. 기존 테이블 데이터가 새 테이블 이름 아래로 이동합니다
교체 후 기존 테이블을 유지할 필요가 없음swap = false를 사용합니다. 기존 테이블이 즉시 삭제됩니다

작업 절차​

"기존 테이블 tbl1을 새 데이터로 교체하는 작업"을 예로 들면, 표준 절차는 다음과 같습니다.

  1. 기존 테이블의 스키마를 기반으로 새 테이블을 생성합니다.

    CREATE TABLE tbl2 LIKE tbl1;
  2. 새 테이블 tbl2에 새 데이터를 적재합니다.

  3. 원자적 교체를 실행합니다.

    ALTER TABLE tbl1 REPLACE WITH TABLE tbl2
    [PROPERTIES('swap' = 'true')];
  4. swap 매개변수에 따라 결과를 확인합니다(자세한 내용은 아래 참조).

구문​

ALTER TABLE [db.]tbl1 REPLACE WITH TABLE tbl2
[PROPERTIES('swap' = 'true')];

의미: 테이블 tbl1을 테이블 tbl2로 교체합니다. swap 매개변수는 교체 후 기존 테이블을 처리하는 방식을 제어합니다.

swap 매개변수의 동작​

swap 값교체 후 tbl1의 데이터교체 후 tbl2의 상태일반적인 용도
true(기본값)tbl2의 원래 데이터유지되며 tbl1의 원래 데이터를 포함함(두 테이블이 서로 교환됨)롤백이나 비교를 위해 기존 데이터 유지
falsetbl2의 원래 데이터삭제되며 복구할 수 없음새 데이터만 필요하고 기존 테이블은 폐기해도 되는 경우

동작 원리​

원자적 교체는 여러 DDL 단계를 하나의 원자적 작업으로 통합합니다. 외부에서는 순간적으로 전환되는 것처럼 보입니다.

  • swap = true인 경우:

    1. 테이블 B의 이름을 테이블 A로 변경합니다.
    2. 테이블 A의 이름을 테이블 B로 변경합니다.
  • swap = false인 경우:

    1. 테이블 A를 삭제합니다.
    2. 테이블 B의 이름을 테이블 A로 변경합니다.

이 단계들은 메타데이터 계층에서 하나의 원자적 트랜잭션으로 실행되므로, 외부 쿼리에는 중간 상태가 노출되지 않습니다.

참고 사항​

  • 교체는 두 OLAP 테이블 사이에서만 지원됩니다. 다른 테이블 유형은 지원되지 않습니다.
  • 시스템은 두 테이블의 스키마가 동일한지 검증하지 않습니다. 스키마 호환성은 직접 확인해야 합니다.
  • swap = false인 경우, 교체된 기존 테이블은 즉시 삭제되며 복구할 수 없습니다. 이 옵션은 신중하게 사용하세요.
  • 교체해도 권한 설정은 변경되지 않습니다. 권한은 테이블 이름을 기준으로 확인하기 때문입니다. 교체 후 새 테이블은 원래 테이블 이름에 연결된 권한을 자동으로 상속합니다.

자주 묻는 질문​

질문1: 교체 시 이미 실행 중인 쿼리도 영향을 받나요?

답변: 교체는 메타데이터 계층에서 수행되는 원자적 작업입니다. 이미 요청된 쿼리는 원래 테이블 데이터를 대상으로 실행을 완료하고, 새 쿼리는 교체 후의 데이터에 접근합니다.

질문2: 열, 인덱스 또는 파티션이 서로 다른 두 테이블도 교체할 수 있나요?

답변: 가능합니다. 시스템은 스키마 일치 여부를 검증하지 않지만, 스키마 호환성을 유지하는 것이 좋습니다. 그렇지 않으면 열 이름이나 타입 변경으로 인해 다운스트림 쿼리와 애플리케이션에서 오류가 발생할 수 있습니다.

질문3: 교체 후 원래 테이블 데이터를 복구할 수 있나요?

답변: swap = true인 경우, 원래 테이블 데이터가 기존 tbl2 이름 아래에 보존되므로 복구할 수 있습니다. swap = false인 경우, 원래 테이블이 삭제되었으므로 복구할 수 없습니다.

질문4: 파티션에도 원자적 교체를 사용할 수 있나요?

답변: 가능합니다. 파티션 단위로 원자적 덮어쓰기를 수행하려면 임시 파티션 기능을 사용하세요.

  • 임시 파티션: 파티션 단위 원자적 덮어쓰기
  • CREATE TABLE LIKE: 기존 테이블 스키마를 기반으로 새 테이블을 빠르게 생성