데이터 도메인에서 가장 중요한 기술은 SQL

데이터 도메인에서 일을 한다면 직군과 관계없이, 처리하는 데이터의 크기와 관계없이 가장 기본이 되는 기술은 SQL이다. 이는 구조화된 데이터를 다룬다면 빅데이터 세상에서도 마찬가지이다. 순차적인 프로그래밍에 익숙한 개발자들의 경우 SQL을 무시하기 쉬운데 (내가 데이터 도메인에서 일을 하기 전에 그랬다 ^^) 행과 열로 나누어볼 수 있는 구조화된 데이터를 처리함에 있어 SQL처럼 신뢰할 수 있는 언어는 없다. 몇 가지 장점을 이야기해보자면 아래와 같다.


  1. 1970년대초 IBM에 의해 만들어진 언어이다보니 오래 동안 연구가 되었기에 여러모로 신뢰할 수 있다.

  2. 일반적인 프로그래밍보다는 비개발자들이 배우기에 어려움이 조금 덜하다.

  3. 원하는 결과를 순차적으로 기술하는 것(판다스에서 데이터프레임으로 데이터 조작을 하는 경우)이 아니라 한번에 원하는 걸 기술하는 구조이기에 사용하는 데이터베이스 시스템이 최적화하기에 좋다.


파이썬 판다스를 많이 사용한 개발자들은 판다스에서도 SQL 문법을 사용할 수 있다는 점을 잘 모르는데 예를 들어 아래처럼 pandasql을 설치한 다음에 데이터 프레임 변수 이름을 테이블 이름으로 sqldf라는 함수를 사용해 SQL을 실행할 수 있다. 아래 예를 하나 들었는데 measure_type이 TMIN인 레코드들만 선택해서 stationID별로 최소 온도를 구해보는 작업을 판다스에서 SQL로 구현해본 것이다.


import pandasql as psql

# df라는 이름의 데이터프레임이 앞에 이미 존재
query = """
SELECT stationID, MIN(temperature) minTemp
FROM df
WHERE measure_type = 'TMIN'
GROUP BY 1
"""

result = psql.sqldf(query)

만일 이를 판다스 데이터프레임 함수들만을 사용해 구현한다면 몇 번의 함수 호출을 연달아 사용해야 하며 이 경우에도 구현을 하는 사람에 따라 SQL 보다 훨씬 더 많은 수의 변종들이 가능하다. 즉 코드의 가독성이 떨어지게 된다. 아래 앞서 SQL으로 실행해본 결과를 데이터프레임 함수를 사용해 재구성해본 한가지 예를 들어봤다.


# 레코드 필터링을 먼저 수행
pd_minTemps = df[df['measure_type'] == "TMIN"]
# 필요한 필드만 선택
pd_stationTemps = pd_minTemps[["stationID", "temperature"]]
# Group By 작업 수행
pd_minTempsByStation = pd_stationTemps.groupby(["stationID"]).min("temperature")

이는 Spark에서도 마찬가지이다. Spark 자체가 판다스를 레퍼런스로 만들어진 것이기 때문에 기본적으로 데이터프레임으로 빅데이터 조작을 하게 되지만 구조화된 데이터라면 SQL을 사용하지 않을 이유가 없기에 현업에서는 대부분 SparkSQL을 사용한다. 즉 데이터의 크기와 상관없이 구조화된 데이터를 처리한다면 SQL만한 기술은 없다.


폴리보어(야후가 2015년에 인수)와 유데미(2021년 나스닥 상장)에서의 경험과 다수의 스타트업과 한국 대기업에서의 데이터 관련 일 경험을 바탕으로 데이터 도메인에서 SQL에 관한 강의를 인프런에서 얼마 전에 만들었는데 댓글 링크 참고. 해당 내용은 내가 겸임 교수로 일하는 실리콘밸리 소재 산호세 주립 대학에서 동일하게 가르치는 내용이기도 하다.

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 8월 25일 오전 1:14

댓글 1