clickhousectl) هي أداة موحّدة لسطر الأوامر لإدارة موارد ClickHouse Cloud ودعم التطوير المحلي باستخدام ClickHouse. كما تتيح أيضًا إدارة خدمات ClickHouse Cloud Postgres وClickPipes.
هذه الصفحة مرجع لمجموعة أوامر clickhousectl الإصدار 0.4.2. نفّذ clickhousectl --version للتحقق من الإصدار المثبّت لديك، وclickhousectl <command> --help مع أي أمر للحصول على القائمة الكاملة للرايات.
التثبيت
chctl تلقائيًا لتسهيل الاستخدام.
لتحديث تثبيت موجود إلى أحدث إصدار:
إدارة Cloud
قم بالمصادقة باستخدام ClickHouse Cloud وأدِر خدماتك مباشرةً من سطر الأوامر.المصادقة
.clickhouse/credentials.json (محلي للمشروع، ومُستثنى من git). ويمكنك أيضًا استخدام متغيرات البيئة:
--api-key/--api-secret، ثم بيانات اعتماد المشروع في .clickhouse/credentials.json، ثم متغيرات البيئة (shell، ثم .env)، ثم رموز OAuth الصادرة عن cloud auth login.
رموز OAuth مخصصة للقراءة فقط؛ أما أوامر الكتابة (create، delete، start، stop، update، scale) فتتطلب المصادقة عبر مفتاح واجهة برمجة التطبيقات.
الخدمات
تشغيل الاستعلامات
نفّذ استعلامات SQL على خدمة Cloud عبر HTTP من خلال واجهة برمجة تطبيقات الاستعلام — دون الحاجة إلى ملف تنفيذي محلي لـclickhouse أو إلى كلمة مرور الخدمة. ويجب تحديد أحد الخيارين --id أو --name دون غيره:
.clickhouse/credentials.json. مرّر --no-auto-enable ليفشل الأمر بدلًا من إنشاء تلك الموارد. أما مع OAuth، فتُنفَّذ SQL بصفتك مستخدم Cloud بصلاحية القراءة فقط (SELECT فقط)، ولا يُنشأ أي شيء.
أمور ينبغي معرفتها:
- ينفّذ
service queryجملة واحدة لكل طلب. وترفض واجهة برمجة تطبيقات الاستعلام جمل SQL المتعددة أيًا كانت طريقة إرسالها — عبر--queryأو--queries-fileأو stdin — بالرسالةError: SQL error 62: Syntax error (Multi-statements are not allowed). أما وجود;في نهاية جملة مفردة فلا مشكلة فيه. وللنصوص البرمجية، نفّذclickhousectl local use latestواستخدمclickhouse clientمع الخدمة بدلًا من ذلك. - لا يمكن الجمع بين
--queryو--queries-file(رمز الخروج 2). ولا يُقرأ stdin إلا عند عدم تمرير أي منهما. ولا يقرأ--queryمدخلات stdin مطلقًا، لذا فإن إعادة توجيه البيانات أو تمريرها عبر pipe بالتزامن معه يُعد خطأً صريحًا لا عملية no-op صامتة:Error: --query cannot be combined with SQL or data on stdin.أرسل بدلًا من ذلك جملةINSERTوبياناتها ضمن stream واحد —printf 'INSERT INTO t FORMAT CSV\n' | cat - data.csv | clickhousectl cloud service query --id <service-id>— أو اقرأ جملة كاملة من stdin باستخدام--queries-file -. - تنسيق الإخراج الافتراضي هو
PrettyCompactعلى terminal وTabSeparatedعند التمرير عبر pipe. ويحدد--jsonالتنسيقJSONEachRowولا يمكن دمجه مع--format(رمز الخروج 2). - لا يُستبدل تلقائيًا أي مفتاح مخزَّن لواجهة برمجة تطبيقات الاستعلام ترفضه نقطة النهاية برمز HTTP 401/403؛ إذ تقرأ الـ CLI سجل إدارة المفتاح لغرض واحد فقط هو بيان سبب الرفض. استبدل ذلك الـ credential وحده باستخدام
clickhousectl cloud service repair-query-key <service-id>، وهو أمر يحذف أيضًا المفتاح الذي استبدله. وعلى خدمة قيد التشغيل، لا يخرج الأمر بالرمز 0 إلا بعد نجاح استعلام probe بالمفتاح الجديد، ويُبلَّغ عن ذلك تحتverificationفي مخرجات--json. وإذا ظلت واجهة برمجة تطبيقات الاستعلام ترفض المفتاح عند انتهاء نافذة الـ readiness، فسيخرج الأمر بالرمز 1، غير أن الإصلاح يظل ساريًا: لا تُعد تنفيذه، بل نفّذcloud service queryبدلًا من ذلك. - تنتهي مهلة واجهة برمجة تطبيقات الاستعلام بعد نحو 30 ثانية؛ وتظل الجملة قيد التنفيذ على الخدمة، لكن النتيجة تُفقد. ولأي عملية أطول من ذلك، نفّذ
clickhousectl local use latestلإتاحة ملف تنفيذي لـclickhouseالقياسي علىPATH، ثم اتصل عبرclickhouse client --host <host> --secure --port 9440 --user default --password <password>بدلًا من ذلك.
نقاط نهاية الخدمة والتهيئة
--backup-start-time عند رأس الساعة تمامًا (HH:00)، ويتحقق منها CLI قبل إجراء أي استدعاء لواجهة برمجة التطبيقات. كما تتطلب أن تكون فترة النسخ الاحتياطي 24 أو 48 ساعة: مرّر --backup-period-hours 24 أو --backup-period-hours 48 في الأمر نفسه، أو احرص على أن تكون إحدى هاتين القيمتين مخزّنة مسبقًا. أما مع أي فترة مخزّنة أخرى، فيرفض CLI التنفيذ قبل استدعاء واجهة برمجة التطبيقات، مع الرسالة Error: the stored backup period is 12 hours, but --backup-start-time requires 24 or 48.
يزيل --clear-backup-start-time وقت البدء المخزّن ويرفع هذا القيد. اجمعه مع --backup-period-hours لمسح وقت البدء وتعيين أي فترة في استدعاء واحد. وهو يتعارض مع --backup-start-time.
النسخ الاحتياطية
clickhousectl cloud service create --name restored-service --backup-id <backup-id>.
ClickPipes
إدارة ClickPipes لاستيعاب البيانات في خدمة Cloud. تتلقى معظم الأوامر معرّف الخدمة كوسيط أول.- يتطلب
clickpipe create postgresأحد الخيارين--table-mapping <schema.table:target_table>(قابل للتكرار، جدول واحد لكل راية) أو--table-mapping-json <json>، ويمكن الجمع بينهما. تأخذ صيغة JSON كائن Mapping الجداول الخاص بواجهة برمجة التطبيقات حرفيًا، وهي الطريقة الوحيدة لضبطexcludedColumnsوsortingKeysوpartitionByExprوpartitionKeyوtableEngine. لاحظ أنpartitionKeyيقسّم الـ snapshot الأولي لأغراض الـ parallelism ولا علاقة له بـPARTITION BYالخاص بالجدول الهدف، فذلك هوpartitionByExpr. الخيار--iam-roleمطلوب مع--auth IAM_ROLEومرفوض مع المصادقة الأساسية، بينما--replication-slot-nameصالح فقط مع--replication-mode cdc_only. - تُطبَّق إعدادات CDC الخاصة بـ Postgres عند إنشاء الـ pipe:
--sync-interval-secondsو--pull-batch-sizeو--initial-load-parallelismو--snapshot-rows-per-partitionو--snapshot-parallel-tablesو--allow-nullable-columnsو--enable-failover-slotsو--delete-on-merge. ولا يمكن تغيير سوى sync interval وحجم الـ pull batch لاحقًا، أما إعدادات الـ snapshot والتحميل الأولي فلا يمكن تغييرها. - الخيار
--role <role>في أي أمر فرعي منclickpipe createقابل للتكرار، وهو يحدد Role الخاص بـ ClickHouse الممنوح لمستخدم وجهة الـ pipe. ويحل هذا الخيار محل الـ Role الذي كان سيحصل عليه ذلك المستخدم: فبدون--roleيحمل المستخدمclickpipes_systemوdefault_role، ومع--role my_roleيحملclickpipes_systemوmy_role. ويجب أن يكون الـ Role قادرًا على إنشاء جداول في قاعدة البيانات الهدف، إذ يؤدي Role للقراءة فقط إلى فشل الإنشاء برسالةNot enough privileges. أما الاسمانclickpipesوclickpipes_systemالمحجوزان لواجهة برمجة التطبيقات فمرفوضان. - يكون TLS والتحقق من الشهادة مفعّلين افتراضيًا لمصادر Postgres. ولا تحتاج سلسلة مصدر موثوقة علنًا إلى ملف CA، أما إذا كان CA المصدر خاصًا أو موقّعًا ذاتيًا فمرّر حزمة PEM الخاصة به عبر
--ca-certificate <path>. وبالنسبة إلى مصدر ClickHouse Cloud Postgres، احصل على تلك الحزمة باستخدامclickhousectl cloud postgres certs get. ويستخدم التحقق من اسم المضيف قيمة--hostما لم يتجاوزها--tls-host <hostname>. - بالنسبة إلى pipes الخاصة بـ Kafka وKinesis، يُستنتج
--authمن رايات بيانات الاعتماد عند إغفاله، ولا تُرسل أي مصادقة إذا لم تُقدَّم أي رايات لبيانات الاعتماد. - يغطي
clickpipe settingsإعدادات الاستيعاب الخاصة بـ pipes التدفق (Kafka وKinesis) وتخزين الكائنات فقط، وتُحذف الإعدادات الخاصة بـ Kafka وحده بالنسبة إلى الـ pipes غير المرتبطة بـ Kafka. أما pipes الـ CDC لقواعد البيانات (Postgres وMySQL وMongoDB وBigQuery) فليست لها إعدادات استيعاب: إذ يخرجsettings getعند تشغيله على إحداها بالرمز 1 ويشير إلىclickhousectl cloud clickpipe get <service-id> <clickpipe-id>، وهو المكان الذي يُبلَّغ فيه عن sync interval وحجم الـ pull batch الخاصين بها. - لا يمكن للـ pipe استخدام سوى نقطة نهاية خاصة عكسية بلغت الحالة
Ready، إذ تبقى نقطة نهاية AWS PrivateLink في الحالةPendingAcceptanceإلى أن يُقبل طلب الاتصال في الحساب المالك للمصدر. وتشير pipes الخاصة بـ Kafka إلى نقطة النهاية بالمعرّف عبر--reverse-private-endpoint-id(قابل للتكرار)، بينما تمرر pipes الـ CDC الخاصة بـ Postgres وMySQL أحدdnsNamesلنقطة النهاية بوصفه--host. - تُعد pipes الخاصة بـ Google Cloud Pub/Sub في مرحلة معاينة محدودة: تواصل مع الدعم لتفعيل الميزة لمؤسستك قبل إنشاء واحدة. ويأخذ
--service-account-fileمسار مفتاح JSON الخاص بحساب خدمة GCP، أو-لقراءة المفتاح من stdin، ولا يُقبل المفتاح مضمّنًا في السطر إطلاقًا، فيبقى بذلك خارج قوائم العمليات وسجل أوامر الصدفة.
خدمات Postgres (beta)
أنشئ خدمات ClickHouse Cloud Postgres وأدِرها.- القيمة الافتراضية لـ
--providerهيaws، كما يُقبلgcpمع أحجام أجهزة GCP مثلc4-standard-4. أما--sizeفيتحقق منه Cloud API وليس الـ CLI، لذا لا يُرفض الحجم غير المدعوم إلا على الـ server. - تغييرات الـ Role متسقة في نهاية المطاف، وتُقرّ الـ API بعمليتَي
promoteوswitchoverقبل تطبيقهما، لذا فإن رمز الخروج 0 وحده لا يؤكد تغيّر الـ Role. ويقبل كلاهما الخيار--waitلاستقصاء الحالة حتى يُبلّغ الهدف عن الـ Role الجديد، مع--wait-timeout <seconds>(القيمة الافتراضية 300) لتحديد مدة الاستقصاء. وقد يستمر الـ primary السابق في الإبلاغ عنisPrimary=trueلدقائق بعد ذلك، لذا تأكّد عبرclickhousectl cloud postgres list --filter isPrimary=trueمن وجود service واحدة فقط بدور الـ primary. - يعمل
postgres deleteانطلاقًا من أي state، بما في ذلكrunning، فلا حاجة إلى إيقاف الـ service أولًا.
المنظمات
مفاتيح واجهة برمجة التطبيقات
الأعضاء والدعوات
سجل النشاط
مخرجات JSON
استخدم الخيار--json للحصول على استجابات مُنسّقة بتنسيق JSON من أي أمر سحابي:
org prometheus وservice prometheus: فهما يُصدران دائمًا نص عرض Prometheus الخام ويتجاهلان الخيار --json بصمت.
التطوير المحلي
يدير الـ CLI أيضًا عمليات تثبيت ClickHouse المحلية، والخوادم المحلية، ومثيلات Postgres المحلية المعتمدة على Docker. راجع صفحة clickhousectl (CLI) للبدء في التطوير المحلي.- أوامر
localمحصورة بنطاق المشروع: فهي تستخدم دليل.clickhouseالموجود ضمن دليل العمل الحالي تحديدًا، ولا تبحث أبدًا في الأدلة الأعلى منه. انتقل إلى جذر المشروع قبل تشغيلها. - ينشئ
clickhousectl local useأيضًا رابطًا رمزيًا إلى~/.local/bin/clickhouse، ما يجعل الأوامر الفرعية القياسية مثلclickhouse clientوclickhouse benchmarkوclickhouse formatمتاحة مباشرةً. مرّر--no-globalلتخطي إنشاء الرابط الرمزي. - يتطلب
local removeتحديد إصدار مثبَّت بدقة. وهو يرفض إزالة إصدار يستخدمه server قيد التشغيل في أي مشروع، أو إصدارًا يمثل الافتراضي الحالي؛ ويوقف--forceتلك الخوادم ويمسح الإعداد الافتراضي والرابط الرمزي العام. - عند عدم تحديد اسم، يوقف
local server stopالخادمdefaultإن وُجد، وإلا فالخادم الوحيد المعروف؛ وفي حال وجود عدة خوادم غير افتراضية فإنه يطلب اسمًا. أماlocal server removeبدون اسم فلا يختار سوىdefaultالقائم — ولا يخمّن أبدًا server مخصصًا. - يقبل
local clientالخيار-v/--versionلاختيار إصدار client مثبَّت في وضع المضيف/المنفذ المباشر، ويسمح بتكرار-qلتنفيذ عدة استعلامات، ويقبل عدة مسارات مع--queries-file. أما الجمع بين--queryو--queries-fileفيُعد خطأً في الاستخدام. - يظل
local postgres startمتوقفًا حتى يقبل PostgreSQL الاتصالات، ضمن حد--wait-timeoutبالثواني (الافتراضي 60، والحد الأقصى 600). وعند حذف--portفإنه يستخدم 5432 إن كان متاحًا، وإلا فيختار منفذًا تلقائيًا؛ أما المنفذ المطلوب صراحةً والمشغول مسبقًا فيُرفض.
أوامر أخرى
المتطلبات
- macOS (aarch64, x86_64) أو Linux (aarch64, x86_64)
- تتطلب أوامر Cloud مفتاح واجهة برمجة التطبيقات لـ ClickHouse Cloud للوصول بالكتابة؛ أما تسجيل الدخول عبر OAuth فهو للقراءة فقط
- يتطلب
clickhousectl local postgresوجود Docker