Skip to main content
JupySQL은 Jupyter 노트북과 IPython 셸에서 SQL을 실행할 수 있도록 해주는 Python 라이브러리입니다. 이 가이드에서는 chDB와 JupySQL을 사용해 데이터를 쿼리하는 방법을 알아보겠습니다.

준비

먼저 가상 환경을 생성합니다:
그런 다음 JupySQL, IPython, Jupyter Lab을 설치합니다:
다음을 실행해 시작한 IPython에서 JupySQL을 사용할 수 있습니다:
또는 Jupyter Lab에서는 다음을 실행하세요:
Jupyter Lab을 사용하는 경우, 이 가이드의 나머지 단계를 진행하기 전에 먼저 노트북을 만들어야 합니다.

데이터셋 다운로드

시간에 따른 선수 정보와 랭킹 메타데이터가 포함된 Jeff Sackmann’s tennis_atp 데이터셋 중 하나를 사용합니다. 먼저 랭킹 파일을 다운로드하겠습니다:

chDB 및 JupySQL 구성하기

다음으로, chDB용 dbapi 모듈을 불러오겠습니다:
그리고 chDB 연결을 생성하겠습니다. 영구 저장하는 모든 데이터는 atp.chdb 디렉터리에 저장됩니다:
이제 sql 매직을 불러오고 chDB 연결을 만듭니다:
다음으로, 쿼리 결과가 잘리지 않도록 표시 한도를 설정합니다:
## CSV 파일의 데이터 쿼리 atp_rankings 접두사가 붙은 파일을 여러 개 다운로드했습니다. 스키마를 파악하기 위해 DESCRIBE 절을 사용해 보겠습니다:
이 파일들에 직접 SELECT 쿼리를 작성하여 데이터 형태를 확인할 수도 있습니다:
데이터 포맷이 약간 이상합니다. 날짜를 정리한 뒤 REPLACE 절을 사용해 정리된 ranking_date를 반환해 보겠습니다:

CSV 파일을 chDB로 가져오기

이제 이 CSV 파일의 데이터를 테이블에 저장하겠습니다. 기본 데이터베이스는 데이터를 디스크에 영구 저장하지 않으므로, 먼저 다른 데이터베이스를 생성해야 합니다:
이제 CSV 파일의 데이터 구조를 바탕으로 스키마(schema)가 결정되는 rankings라는 테이블(table)을 생성합니다:
테이블에 있는 데이터를 간단히 확인해 보겠습니다:
좋습니다. 예상한 대로 출력 결과는 CSV 파일에 직접 쿼리했을 때와 동일합니다. 이제 플레이어 메타데이터에도 같은 과정을 적용하겠습니다. 이번에는 데이터가 모두 하나의 CSV 파일에 들어 있으므로 해당 파일을 다운로드하겠습니다:
그런 다음 CSV 파일의 내용을 바탕으로 players라는 테이블을 생성합니다. 또한 dob 필드를 정리하여 Date32 유형이 되도록 합니다.
ClickHouse에서 Date 유형은 1970년 이후 날짜만 지원합니다. dob 컬럼에는 1970년 이전 날짜가 포함되어 있으므로 대신 Date32 유형을 사용합니다.
실행이 완료되면 수집된 데이터를 확인할 수 있습니다:

chDB 쿼리하기

데이터 수집이 완료되었으니, 이제 가장 흥미로운 단계인 데이터 쿼리 차례입니다! 테니스 선수는 출전한 토너먼트에서의 성과에 따라 포인트를 받습니다. 각 선수의 포인트는 최근 52주를 기준으로 계산됩니다. 이제 각 선수가 누적한 최대 포인트와 해당 시점의 순위를 찾는 쿼리를 작성하겠습니다:
이 목록에 있는 일부 선수들이 해당 총점으로 1위는 아니었음에도 많은 점수를 쌓았다는 점이 꽤 흥미롭습니다.

쿼리 저장

%%sql 매직과 같은 줄에서 --save 매개변수를 사용하면 쿼리를 저장할 수 있습니다. --no-execute 매개변수를 사용하면 쿼리 실행을 건너뜁니다.
저장된 쿼리를 실행하면 실행 전에 공통 테이블 표현식(Common Table Expression, CTE)으로 변환됩니다. 다음 쿼리에서는 플레이어가 1위였을 때 획득한 최대 포인트를 계산합니다:

매개변수를 사용한 쿼리

쿼리에서도 매개변수를 사용할 수 있습니다. 매개변수는 일반 변수와 같습니다:
그런 다음 쿼리에서 {{variable}} 구문을 사용할 수 있습니다. 다음 쿼리는 선수가 처음으로 상위 10위 안에 들었던 시점부터 마지막으로 상위 10위 안에 들었던 시점까지의 일수 차이가 가장 짧았던 선수를 찾습니다:

히스토그램 그리기

JupySQL에는 제한적이지만 차트 기능도 있습니다. 상자 그림이나 히스토그램을 만들 수 있습니다. 이제 히스토그램을 만들겠습니다. 먼저 각 플레이어가 상위 100위 안에서 달성한 순위를 계산하는 쿼리를 작성해 저장하겠습니다. 이 쿼리를 사용하면 각 순위를 달성한 플레이어 수를 집계하는 히스토그램을 만들 수 있습니다:
그런 다음 다음을 실행해 히스토그램을 만들 수 있습니다.
마지막 수정일 2026년 7월 3일