CTAS란 ?!
“Create Table As Select”
의 약자로 기존 테이블이나 쿼리 결과를 바탕으로 새로운 테이블을 생성하는 SQL 문법
CREATE TABLE new_table AS SELECT ...
SELECT 절을 통해 얻은 결과를 새로 생성된 테이블에 저장하여 사용한다.
CTAS 왜 사용하는거야?
특정 시점의 데이터를 저장해서 백업이나 스냅샷으로 활용 가능하고
데이터 엔지니어링 관점에서 데이터 웨어하우스에는 많은 폴더, 테이블이 존재하는데
- 자주 JOIN 하는 테이블을 임시 테이블로 생성해 사용할 수 있고,
기존 데이터 가공하고 새로운 형식으로 저장하여 후속 분석이나 다른 작업에 활용 할 수 있다.
✏️ CTAS vs 뷰(View)
기존의 테이블 외에 테이블을 만든다는 점에서 뷰(View)와 유사해보이지만 저장방식과 용도의 차이가 있다.
CTAS
는 생성된 새로운 테이블이 실제 물리적 데이터베이스에 저장되고, 이후 원본 데이터가 변경되어도, 생성된 테이블의 데이터는 그대로 유지 → 데이터 수정 가능
View
는 물리적으로 저장하지 않고, 기존 테이블의 쿼리 결과를 참조하는 가상 테이블
원본 테이블의 데이터 실시간으로 조회해서, 원본데이터 변경되면 뷰 조회 결과도 자동으로 반영
→ 데이터 수정 못함 (일부 조건 수정시 가능)
위의 차이로 CTAS
는 고정된 시점의 데이터를 저장하여 새 테이블을 생성하여 사용, 뷰
는 가상 테이블로 실시간 조회를 제공한다.
CTAS 사용법
* * *
기본적인 CTAS 구문
CREATE TABLE new_table AS
SELECT column1, column2, ...
FROM existing_table
WHERE condition;
예제 1. 전체 데이터 복사
employees
테이블에 있는 전체 데이터를 employee\_backup
테이블로 복사
-- 1. 전체 데이터 복사
CREATE TABLE employee_backup AS
SELECT *
FROM employees;
예제 2. 조건에 따른 데이터 필터링
-- 2. 조건에 따른 데이터 필터링
CREATE TABLE employee_copy AS
SELECT *
FROM employees
WHERE salary > 100000;
예제 3. 특정 컬럼만 선택
-- 3. 특정 컬럼만 선택
CREATE TABLE employee_copy AS
SELECT employee_id, employee_name
FROM employees;
예제 4. 기존 테이블의 구조만 복사
WITH NO DATA
옵션을 사용해서 데이터 복사없이 기존 테이블의 구조를 기반으로 빈 테이블을 만들 수 있다. 테이블을 유연하게 설계할 수 있고 데이터는 나중에 로드 할 수 있는 장점이 있음.
-- 4. 기존 테이블의 구조만 복사
-- WITH NO DATA 옵션 사용 (Oracle)
CREATE TABLE employee_copy AS
SELECT *
FROM employees
WITH NO DATA;
-- WITH NO DATA 옵션 지원하지 않는 경우 (MySQL)
CREATE TABLE employee_copy AS
SELECT *
FROM employees
WHERE 1=2;
CTAS 사용시 주의사항
- CTAS로 생성하려는 테이블이 이미 존재할 경우 에러 발생 주의
- 인덱스나 제약조건은 복사 해오지 않기 때문에 따로 설정 필요
'데브코스 데이터엔지니어링' 카테고리의 다른 글
git branch 로컬 브랜치 삭제하기 (1) | 2024.11.08 |
---|---|
유클리드 알고리즘(최대공약수 GCD, 최소공배수 LCM) 구하기 (0) | 2024.11.07 |
정적 웹 페이지와 동적 웹 페이지 비교 (0) | 2024.10.15 |
알고리즘 빅오 표기법(Big-O notation) 이해하기 (0) | 2024.10.15 |
깃(Git) 깃허브(GitHub) 개발 순서 정리 (0) | 2024.10.15 |