Jupyter Notebook で TiDB Cloud Lake に接続する
Jupyter Notebook は、コードの実行、データのクエリ、可視化の作成を行うためのインタラクティブな環境です。SQLAlchemy 用 TiDB Cloud Lake dialect を通じて、ノートブックを TiDB Cloud Lake に接続できます。
前提条件
開始する前に、次のものを用意してください。
- Python 3.8 以降
- TiDB Cloud Lake のアカウント、データベース、および Warehouse
- 接続に使用するホスト、ユーザー名、パスワード、データベース、および Warehouse 名
接続情報の取得方法については、Warehouse に接続する を参照してください。
Jupyter Notebook と SQLAlchemy dialect をインストールする
仮想環境を作成して有効化します。
python3 -m venv .venv
source .venv/bin/activate
Jupyter Notebook、SQLAlchemy dialect、および可視化に必要な依存関係をインストールします。
python3 -m pip install notebook tidbcloudlake-sqlalchemy pandas matplotlib
tidbcloudlake-sqlalchemy パッケージには、SQLAlchemy と必要な TiDB Cloud Lake Python ドライバーが含まれています。
Jupyter Notebook を起動します。
jupyter notebook
Jupyter のインターフェースで、Python ノートブックを作成します。
TiDB Cloud Lake に接続する
SQLAlchemy の接続 URI は、次の形式を使用します。
lake://<username>:<password>@<host>:443/<database>?warehouse=<warehouse>
ノートブックに認証情報を保存しないようにするため、Jupyter Notebook を起動する前に、接続 URI を環境変数に設定します。
export LAKE_SQLALCHEMY_URI='lake://<username>:<password>@<host>:443/<database>?warehouse=<warehouse>'
ノートブックで SQLAlchemy engine を作成します。
import os
from sqlalchemy import create_engine, text
engine = create_engine(os.environ["LAKE_SQLALCHEMY_URI"])
データをクエリして可視化する
次のセルを実行して、サンプルテーブルを作成し、それに対してクエリを実行します。
with engine.connect() as connection:
connection.execute(text("DROP TABLE IF EXISTS jupyter_sales"))
connection.execute(
text(
"""
CREATE TABLE jupyter_sales (
sale_date DATE,
quantity INT
)
"""
)
)
connection.execute(
text(
"""
INSERT INTO jupyter_sales VALUES
('2026-08-01', 5),
('2026-08-01', 3),
('2026-08-02', 4),
('2026-08-03', 10)
"""
)
)
result = connection.execute(
text(
"""
SELECT sale_date, SUM(quantity) AS total_quantity
FROM jupyter_sales
GROUP BY sale_date
ORDER BY sale_date
"""
)
)
rows = result.fetchall()
columns = list(result.keys())
クエリ結果を pandas DataFrame に変換し、棒グラフを作成します。
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(rows, columns=columns)
df.plot.bar(x="sale_date", y="total_quantity", legend=False)
plt.ylabel("Quantity")
plt.tight_layout()
plt.show()
チュートリアルが完了したら、サンプルテーブルを削除します。
with engine.connect() as connection:
connection.execute(text("DROP TABLE IF EXISTS jupyter_sales"))