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

تنظيم الموارد

تشبه طريقة تنظيم الموارد في ClickHouse Cloud التسلسل الهرمي للموارد في BigQuery. ونوضّح أدناه أوجه الاختلاف المحددة استنادًا إلى المخطط التالي الذي يبيّن التسلسل الهرمي لموارد ClickHouse Cloud:

المؤسسات

على غرار BigQuery، تُعدّ المؤسسات العُقد الجذرية في التسلسل الهرمي لموارد ClickHouse Cloud. يُسنَد أول مستخدم تُنشِئه في حساب ClickHouse Cloud الخاص بك تلقائيًا إلى مؤسسة يملكها هذا المستخدم. ويمكنه دعوة مستخدمين إضافيين إلى المؤسسة.

مشاريع BigQuery مقابل خدمات ClickHouse Cloud

ضمن المؤسسات، يمكنك إنشاء خدمات تُعدّ مكافئة إلى حدٍّ ما لمشاريع BigQuery، لأن البيانات المخزنة في ClickHouse Cloud تكون مرتبطة بخدمة. تتوفر في ClickHouse Cloud عدة أنواع من الخدمات. يتم نشر كل خدمة ClickHouse Cloud في Region محددة، وتتضمن:
  1. مجموعة من عُقد الحوسبة (حاليًا، عقدتان لخدمة من فئة Development و3 عُقد لخدمة من فئة Production). وتدعم ClickHouse Cloud لهذه العُقد التوسع الرأسي والأفقي، يدويًا وتلقائيًا.
  2. مجلدًا في تخزين الكائنات تخزّن فيه الخدمة جميع البيانات.
  3. نقطة نهاية (أو عدة نقاط نهاية يتم إنشاؤها عبر Console في واجهة المستخدم لـ ClickHouse Cloud) - أي URL خدمة تستخدمه للاتصال بالخدمة (على سبيل المثال، https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443)

مجموعات بيانات BigQuery مقابل قواعد بيانات ClickHouse Cloud

ينظّم ClickHouse الجداول منطقيًا ضمن قواعد بيانات. وكما هي الحال مع مجموعات بيانات BigQuery، تُعد قواعد بيانات ClickHouse حاويات منطقية لتنظيم الوصول إلى بيانات الجداول والتحكم فيه.

مجلدات BigQuery

لا يوجد في ClickHouse Cloud حاليًا مفهوم يعادل مجلدات BigQuery.

حجوزات Slot والحصص في BigQuery

كما هو الحال مع حجوزات Slot في BigQuery، يمكنك تهيئة التحجيم التلقائي الرأسي والأفقي في ClickHouse Cloud. بالنسبة إلى التحجيم التلقائي الرأسي، يمكنك تحديد الحدين الأدنى والأقصى لحجم الذاكرة وأنوية CPU لعُقد الحوسبة الخاصة بالخدمة. بعد ذلك، ستتوسع الخدمة أو تتقلص حسب الحاجة ضمن هذه الحدود. تتوفر هذه الإعدادات أيضًا أثناء عملية إنشاء الخدمة لأول مرة. ويكون لكل عقدة حوسبة في الخدمة الحجم نفسه. ويمكنك تغيير عدد عُقد الحوسبة داخل الخدمة باستخدام التحجيم الأفقي. علاوة على ذلك، وعلى غرار الحصص في BigQuery، يوفّر ClickHouse Cloud التحكم في التزامن، وحدود استخدام الذاكرة، وجدولة I/O، مما يتيح لك عزل الاستعلامات ضمن فئات أعباء العمل. ومن خلال تعيين حدود للموارد المشتركة (أنوية CPU وDRAM وI/O للقرص والشبكة) لفئات أعباء عمل محددة، يضمن ذلك ألّا تؤثر هذه الاستعلامات في استعلامات الأعمال الأخرى الحرجة. ويمنع التحكم في التزامن الإفراط في تخصيص الخيوط في السيناريوهات التي تتضمن عددًا كبيرًا من الاستعلامات المتزامنة. يتتبع ClickHouse أحجام البايت لتخصيصات الذاكرة على مستوى الخادم والمستخدم والاستعلام، مما يتيح فرض حدود مرنة لاستخدام الذاكرة. وتتيح ميزة memory overcommit للاستعلامات استخدام ذاكرة حرة إضافية تتجاوز الذاكرة المضمونة، مع ضمان حدود الذاكرة للاستعلامات الأخرى. بالإضافة إلى ذلك، يمكن تقييد استخدام الذاكرة في بنود التجميع والفرز والربط، مما يتيح الرجوع إلى خوارزميات خارجية عند تجاوز حد الذاكرة. وأخيرًا، تتيح لك جدولة I/O تقييد الوصول إلى الأقراص المحلية والبعيدة لفئات أعباء العمل استنادًا إلى الحد الأقصى لعرض النطاق، والطلبات قيد التنفيذ، والسياسة.

الأذونات

يتحكم ClickHouse Cloud في وصول المستخدمين من خلال موضعين: عبر Cloud Console وعبر قاعدة البيانات. تُدار إمكانية الوصول إلى Console عبر واجهة المستخدم clickhouse.cloud. وتُدار إمكانية الوصول إلى قاعدة البيانات عبر حسابات مستخدمي قاعدة البيانات والأدوار. بالإضافة إلى ذلك، يمكن منح مستخدمي Console أدوارًا داخل قاعدة البيانات تتيح لهم التفاعل مع قاعدة البيانات عبر SQL Console.

أنواع البيانات

يوفّر ClickHouse مستويات أدق من الدقة للأنواع العددية. على سبيل المثال، يوفّر BigQuery الأنواع العددية INT64 وNUMERIC وBIGNUMERIC وFLOAT64. بالمقابل، يوفّر ClickHouse أنواعًا متعددة الدقة للأعداد العشرية والأعداد ذات الفاصلة العائمة والأعداد الصحيحة. وباستخدام أنواع البيانات هذه، يمكنك تحسين استخدام التخزين وتقليل العبء على الذاكرة، مما يؤدي إلى استعلامات أسرع واستهلاك أقل للموارد. نعرض أدناه نوع ClickHouse المكافئ لكل نوع في BigQuery: عند توفّر عدة خيارات لأنواع ClickHouse، راعِ النطاق الفعلي للبيانات واختر أقل نوع يلبّي الحاجة. وراعِ أيضًا استخدام مرمّزات الضغط المناسبة للحصول على ضغط إضافي.

تقنيات تسريع الاستعلامات

المفاتيح الأساسية والخارجية والفهرس الأساسي

في BigQuery، يمكن أن يحتوي الجدول على قيود المفتاح الأساسي والمفتاح الخارجي. عادةً ما تُستخدم المفاتيح الأساسية والخارجية في قواعد البيانات العلائقية لضمان تكامل البيانات. وتكون قيمة المفتاح الأساسي فريدةً عادةً لكل صف، ولا تكون NULL. ويجب أن تكون كل قيمة مفتاح خارجي في الصف موجودة في عمود المفتاح الأساسي لجدول المفتاح الأساسي أو أن تكون NULL. في BigQuery، لا تُفرَض هذه القيود، لكن مُحسِّن الاستعلامات قد يستخدم هذه المعلومات لتحسين الاستعلامات. في ClickHouse، يمكن أن يحتوي الجدول أيضًا على مفتاح أساسي. ومثل BigQuery، لا يفرض ClickHouse التفرّد على قيم عمود المفتاح الأساسي في الجدول. وعلى عكس BigQuery، تُخزَّن بيانات الجدول على القرص مرتبة بحسب أعمدة المفتاح الأساسي. ويستفيد مُحسِّن الاستعلامات من ترتيب الفرز هذا لتجنّب إعادة الفرز، وتقليل استخدام الذاكرة في عمليات الربط، وتمكين الإنهاء المبكر لعبارات LIMIT. وعلى عكس BigQuery، ينشئ ClickHouse تلقائيًا فهرسًا أساسيًا متناثرًا استنادًا إلى قيم أعمدة المفتاح الأساسي. ويُستخدم هذا الفهرس لتسريع جميع الاستعلامات التي تتضمن عوامل تصفية على أعمدة المفتاح الأساسي. ولا يدعم ClickHouse حاليًا قيود المفتاح الخارجي.

الفهارس الثانوية (متاحة فقط في ClickHouse)

بالإضافة إلى الفهرس الأساسي المُنشأ من قيم أعمدة المفتاح الأساسي للجدول، يتيح ClickHouse إنشاء فهارس ثانوية على أعمدة لا تدخل ضمن المفتاح الأساسي. ويوفّر ClickHouse عدة أنواع من الفهارس الثانوية، يناسب كلٌّ منها أنواعًا مختلفة من الاستعلامات:
  • فهرس Bloom Filter:
    • يُستخدم لتسريع الاستعلامات التي تتضمن شروط مساواة (مثل: = و IN).
    • يستخدم هياكل بيانات احتمالية لتحديد ما إذا كانت قيمة معيّنة موجودة في كتلة بيانات.
  • فهرس Token Bloom Filter:
    • يشبه فهرس Bloom Filter، لكنه يُستخدم مع السلاسل النصية المُجزّأة إلى رموز، وهو مناسب لاستعلامات البحث النصي الكامل.
  • فهرس Min-Max:
    • يحتفظ بالقيمتين الصغرى والكبرى لعمود معيّن في كل جزء بيانات.
    • يساعد على تخطي قراءة أجزاء البيانات التي لا تقع ضمن النطاق المحدد.

فهارس البحث

على غرار فهارس البحث في BigQuery، يمكن إنشاء فهارس النص الكامل لجداول ClickHouse على الأعمدة التي تحتوي على قيم نصية.

الفهارس المتجهية

طرحت BigQuery مؤخرًا فهارس متجهية كميزة ضمن مرحلة ما قبل GA. وبالمثل، يوفّر ClickHouse دعمًا تجريبيًا لـ فهارس لتسريع حالات استخدام البحث المتجهي.

التقسيم

على غرار BigQuery، يستخدم ClickHouse تقسيم الجداول لتحسين أداء الجداول الكبيرة وتسهيل إدارتها، وذلك بتقسيمها إلى أجزاء أصغر وأسهل في الإدارة تُسمى أقسامًا. نشرح تقسيم الجداول في ClickHouse بالتفصيل هنا.

التجميع العنقودي

باستخدام التجميع العنقودي، يرتّب BigQuery تلقائيًا بيانات الجدول وفقًا لقيم عدد قليل من الأعمدة المحددة، ويخزّنها معًا في كتل ذات أحجام مثالية. يحسّن التجميع العنقودي أداء الاستعلامات، مما يتيح لـ BigQuery تقدير تكلفة تشغيل الاستعلام بشكل أفضل. ومع الأعمدة المجمّعة عنقوديًا، تتجنب الاستعلامات أيضًا فحص البيانات غير الضرورية. في ClickHouse، تُجمَّع البيانات عنقوديًا على القرص تلقائيًا استنادًا إلى أعمدة المفتاح الأساسي للجدول، وتُنظَّم منطقيًا في كتل يمكن للاستعلامات التي تستخدم بنية بيانات الفهرس الأساسي تحديدها بسرعة أو استبعادها.

العروض المادية

يدعم كلٌّ من BigQuery وClickHouse العروض المادية، وهي نتائج تُحتسب مسبقًا استنادًا إلى ناتج استعلام تحويل على جدول أساسي، مما يحسّن الأداء ويزيد الكفاءة.

الاستعلام عن العروض المادية

يمكن الاستعلام عن العروض المادية في BigQuery مباشرةً، أو يمكن للمُحسِّن استخدامها لمعالجة الاستعلامات على الجداول الأساسية. وإذا كانت التغييرات التي تطرأ على الجداول الأساسية قد تُبطل العرض المادي، فتُقرأ البيانات مباشرةً من الجداول الأساسية. أما إذا كانت هذه التغييرات لا تُبطل العرض المادي، فتُقرأ بقية البيانات من العرض المادي، ولا تُقرأ من الجداول الأساسية إلا التغييرات فقط. في ClickHouse، لا يمكن الاستعلام عن العروض المادية إلا مباشرةً. ومع ذلك، وبالمقارنة مع BigQuery (حيث تُحدَّث العروض المادية تلقائيًا خلال 5 دقائق من أي تغيير يطرأ على الجداول الأساسية، ولكن ليس أكثر من كل 30 دقيقة)، فإن العروض المادية تكون دائمًا متزامنة مع الجدول الأساسي. تحديث العروض المادية يُجري BigQuery تحديثًا كاملًا دوريًا للعروض المادية من خلال تشغيل استعلام التحويل الخاص بالعرض على الجدول الأساسي. وبين عمليات التحديث، يدمج BigQuery بيانات العرض المادي مع بيانات الجدول الأساسي الجديدة لتقديم نتائج استعلام متسقة مع الاستمرار في استخدام العرض المادي. في ClickHouse، تُحدَّث العروض المادية بشكل تزايدي. وتوفّر آلية التحديث التزايدي هذه قابلية توسّع عالية وتكاليف حوسبة منخفضة، إذ صُمِّمت العروض المادية التي تُحدَّث تزايديًا خصيصًا للسيناريوهات التي تحتوي فيها الجداول الأساسية على مليارات أو تريليونات من الصفوف. وبدلًا من الاستعلام مرارًا عن الجدول الأساسي الذي يواصل النمو لتحديث العرض المادي، يحسب ClickHouse ببساطة نتيجة جزئية من قيم الصفوف المُدرجة حديثًا في الجدول الأساسي فقط. ثم تُدمج هذه النتيجة الجزئية تدريجيًا مع النتيجة الجزئية المحسوبة سابقًا في الخلفية. ويؤدي ذلك إلى خفض كبير في تكاليف الحوسبة مقارنةً بتحديث العرض المادي مرارًا انطلاقًا من الجدول الأساسي بالكامل.

المعاملات

بخلاف ClickHouse، يدعم BigQuery المعاملات متعددة العبارات داخل استعلام واحد، أو عبر عدة استعلامات عند استخدام الجلسات. تتيح لك المعاملة متعددة العبارات تنفيذ عمليات تعديل، مثل إدراج صفوف أو حذفها في جدول واحد أو أكثر، ثم إما اعتماد التغييرات أو التراجع عنها بشكل ذرّي. المعاملات متعددة العبارات مدرجة على خارطة طريق ClickHouse لعام 2024.

الدوال التجميعية

مقارنةً بـ BigQuery، يوفّر ClickHouse عددًا أكبر بكثير من الدوال التجميعية المضمّنة:

مصادر البيانات وتنسيقات الملفات

مقارنةً بـ BigQuery، يدعم ClickHouse عددًا أكبر بكثير من تنسيقات الملفات ومصادر البيانات:
  • يوفّر ClickHouse دعمًا أصليًا لتحميل البيانات من أي مصدر بيانات تقريبًا وبأكثر من 90 تنسيق ملفات
  • يدعم BigQuery خمسة تنسيقات ملفات و19 مصدر بيانات

ميزات لغة SQL

يوفّر ClickHouse لغة SQL القياسية مع العديد من الامتدادات والتحسينات التي تجعلها أكثر ملاءمة للمهام التحليلية. على سبيل المثال، تدعم ClickHouse SQL دوال لامبدا والدوال عالية الرتبة، لذلك لا تحتاج إلى فرد المصفوفات أو تفجيرها عند تطبيق التحويلات. وهذه ميزة كبيرة مقارنةً بأنظمة أخرى مثل BigQuery.

المصفوفات

مقارنةً بوظائف المصفوفات الثماني في BigQuery، يوفّر ClickHouse أكثر من 80 وظيفة مصفوفات مضمّنة لنمذجة مجموعة واسعة من المشكلات وحلّها ببساطة وأناقة. من أنماط التصميم الشائعة في ClickHouse استخدام الدالة التجميعية groupArray لتحويل قيم صفوف معيّنة من جدول إلى مصفوفة بشكل مؤقت. بعد ذلك، يمكن معالجة هذه المصفوفة بسهولة باستخدام وظائف المصفوفات، ثم تحويل النتيجة مرة أخرى إلى صفوف جدول منفصلة باستخدام الدالة arrayJoin. ونظرًا إلى أن ClickHouse SQL يدعم دوال لامبدا عالية الرتبة، يمكن تنفيذ العديد من العمليات المتقدمة على المصفوفات بمجرد استدعاء إحدى وظائف المصفوفات المضمّنة عالية الرتبة، بدلًا من تحويل المصفوفات مؤقتًا إلى جداول مرة أخرى، كما يكون مطلوبًا في كثير من الأحيان في BigQuery، مثل تصفية المصفوفات أو دمجها عنصرًا بعنصر. في ClickHouse، لا تتطلب هذه العمليات سوى استدعاء بسيط للدالتين عاليتَي الرتبة arrayFilter وarrayZip، على الترتيب. فيما يلي، نعرض مقابلة بين عمليات المصفوفات في BigQuery ونظيراتها في ClickHouse: أنشئ مصفوفة تتضمن عنصرًا واحدًا لكل صف في استعلام فرعي BigQuery الدالة ARRAY
SELECT ARRAY
  (SELECT 1 UNION  ALL
   SELECT 2 UNION ALL
   SELECT 3) AS new_array;

/*-----------*
 | new_array |
 +-----------+
 | [1, 2, 3] |
 *-----------*/
ClickHouse groupArray دالة تجميعية
SELECT groupArray(*) AS new_array
FROM
(
    SELECT 1
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 3
)
   ┌─new_array─┐
1. │ [1,2,3]   │
   └───────────┘
حوِّل مصفوفة إلى مجموعة من الصفوف BigQuery المعامل UNNEST
SELECT *
FROM UNNEST(['foo', 'bar', 'baz', 'qux', 'corge', 'garply', 'waldo', 'fred'])
  AS element
WITH OFFSET AS offset
ORDER BY offset;

/*----------+--------*
 | element  | offset |
 +----------+--------+
 | foo      | 0      |
 | bar      | 1      |
 | baz      | 2      |
 | qux      | 3      |
 | corge    | 4      |
 | garply   | 5      |
 | waldo    | 6      |
 | fred     | 7      |
 *----------+--------*/
ClickHouse عبارة ARRAY JOIN
WITH ['foo', 'bar', 'baz', 'qux', 'corge', 'garply', 'waldo', 'fred'] AS values
SELECT element, num-1 AS offset
FROM (SELECT values AS element) AS subquery
ARRAY JOIN element, arrayEnumerate(element) AS num;

/*----------+--------*
 | element  | offset |
 +----------+--------+
 | foo      | 0      |
 | bar      | 1      |
 | baz      | 2      |
 | qux      | 3      |
 | corge    | 4      |
 | garply   | 5      |
 | waldo    | 6      |
 | fred     | 7      |
 *----------+--------*/
إرجاع مصفوفة من التواريخ BigQuery دالة GENERATE_DATE_ARRAY
SELECT GENERATE_DATE_ARRAY('2016-10-05', '2016-10-08') AS example;

/*--------------------------------------------------*
 | example                                          |
 +--------------------------------------------------+
 | [2016-10-05, 2016-10-06, 2016-10-07, 2016-10-08] |
 *--------------------------------------------------*/
دالتا range وarrayMap ClickHouse
SELECT arrayMap(x -> (toDate('2016-10-05') + x), range(toUInt32((toDate('2016-10-08') - toDate('2016-10-05')) + 1))) AS example
   ┌─example───────────────────────────────────────────────┐
1. │ ['2016-10-05','2016-10-06','2016-10-07','2016-10-08'] │
   └───────────────────────────────────────────────────────┘
إرجاع مصفوفة من الطوابع الزمنية BigQuery دالة GENERATE_TIMESTAMP_ARRAY
SELECT GENERATE_TIMESTAMP_ARRAY('2016-10-05 00:00:00', '2016-10-07 00:00:00',
                                INTERVAL 1 DAY) AS timestamp_array;

/*--------------------------------------------------------------------------*
 | timestamp_array                                                          |
 +--------------------------------------------------------------------------+
 | [2016-10-05 00:00:00+00, 2016-10-06 00:00:00+00, 2016-10-07 00:00:00+00] |
 *--------------------------------------------------------------------------*/
ClickHouse دالتا range وarrayMap
SELECT arrayMap(x -> (toDateTime('2016-10-05 00:00:00') + toIntervalDay(x)), range(dateDiff('day', toDateTime('2016-10-05 00:00:00'), toDateTime('2016-10-07 00:00:00')) + 1)) AS timestamp_array
Query id: b324c11f-655b-479f-9337-f4d34fd02190

   ┌─timestamp_array─────────────────────────────────────────────────────┐
1. │ ['2016-10-05 00:00:00','2016-10-06 00:00:00','2016-10-07 00:00:00'] │
   └─────────────────────────────────────────────────────────────────────┘
تصفية المصفوفات BigQuery يستلزم تحويل المصفوفات مؤقتًا إلى جداول باستخدام عامل التشغيل UNNEST
WITH Sequences AS
  (SELECT [0, 1, 1, 2, 3, 5] AS some_numbers
   UNION ALL SELECT [2, 4, 8, 16, 32] AS some_numbers
   UNION ALL SELECT [5, 10] AS some_numbers)
SELECT
  ARRAY(SELECT x * 2
        FROM UNNEST(some_numbers) AS x
        WHERE x < 5) AS doubled_less_than_five
FROM Sequences;

/*------------------------*
 | doubled_less_than_five |
 +------------------------+
 | [0, 2, 2, 4, 6]        |
 | [4, 8]                 |
 | []                     |
 *------------------------*/
ClickHouse الدالة arrayFilter
WITH Sequences AS
    (
        SELECT [0, 1, 1, 2, 3, 5] AS some_numbers
        UNION ALL
        SELECT [2, 4, 8, 16, 32] AS some_numbers
        UNION ALL
        SELECT [5, 10] AS some_numbers
    )
SELECT arrayMap(x -> (x * 2), arrayFilter(x -> (x < 5), some_numbers)) AS doubled_less_than_five
FROM Sequences;
   ┌─doubled_less_than_five─┐
1. │ [0,2,2,4,6]            │
   └────────────────────────┘
   ┌─doubled_less_than_five─┐
2. │ []                     │
   └────────────────────────┘
   ┌─doubled_less_than_five─┐
3. │ [4,8]                  │
   └────────────────────────┘
دمج المصفوفات بحسب المواضع BigQuery يتطلب إعادة تحويل المصفوفات مؤقتًا إلى جداول باستخدام المعامل UNNEST
WITH
  Combinations AS (
    SELECT
      ['a', 'b'] AS letters,
      [1, 2, 3] AS numbers
  )
SELECT
  ARRAY(
    SELECT AS STRUCT
      letters[SAFE_OFFSET(index)] AS letter,
      numbers[SAFE_OFFSET(index)] AS number
    FROM Combinations
    CROSS JOIN
      UNNEST(
        GENERATE_ARRAY(
          0,
          LEAST(ARRAY_LENGTH(letters), ARRAY_LENGTH(numbers)) - 1)) AS index
    ORDER BY index
  );

/*------------------------------*
 | pairs                        |
 +------------------------------+
 | [{ letter: "a", number: 1 }, |
 |  { letter: "b", number: 2 }] |
 *------------------------------*/
ClickHouse الدالة arrayZip
WITH Combinations AS
    (
        SELECT
            ['a', 'b'] AS letters,
            [1, 2, 3] AS numbers
    )
SELECT arrayZip(letters, arrayResize(numbers, length(letters))) AS pairs
FROM Combinations;
   ┌─pairs─────────────┐
1. │ [('a',1),('b',2)] │
   └───────────────────┘
تجميع المصفوفات BigQuery يتطلب إعادة تحويل المصفوفات إلى جداول باستخدام المعامل UNNEST
WITH Sequences AS
  (SELECT [0, 1, 1, 2, 3, 5] AS some_numbers
   UNION ALL SELECT [2, 4, 8, 16, 32] AS some_numbers
   UNION ALL SELECT [5, 10] AS some_numbers)
SELECT some_numbers,
  (SELECT SUM(x)
   FROM UNNEST(s.some_numbers) AS x) AS sums
FROM Sequences AS s;

/*--------------------+------*
 | some_numbers       | sums |
 +--------------------+------+
 | [0, 1, 1, 2, 3, 5] | 12   |
 | [2, 4, 8, 16, 32]  | 62   |
 | [5, 10]            | 15   |
 *--------------------+------*/
ClickHouse دالة arraySum، ودالة arrayAvg، …، أو أيًّا من أكثر من 90 اسمًا آخر لدوال التجميع، كوسيطة للدالة arrayReduce
WITH Sequences AS
    (
        SELECT [0, 1, 1, 2, 3, 5] AS some_numbers
        UNION ALL
        SELECT [2, 4, 8, 16, 32] AS some_numbers
        UNION ALL
        SELECT [5, 10] AS some_numbers
    )
SELECT
    some_numbers,
    arraySum(some_numbers) AS sums
FROM Sequences;
   ┌─some_numbers──┬─sums─┐
1. │ [0,1,1,2,3,5] │   12 │
   └───────────────┴──────┘
   ┌─some_numbers──┬─sums─┐
2. │ [2,4,8,16,32] │   62 │
   └───────────────┴──────┘
   ┌─some_numbers─┬─sums─┐
3. │ [5,10]       │   15 │
   └──────────────┴──────┘
آخر تعديل في ٢٩ يونيو ٢٠٢٦