FROM المصدر الذي تُقرأ منه البيانات:
يمكن أيضًا استخدام البندين JOIN وARRAY JOIN لتوسيع إمكانات بند FROM.
الاستعلام الفرعي هو استعلام SELECT آخر يمكن وضعه بين قوسين داخل بند FROM.
يمكن أيضًا استخدام بند VALUES القياسي في SQL كتعبير جدولي:
FROM على عدة مصادر بيانات مفصولة بفواصل، وهو ما يعادل إجراء CROSS JOIN عليها.
يمكن أن يَرِد FROM اختياريًا قبل عبارة SELECT. وهذا امتداد خاص بـ ClickHouse لـ SQL القياسي، مما يجعل عبارات SELECT أسهل قراءةً. مثال:
FROM، تكون عبارة SELECT اختيارية. عند حذفها، يعمل الاستعلام كما لو كُتبت SELECT *:
مُعدِّل FINAL
FINAL، يدمج ClickHouse البيانات دمجًا كاملًا قبل إرجاع النتيجة. ويؤدي ذلك أيضًا إلى تنفيذ جميع تحويلات البيانات التي تحدث أثناء عمليات الدمج في محرك الجدول المعني.
ينطبق هذا عند تحديد البيانات من الجداول التي تستخدم محركات الجداول التالية:
ReplacingMergeTreeSummingMergeTreeAggregatingMergeTreeCollapsingMergeTreeVersionedCollapsingMergeTree
SELECT التي تتضمن FINAL بالتوازي. ويحدّد الإعداد max_final_threads عدد سلاسل التنفيذ المستخدمة.
السلبيات
FINAL بشكل أبطأ قليلًا من الاستعلامات المماثلة التي لا تستخدم FINAL للأسباب التالية:
- تُدمَج البيانات أثناء تنفيذ الاستعلام.
- قد تقرأ الاستعلامات التي تتضمن
FINALأعمدة المفتاح الأساسي بالإضافة إلى الأعمدة المحددة في الاستعلام.
FINAL موارد إضافية من الحوسبة والذاكرة، لأن المعالجة التي تحدث عادةً في وقت الدمج يجب أن تتم في الذاكرة عند تنفيذ الاستعلام. ومع ذلك، يكون استخدام FINAL ضروريًا أحيانًا للحصول على نتائج دقيقة (إذ قد لا تكون البيانات قد دُمجت بالكامل بعد). كما أن تكلفته أقل من تشغيل OPTIMIZE لفرض عملية دمج.
وكبديل لاستخدام FINAL، يمكن أحيانًا استخدام استعلامات مختلفة تفترض أن العمليات الخلفية لمحرك MergeTree لم تكتمل بعد، وتتعامل مع ذلك عبر تطبيق التجميع (على سبيل المثال، للتخلص من التكرارات). وإذا كنت بحاجة إلى استخدام FINAL في استعلاماتك للحصول على النتائج المطلوبة، فلا بأس بذلك، ولكن ينبغي الانتباه إلى المعالجة الإضافية التي يتطلبها.
يمكن تطبيق FINAL تلقائيًا باستخدام إعداد FINAL على جميع الجداول في الاستعلام باستخدام جلسة أو ملف تعريف مستخدم.
مثال على الاستخدام
FINAL
FINAL كإعداد على مستوى الاستعلام
FINAL كإعداد على مستوى الجلسة
الأسماء المستعارة وFINAL
FINAL بعد الاسم المستعار. ويظهر ذلك بوضوح أكبر في استعلامات JOIN، حيث تُستخدم عادةً أسماء مستعارة للجداول:
FINAL مُعدِّلًا على مرجع الجدول، لذا يجب أن يأتي بعد الصيغة الكاملة table [AS alias]. ووضعه قبل الاسم المستعار (FROM table1 FINAL AS t1) يُعد خطأً نحويًا.
تفاصيل التنفيذ
FROM، فستُقرأ البيانات من جدول system.one.
يحتوي جدول system.one على صف واحد فقط (ويؤدي هذا الجدول الغرض نفسه الذي يؤديه جدول DUAL في أنظمة إدارة قواعد البيانات الأخرى).
لتنفيذ استعلام، تُستخرج جميع الأعمدة المذكورة في الاستعلام من الجدول المناسب. وتُستبعَد من الاستعلامات الفرعية أي أعمدة لا يلزمها الاستعلام الخارجي.
إذا لم يذكر الاستعلام أي أعمدة (على سبيل المثال، SELECT count() FROM t)، فسيُستخرج أحد الأعمدة من الجدول على أي حال (مع تفضيل أصغرها)، وذلك لحساب عدد الصفوف.