الانتقال إلى المحتوى الرئيسي
هذه دالة غير اعتيادية للغاية. الدوال العادية لا تغيّر مجموعة من الصفوف، بل تغيّر فقط القيم في كل صف (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.
آخر تعديل في ٢٥ يونيو ٢٠٢٦