스파크 SQL은 스파크에서 가장 중요하고 강력한 기능 중 하나이다. 스파크 SQL은 DataFrame과의 뛰어난 호환성 덕분에 다양한 기업에서 강력한 기능으로 자리매김하였다.
스파크 SQL은 하이브 메타스토어를 사용하므로 하이브와 잘 연동할 수 있다. 스파크 SQL은 하이브 메타스토어에 접속한 뒤 조회할 파일 수를 최소화하기 위해 메타데이터를 참조한다.
스파크는 자바 데이터베이스 연결(JDBC) 인터페이스를 제공한다.
쓰리프트 JDBC/ODBC 서버는 하이브 1.2.1 버전의 HiveServer2에 맞추어 구현되어 있다.
🐱 카탈로그
- 스파크 SQL에서 가장 높은 추상화 단계
- 테이블에 저장된 데이터에 대한 메타데이터 뿐만 아니라 데이터베이스, 테이블, 함수, 뷰에 대한 정보를 추상화
- 카탈로그는 테이블, 데이터베이스, 함수를 조회하는 등 여러 가지 유용한 함수를 제공
- 스파크 SQL을 사용하는 또 다른 방식의 프로그래밍 인터페이스
🏓 테이블
- 관리형 테이블/외부 테이블
- 메타데이터 저장
- DataFrame의 saveAsTable 메서드는 스파크가 관련된 모든 정보를 추적할 수 있는 관리형 테이블을 만들 수 있다.
- saveAsTable 메서드는 테이블을 읽고 데이터를 스파크 포맷으로 변환한 후 새로운 경로에 저장한다.
🔎 뷰
- 기존 테이블에 여러 트랜스포메이션 작업을 지정
- 단순 쿼리 실행 계획
- 뷰를 사용하면 쿼리 로직을 체계화하거나 재사용하기 편하게 만들 수 있다.
- 전역 뷰/세션별 뷰/임시뷰/일반뷰
- 전역적 임시 뷰 → 데이터베이스에 상관 없이 사용할 수 있어 전체 스파크 애플리케이션에서 볼 수 있지만, 세션이 종료되면 뷰도 사라진다.
🛀 데이터베이스
- 여러 테이블을 조직화하기 위한 도구
- 데이터베이스를 정의하지 않으면 기본 데이터베이스를 사용
- 스파크에서 실행하는 모든 SQL 명령문은 사용 중인 데이터베이스 범위에서 실행된다.
📀 복합 데이터 타입
- 구조체
- 맵에 가깝다.
- 스파크에서 중첩 데이터를 생성하거나 쿼리하는 방법을 제공
- 구조체를 만들기 위해서는 여러 컬럼이나 표현식을 괄호로 묶으면 된다.
- 리스트
- 맵
✔️ 함수
- 스파크 SQL은 다양한 고급 함수를 제공
- 스파크는 사용자 정의 함수를 정의하고 분산 환경에서 사용할 수 있는 기능을 제공
✔️ 서브쿼리
[출처] 스파크 완벽 가이드 (빌 체임버스, 마테이 자하리아 지음)