clickhouse-local — это CLI с встроенной версией ClickHouse. Он дает пользователям возможности ClickHouse без необходимости устанавливать сервер. В этом руководстве мы рассмотрим, как использовать базу данных clickhouse-local из chDB.
Настройка
Сначала создадим виртуальное окружение:
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 и импортируйте из 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.