توابع 

حداقل* دو نوع از توابع وجود دارد - توابع به طور منظم (فقط به نام “functions”) and aggregate functions. These are completely different concepts. Regular functions work as if they are applied to each row separately (for each row, the result of the function doesn't depend on the other rows). Aggregate functions accumulate a set of values from various rows (i.e. they depend on the entire set of rows).

در این بخش ما در مورد توابع به طور منظم. برای توابع کل, بخش را ببینید “Aggregate functions”.

* - یک نوع سوم از تابع که وجود دارد ‘arrayJoin’ توابع جدول همچنین می توانید به طور جداگانه ذکر شود.*

تایپ قوی 

در مقابل به گذاشتن استاندارد, خانه رعیتی است تایپ قوی. به عبارت دیگر تبدیل ضمنی بین انواع را ندارد. هر تابع برای یک مجموعه خاص از انواع کار می کند. این به این معنی است که گاهی اوقات شما نیاز به استفاده از توابع تبدیل نوع.

رفع ضعف مشترک 

همه عبارات در پرس و جو که همان اعضای هیات (همان رکورد و یا همان نتیجه تجزیه نحوی) در نظر گرفته به ارزش یکسان. چنین عبارات یک بار تایید و اجرا می شوند. زیرمجموعه های یکسان نیز این راه را حذف می کنند.

انواع نتایج 

همه توابع بازگشت بازگشت بازگشت تنها به عنوان نتیجه (چند ارزش نیست, و نه صفر ارزش). نوع نتیجه است که معمولا تنها با انواع استدلال تعریف, نه با ارزش. استثنا هستند tupleElement function (a.N اپراتور) و toFixedString تابع.

ثابتها 

برای سادگی, توابع خاص تنها می تواند با ثابت برای برخی از استدلال کار. مثلا, استدلال درست از اپراتور مانند باید ثابت باشد.
تقریبا تمام توابع بازگشت ثابت برای استدلال ثابت. استثنا توابع است که تولید اعداد تصادفی است.
این ‘now’ تابع مقادیر مختلف برای نمایش داده شد که در زمان های مختلف اجرا شد را برمی گرداند, اما نتیجه در نظر گرفته ثابت, از ثبات در یک پرس و جو تنها مهم است.
یک عبارت ثابت نیز ثابت در نظر گرفته (مثلا, نیمه راست اپراتور مانند را می توان از ثابت های متعدد ساخته).

توابع را می توان به روش های مختلف برای استدلال ثابت و غیر ثابت اجرا (کد های مختلف اجرا شده است). اما نتایج برای یک ثابت و برای یک ستون واقعی حاوی تنها همان مقدار باید با یکدیگر مطابقت.

پردازش پوچ 

توابع رفتارهای زیر را دارند:

  • اگر حداقل یکی از استدلال از تابع است NULL نتیجه عملکرد نیز است NULL.
  • رفتار ویژه ای است که به صورت جداگانه در شرح هر تابع مشخص. در کد منبع کلیک این توابع UseDefaultImplementationForNulls=false.

پایداری 

Functions can't change the values of their arguments – any changes are returned as the result. Thus, the result of calculating separate functions does not depend on the order in which the functions are written in the query.

خطا 

برخی از توابع ممکن است یک استثنا پرتاب اگر داده نامعتبر است. در این مورد پرس و جو لغو شده است و یک متن خطا به مشتری بازگردانده می شود. برای پردازش توزیع, هنگامی که یک استثنا در یکی از سرورهای رخ می دهد, سرور های دیگر نیز تلاش برای لغو پرس و جو.

ارزیابی عبارات استدلال 

تقریبا در تمام زبان های برنامه نویسی, یکی از استدلال ممکن است برای اپراتورهای خاص ارزیابی نمی شود. این است که معمولا اپراتورها &&, || و ?:.
اما در فاحشه خانه, استدلال از توابع (اپراتورهای) همیشه مورد بررسی قرار. دلیل این است که کل بخش هایی از ستون ها در یک بار مورد بررسی قرار, به جای محاسبه هر سطر به طور جداگانه.

انجام توابع برای پردازش پرس و جو توزیع شده 

برای پردازش پرس و جو توزیع, به عنوان بسیاری از مراحل پردازش پرس و جو که ممکن است بر روی سرور از راه دور انجام, و بقیه مراحل (ادغام نتایج متوسط و همه چیز که) بر روی سرور درخواست انجام.

این به این معنی است که توابع را می توان بر روی سرور های مختلف انجام می شود.
برای مثال در پرس و جو SELECT f(sum(g(x))) FROM distributed_table GROUP BY h(y),

  • اگر یک distributed_table دارای حداقل دو خرده ریز, توابع ‘g’ و ‘h’ بر روی سرورهای راه دور و عملکرد انجام می شود ‘f’ بر روی سرور درخواست کننده انجام می شود.
  • اگر یک distributed_table تنها یک سفال, تمام ‘f’, ‘g’ و ‘h’ توابع بر روی سرور این سفال انجام.

نتیجه یک تابع معمولا بستگی ندارد که سرور انجام شده است. اما گاهی اوقات این مهم است.
مثلا, توابع است که با لغت نامه کار استفاده از فرهنگ لغت که بر روی سرور وجود دارد که در حال اجرا هستند در.
مثال دیگر این است که hostName تابع, که نام سرور را بر می گرداند در حال اجرا است به منظور ایجاد GROUP BY توسط سرور در یک SELECT پرس و جو.

اگر یک تابع در یک پرس و جو بر روی سرور درخواست انجام, اما شما نیاز به انجام این کار بر روی سرور از راه دور, شما می توانید در یک بسته بندی ‘any’ تابع جمع و یا اضافه کردن به یک کلید در GROUP BY.

مقاله اصلی

Rating: 3.4 - 9 votes

Was this content helpful?
★★★☆☆