SELECT وINSERT على البيانات المخزّنة على خادم MySQL بعيد.
إنشاء جدول
- يجب أن تكون أسماء الأعمدة مطابقةً لما هي عليه في جدول MySQL الأصلي، لكن يمكنك استخدام بعض هذه الأعمدة فقط وبأي ترتيب.
- قد تختلف أنواع الأعمدة عن تلك الموجودة في جدول MySQL الأصلي. ويحاول ClickHouse cast القيم إلى أنواع بيانات ClickHouse.
- يحدّد الإعداد external_table_functions_use_nulls كيفية التعامل مع الأعمدة Nullable. القيمة الافتراضية: 1. إذا كانت القيمة 0، فلن تُنشئ دالة الجدول أعمدة Nullable، وستُدرج القيم الافتراضية بدلًا من nulls. وينطبق ذلك أيضًا على قيم NULL داخل المصفوفات.
host:port— عنوان خادم MySQL.database— اسم قاعدة البيانات البعيدة.table— اسم الجدول البعيد، أو استعلام يُمرَّر إلى MySQL كما هو (راجع تمرير استعلام بدلًا من اسم جدول).user— مستخدم MySQL.password— كلمة مرور المستخدم.replace_query— علامة تُحوّل استعلاماتINSERT INTOإلىREPLACE INTO. إذا كانتreplace_query=1، فسيُستبدل الاستعلام.on_duplicate_clause— التعبيرON DUPLICATE KEY on_duplicate_clauseالذي يُضاف إلى استعلامINSERT. مثال:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1، حيث تكونon_duplicate_clauseهيUPDATE c2 = c2 + 1. راجع وثائق MySQL لمعرفة أيon_duplicate_clauseيمكنك استخدامه مع العبارةON DUPLICATE KEY. لتحديدon_duplicate_clause، يجب تمرير0إلى المعلمةreplace_query. وإذا مرّرتreplace_query = 1وon_duplicate_clauseفي الوقت نفسه، فسينشئ ClickHouse استثناءً.
host وport كلٌّ على حدة. ويُنصح بهذا النهج في بيئة الإنتاج.
تُنفَّذ عبارات WHERE البسيطة، مثل =, !=, >, >=, <, <=، على خادم MySQL.
أما بقية الشروط وقيد المعاينة LIMIT، فلا تُنفَّذ إلا في ClickHouse بعد اكتمال الاستعلام إلى MySQL.
تمرير استعلام بدلًا من اسم جدول
table استعلام SELECT يُمرَّر إلى MySQL كما هو. ويُستدل على بنية الجدول من نتيجة الاستعلام. ويمكن كتابة الاستعلام إما كاستعلام فرعي أو بتغليفه داخل الدالة query:
join وعمليات التجميع أو أي معالجة أخرى على MySQL. وهذا الجدول للقراءة فقط: لا يُسمح بتنفيذ INSERT فيه. كما أن دالة الجدول mysql تدعم الصياغة نفسها.
يُحلَّل شكل الاستعلام الفرعي
(SELECT ...) بواسطة ClickHouse ويُعاد تسلسله وفق لهجة MySQL (باستخدام علامات الاقتباس الخلفية للمعرّفات) قبل إرساله إلى الخادم. لذلك يجب أن يكون استعلام ClickHouse SQL صالحًا. ولتمرير صياغة خاصة بـ MySQL لا يحلّلها ClickHouse، استخدم صيغة query('...')، إذ يُرسَل نصها إلى MySQL كما هو.أي WHERE أو LIMIT خارجي، أو تجميع، وما إلى ذلك، في استعلام ClickHouse المحيط لا يُدفَع إلى داخل الاستعلام الممرَّر، بل يُطبَّق في ClickHouse بعد جلب نتيجة الاستعلام كاملةً. ولتقييد البيانات المقروءة من MySQL، ضع عامل التصفية داخل الاستعلام الممرَّر. عند استخدام external_table_strict_query = 1، يُرفَض أي عامل تصفية خارجي لا يمكن دفعه ويُرجع استثناءً بدلًا من تطبيقه محليًا.|. على سبيل المثال:
مثال للاستخدام
الإعدادات
connection_auto_close
- 1 — يُسمح بالإغلاق التلقائي للاتصال، وبالتالي يتم تعطيل إعادة استخدام الاتصال
- 0 — لا يُسمح بالإغلاق التلقائي للاتصال، وبالتالي يكون إعادة استخدام الاتصال مفعّلًا
1.
connection_max_tries
- عدد صحيح موجب.
- 0 — لا توجد أي محاولات إعادة لمجمع الاتصالات مع التبديل التلقائي عند التعطل.
3.
connection_pool_size
- عدد صحيح موجب.
16.
connection_wait_timeout
connection_pool_size من الاتصالات النشطة)، 0 - لا تنتظر.
القيم الممكنة:
- عدد صحيح موجب.
5.
connect_timeout
- عدد صحيح موجب.
10.
read_write_timeout
- عدد صحيح موجب.
300.
enable_compression
false.
ينطبق هذا الإعداد على:
- محرك الجدول
MySQL؛ - محرك قاعدة البيانات
MySQL؛ - دالة الجدول
mysql؛ - المجموعات المسماة المستخدمة في تكاملات MySQL.