ClickHouse와 함께 marimo 사용하기
marimo는 SQL이 내장된 Python용 오픈 소스 반응형 노트북입니다. 셀을 실행하거나 UI 요소와 상호 작용하면 marimo가 영향을 받는 셀을 자동으로 실행하거나 최신 상태가 아님으로 표시하여 코드와 출력 결과를 일관되게 유지하고, 버그가 발생하기 전에 미리 방지합니다. 모든 marimo 노트북은 순수 Python으로 저장되며, 스크립트로 실행할 수 있고 애플리케이션으로 배포할 수 있습니다.
1. SQL 지원이 포함된 marimo 설치
pip install "marimo[sql]" clickhouse_connect
marimo edit clickhouse_demo.py
이렇게 하면 localhost에서 실행되는 웹 브라우저가 열립니다.
2. ClickHouse에 연결하기.
marimo editor 왼쪽의 데이터 소스 패널로 이동한 후 「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;
이제 결과를 데이터프레임 형태로 확인할 수 있습니다. 특정 픽업 위치에서 가장 비용이 많이 드는 드롭오프를 시각화해 보겠습니다. marimo는 이를 도와주는 여러 UI 컴포넌트를 제공합니다. 위치를 선택하기 위해 드롭다운을, 차트를 그리기 위해 altair를 사용하겠습니다.
marimo의 반응형 실행 모델은 SQL 쿼리까지 확장되므로, SQL을 변경하면 해당 셀에 의존하는 후속 연산이 자동으로 다시 실행됩니다(또는 비용이 큰 연산의 경우 선택적으로 셀을 stale 상태로 표시할 수 있습니다). 따라서 쿼리가 업데이트되면 차트와 테이블도 함께 변경됩니다.
또한 App View를 토글하여 데이터를 탐색하기 위한 깔끔한 인터페이스를 사용할 수 있습니다.