SQL의 중요성
- 데이터 분야에서 일하고자하면 반드시 익혀야할 기본 기술
- 구조화된 데이터를 다루는 한 SQL은 데이터 규모와 상관없이 쓰임
- 모든 대용량 데이터 웨어하우스는 SQL 기반
- Redshift, Snowflake, BigQuery
- Hive/Presto
- Spark도 예외는 아님
- Spark SQL이 지원됨
- 요즘 마케터 직종에 있는 분들도 SQL을 배우는 분들이 많다. UDEMY는 신입들은 ONBOADING에서 전부 SQL을 배웠다.
- 하지만 많은 사람들이 테이블을 만들 수 있으면, DATA DISCOVERY 문제가 발생한다.
- 현업에서 데이터 직군이 아님에도 불구하고, 데이터 분석을 하는 사람이 늘어난다.
- 이 사람들은 CITIZEN DATA ANALYST, CITIZEN DATA SCIENTIST라고도 하고 있다
Spark SQL 이란?
- Spark SQL은 구조화된 데이터 처리를 위한 Spark 모듈
- 데이터 프레임 작업을 SQL로 처리 가능
- 데이터프레임에 테이블 이름 지정 후 SQL 함수 사용 가능
- PANDAS에도 pandasql 모듈의 sqldf 함수를 이용하는 동일한 패턴 존재
- HQL(Hive Query Language)과 호환 제공
- Hive 테이블들을 읽고 쓸 수 있음(Hive Metastore)
- 보통 Hive와 Spark을 동시에 운영하는게 기본적
- 데이터프레임에 테이블 이름 지정 후 SQL 함수 사용 가능
Spark SQL vs. DataFrame
- 하지만 SQL로 가능한 작업이라면 DataFrame을 사용할 이유가 없음
- 두 개를 동시에 사용할 수 있다는 점 분명히 기억
- Familiarity/Readability
- SQL이 가독성이 더 좋고 더 많은 사람들이 사용 가능
- Optimization
- Spark SQL 엔진이 더 최적화 하기 더 좋음(SQL은 Declarative)
- Catalyst Optimizer와 Project Tungsten
- Spark SQL 엔진이 더 최적화 하기 더 좋음(SQL은 Declarative)
- Interoperability/Data Management
- SQL이 포팅도 쉽고 접근 권한 체크도 쉬움
Spark SQL 사용법 - SQL 사용 방법
- 데이터 프레임을 기반으로 테이블 뷰 생성 : 테이블이 만들어짐
- createOrReplaceTempView : Spark Session이 살아있는 동안 존재
- createOrReplaceGlobalTempView : Spark 드라이버가 살아 있는 동안 존재
- Spark Session의 sql 함수로 SQL 결과를 데이터프레임으로 받음
namegender_df.createOrReplaceTempView("namegender")
namegender_group_df = spark.sql("""
SELECT gender, count(1) FROM namegender GROUP BY 1
""")
print(namegender_group_df.collect())
- Spark Session 사용 외부 데이터베이스 연결
- Spark Session의 read 함수를 호출(로그인 관련 정보와 읽어오고자 하는 테이블 혹은 SQL을 지정). 결과가 데이터프레임으로 리턴됨
df_user_session_channel = spark.read \
.format("jdbc") \
.option("driver", "com.amazon.redshift.jdbc42.Driver") \
.option("url", "jdbc:redshift://HOST:PORT/DB?user=ID&password=PASSWORD") \
.option("dbtable", "raw_data.user_session_channel") \
.load()
'데이터 엔지니어링 > Spark' 카테고리의 다른 글
15. Spark SQL(UDF, Pandas UDF Scalar) (0) | 2023.08.19 |
---|---|
14. Spark SQL(Aggregation-JOIN, Shuffle JOIN, Bucket JOIN, BroadCast JOIN) (3) | 2023.08.17 |
12. Spark DataFrame 실습(Redshift 연결, jdbc, join) (0) | 2023.08.17 |
11. Spark DataFrame 실습(trim, split, explode, overwrite, sort) (0) | 2023.08.17 |
10. Spark DataFrame 실습(텍스트 파싱 -> 구조화 데이터 변환, 윈도우 Hadoop.dll 관련 에러해결법) (0) | 2023.08.17 |