uniqCombined
قُدِّمت في: v1.1.0
تحسب العدد التقريبي لقيم الوسيطات المختلفة. وتوفّر النتيجة بشكل حتمي (أي إنها لا تعتمد على ترتيب معالجة الاستعلام).
مقارنةً بالدالة uniq، فإن الدالة uniqCombined:
- تستهلك ذاكرة أقل بعدة مرات
- تحسب بدقة أعلى بعدة مرات
- يكون أداؤها عادةً أقل قليلًا. وفي بعض السيناريوهات، قد تحقق uniqCombined أداءً أفضل من uniq، على سبيل المثال مع الاستعلامات الموزعة التي تنقل عددًا كبيرًا من حالات التجميع عبر الشبكة
تفاصيل التنفيذ
تحسب هذه الدالة قيمة hash (بطول 64 بت لـ String و32 بت بخلاف ذلك) لجميع المعلمات في التجميع، ثم تستخدمها في الحسابات.
وتستخدم مزيجًا من ثلاث خوارزميات: المصفوفة، وجدول hash، وHyperLogLog مع جدول لتصحيح الأخطاء:
- عند وجود عدد صغير من العناصر المميّزة، تُستخدم مصفوفة
- عندما يصبح حجم المجموعة أكبر، يُستخدم جدول
hash - وعند وجود عدد أكبر من العناصر، يُستخدم HyperLogLog، الذي يشغل مقدارًا ثابتًا من الذاكرة
الصيغة
uniqCombined(HLL_precision)(x[, ...])
uniqCombined(x[, ...])المعلمات
HLL_precision— اختياري. اللوغاريتم للأساس 2 لعدد الخلايا في HyperLogLog. القيمة الافتراضية هي 17، وهو ما يعادل فعليًا مساحة قدرها 96 KiB (2^17 خلية، 6 بتات لكل خلية). النطاق: [12, 20].UInt8
الوسيطات
x— عدد متغير من الوسيطات.Tuple(T)أوArray(T)أوDateأوDateTimeأوStringأو(U)Int*أوFloat*أوDecimal
القيمة المُعادة
تُرجع عددًا من النوع UInt64 يمثّل العدد التقريبي لقيم الوسيطات المختلفة. UInt64
أمثلة
الاستخدام الأساسي
SELECT uniqCombined(number) FROM numbers(1e6);┌─uniqCombined(number)─┐
│ 1001148 │
└──────────────────────┘بدقة مخصّصة
SELECT uniqCombined(15)(number) FROM numbers(1e5);┌─uniqCombined(15)(number)─┐
│ 100768 │
└──────────────────────────┘انظر أيضًا