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 ومرّر callback لمعالجة
النتيجة. تُمرَّر نتائج الاستعلام على شكل كائنات 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