Chapter10 스파크 SQL

스파크 SQL

스파크 SQL은 하이브 메타스토어를 사용하기 때문에 하이브와 잘 연동된다. 스파크 SQL은 하이브 메타스토어에 접속한 뒤 조회할 파일 수를 최소화하기 위해 메타데이터를 참조한다. 하이브 메타스토어에 접속하기 위해서 spark.sql.hive.metastore.version을 설정하고, HiveMetastoreClient가 초기화되는 방식을 변경하기 위해 spark.sql.hive.meatstore.jars를 설정해야 한다. 또한 하이브 메타스토어가 저장된 다른 데이터베이스에 접속하려면 적합한 클래스 접두사를 정의하고, 스파크와 하이브가 접두사를 공유하도록 spark.sql.hive.metastore.sharedPrefixes 속성을 설정한다.

스파크 SQL 쿼리를 실행할 수 있는 몇가지 인터페이스가 있다.

  • 스파크 SQL CLI
  • 스파크의 프로그래밍 SQL 인터페이스(spark.sql)
  • 스파크 SQL 쓰리프트 JDBC/ODBC 서버

테이블

스파크 SQL을 사용하기 위해 테이블을 정의해야 한다. 테이블은 명령을 실행할 데이터의 구조라는 점에서 DataFrame과 논리적으로 동일하다. 조인, 필터링, 집계 등 여러가지 데이터 변환 작업을 수행할 수 있다. DataFrame과 차이점은 DataFrame은 프로그래밍 언어로 정의하지만, 테이블은 데이터베이스에서 정의한다는 것이다. 스파크에서 테이블을 생성하면 default 데이터베이스에 등록된다.

테이블은 테이블의 데이터와 메타데이터라는 두가지 중요한 정보를 저장한다. 테이블을 정의하는 과정에 따라 관리형 테이블과 외부 테이블로 나뉘는데 디스크에 저장된 파일을 이용해 테이블을 정의하면 외부 테이블이라고 부른다. 외부 테이블을 제거하면 데이터는 삭제되지 않지만, 외부 테이블을 이용해 데이터를 조회할 수 없다.

기존 테이블에 여러가지 트랜스포메이션 작업을 지정한 것을 뷰라고 한다. 기본적으로 뷰는 단순 쿼리 실행 계획일 뿐이고, 뷰를 활용해 쿼리 로직을 체계화하거나 재사용하기 편하게 만들 수 있다. 뷰의 종류에는 일반 뷰와 임시 뷰로 나뉘는데, 임시 뷰에는 데이터베이스에 등록되지 않고 현재 세션에서만 사용할 수 있는 임시 뷰와 데이터베이스에 상관없이 사용할 수 있는 전역적 임시뷰 등이 있다.

데이터베이스

여러 테이블을 조직화하기 위해 데이터베이스를 활용한다. 스파크에서 실행하는 모든 SQL 명령문은 현재 사용 중인 데이터베이스 범위에서 실행되므로, 다른 데이터베이스의 테이블을 조회하기 위해서는 다르게 쿼리해야 한다.

복합 데이터 타입

표준 SQL에는 존재하지 않는 기능으로, 스파크에는 구조체, 리스트, 맵 세 가지 핵심 복합 데이터 타입이 존재한다.

구조체 : 중첩 데이터를 생성하거나 쿼리하는 방법을 제공. 여러 컬럼이나 표현식을 괄호로 묶어 사용
리스트 : 여러 개의 유사한 성질을 가지는 값을 다루기 위해 사용.

서브쿼리

서브쿼리를 사용하여 쿼리 안에 쿼리를 작성할 수 있다. 서브쿼리에는 상호연관 서브쿼리와 비상호연관 서브쿼리가 있다. 상호연관 서브 쿼리는 내부쿼리의 정보를 보완하기 위해 외부 쿼리의 있는 정보를 사용할 수 있고, 비상호연관 서브쿼리는 외부 쿼리의 정보를 사용할 수 없다.

Reference

스파크 완벽 가이드
아파치 스파크

profile
개발자 지망생입니다.

0개의 댓글