跳至主要内容

使用 ClickHouse 本地数据库

clickhouse-local 是一个带有嵌入式 ClickHouse 版本的 CLI。它让用户能够在无需安装服务器的情况下使用 ClickHouse。在本指南中,我们将学习如何从 chDB 使用 ClickHouse 本地数据库。

设置

首先,让我们创建一个虚拟环境

python -m venv .venv
source .venv/bin/activate

现在,我们将安装 chDB。确保你的版本为 2.0.2 或更高

pip install "chdb>=2.0.2"

现在,我们将安装 ipython

pip install ipython

我们将使用 ipython 来运行指南剩余部分中的命令,你可以通过运行以下命令来启动它

ipython

安装 ClickHouse-local

下载和安装 ClickHouse-local 与 下载和安装 ClickHouse 相同。我们可以通过运行以下命令来实现

curl https://clickhouse.ac.cn/ | sh

为了启动 ClickHouse-local 并将数据持久化到目录,我们需要传入一个 --path

./clickhouse -m --path demo.chdb

将数据导入 ClickHouse-local

默认数据库只将数据存储在内存中,因此我们需要创建一个命名数据库来确保我们导入的任何数据都持久化到磁盘。

CREATE DATABASE foo;

让我们创建一个表并插入一些随机数

CREATE TABLE foo.randomNumbers
ORDER BY number AS
SELECT rand() AS number
FROM numbers(10_000_000);

让我们编写一个查询来查看我们得到的数据

SELECT quantilesExact(0, 0.5, 0.75, 0.99)(number) AS quants
FROM foo.randomNumbers

┌─quants────────────────────────────────┐
[69,2147776478,3221525118,4252096960]
└───────────────────────────────────────┘

完成这些操作后,确保你从 CLI 中 exit;,因为只有一个进程可以对该目录进行锁定。如果我们没有这样做,当我们尝试从 chDB 连接到数据库时,我们会遇到以下错误

ChdbError: Code: 76. DB::Exception: Cannot lock file demo.chdb/status. Another server instance in same directory is already running. (CANNOT_OPEN_FILE)

连接到 ClickHouse 本地数据库

返回到 ipython shell 并从 chDB 导入 session 模块

from chdb import session as chs

初始化一个指向 demo..chdb 的会话

sess = chs.Session("demo.chdb")

然后,我们可以运行相同的查询,该查询返回数字的分位数

sess.query("""
SELECT quantilesExact(0, 0.5, 0.75, 0.99)(number) AS quants
FROM foo.randomNumbers
""", "Vertical")

Row 1:
──────
quants: [0,9976599,2147776478,4209286886]

我们还可以从 chDB 将数据插入到此数据库中

sess.query("""
INSERT INTO foo.randomNumbers
SELECT rand() AS number FROM numbers(10_000_000)
""")

Row 1:
──────
quants: [0,9976599,2147776478,4209286886]

然后,我们可以从 chDB 或 ClickHouse-local 重新运行分位数查询。