Skip to main content
JupySQL は、Jupyter ノートブックや IPython シェルで SQL を実行できる Python ライブラリです。 このガイドでは、chDB と JupySQL を使用してデータにクエリを実行する方法を学びます。

セットアップ

まず、仮想環境を作成します:
次に、JupySQL、IPython、JupyterLabをインストールします。
JupySQL は IPython で使用でき、次を実行して起動できます:
または、Jupyter Lab では次を実行します。
JupyterLab を使用している場合は、このガイドの残りの手順に進む前に、ノートブックを作成してください。

データセットのダウンロード

ここでは、選手とそのランキングの推移に関するメタデータを含む Jeff Sackmann’s tennis_atp データセットの1つを使用します。 まずはランキングファイルをダウンロードしましょう。

chDB と JupySQL の設定

次に、chDB 用の dbapi モジュールをインポートします。
次に、chDB への接続を作成します。 永続化したデータはすべて atp.chdb ディレクトリに保存されます。
では、sqlマジックをロードし、chDB への接続を確立します:
次に、クエリ結果が切り捨てられないよう、表示上限を表示します:
## CSVファイル内のデータをクエリする atp_rankings プレフィックスを持つファイルをいくつかダウンロードしました。 DESCRIBE 句を使ってスキーマを確認してみましょう。
これらのファイルに対して SELECT クエリを直接実行して、データの内容を確認することもできます。
データのフォーマットが少し変です。 その日付を整えて、REPLACE 句を使って整形した ranking_date を返しましょう:

CSVファイルをchDBにインポートする

次に、これらのCSVファイルのデータをテーブルに保存します。 デフォルトのデータベースはデータをディスクに永続保存しないため、まず別のデータベースを作成する必要があります。
それでは次に、CSVファイル内のデータ構造に基づいてスキーマを決定する rankings という名前のテーブルを作成します:
テーブル内のデータを手早く確認してみましょう:
問題なさそうです。予想どおり、出力は CSV ファイルを直接クエリした場合と同じです。 プレイヤーのメタデータについても、同じ手順で進めます。 今回はデータが 1 つの 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月23日