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

الوصف

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

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

في هذا المثال، سننشئ جدولًا يخزّن رموز الحالة وعدد مرات ظهورها عبر فترات زمنية مختلفة، بحيث يحتوي كل صف على Map يربط رموز الحالة بأعدادها المقابلة. سنستخدم sumMap لحساب العدد الإجمالي لكل رمز حالة ضمن كل فترة زمنية.
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,
    sumMap(status),
FROM metrics
GROUP BY timeslot;
ستحسب الدالة sumMap العدد الإجمالي لكل رمز حالة ضمن كل فترة زمنية. على سبيل المثال:
  • في الفترة الزمنية ‘2000-01-01 00:00:00’:
    • رمز الحالة ‘a’: 15
    • رمز الحالة ‘b’: 25
    • رمز الحالة ‘c’: 35 + 45 = 80
    • رمز الحالة ‘d’: 55
    • رمز الحالة ‘e’: 65
  • في الفترة الزمنية ‘2000-01-01 00:01:00’:
    • رمز الحالة ‘d’: 75
    • رمز الحالة ‘e’: 85
    • رمز الحالة ‘f’: 95 + 105 = 200
    • رمز الحالة ‘g’: 115 + 125 = 240
Response
   ┌────────────timeslot─┬─sumMap(status)───────────────────────┐
1. │ 2000-01-01 00:01:00 │ {'d':75,'e':85,'f':200,'g':240}      │
2. │ 2000-01-01 00:00:00 │ {'a':15,'b':25,'c':80,'d':55,'e':65} │
   └─────────────────────┴──────────────────────────────────────┘

انظر أيضًا

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