Executable وExecutablePool تعريف جدول تُنشأ صفوفه بواسطة برنامج نصي تحدده أنت (عبر كتابة الصفوف إلى stdout). يُخزَّن البرنامج النصي التنفيذي في الدليل user_scripts ويمكنه قراءة البيانات من أي مصدر.
- جداول
Executable: يُشغَّل البرنامج النصي مع كل استعلام - جداول
ExecutablePool: تحتفظ بمجموعة من العمليات الدائمة، وتسحب منها عمليات لعمليات القراءة
إنشاء جدول Executable
Executable مُعاملين: اسم البرنامج النصي وتنسيق البيانات الواردة. ويمكنك اختياريًا تمرير استعلام إدخال واحد أو أكثر:
Executable:
send_chunk_header- الوصف: إرسال عدد الصفوف في كل chunk قبل إرسالها للمعالجة. يمكن أن يساعد هذا الإعداد في كتابة البرنامج النصي بطريقة أكثر كفاءة عبر التخصيص المسبق لبعض الموارد
- القيمة الافتراضية: false
command_termination_timeout- الوصف: مهلة إنهاء الأمر بالثواني
- القيمة الافتراضية: 10
command_read_timeout- الوصف: مهلة قراءة البيانات من
stdoutالخاص بالأمر، بالمللي ثانية - القيمة الافتراضية: 10000
- الوصف: مهلة قراءة البيانات من
command_write_timeout- الوصف: مهلة كتابة البيانات إلى
stdinالخاص بالأمر، بالمللي ثانية - القيمة الافتراضية: 10000
- الوصف: مهلة كتابة البيانات إلى
my_script.py ومحفوظ في المجلد user_scripts. يقرأ العدد i ويطبع i سلاسل عشوائية، بحيث تسبق كلَّ سلسلةٍ قيمةٌ رقمية يفصل بينها وبين السلسلة محرف tab:
my_executable_table التالي من مخرجات my_script.py، والذي سيولّد 10 سلاسل نصية عشوائية في كل مرة تُنفّذ فيها SELECT على my_executable_table:
my_executable_table إلى استدعاء البرنامج النصي:
تمرير نتائج الاستعلام إلى برنامج نصي
nltk) تحتوي على SentimentIntensityAnalyzer لتحديد ما إذا كانت التعليقات إيجابية أو سلبية أو محايدة، مع إسناد قيمة بين -1 (تعليق سلبي جدًا) و1 (تعليق إيجابي جدًا). لننشئ جدول Executable يحسب انطباع تعليقات Hacker News باستخدام nltk.
يستخدم هذا المثال جدول hackernews الموصوف هنا. يتضمن جدول hackernews عمود id من النوع UInt64 وعمودًا من النوع String باسم comment. لنبدأ بتعريف جدول Executable:
sentiment:
- يُحفَظ الملف
sentiment.pyفي المجلدuser_scripts(وهو المجلد الافتراضي للإعدادuser_scripts_path) - يعني التنسيق
TabSeparatedأن برنامجبايثونالنصي لدينا يحتاج إلى توليد صفوف من البيانات الخام تحتوي على قيم مفصولة بعلامات تبويب - يختار الاستعلام عمودين من
hackernews. وسيحتاج برنامجبايثونالنصي إلى استخراج قيم هذين العمودين من الصفوف الواردة
sentiment.py:
بايثون:
- لكي يعمل هذا، ستحتاج إلى تشغيل
nltk.downloader.download('vader_lexicon'). كان من الممكن وضع ذلك داخل البرنامج النصي، لكن عندئذٍ سيُنزَّل في كل مرة يُنفَّذ فيها استعلام على جدولsentiment، وهذا غير فعّال - كل قيمة في
rowستمثل صفًا في مجموعة النتائج الخاصة بالاستعلامSELECT id, comment FROM hackernews WHERE id > 0 AND comment != '' LIMIT 20 - الصف الوارد مفصول بعلامات تبويب، لذا نستخرج
idوcommentباستخدام الدالةsplitفيبايثون - ناتج
polarity_scoresهو كائن JSON يحتوي على عدد من القيم. وقد قررنا الاكتفاء بأخذ القيمةcompoundمن كائن JSON هذا - تذكّر أن جدول
sentimentفي ClickHouse يستخدم التنسيقTabSeparatedويحتوي على عمودين، لذا فإن الدالةprintتفصل بين هذين العمودين بعلامة تبويب
sentiment، يُنفَّذ الاستعلام SELECT id, comment FROM hackernews WHERE id > 0 AND comment != '' LIMIT 20 وتُمرَّر النتيجة إلى sentiment.py. لِنجرّب ذلك:
إنشاء جدول ExecutablePool
ExecutablePool مشابهة لـ Executable، لكن توجد بعض الإعدادات الخاصة بجدول ExecutablePool وذات الصلة به:
pool_size- الوصف: حجم مجموعة العمليات. إذا كانت القيمة 0، فلن تكون هناك أي قيود على الحجم
- القيمة الافتراضية: 16
max_command_execution_time- الوصف: الحد الأقصى لمدة تنفيذ الأمر بالثواني
- القيمة الافتراضية: 10
sentiment أعلاه لاستخدام ExecutablePool بدلًا من Executable:
sentiment_pooled.