跳转到主要内容
marimo 是一款开源的 Python 响应式笔记本,内置 SQL。运行某个单元格或与某个 UI 元素交互时,marimo 会自动运行受影响的单元格 (或将其标记为已过时) ,从而保持代码与输出一致,并在 bug 发生前防患于未然。每个 marimo 笔记本都以纯 Python 格式存储,可作为脚本执行,也可部署为应用。

1. 安装支持 SQL 的 marimo

pip install "marimo[sql]" clickhouse_connect
marimo edit clickhouse_demo.py
这应该会在本机 (localhost) 上打开一个 Web 浏览器。

2. 连接到 ClickHouse。

在 marimo 编辑器左侧的数据源面板中,点击“Add database”。 系统会提示你填写数据库信息。 随后,你会看到一个可运行的单元格,用于建立连接。

3. 运行 SQL

设置好连接后,您可以新建一个 SQL 单元格,并选择 ClickHouse 引擎。 本指南将使用 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,以获得一个更简洁的数据探索界面。
最后修改于 2026年6月10日