이번 강부터 두 강에 걸쳐 Spark SQL로 데이터를 변환하는 ELT를 다룬다.
ELT는 먼저 데이터를 적재(Load)한 뒤 SQL로 변환(Transform)하는 방식이다. 원본을 그대로 두고 레이크하우스 안에서 가공한다.
이 강의 목표는 다음과 같다.
- 파일을 테이블처럼 직접 쿼리한다.
- CTAS로 조회 결과를 Delta 테이블로 만든다.
- 외부 데이터 소스를 테이블로 등록한다.
1. 파일을 직접 쿼리
경로 앞에 포맷을 붙이면 파일을 바로 조회할 수 있다.
SELECT * FROM json.`/data/raw/events`;
SELECT * FROM parquet.`/data/raw/sales`;
CSV처럼 옵션이 필요한 경우 read_files나 임시 뷰를 쓴다.
2. CTAS — 조회 결과를 테이블로
CREATE TABLE AS SELECT는 쿼리 결과를 곧바로 Delta 테이블로 저장한다. 스키마는 쿼리에서 자동 추론된다.
CREATE TABLE events AS
SELECT * FROM json.`/data/raw/events`;
3. 외부 소스 등록
JDBC나 외부 포맷은 USING으로 소스를 지정해 등록한다.
CREATE TABLE ext USING csv
OPTIONS (path '/data/raw/x.csv', header 'true');
주의: 이렇게 등록한 비Delta 외부 테이블은 캐시로 인해 최신 파일이 즉시 반영되지 않을 수 있어, 분석 대상은 CTAS로 Delta에 적재하는 편이 안전하다.
4. 임시뷰와 CTE로 단계화
복잡한 변환은 단계로 쪼갠다.
CREATE TEMP VIEW clean AS
SELECT id, lower(email) AS email FROM events WHERE id IS NOT NULL;
WITH top AS (SELECT id, count(*) c FROM clean GROUP BY id)
SELECT * FROM top WHERE c > 5;
예제
예제) 매일 도착하는 JSON 로그를 정제해 분석용 Delta 테이블로 만들고 싶다. 순서는?
해설) ① json.`/path` 형태로 원본을 직접 조회해 구조를 확인한다. ② 임시뷰/CTE로 결측 제거·형변환 등 정제를 단계별로 적용한다. ③ CTAS로 최종 결과를 Delta 테이블로 저장한다. 원본은 건드리지 않고 레이크하우스 안에서 변환이 끝난다(ELT).
샘플 문제
문) CREATE TABLE t AS SELECT * FROM json.`/path` 의 결과 테이블 포맷은?
- (A) JSON
- (B) CSV
- (C) Delta (기본)
- (D) Parquet(로그 없음)
정답: (C). CTAS로 만든 관리형 테이블은 기본적으로 Delta 포맷으로 저장된다. 원본이 JSON이어도 결과는 Delta다.
정리
- ELT = 적재 후 SQL로 변환. 원본을 그대로 두고 가공한다.
format.`/path`로 파일을 직접 쿼리한다.- CTAS는 조회 결과를 Delta 테이블로 저장(스키마 자동 추론).
- 임시뷰·CTE로 변환을 단계화한다.
다음 강에서는 중첩 데이터와 UDF 같은 고급 변환을 다룬다.
댓글 0
댓글은 운영자만 작성할 수 있어요.