uniqCombined
نظرًا إلى أنها تستخدم قيمة
hash بطول 32 بت للأنواع غير String، فستكون النتيجة ذات خطأ مرتفع جدًا عند الكارديناليات الأكبر بكثير من UINT_MAX (وسيرتفع الخطأ سريعًا بعد بضع عشرات من المليارات من القيم المميّزة).
إذا كانت الكارديناليات أكبر من UINT_MAX، فينبغي استخدام uniqCombined64 بدلًا من ذلك.- تستهلك ذاكرة أقل بعدة مرات
- تحسب بدقة أعلى بعدة مرات
- يكون أداؤها عادةً أقل قليلًا. وفي بعض السيناريوهات، قد تحقق uniqCombined أداءً أفضل من uniq، على سبيل المثال مع الاستعلامات الموزعة التي تنقل عددًا كبيرًا من حالات التجميع عبر الشبكة
تفاصيل التنفيذ
تفاصيل التنفيذ
تحسب هذه الدالة قيمة
hash (بطول 64 بت لـ String و32 بت بخلاف ذلك) لجميع المعلمات في التجميع، ثم تستخدمها في الحسابات.
وتستخدم مزيجًا من ثلاث خوارزميات: المصفوفة، وجدول hash، وHyperLogLog مع جدول لتصحيح الأخطاء:- عند وجود عدد صغير من العناصر المميّزة، تُستخدم مصفوفة
- عندما يصبح حجم المجموعة أكبر، يُستخدم جدول
hash - وعند وجود عدد أكبر من العناصر، يُستخدم HyperLogLog، الذي يشغل مقدارًا ثابتًا من الذاكرة
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
أمثلة
الاستخدام الأساسي
Query
Response
Query
Response