clickhouse-cpp هي مكتبة العميل الرسمية لـ ClickHouse بلغة C++، وتوفّر
واجهة سريعة ومأمونة الأنواع لـ ClickHouse باستخدام بروتوكوله الثنائي الأصلي.
تعليمات البناء، وأمثلة الاستخدام، ووثائق إضافية متاحة في
مستودع GitHub الخاص بالمشروع: https://github.com/ClickHouse/clickhouse-cpp.
المكتبة قيد التطوير النشط. وعلى الرغم من أنها تدعم بالفعل الإمكانات الأساسية في ClickHouse،
فإن بعض الميزات وأنواع البيانات قد لا تكون مطبّقة بالكامل أو مدعومة بعد.ملاحظاتك قيّمة للغاية، وتساعد في توجيه تحديد أولويات الميزات الجديدة
والتحسينات. إذا واجهت قيودًا، أو وظائف غير متوفرة، أو سلوكًا غير متوقع، فيُرجى
مشاركة ملاحظاتك أو طلبات الميزات عبر متتبّع المشكلات على
https://github.com/ClickHouse/clickhouse-cpp/issues
تضمين المكتبة في مشروعك
FetchContent الخاصة بـ CMake. يتيح لك هذا النهج تثبيت إصدار محدد بدقة من المكتبة وبناؤها كجزء من
سير عمل CMake المعتاد.
WITH_OPENSSL دعم TLS في المكتبة، وهو مطلوب عند الاتصال بـ
ClickHouse Cloud أو بعمليات نشر ClickHouse الأخرى المفعّل فيها SSL. ورغم أنه يمكن الاستغناء عنه في
الاتصالات غير المعتمدة على TLS، فإن تمكينه يُوصى به عمومًا.
يتطلب البناء مع دعم SSL تثبيت حزم تطوير OpenSSL. ثبّت
libssl-dev على Debian وUbuntu أو مشتقاتهما؛ وopenssl-devel على Fedora وRed Hat؛ أو
openssl على macOS باستخدام homebrew.
بعد توفير التبعية، اربط هدفك بهدف المكتبة المُصدَّر:
أمثلة
إعداد كائن Client
Client لإقامة اتصال مع ClickHouse. يوضّح المثال التالي
كيفية الاتصال بمثيل ClickHouse محلي، حيث لا تكون كلمة المرور مطلوبة ولا يكون SSL
مفعّلًا.
إنشاء الجداول وتنفيذ استعلامات دون بيانات
Execute.
وينطبق الأسلوب نفسه على تعليمات أخرى مثل ALTER TABLE وDROP وغيرها.
إدراج البيانات
Block واملأه بكائنات الأعمدة المطابقة
لمخطط الجدول. تُضاف البيانات عمودًا تلو الآخر، ثم تُدرج بعملية واحدة باستخدام
الطريقة Insert، وهي مُحسّنة لتنفيذ عمليات كتابة دفعية بكفاءة.
اختيار البيانات
Select ومرّر دالة ردّ نداء لمعالجة
النتيجة. تُعاد نتائج الاستعلام على هيئة كائنات Block، بما يعكس تمثيل البيانات الأصلي
المعتمد على الأعمدة في ClickHouse.
أنواع البيانات المدعومة
UInt8,UInt16,UInt32,UInt64,Int8,Int16,Int32,Int64UInt128,Int128Decimal32,Decimal64,Decimal128Float32,Float64DateDateTime,DateTime64DateTime([timezone]),DateTime64(N, [timezone])UUIDEnum8,Enum16StringFixedString(N)LowCardinality(String)وLowCardinality(FixedString(N))Nullable(T)Array(T)TupleMapIPv4,IPv6Point,Ring,Polygon,MultiPolygon