marimo は、SQL を標準搭載した、Python 向けのオープンソースのリアクティブノートブックです。セルを実行したり UI 要素を操作したりすると、marimo は影響を受けるセルを自動的に実行し (または古い状態としてマークし) 、コードと出力の整合性を保ちながら、不具合を未然に防ぎます。すべての marimo ノートブックは純粋な Python として保存され、スクリプトとして実行可能で、アプリとしてデプロイすることもできます。

SQL サポート付きで marimo をインストールする
pip install "marimo[sql]" clickhouse_connect
marimo edit clickhouse_demo.pyこれにより、localhost で動作している Web ブラウザーが開くはずです。
ClickHouse に接続する
marimo エディターの左側にあるデータソースパネルに移動し、'Add database' をクリックします。

データベースの詳細を入力するよう求められます。

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

SQL を実行する
接続を設定したら、新しい SQL セルを作成し、ClickHouse engine を選択できます。

このガイドでは、New York Taxi データセットを使用します。
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;
これで、結果を DataFrame で確認できるようになりました。次に、指定した乗車場所からの料金が最も高い降車地点を可視化してみましょう。marimo には、そのために役立つ UI コンポーネントがいくつか用意されています。ここでは、場所の選択にドロップダウンを使い、グラフの描画には altair を使います。

marimo のリアクティブ実行モデルは SQL クエリにも適用されるため、SQL を変更すると、依存するセルの後続の計算が自動的にトリガーされます (計算コストが高い場合は、セルを古い状態としてマークすることもできます) 。そのため、クエリを更新するとグラフとテーブルも変わります。
データをすっきりしたインターフェイスで探索できるよう、App View に切り替えることもできます。
