임시 테이블(사용 중단)
임시 테이블 기능은 더 이상 사용을 권장하지 않습니다. 프로덕션 환경에서는 사용하지 않는 것이 좋습니다.
복잡한 데이터 처리 작업에서는 큰 SQL 쿼리를 여러 단계로 나누고 각 단계의 결과를 구체화된 테이블로 임시 저장하는 전략이 효과적입니다. 이 방식은 SQL 쿼리의 복잡성을 크게 줄이고 데이터 디버깅을 쉽게 해 줍니다. 다만 사용을 마친 구체화된 테이블은 수동으로 정리해야 합니다. 구체화되지 않은 임시 테이블을 사용하려는 경우, 현재 Doris에서는 WITH 절을 통한 정의만 지원합니다.
이러한 문제를 해결하기 위해 Doris는 임시 테이블 기능을 제공합니다. 임시 테이블은 일시적으로 존재하는 구체화된 내부 테이블입니다. 복잡한 데이터 처리 과정에서 임시 데이터의 저장과 관리를 간소화하고, 데이터 처리의 유연성과 안전성을 높여 줍니다.
주요 기능
| 기능 | 설명 |
|---|---|
| 세션에 종속 | 임시 테이블은 이를 생성한 세션에만 존재하며, 수명 주기는 현재 세션에 종속됩니다. 세션이 종료되면 해당 세션에서 생성한 모든 임시 테이블이 자동으로 삭제됩니다. |
| 세션 내에서만 표시 | 임시 테이블의 가시성은 이를 생성한 세션으로 엄격히 제한됩니다. 같은 사용자가 동시에 시작한 다른 세션에서도 이 임시 테이블에 접근할 수 없습니다. |
| 유연한 이름 지정 | 임시 테이블의 이름에는 고유성 제약이 적용되지 않습니다. 서로 다른 세션에서 같은 이름의 임시 테이블을 생성할 수 있으며, 다른 내부 테이블과 같은 이름의 임시 테이블도 생성할 수 있습니다. |
내부 테이블과 마찬가지로 임시 테이블도 Internal Catalog 내의 데이터베이스에 생성해야 합니다.
같은 데이터베이스에 이름이 동일한 임시 테이블과 일반 테이블이 있으면 임시 테이블의 접근 우선순위가 가장 높습니다. 해당 세션에서 그 이름의 테이블을 대상으로 하는 모든 쿼리와 작업은 임시 테이블에만 적용됩니다(구체화된 뷰 생성은 예외).
활용 시나리오
임시 테이블은 다음과 같은 데이터 처리 시나리오에 적합합니다.
- 복잡한 SQL 분해: 큰 쿼리를 여러 단계로 나누고 중간 결과를 순차적으로 구체화하여 단일 SQL 문의 복잡성을 줄입니다.
- 중간 결과 임시 저장: ETL, 데이터 탐색 또는 보고서 개발 과정에서 중간 계산 결과를 저장하여 반복 계산을 방지합니다.
- 데이터 디버깅 및 검증: 각 단계의 결과를 구체화하여 확인과 검증을 쉽게 하고 디버깅을 용이하게 합니다.
- 세션별로 격리된 데이터 처리: 데이터가 해당 세션 내에서만 보이고 세션 종료 시 자동으로 회수되어야 하는 시나리오에 적합하며, 남은 데이터로 인한 오염을 방지합니다.
사용 방법
임시 테이블 생성
Unique, Aggregate, Duplicate 모델을 포함하여 모든 모델의 테이블을 임시 테이블로 정의할 수 있습니다. 다음 SQL 문에 TEMPORARY 키워드를 추가하여 임시 테이블을 생성할 수 있습니다.
임시 테이블 작업
그 밖의 임시 테이블 사용 방법은 기본적으로 일반 내부 테이블과 같습니다. 위의 CREATE 문을 제외한 다른 DDL 및 DML 문에는 TEMPORARY 키워드가 필요하지 않습니다.
제한 사항
- 임시 테이블은 Internal Catalog에만 생성할 수 있습니다.
- 테이블을 생성할 때 ENGINE은 OLAP이어야 합니다.
- Alter 문을 사용한 임시 테이블 수정은 지원하지 않습니다.
- 임시로 존재하는 특성상 임시 테이블을 기반으로 한 뷰 및 구체화된 뷰 생성은 지원하지 않습니다.
- 임시 테이블의 백업과 Sync Job을 통한 동기화는 지원하지 않습니다.
- Export, Stream Load, Broker Load, S3 Load, Mysql Load, Routine Load는 지원하지 않습니다.
- 임시 테이블을 삭제하면 휴지통을 거치지 않고 영구적으로 삭제됩니다.