Skip to main content
يتيح لك chDB تسجيل دوال بايثون كدوال UDF قابلة للاستدعاء من SQL. وتعمل هذه الدوال أصليًا ضمن العملية نفسها، دون إنشاء عمليات فرعية أو أعباء إضافية ناتجة عن التسلسل. وهي آمنة الأنواع، وتدعم استنتاج الأنواع تلقائيًا من التعليقات التوضيحية في بايثون، وتوفر معالجة قابلة للتهيئة لقيم NULL والاستثناءات.

البدء السريع

تشغّل الأمثلة الواردة في هذا الدليل query() باستخدام تنسيق الإخراج CSV الافتراضي. وتُظهر التعليقات المضمّنة قيم النتائج المنطقية، بينما يطبع الإخراج الخام NULL بالشكل \N ويطبّق اقتباس CSV على قيم السلاسل النصية والتواريخ (مثل "Hello, world!").

طرق التسجيل

المُزيِّن @func

أبسط طريقة لتسجيل UDF. يصبح __name__ الخاص بالدالة اسم دالة SQL.
تظل الدالة المُزيَّنة قابلة للاستدعاء كالمعتاد في بايثون:

create_function

سجّل أي عنصر قابل للاستدعاء (لامبدا أو دالة أو method) باسم محدد صراحةً:

drop_function

أزل دالة UDF مسجّلة. لا يحدث شيء عند إسقاط اسم غير مسجّل، لذا يمكن استدعاؤها بأمان دون قيد:
تؤدي محاولة تسجيل اسم مسجّل مسبقًا إلى ظهور خطأ — لا تُستبدل UDFs تلقائيًا. استدعِ drop_function(name) أولًا لإعادة تسجيل الدالة، مثلًا عند إعادة تشغيل خلية في دفتر ملاحظات.

نظام الأنواع

الأنواع المتاحة

يمكن استيراد جميع الأنواع من chdb.sqltypes:

تحديد الأنواع

يمكن تحديد الأنواع بأربع طرق:

الاستدلال التلقائي للأنواع

عند حذف arg_types أو return_type، يستنتج chDB الأنواع من تعليقات توضيحية للأنواع في بايثون:
إذا تم تحديد arg_types صراحةً، فيجب أن يشمل جميع المعلمات — إذ لا يُدعم الجمع بين التحديد الصريح الجزئي والاستدلال الجزئي. ينطبق ذلك على كلٍّ من create_function ومزيّن @func: حدّد أنواع جميع المعلمات، أو احذفها بالكامل ودع chDB يستنتجها من التعليقات التوضيحية.
نوع الإرجاع مطلوب دائمًا: إذا حُذف return_type ولم يكن للدالة تعليق توضيحي للإرجاع، فسيفشل التسجيل. أما أنواع الوسائط فهي اختيارية — إذ تقبل المعلمة التي لا تحتوي على نوع صريح أو تعليق توضيحي أي نوع إدخال مدعوم ديناميكيًا.

التعامل مع NULL

يتحكم المَعْلَم on_null في السلوك عند كون أي وسيطة إدخال NULL. يمكنك أيضًا استخدام enum: chdb.NullHandling.SKIP / chdb.NullHandling.PASS.

مثال: default (تخطي)

مثال: تمرير NULL على أنه None

مثال: وسائط متعددة

معالجة الاستثناءات

تتحكم المعلَمة on_error في السلوك عند قيام دالة بايثون بإطلاق استثناء. يمكنك أيضًا استخدام enum: chdb.ExceptionHandling.PROPAGATE / chdb.ExceptionHandling.IGNORE.

مثال: default (تمرير)

مثال: تجاهل الأخطاء

الجمع بين معالجة NULL والاستثناءات

يمكن الجمع بين خياري on_null وon_error:

دعم DateTime والمنطقة الزمنية

تدعم UDFs أنواع التاريخ والوقت مع دعم المنطقة الزمنية بشكل كامل.

أنواع Date

DateTime مع المناطق الزمنية

DateTime64 (دقة عالية)

تكون القيمة الافتراضية لـ DATETIME64 هي المقياس 6 (ميكروثانية):
  • تتضمن قيم DateTime/DateTime64 المُدخلة معلومات المنطقة الزمنية من ClickHouse
  • تحتفظ كائنات datetime الناتجة بمعلومات المنطقة الزمنية
  • يُعالَج تحويل المنطقة الزمنية تلقائيًا

استخدام UDFs مع الجلسات

تُسجَّل UDFs بشكل عام وتكون متاحة في جميع الجلسات ضمن العملية نفسها:
آخر تعديل في ١٤ أغسطس ٢٠٢٦