1. 程式人生 > 實用技巧 >xeus-clickhouse: Jupyter 的 ClickHouse 核心

xeus-clickhouse: Jupyter 的 ClickHouse 核心

在科學計算領域,Jupyter 是一個使用非常廣泛的整合開發環境,它支援多種主流的程式語言比如 Python, C++, R 或者 Julia。同時,資料科學最重要的還是資料,而 SQL 是操作資料最直觀的語言。前段時間看到一篇文章[1],有人給 sqlite 做了一個 jupyter 的核心,感覺很有意思。所以我嘗試給 ClickHouse 做了一個 jupyter 的核心,目前已經有了一個可以試用的版本,下面做一個簡單介紹。

clickhouse

現狀

新核心允許使用者用 ClickHouse SQL 的語法直接操作遠端 CH 資料庫,通過一些擴充套件操作比如 %CONNECT 支援與 ch cli 一樣的連線引數,後續也有計劃使用 jupyter magics 支援更多的資料視覺化操作。

專案參考了 jupyter sqlite 核心的實現方式,是基於 xeus [2]框架來實現的。xeus 是一個 c++ 的 lib 庫,它對 jupyter 的核心做了很好的封裝,我們只需要專注於核心相關的功能就可以了。目前對於 ch 的操作基於 clickhouse-cpp 來實現,它是 ch 的 cpp 客戶端。

ch-sql

目前實現處於早期階段,但是基礎功能已經可用。它支援了幾乎 CH 所有 SQL 語法,具體例子可以參考 examples/clickhouse.ipynb [4]。xeus-clickhouse 在 jupyter notebook 和 jupyter lab 中以 HTML 表格的形式展示資料;在 jupyter console 中,我們使用 tabulate 庫只做純文字的表格。

未來

對於 xeus-clickhouse 未來的規劃是,先打磨好穩定性,目前已知的還有一個非法字元導致核心崩潰的問題,已經提交 issue 給 xeus 倉庫;另外clickhouse-cpp 不支援 ssl 連線。除了基礎功能的打磨,還計劃通過支援更多的 jupyter magic 來實現資料的視覺化渲染,提供更方便的資料視覺化能力。

使用

我製作了一個 Docker 映象釋出在 docker-hub [3] ,不需要安裝任何環境就可以試用:

# start jupyter with clickhouse kernal
docker run -p 8888:8888 wangfenjin/xeus-clickhouse:v0.1.0 # start a local clickhouse for testing
docker run -d --name jupyter-clickhouse-server -p 8123:8123 --ulimit nofile=262144:262144 yandex/clickhouse-server # open the example/clickhouse.ipynb and connect to local server by
# %CONNECT --host host.docker.internal --port 8123

在 docker 裡面連線另外一個 docker 中的 ch 可能會有問題,感覺是目前 clickhouse-cpp 對於網路的處理不太完善。感興趣的同學也可以下載程式碼自己編譯,具體的編譯流程見 github 倉庫 [4]。歡迎大家試用!

連結

  1. https://blog.jupyter.org/a-jupyter-kernel-for-sqlite-9549c5dcf551
  2. https://github.com/jupyter-xeus/xeus
  3. https://hub.docker.com/r/wangfenjin/xeus-clickhouse
  4. https://github.com/wangfenjin/xeus-clickhouse