ينشئ دالة معرّفة من قبل المستخدم (دالة معرّفة من قبل المستخدم) من تعبير لامبدا. ويجب أن يتألف هذا التعبير من معاملات الدالة أو الثوابت أو المعاملات أو استدعاءات دوال أخرى.
الصياغة
CREATE [OR REPLACE] FUNCTION name [ON CLUSTER cluster] AS (parameter0, ...) -> expressionيمكن أن تحتوي الدالة على أي عدد من المعاملات.
توجد بعض القيود:
- يجب أن يكون اسم الدالة فريدًا بين الدوال المعرّفة من قبل المستخدم ودوال النظام.
- الدوال العودية غير مسموح بها.
- يجب تحديد جميع المتغيرات التي تستخدمها الدالة ضمن قائمة معاملاتها.
إذا تم انتهاك أي قيد، فسيتم رفع استثناء.
مثال
CREATE FUNCTION linear_equation AS (x, k, b) -> k*x + b;
SELECT number, linear_equation(number, 2, 1) FROM numbers(3);┌─number─┬─plus(multiply(2, number), 1)─┐
│ 0 │ 1 │
│ 1 │ 3 │
│ 2 │ 5 │
└────────┴──────────────────────────────┘تُستدعى دالة شرطية ضمن دالة معرّفة من قبل المستخدم في الاستعلام التالي:
CREATE FUNCTION parity_str AS (n) -> if(n % 2, 'odd', 'even');
SELECT number, parity_str(number) FROM numbers(3);┌─number─┬─if(modulo(number, 2), 'odd', 'even')─┐
│ 0 │ even │
│ 1 │ odd │
│ 2 │ even │
└────────┴──────────────────────────────────────┘استبدِل دالة معرّفة من قبل المستخدم موجودة:
CREATE FUNCTION exampleReplaceFunction AS frame -> frame;
SELECT create_query FROM system.functions WHERE name = 'exampleReplaceFunction';
CREATE OR REPLACE FUNCTION exampleReplaceFunction AS frame -> frame + 1;
SELECT create_query FROM system.functions WHERE name = 'exampleReplaceFunction';┌─create_query─────────────────────────────────────────────┐
│ CREATE FUNCTION exampleReplaceFunction AS frame -> frame │
└──────────────────────────────────────────────────────────┘
┌─create_query───────────────────────────────────────────────────┐
│ CREATE FUNCTION exampleReplaceFunction AS frame -> (frame + 1) │
└────────────────────────────────────────────────────────────────┘