clickhouse-local 是一个内嵌了 ClickHouse 的 CLI 工具。 它让用户无需安装服务器,也能使用 ClickHouse 的强大功能。 在本指南中,我们将学习如何在 chDB 中使用 clickhouse-local 数据库。
准备工作
首先创建一个虚拟环境:
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.com/ | 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-local 数据库
返回 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 中再次运行该分位数查询。