メインコンテンツへスキップ
メインコンテンツへスキップ

ClickHouse で marimo を使う

Community Maintained

marimo は、SQL が組み込まれた Python 向けのオープンソースのリアクティブノートブックです。セルを実行したり UI 要素を操作したりすると、marimo は影響を受けるセルを自動的に再実行(または古い状態としてマーク)し、コードと出力の一貫性を保つことで、バグの発生を未然に防ぎます。すべての marimo ノートブックはプレーンな Python コードとして保存され、スクリプトとして実行でき、アプリとしてデプロイできます。

ClickHouse への接続

1. SQL サポート付きの marimo をインストールする

pip install "marimo[sql]" clickhouse_connect
marimo edit clickhouse_demo.py

これにより、localhost を開いた Web ブラウザが起動します。

2. ClickHouse への接続

marimo エディタ左側のデータソースパネルを開き、「Add database」をクリックします。

新しいデータベースを追加

データベースの詳細情報を入力する画面が表示されます。

データベースの詳細情報を入力

その後、接続を確立するために実行できるセルが追加されます。

セルを実行して ClickHouse に接続

3. SQL を実行する

接続を設定したら、新しい SQL セルを作成し、ClickHouse エンジンを選択できます。

SQL エンジンを選択

このガイドでは、ニューヨークタクシーのデータセットを使用します。

CREATE TABLE trips (
    trip_id             UInt32,
    pickup_datetime     DateTime,
    dropoff_datetime    DateTime,
    pickup_longitude    Nullable(Float64),
    pickup_latitude     Nullable(Float64),
    dropoff_longitude   Nullable(Float64),
    dropoff_latitude    Nullable(Float64),
    passenger_count     UInt8,
    trip_distance       Float32,
    fare_amount         Float32,
    extra               Float32,
    tip_amount          Float32,
    tolls_amount        Float32,
    total_amount        Float32,
    payment_type        Enum('CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4, 'UNK' = 5),
    pickup_ntaname      LowCardinality(String),
    dropoff_ntaname     LowCardinality(String)
)
ENGINE = MergeTree
PRIMARY KEY (pickup_datetime, dropoff_datetime);
INSERT INTO trips
SELECT
    trip_id,
    pickup_datetime,
    dropoff_datetime,
    pickup_longitude,
    pickup_latitude,
    dropoff_longitude,
    dropoff_latitude,
    passenger_count,
    trip_distance,
    fare_amount,
    extra,
    tip_amount,
    tolls_amount,
    total_amount,
    payment_type,
    pickup_ntaname,
    dropoff_ntaname
FROM gcs(
    'https://storage.googleapis.com/clickhouse-public-datasets/nyc-taxi/trips_0.gz',
    'TabSeparatedWithNames'
);
SELECT * FROM trips LIMIT 1000;
データフレーム内の結果

これで、結果をデータフレームとして表示できるようになりました。ここでは、特定の pickup ロケーションからの最も高額なドロップオフを可視化してみます。marimo には、そのために役立つ複数の UI コンポーネントが用意されています。この例では、ロケーションの選択にドロップダウンを使用し、チャート描画には altair を使用します。

ドロップダウン、テーブル、チャートの組み合わせ

marimo のリアクティブな実行モデルは SQL クエリにも適用されるため、SQL を変更すると、それに依存するセルの後続計算が自動的に再実行されます(高コストな計算については、オプションでセルを「古い状態」としてマークすることもできます)。そのため、クエリを更新するとチャートとテーブルも更新されます。

また、App View を切り替えることで、データ探索に適したシンプルなインターフェースにすることもできます。

アプリビューの実行