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] │
└───────────────────────────────────────┘بمجرد الانتهاء من ذلك، تأكّد من تنفيذ exit; من واجهة CLI، إذ لا يمكن سوى لعملية واحدة الاحتفاظ بقفل على هذا المجلد.
إذا لم نفعل ذلك، فسنحصل على الخطأ التالي عند محاولة الاتصال بقاعدة البيانات من خلال 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 واستورِد الوحدة session من chDB:
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]يمكننا بعد ذلك إعادة تنفيذ استعلام quantiles من خلال chDB أو clickhouse-local.