لوگوی سایت
پشتیبانی
کوئری

توابع اختصاصی داده‌لند

راهنمای توابع اختصاصی Dadeland SQL برای نگارش کوئری‌های تحلیلی در انبار داده داده‌لند (Dadeland) و پردازش بهینه داده‌ها.

موتور کوئری‌نویسی داده‌لند بر پایه نگارش ۸ پایگاه داده MySQL توسعه یافته و با هدف افزایش توانمندی در تحلیل داده‌ها، بهبود کارایی پردازش و همچنین فراهم‌سازی امکان پیاده‌سازی تحلیل‌های پیشرفته، نسخه گسترش‌یافته خود را تحت عنوان Dadeland SQL ارائه کرده است. این نسخه با بسط و افزودن توابع جدید به مجموعه استاندارد MySQL 8 توسعه یافته است. از این رو کاربران بدون نیاز به فراگیری یک سینتکس جدید، می‌توانند در کنار دستورات استاندارد SQL، از توابع اختصاصی و تکمیلی داده‌لند (با پیشوند dl_*) در تمامی محیط‌های کوئری‌نویسی سیستم (از جمله بخش‌های تحلیلی، پایپ‌لاین‌های تبدیل داده و فرآیندهای توزیع داده) بهره‌مند شوند.


تاریخ و زمان

برای کار با مقادیر تاریخ و زمان و انجام تبدیلات و محاسبات تقویم شمسی در کوئری‌های SQL از این توابع استفاده می‌شود:

تابع و شیوه استفادهخروجیتوضیحات
dl_persian_date('2026-03-21')'1405-01-01'تاریخ میلادی را به تاریخ شمسی در ساختار استاندارد ۱۰ کاراکتری تبدیل می‌کند.
dl_persian_date_time('2026-03-21 12:00:00')'1405-01-01 12:00:00.000'تاریخ و زمان میلادی را همراه با میلی‌ثانیه به تاریخ و زمان شمسی تبدیل می‌کند.
dl_persian_day('2026-03-21')1شماره روز در ماه شمسی را برمی‌گرداند (در صورت دریافت مقدار NULL عدد 0 بازمی‌گردد).
dl_persian_dayname('2026-03-21')'شنبه'نام فارسی روز هفته را بازمی‌گرداند.
dl_persian_monthname('2026-03-21')'فروردین'نام فارسی ماه شمسی را برمی‌گرداند.
dl_date_floor('day', '2026-03-21 14:35:00')'2026-03-21 00:00:00'تاریخ و زمان را به ابتدای بازه زمانی انتخابی گرد می‌کند.

  • واحدهای مجاز در تابع dl_date_floor: آرگومان اول این تابع منحصراً باید یکی از ۸ واحد استاندارد شامل 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute' یا 'second' باشد. استفاده از هر مقدار دیگری با خطای اعتبارسنجی روبه‌رو می‌شود.
  • نیم‌فاصله در نام روزها: نام روزهای 'سه‌شنبه' و 'پنج‌شنبه' در خروجی تابع dl_persian_dayname دارای نویسه نیم‌فاصله (ZWNJ) هستند. در شروط فیلتر کوئری نیز مقایسه باید دقیقاً با رعایت نیم‌فاصله صورت پذیرد.

کار با JSON

برای پردازش و استخراج تایپ‌محور داده‌ها از مقادیر نیمه‌ساختاریافته JSON در کوئری‌های SQL از این توابع استفاده می‌شود:

تابع و شیوه استفادهخروجیتوضیحات
dl_json_text('{"name": "علی"}', '$.name')'علی'مقدار متنی را بدون علامت نقل‌قول با نوع داده STRING استخراج می‌کند.
dl_json_int('{"age": 28}', '$.age')28مقدار عدد صحیح را با نوع داده BIGINT از مسیر JSON استخراج می‌نماید.
dl_json_double('{"price": 1250.50}', '$.price')1250.5مقدار عدد اعشاری را با نوع داده DOUBLE از مسیر JSON استخراج می‌کند.
dl_json_bool('{"is_active": true}', '$.is_active')1 (True)مقدار بولی را با نوع داده BOOLEAN به عدد 1 یا 0 تبدیل می‌سازد.
dl_json_pick('{"items": [1, 2]}', '$.items')'[1, 2]'زیرمجموعه شیء یا آرایه JSON را بدون تغییر ساختار جهت پردازش‌های بعدی استخراج می‌کند.
..., LATERAL dl_json_pairs(data)ردیف‌های دو ستونه (key, value)کلید-مقدارهای سطح بالای شیء JSON را به ردیف‌های مجزا تبدیل می‌نماید.

  • الزامات فراخوانی dl_json_pairs: این تابع یک Table Function است و باید منحصراً در بند FROM یا JOIN همراه با عبارت LATERAL به کار رود. همچنین از آنجا که کلمه key جزو کلمات رزروشده گرامر SQL است، در بند SELECT یا WHERE باید حتماً درون بک‌تیک (`key`) قرار گیرد یا با نام مستعار مشخص شود.

کار با آرایه

برای پردازش، فیلتر و مدیریت ساختارهای آرایه‌ای در کوئری‌های SQL از این توابع استفاده می‌شود:

تابع و شیوه استفادهخروجیتوضیحات
dl_list_size(['a', 'b', 'c'])3تعداد اعضای آرایه را برمی‌گرداند.
dl_pick(['a', 'b', 'c'], 2)'b'عضو موجود در ایندکس مشخص از آرایه را برمی‌گرداند (شمارش ایندکس‌ها از عدد ۱ آغاز می‌شود).
dl_list_join_text(['red', 'blue'], ', ')'red, blue'اعضای آرایه را با جداکننده مشخص به رشته تبدیل می‌کند.
dl_list_dedup(['a', 'b', 'a'])['a', 'b']اعضای تکراری را از آرایه حذف می‌کند.
dl_list_overlap([1, 2], [2, 3])1 (True)وجود حداقل یک عضو مشترک میان دو آرایه را بررسی می‌نماید.
dl_list_apply(x -> x * 2, [1, 2, 3])[2, 4, 6]تابع لامبدا را روی تمام اعضای آرایه اعمال می‌کند.
dl_list_keep(x -> x > 10, [5, 12, 20])[12, 20]اعضای آرایه را بر اساس شرط لامبدا فیلتر می‌کند.
..., LATERAL dl_explode(tags)ردیف‌های مجزا در ستون unnestعناصر آرایه را به ردیف‌های مجزا تبدیل می‌نماید.
dl_collect(status ORDER BY id)['pending', 'paid', ...]مقادیر ردیف‌های یک ستون را به صورت یک آرایه تجمیع می‌کند.

  • الزامات فراخوانی dl_explode: این تابع به عنوان یک Table Function منحصراً در بخش FROM یا JOIN به همراه عبارت LATERAL به کار می‌رود و نام ستون خروجی پیش‌فرض آن unnest است. کاربر می‌تواند در بند SELECT برای این ستون نام مستعار تعریف نماید.

کار با متن

برای تمیزکاری، نرمال‌سازی و کار با مقادیر متنی در کوئری‌های SQL از این توابع استفاده می‌شود:

تابع و شیوه استفادهخروجیتوضیحات
dl_char_swap('۱۲۳', '۰۱۲۳۴۵۶۷۸۹', '0123456789')'123'کاراکترها را به صورت نظیربه‌نظیر جایگزین می‌کند (مانند تبدیل ارقام فارسی و عربی به انگلیسی یا یکپارچه‌سازی حروف عربی).
dl_text_part('ORD-2026-TEH', '-', 2)'2026'بخش مشخصی از رشته را بر اساس جداکننده استخراج می‌کند (شمارش از عدد ۱ آغاز می‌شود و از اعداد منفی نیز برای شمارش معکوس پشتیبانی می‌نماید).
dl_text_title('dadeland warehouse')'Dadeland Warehouse'حروف اول کلمات انگلیسی را بزرگ می‌کند.
dl_is_blank('')1 (True)خالی بودن رشته، آرایه یا مقدار NULL را بررسی می‌کند.

  • استفاده از ایندکس منفی در dl_text_part: با ارسال عدد منفی می‌توان قطعات رشته را از انتها استخراج نمود. برای مثال مقدار -1 آخرین بخش و مقدار -2 بخش ماقبل آخر رشته را برمی‌گرداند.
  • رفتار تابع dl_is_blank: این تابع مقادیر NULL یا رشته خالی ('') را تایید می‌کند، اما رشته‌های حاوی فاصله (اسپیس) را خالی تلقی نمی‌کند و در صورت نیاز باید ابتدا با تابع TRIM پاک‌سازی شوند.

توابع URL

برای استخراج اجزا و پارامترهای مختلف نشانی‌های اینترنتی در کوئری‌های SQL از این توابع استفاده می‌شود:

تابع و شیوه استفادهخروجیتوضیحات
dl_url_host('https://dadeland.ir/blog')'dadeland.ir'نام هاست و دامنه را از نشانی وب استخراج می‌کند.
dl_url_query('https://site.com?utm_source=google', 'utm_source')'google'مقدار پارامتر مشخصی را از Query String استخراج می‌کند.
dl_url_part('https://dadeland.ir/docs', 'PROTOCOL')'https'بخش ساختاری مشخصی از نشانی اینترنتی را استخراج می‌نماید.

  • قطعات مجاز در تابع dl_url_part: آرگومان دوم این تابع منحصراً باید یکی از ۸ قطعه استاندارد شامل 'PROTOCOL' (پروتکل ارتباطی)، 'HOST' (نام هاست و دامنه)، 'PATH' (مسیر دسترسی)، 'QUERY' (رشته پارامترها بدون علامت سوال)، 'REF' (برچسب هش بدون علامت شارپ)، 'AUTHORITY' (ترکیب احراز هویت، هاست و پورت)، 'FILE' (ترکیب مسیر و پارامترها) یا 'USERINFO' (اطلاعات کاربری احراز هویت) باشد.