Skip to main content
ClickHouse CLI (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 إن كان متاحًا، وإلا فيختار منفذًا تلقائيًا؛ أما المنفذ المطلوب صراحةً والمشغول مسبقًا فيُرفض.

أوامر أخرى

المتطلبات

آخر تعديل في ٢٦ سبتمبر ٢٠٢٦