SAMPLE معالجة استعلامات SELECT بصورة تقريبية.
عند تمكين أخذ العينات من البيانات، لا يُنفَّذ الاستعلام على جميع البيانات، بل على جزء محدد منها فقط (عيّنة). على سبيل المثال، إذا كنت بحاجة إلى حساب إحصاءات لجميع الزيارات، فيكفي تنفيذ الاستعلام على 1/10 من إجمالي الزيارات ثم ضرب النتيجة في 10.
يمكن أن تكون المعالجة التقريبية للاستعلامات مفيدة في الحالات التالية:
- عندما تكون لديك متطلبات صارمة لزمن الاستجابة (مثل أقل من 100ms)، لكنك لا تستطيع تبرير تكلفة موارد عتادية إضافية لتلبيتها.
- عندما لا تكون بياناتك الخام دقيقة، بحيث لا يؤدي التقريب إلى تراجع ملحوظ في الجودة.
- عندما تتطلب احتياجات العمل نتائج تقريبية (لتحقيق كفاءة من حيث التكلفة، أو لإتاحة النتائج الدقيقة للمستخدمين المتميزين).
لا يمكنك استخدام أخذ العينات إلا مع الجداول ضمن عائلة MergeTree، وفقط إذا جرى تحديد تعبير أخذ العينات أثناء إنشاء الجدول (راجع محرك MergeTree).
- أخذ العينات من البيانات آلية حتمية. وتكون نتيجة الاستعلام نفسه
SELECT .. SAMPLEهي نفسها دائمًا. - يعمل أخذ العينات بشكل متسق عبر الجداول المختلفة. بالنسبة إلى الجداول ذات مفتاح أخذ عينات واحد، فإن العيّنة ذات المعامل نفسه تختار دائمًا المجموعة الفرعية نفسها من البيانات الممكنة. على سبيل المثال، تأخذ عيّنة معرّفات المستخدمين الصفوف التي تضم المجموعة الفرعية نفسها من جميع معرّفات المستخدمين الممكنة من جداول مختلفة. وهذا يعني أنه يمكنك استخدام العيّنة في الاستعلامات الفرعية ضمن عبارة IN. كما يمكنك أيضًا ربط العيّنات باستخدام عبارة JOIN.
- يتيح أخذ العينات قراءة كمية أقل من البيانات من القرص. لاحظ أنه يجب تحديد مفتاح أخذ العينات بشكل صحيح. لمزيد من المعلومات، راجع Creating a MergeTree Table.
SAMPLE البنية التالية:
| بنية عبارة SAMPLE | الوصف |
|---|---|
SAMPLE k | هنا k رقم من 0 إلى 1. يُنفَّذ الاستعلام على جزء k من البيانات. على سبيل المثال، يشغّل SAMPLE 0.1 الاستعلام على 10% من البيانات. اقرأ المزيد |
SAMPLE n | هنا n عدد صحيح كبير بما يكفي. يُنفَّذ الاستعلام على عيّنة تضم n صفًا على الأقل (ولكن ليس أكثر من ذلك بشكل ملحوظ). على سبيل المثال، يشغّل SAMPLE 10000000 الاستعلام على حد أدنى قدره 10,000,000 صف. اقرأ المزيد |
SAMPLE k OFFSET m | هنا k وm رقمان من 0 إلى 1. يُنفَّذ الاستعلام على عيّنة تمثل جزء k من البيانات. وتُزاح البيانات المستخدمة في العيّنة بمقدار جزء m. اقرأ المزيد |
SAMPLE K
k عددًا بين 0 و1 (ويدعم كلٌّ من الترميز الكسري والترميز العشري). على سبيل المثال، SAMPLE 1/2 أو SAMPLE 0.5.
في عبارة SAMPLE k، تُؤخذ العيّنة من جزء k من البيانات. يَرِد المثال أدناه:
count() يدويًا في 10.
SAMPLE N
n عددًا صحيحًا كبيرًا بما يكفي. على سبيل المثال، SAMPLE 10000000.
في هذه الحالة، يُنفَّذ الاستعلام على عينة تضم ما لا يقل عن n صفًا (ولكن ليس أكثر من ذلك بكثير). على سبيل المثال، يشغّل SAMPLE 10000000 الاستعلام على حد أدنى يبلغ 10,000,000 صف.
نظرًا لأن أصغر وحدة لقراءة البيانات هي granule واحدة (ويُحدَّد حجمها بواسطة الإعداد index_granularity)، فمن المنطقي تعيين عينة أكبر بكثير من حجم الـ granule.
عند استخدام عبارة SAMPLE n، لن تعرف النسبة الفعلية من البيانات التي تمت معالجتها. لذلك لن تعرف المعامل الذي ينبغي ضرب الدوال التجميعية فيه. استخدم العمود الافتراضي _sample_factor للحصول على نتيجة تقريبية.
يحتوي العمود _sample_factor على معاملات نسبية تُحتسَب ديناميكيًا. ويُنشأ هذا العمود تلقائيًا عند إنشاء جدول باستخدام مفتاح أخذ العينات المحدد. وترد أدناه أمثلة استخدام العمود _sample_factor.
لننظر إلى الجدول visits، الذي يحتوي على إحصاءات زيارات الموقع. يوضح المثال الأول كيفية حساب عدد مشاهدات الصفحة:
SAMPLE K OFFSET M
k وm عددان من 0 إلى 1. وفيما يلي أمثلة.
مثال 1
[++------------]
مثال 2
[------++------]