Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

结合 ClickHouse 使用 marimo

由社区维护

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

连接到 ClickHouse

安装带 SQL 支持的 marimo

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

这会打开一个在 localhost 上运行的 Web 浏览器。

连接到 ClickHouse。

前往 marimo 编辑器左侧的数据源面板,然后点击“Add database”。

添加新数据库

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

填写数据库详细信息

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

运行该单元格以连接到 ClickHouse

运行 SQL

设置好连接后,您可以新建一个 SQL 单元格,并选择 ClickHouse 引擎。

选择 SQL 引擎

本指南将使用 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 中的结果

现在,你已经可以在 DataFrame 中查看结果了。接下来,我想将某个给定上车地点对应的最高费用下车点可视化。marimo 提供了多个 UI 组件来帮助你实现这一点。我会使用下拉菜单选择地点,并用 Altair 绘制图表。

下拉菜单、表和图表的组合

marimo 的响应式执行模型也扩展到了 SQL 查询中,因此你对 SQL 的更改会自动触发依赖单元的后续计算 (对于开销较大的计算,也可以选择仅将单元标记为已过时) 。因此,查询一更新,图表和表也会随之变化。

你还可以切换到 App View,以获得一个更简洁的数据探索界面。

运行 App View
Navigation