• 티스토리 홈
  • 프로필사진
    31514
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
31514
  • 프로필사진
    31514
    • 분류 전체보기 (110)
      • Book (66)
        • Learning SQL (9)
        • SQL 레벨업 (8)
        • 견고한 데이터 엔지니어링 (5)
        • 운영체제 (2)
        • 스파크 완벽 가이드 (9)
        • 파이썬 코딩의 기술 (29)
        • 분산 컴퓨팅 (4)
      • 개발 (26)
      • 기타 (10)
        • 출퇴근 공부 간단 정리 (7)
      • ELK (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
      • 31514의 이전 블로그는 여기로!
      등록된 공지가 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • [스파크 완벽 가이드] 10장 - 스파크 SQL
      2024년 10월 23일
      • 31514
      • 작성자
      • 2024.10.23.오후12:36

      스파크 SQL 쿼리 실행 방법

      1. 스파크 SQL CLI
      2. 스파크의 프로그래밍 SQL 인터페이스
      3. 스파크 SQL Thrift JDBC/ODBC 서버

       

      카탈로그

      스파크 SQL에서 가장 높은 추상화 단계는 카탈로그이다.

      카탈로그는 테이블에 저장된 데이터에 대한 메타데이터뿐만 아니라 데이터베이스, 테이블, 함수 그리고 뷰에 대한 정보를 추상화한다.

       

      테이블

      테이블은 명령을 실행할 데이터의 구조라는 점에서 DataFrame과 논리적으로 동일하다.

      스파크에서 테이블을 생성하면 default 데이터베이스에 등록된다.

       

      테이블은 항상 데이터를 가지고 있다.

      임시 테이블의 개념이 없으며 데이터를 가지지 않는 뷰만 존재한다.

      따라서 테이블을 제거하면 모든 데이터가 사라지므로 주의해야 한다.

       

      <스파크 관리형 테이블>

      관리형 테이블은 스파크가 데이터 파일을 완전히 관리하는 테이블 유형이다.

      테이블을 생성할 때 스파크가 데이터의 저장 위치와 메타데이터를 모두 관리하며, 메타스토어에서 해당 테이블을 추적한다.

       

      외부 테이블은 데이터의 물리적 위치가 스파크 또는 하이브 외부에서 관리되는 테이블이다.

      스파크는 메타데이터만 관리하고, 데이터 파일은 사용자가 관리한다.

       

      <테이블 생성하기>

      스파크는 다양한 데이터소스를 사용해 테이블을 생성할 수 있고, 다음과 같은 명령어를 사용한다.

      CREATE TABLE flights (
        DEST_COUNTRY_NAME STRING, ORIGIN_COUNTRY_NAME STRING, count LONG)
      USING JSON OPTIONS (path '경로')

      USING 구문을 사용하여 포맷을 지정하지 않으면, 스파크는 하이브 SerDe 설정을 사용한다.

      하이브 SerDe는 스파크의 자체 직렬화보다 훨씬 느리므로 성능에 영향을 미친다.

       

      <파티셔닝된 테이블에 데이터 삽입>

      INSERT INTO partitioned_flights
        PARTITION (DEST_COUNTRY_NAME = "UNITED STATES")
        SELECT count, ORIGIN_COUNTRY_NAME
        FROM flights
        WHERE DEST_COUNTRY_NAME = "UNITED STATES"
        LIMIT 12

       

      파티셔닝된 테이블 partitioned_flight에 flights 테이블의 일부 데이터를 삽입한다.

       

      뷰

      뷰는 실질적으로 트랜스포메이션이며 스파크는 쿼리가 실행될 때만 뷰를 실행한다.

      • 임시 뷰 - 데이터베이스에 등록되지 않고 현재 세션에서만 사용
      • 전역 임시 뷰 - 전체 스파크 애플리케이션에서 볼 수 있는 뷰

       

      복합 데이터 타입 쿼리

      스파크 SQL에는 구조체, 리스트, 맵 세 가지 복합 데이터 타입이 존재한다.

       

      <구조체>

      구조체는 맵에 더 가까우며 스파크에서 중첩 데이터를 생성하거나 쿼리하는 방법을 제공한다.

      CREATE VIEW IF NOT EXISTS nested_data AS
        SELECT (DEST_COUNTRY_NAME, ORIGIN_COUNTRY_NAME) country, count
        FROM flights

      위와 같이 여러 컬럼이나 표현식을 괄호로 묶기만 하면 생성할 수 있다.

       

      SELECT country.DEST_COUNTRY_NAME, count
      FROM nested_data

      구조체의 개별 컬럼을 조회할 수 있다.

       

      <리스트>

      collect_list 함수나 중복 없는 배열을 만드는 collect_set 함수를 사용할 수 있다.

      SELECT DEST_COUNTRY_NAME new_name, collect_list(count) flight_counts,
        collect_set(ORIGIN_COUNTRY_NAME) origin_set
      FROM flights
      GROUP BY DEST_COUNTRY_NAME

       

      직접 배열을 생성할 수 있다.

      SELECT DEST_COUNTRY_NAME, ARRAY(1, 2, 3)
      FROM flights

       

      파이썬과 유사한 방법으로 특정 위치의 데이터를 쿼리할 수 있다.

      SELECT DEST_COUNTRY_NAME new_name, collect_list(count)[0]
      FROM flights
      GROUP BY DEST_COUNTRY_NAME

       

      explode 함수를 사용해 배열을 다시 여러 로우로 변환할 수 있다.

      CREATE OR REPLACE TEMP VIEW flights_agg AS
        SELECT DEST_COUNTRY_NAME, collect_list(count) collected_counts
        FROM flights
        GROUP BY DEST_COUNTRY_NAME
       
      -- explode 사용
      SELECT explode(collected_counts), DEST_COUNTRY_NAME
      FROM flights_add

       

      사용자 정의 함수

      def power3(number:Double): Double = number * number * number
      spark.udf.register("power3", power3(_:Double):Double)
      
      SELECT count, power3(count)
      FROM flights

      'Book > 스파크 완벽 가이드' 카테고리의 다른 글

      [스파크 완벽 가이드] 8장 - 조인  (0) 2024.10.24
      [스파크 완벽 가이드] 14장 - 분산형 공유 변수  (0) 2024.10.22
      [스파크 완벽 가이드] 15장 - 스파크 애플리케이션의 생애주기  (0) 2024.10.21
      [스파크 완벽 가이드] 18장 - 모니터링  (0) 2024.10.17
      [스파크 완벽 가이드] 17장 - 스파크 배포 환경  (0) 2024.10.16
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
    • 스파크 SQL 쿼리 실행 방법
    • 카탈로그
    • 테이블
    • 뷰
    • 복합 데이터 타입 쿼리
    • 사용자 정의 함수
    • 안녕하세요
    • 감사해요
    • 잘있어요

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.