SummingMergeTree، يستبدل ClickHouse جميع الصفوف التي لها المفتاح الأساسي نفسه (أو بدقة أكبر، مفتاح الترتيب نفسه) بصف واحد يحتوي على قيم مجمَّعة للأعمدة ذات نوع البيانات الرقمي. وإذا كان مفتاح الترتيب مُكوَّنًا بحيث تقابل قيمة مفتاح واحدة عددًا كبيرًا من الصفوف، فإن ذلك يقلل حجم التخزين بشكل كبير ويُسرّع استرجاع البيانات.
نوصي باستخدام هذا المحرك إلى جانب MergeTree. خزّن البيانات الكاملة في جدول MergeTree، واستخدم SummingMergeTree لتخزين البيانات المجمَّعة، على سبيل المثال عند إعداد التقارير. ويساعدك هذا النهج على تجنب فقدان بيانات قيّمة بسبب تكوين غير صحيح للمفتاح الأساسي.
إنشاء جدول
معلمات SummingMergeTree
الأعمدة
columns - عبارة عن tuple يحتوي على أسماء الأعمدة التي ستُجمَّع قيمها. معلمة اختيارية.
يجب أن تكون الأعمدة من نوع بيانات رقمي، وألا تكون ضمن القسم أو مفتاح الترتيب.
إذا لم يتم تحديد columns، فسيُجمِّع ClickHouse القيم في جميع الأعمدة ذات نوع البيانات الرقمي غير الموجودة ضمن مفتاح الترتيب.
بنود الاستعلام
SummingMergeTree، تكون البنود نفسها مطلوبة، كما هو الحال عند إنشاء جدول MergeTree.
مثال على الاستخدام
sum وعبارة GROUP BY في الاستعلام.
معالجة البيانات
sum() وعبارة GROUP BY في الاستعلام كما هو موضح في المثال أعلاه.
القواعد العامة للجمع
columns.
إذا كانت القيم تساوي 0 في جميع الأعمدة المخصّصة للجمع، يُحذف الصف.
إذا لم يكن العمود ضمن المفتاح الأساسي ولم تُجمع قيمه، فتُختار قيمة عشوائية من القيم الموجودة.
لا تُجمع القيم في الأعمدة الموجودة ضمن المفتاح الأساسي.
الجمع في أعمدة AggregateFunction
البُنى المتداخلة
Map وكان يحتوي على عمودين على الأقل يستوفيان المعايير التالية:
- يكون العمود الأول رقميًا
(*Int*, Date, DateTime)أو سلسلة نصية(String, FixedString)، ولنسمّهkey، - وتكون الأعمدة الأخرى حسابية
(*Int*, Float32/64)، ولنسمّها(values...)،
key => (values...)، وعند دمج صفوفه، تُدمَج عناصر مجموعتي البيانات بحسب key مع جمع قيم (values...) المقابلة.
أمثلة:
Map.
بالنسبة إلى بنية البيانات المتداخلة، لا تحتاج إلى تحديد أعمدتها ضمن tuple الأعمدة المخصّص للجمع.
تجميع عناصر Tuple
allow_tuple_element_aggregation ممكّنًا، تُسطَّح أعمدة Tuple تكراريًا بحيث يُجمَع كل عنصر طرفي فيها على حدة. يتيح لك ذلك تخزين عدة مقاييس في عمود Tuple واحد وجمعها عنصرًا بعنصر أثناء عمليات الدمج.
تنطبق القواعد نفسها على الأعمدة الفرعية المسطّحة كما تنطبق على الأعمدة العادية:
- لا تُجمع إلا الأعمدة الفرعية الرقمية.
- تُستثنى من الجمع الأعمدة الفرعية التابعة لـ
Tupleضمن مفتاح الفرز أو مفتاح التقسيم. - إذا تم تحديد
columns، فلن تُجمع إلا الأعمدة الفرعية التابعة لأعمدةTupleالمُدرجة. - إذا أصبحت جميع الأعمدة الفرعية الرقمية في صف ما تساوي صفرًا بعد الجمع، فسيُحذف الصف.
هذا الإعداد غير قابل للتغيير ويجب تحديده عند إنشاء الجدول.