executable جدولًا استنادًا إلى مخرجات دالة معرّفة من قبل المستخدم (UDF) تُعرّفها في برنامج نصي يُخرج صفوفًا إلى stdout. يُخزَّن البرنامج النصي القابل للتنفيذ في الدليل users_scripts، ويمكنه قراءة البيانات من أي مصدر. تأكد من أن خادم ClickHouse لديك يحتوي على جميع الحزم المطلوبة لتشغيل البرنامج النصي القابل للتنفيذ. على سبيل المثال، إذا كان برنامجًا نصيًا بلغة بايثون، فتأكد من أن الخادم يحتوي على حزم بايثون اللازمة المثبّتة.
يمكنك اختياريًا تضمين استعلام إدخال واحد أو أكثر، بحيث تُمرَّر نتائجها إلى stdin ليقرأها البرنامج النصي.
من المزايا الرئيسية التي تميّز دوال UDF العادية عن دالة الجدول
executable ومحرك الجدول Executable أن دوال UDF العادية لا يمكنها تغيير عدد الصفوف. على سبيل المثال، إذا كان الإدخال 100 صف، فيجب أن تُرجع النتيجة 100 صف. عند استخدام دالة الجدول executable أو محرك الجدول Executable، يمكن لبرنامجك النصي إجراء أي تحويلات للبيانات تريدها، بما في ذلك عمليات التجميع المعقدة.Syntax
executable ثلاث معلمات، وتقبل قائمة اختيارية من استعلامات الإدخال:
script_name: اسم ملف البرنامج النصي. يُحفَظ في مجلدuser_scripts(المجلد الافتراضي للإعدادuser_scripts_path)format: تنسيق الجدول الناتجstructure: مخطّط الجدول الناتجinput_query: استعلام اختياري (أو مجموعة أو عدة استعلامات) تُمرَّر نتائجه إلى البرنامج النصي عبر stdin
إذا كنت ستستدعي البرنامج النصي نفسه مرارًا باستخدام استعلامات الإدخال نفسها، ففكّر في استخدام محرك الجدول
Executable.generate_random.py ويُحفَظ في مجلد user_scripts. يقرأ العدد i ويطبع i سلاسل عشوائية، تسبق كلَّ سلسلةٍ منها قيمةٌ عددية يفصل بينها وبين السلسلة محرف جدولة:
الإعدادات
send_chunk_header- يتحكم في ما إذا كان سيتم إرسال عدد الصفوف قبل إرسال جزء من البيانات إلى المعالجة. القيمة الافتراضية هيfalse.pool_size— حجم المجمّع. إذا تم تحديد 0 كقيمة لـpool_size، فلن تكون هناك أي قيود على حجم المجمّع. القيمة الافتراضية هي16.max_command_execution_time— الحد الأقصى لوقت تنفيذ أمر البرنامج النصي القابل للتنفيذ لمعالجة كتلة من البيانات. يُحدد بالثواني. القيمة الافتراضية هي 10.command_termination_timeout— يجب أن يحتوي البرنامج النصي القابل للتنفيذ على حلقة القراءة والكتابة الرئيسية. بعد إنهاء دالة الجدول، يُغلق الأنبوب، ويُمنح الملف التنفيذيcommand_termination_timeoutثانيةً للتوقف قبل أن يرسل ClickHouse إشارة SIGTERM إلى العملية الفرعية. يُحدد بالثواني. القيمة الافتراضية هي 10.command_read_timeout- مهلة قراءة البيانات من stdout الخاص بالأمر، بالمللي ثانية. القيمة الافتراضية هي 10000.command_write_timeout- مهلة كتابة البيانات إلى stdin الخاص بالأمر، بالمللي ثانية. القيمة الافتراضية هي 10000.
تمرير نتائج الاستعلام إلى برنامج نصي
Executable حول كيفية تمرير نتائج الاستعلام إلى برنامج نصي. وفيما يلي كيفية تنفيذ البرنامج النصي نفسه الوارد في ذلك المثال باستخدام دالة الجدول executable: