الوصف
يمكن تطبيق المُركِّب Map على الدالة max
لحساب القيمة القصوى في Map لكل مفتاح، باستخدام دالة المُركِّب التجميعي maxMap.
مثال على الاستخدام
في هذا المثال، سننشئ جدولًا يخزّن رموز الحالة وتكراراتها عبر فترات زمنية مختلفة،
بحيث يحتوي كل صف على Map يربط رموز الحالة بتكراراتها المقابلة. سنستخدم
maxMap لإيجاد أعلى عدد لكل رمز حالة ضمن كل فترة زمنية.
CREATE TABLE metrics(
date Date,
timeslot DateTime,
status Map(String, UInt64)
) ENGINE = MergeTree
ORDER BY ();
INSERT INTO metrics VALUES
('2000-01-01', '2000-01-01 00:00:00', (['a', 'b', 'c'], [15, 25, 35])),
('2000-01-01', '2000-01-01 00:00:00', (['c', 'd', 'e'], [45, 55, 65])),
('2000-01-01', '2000-01-01 00:01:00', (['d', 'e', 'f'], [75, 85, 95])),
('2000-01-01', '2000-01-01 00:01:00', (['f', 'g', 'g'], [105, 115, 125]));
SELECT
timeslot,
maxMap(status),
FROM metrics
GROUP BY timeslot;ستحدّد الدالة maxMap العدد الأقصى لكل رمز حالة ضمن كل فترة زمنية. على سبيل المثال:
- في الفترة الزمنية '2000-01-01 00:00:00':
- الحالة 'a': 15
- الحالة 'b': 25
- الحالة 'c': max(35, 45) = 45
- الحالة 'd': 55
- الحالة 'e': 65
- في الفترة الزمنية '2000-01-01 00:01:00':
- الحالة 'd': 75
- الحالة 'e': 85
- الحالة 'f': max(95, 105) = 105
- الحالة 'g': max(115, 125) = 125
┌────────────timeslot─┬─maxMap(status)───────────────────────┐
1. │ 2000-01-01 00:01:00 │ {'d':75,'e':85,'f':105,'g':125} │
2. │ 2000-01-01 00:00:00 │ {'a':15,'b':25,'c':45,'d':55,'e':65} │
└─────────────────────┴──────────────────────────────────────┘