تُقيِّم دالة الجدول eval وسيطها إلى سلسلة استعلام، ثم تنفّذ هذه السلسلة باعتبارها استعلام SELECT واحدًا.
هذه دالة الجدول تجريبية ومُعطّلة افتراضيًا. فعِّلها باستخدام الإعداد allow_experimental_eval_table_function:
كما يتطلب أيضًا المُحلِّل (enable_analyzer، وهو مُمكَّن افتراضيًا).
expression — تعبير ثابت يُرجع سلسلة استعلام. يُسمح باستخدام مَعلمات الاستعلام والاستعلامات الفرعية ذات القيمة المفردة.
SELECT ... — استعلام SELECT يُرجع سلسلة استعلام. هذا الشكل اختصار نحوي لاستعلام فرعي قيَمي: eval(SELECT ...) مكافئ لـ eval((SELECT ...))، لذا يجب أن يُرجع الاستعلام صفًا واحدًا وعمودًا واحدًا فقط.
يجب أن تكون قيمة التعبير من أحد هذه الأنواع:
String
Nullable(String)
LowCardinality(String)
LowCardinality(Nullable(String))
إذا كانت القيمة NULL، فإن eval يطرح استثناءً.
تُرجِع نتيجة استعلام SELECT المُولَّد في صورة جدول.
يُحدَّد مخطط الإخراج عند تحليل دالة الجدول eval، لذا يمكن للاستعلامات الخارجية الرجوع إلى أسماء الأعمدة الفعلية وأنواعها في الاستعلام المُولَّد.
قيِّم تعبيرًا ثابتًا:
النتيجة:
استخدم معلَمة استعلام:
النتيجة:
قيِّم استعلام SELECT مُدخلًا يُعيد نص الاستعلام:
النتيجة:
استخدم المخطط الذي تم إنشاؤه في الاستعلام الخارجي:
النتيجة:
- يعمل
eval فقط مع محلّل الاستعلامات (enable_analyzer = 1).
- يجب أن يكون الاستعلام المُنشأ استعلام
SELECT واحدًا من دون خيارات إخراج مثل INTO OUTFILE أو FORMAT. ولا ينفّذ eval عدة عبارات.
- يجب أن يكون الاستعلام المُنشأ مستقلًا بذاته: إذ يُحل ضمن نطاقه الخاص، ولا يمكنه الرجوع إلى الأسماء المستعارة في
WITH أو إلى أعمدة الاستعلام الخارجي.
- لا يمكن للاستعلام المُنشأ استخدام دالة الجدول
eval مرة أخرى.
- لا يمكن استخدام
eval كوسيطة لدالة جدول أخرى، مثل remote('host', eval(...)). لتنفيذ الاستعلام المُنشأ على خادم بعيد، ضعه داخل view: remote('host', view(SELECT * FROM eval(...))).
- تُقيَّم الوسيطة مرة واحدة أثناء تحليل الاستعلام، وليس مرة لكل صف أو block.
- يسجّل سجل الاستعلامات الخاص بالاستعلام الخارجي الاستعلام الأصلي الذي يحتوي على
eval؛ ولا يُسجَّل استعلام SELECT المُنشأ كاستعلام مستخدم منفصل.
آخر تعديل في ٢٣ يوليو ٢٠٢٦