الانتقال إلى المحتوى الرئيسي

uniqCombined

قُدِّمت في: v1.1.0 تحسب العدد التقريبي لقيم الوسيطات المختلفة. وتوفّر النتيجة بشكل حتمي (أي إنها لا تعتمد على ترتيب معالجة الاستعلام).
نظرًا إلى أنها تستخدم قيمة hash بطول 32 بت للأنواع غير String، فستكون النتيجة ذات خطأ مرتفع جدًا عند الكارديناليات الأكبر بكثير من UINT_MAX (وسيرتفع الخطأ سريعًا بعد بضع عشرات من المليارات من القيم المميّزة). إذا كانت الكارديناليات أكبر من UINT_MAX، فينبغي استخدام uniqCombined64 بدلًا من ذلك.
مقارنةً بالدالة 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
الوسيطات القيمة المُعادة تُرجع عددًا من النوع UInt64 يمثّل العدد التقريبي لقيم الوسيطات المختلفة. UInt64 أمثلة الاستخدام الأساسي
Query
SELECT uniqCombined(number) FROM numbers(1e6);
Response
┌─uniqCombined(number)─┐
│              1001148 │
└──────────────────────┘
بدقة مخصّصة
Query
SELECT uniqCombined(15)(number) FROM numbers(1e5);
Response
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘
انظر أيضًا
آخر تعديل في ٢٩ يونيو ٢٠٢٦