map).
أما الدوال التجميعية فتضغط مجموعة من الصفوف (الطي أو الاختزال).
وتأخذ الدالة arrayJoin كل صف وتولّد منه مجموعة من الصفوف (الفرد).
تأخذ هذه الدالة مصفوفة كوسيط، وتكرّر الصف الأصلي إلى عدة صفوف بعدد العناصر الموجودة في المصفوفة.
وتُنسخ جميع القيم في الأعمدة كما هي، باستثناء القيم في العمود الذي تُطبَّق عليه هذه الدالة، إذ تُستبدل بقيمة العنصر المقابل من المصفوفة.
إذا كانت المصفوفة فارغة، فإن
arrayJoin لا ينتج أي صفوف.
ولإرجاع صف واحد يحتوي على القيمة الافتراضية لنوع المصفوفة، يمكنك تغليفها بـ emptyArrayToSingle، على سبيل المثال: arrayJoin(emptyArrayToSingle(...)).Query
Response
arrayJoin في جميع أجزاء الاستعلام، بما في ذلك قسم WHERE. لاحظ أن نتيجة الاستعلام أدناه هي 2، رغم أن الاستعلام الفرعي أعاد صفًا واحدًا.
Query
Response
arrayJoin. في هذه الحالة، يُنفَّذ التحويل عدة مرات وتتضاعف الصفوف.
على سبيل المثال:
Query
Response
أفضل الممارسات
arrayJoin مع التعبير نفسه إلى النتائج المتوقعة بسبب إزالة التعبيرات الفرعية المشتركة.
في هذه الحالات، يُنصح بتعديل تعبيرات المصفوفة المكررة عبر إضافة عمليات لا تؤثر في نتيجة arrayJoin. على سبيل المثال، arrayJoin(arraySort(arr)), arrayJoin(arrayConcat(arr, []))
مثال:
Query
ARRAY JOIN في استعلام SELECT، إذ تتيح إمكانات أوسع.
يتيح ARRAY JOIN تحويل عدة مصفوفات لها العدد نفسه من العناصر دفعةً واحدة.
مثال:
Query
Response
Tuple
مثال:
Query
Row
arrayJoin في ClickHouse من تشابهه المفاهيمي مع عملية JOIN، ولكن عند تطبيقها على المصفوفات داخل صف واحد. فبينما تدمج عمليات JOIN التقليدية الصفوف من جداول مختلفة، يقوم arrayJoin “بضم” كل عنصر من عناصر المصفوفة داخل الصف، مما ينتج عنه عدة صفوف — صف واحد لكل عنصر في المصفوفة — مع تكرار قيم الأعمدة الأخرى. كما يوفّر ClickHouse أيضًا صياغة البند ARRAY JOIN، مما يجعل هذه الصلة بعمليات JOIN التقليدية أكثر وضوحًا من خلال استخدام مصطلحات SQL JOIN المألوفة. ويُشار إلى هذه العملية أيضًا باسم “فرد” المصفوفة، لكن يُستخدم مصطلح “join” في كلٍّ من اسم الدالة والبند لأنه يشبه ضم الجدول إلى عناصر المصفوفة، مما يؤدي فعليًا إلى توسيع مجموعة البيانات بطريقة مشابهة لعملية JOIN.