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

الوصف

يمكن تطبيق المُركِّب Map على الدالة max لحساب القيمة القصوى في Map لكل مفتاح، باستخدام دالة المُركِّب التجميعي maxMap.

مثال على الاستخدام

في هذا المثال، سننشئ جدولًا يخزّن رموز الحالة وتكراراتها عبر فترات زمنية مختلفة، بحيث يحتوي كل صف على Map يربط رموز الحالة بتكراراتها المقابلة. سنستخدم maxMap لإيجاد أعلى عدد لكل رمز حالة ضمن كل فترة زمنية.
Query
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
Response
   ┌────────────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} │
   └─────────────────────┴──────────────────────────────────────┘

راجع أيضًا

آخر تعديل في ٢٥ يونيو ٢٠٢٦