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

安装带 SQL 支持的 marimo
pip install "marimo[sql]" clickhouse_connect
marimo edit clickhouse_demo.py这会打开一个在 localhost 上运行的 Web 浏览器。
连接到 ClickHouse。
前往 marimo 编辑器左侧的数据源面板,然后点击“Add database”。

系统会提示你填写数据库详细信息。

随后,你会看到一个可运行的单元格,用于建立连接。

运行 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,以获得一个更简洁的数据探索界面。
