Перейти к основному содержанию
Перейти к основному содержанию

Использование marimo с ClickHouse

Community Maintained

marimo — это реактивный блокнот для Python с открытым исходным кодом и встроенной поддержкой SQL. Когда вы выполняете ячейку или взаимодействуете с элементом интерфейса, marimo автоматически выполняет затронутые ячейки (или помечает их как требующие обновления), поддерживая согласованность кода и результатов и предотвращая ошибки ещё до их появления. Каждый блокнот marimo хранится как чистый Python, может выполняться как скрипт и развёртываться как приложение.

Подключение к ClickHouse

1. Установите Marimo с поддержкой SQL

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

Должен открыться веб‑браузер с адресом localhost.

2. Подключение к ClickHouse.

Перейдите на панель источников данных слева в редакторе marimo и нажмите «Add database».

Добавить новую базу данных

Вам будет предложено заполнить параметры подключения к базе данных.

Заполните параметры базы данных

После этого появится ячейка, которую можно выполнить для установления подключения.

Выполните ячейку, чтобы подключиться к ClickHouse

3. Выполнение 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;
Результаты в фрейме данных

Теперь вы можете просматривать результаты во фрейме данных. Я хочу визуализировать самые дорогие высадки из заданной точки посадки. marimo предоставляет несколько UI-компонентов, которые помогут в этом. Я буду использовать выпадающий список (dropdown) для выбора локации и библиотеку Altair для построения графика.

Комбинация вып�адающего списка, таблицы и графика

Реактивная модель выполнения marimo распространяется и на SQL-запросы, поэтому изменения в вашем SQL автоматически запускают последующие вычисления для зависящих ячеек (или, при необходимости, помечают ячейки как неактуальные для ресурсоёмких вычислений). Поэтому график и таблица изменяются при обновлении запроса.

Вы также можете переключиться в режим App View, чтобы получить чистый интерфейс для исследования данных.

Запуск режима App View