أمثلة على استعلامات Hive: الترتيب حسب، التجميع حسب و Cluster By
⚡ ملخص ذكي
تستخدم استعلامات Hive عبارات ORDER BY و GROUP BY و SORT BY و CLUSTER BY و DISTRIBUTE BY لفرز وتجميع وتوزيع الصفوف عبر المخفضات، ويتم توضيح كل عبارة هنا على جدول موظفين واحد كمثال.

يوفر Hive لغة استعلام من نوع SQL لأغراض ETL بالإضافة إلى Hadoop نظام الملفات.
توفر لغة استعلام Hive (HiveQL) بيئة من نوع SQL في Hive للعمل مع الجداول وقواعد البيانات والاستعلامات.
ترتبط أنواع مختلفة من البنود بـ Hive لتنفيذ أنواع مختلفة من معالجة البيانات والاستعلام عنها، ويوفر Hive اتصال JDBC لتحسين الاتصالات مع العقد خارج البيئة.
توفر استعلامات Hive الميزات التالية:
- نمذجة البيانات مثل إنشاء قواعد البيانات والجداول وما إلى ذلك.
- وظائف ETL مثل extracمعالجة البيانات وتحويلها وتحميلها في جداول
- ينضم لدمج جداول البيانات المختلفة
- برامج نصية مخصصة خاصة بالمستخدم لسهولة التعليمات البرمجية
- أداة استعلام أسرع على رأس Hadoop
إنشاء جدول في الخلية
قبل البدء بالموضوع الرئيسي لهذا الدرس التعليمي، سنقوم أولاً بإنشاء جدول لاستخدامه كمرجع للأقسام اللاحقة.
في هذا البرنامج التعليمي، سنقوم بإنشاء جدول "employees_guru" بستة أعمدة، كما هو موضح في لقطة الشاشة أدناه.
من لقطة الشاشة أعلاه،
- نقوم بإنشاء جدول "employees_guru" بستة أعمدة تحتوي على قيم مثل المعرف والاسم والعمر والعنوان والراتب والقسم، والتي تنتمي إلى الموظفين الموجودين في المؤسسة "guru".
- في هذه الخطوة، نقوم بتحميل البيانات إلى جدول employees_guru. البيانات التي سنقوم بتحميلها موجودة في ملف Employees.txt.
الترتيب حسب الاستعلام
تتشابه صيغة ORDER BY في HiveQL مع صيغة ORDER BY في SQL لغة.
عبارة ORDER BY هي العبارة التي نستخدمها مع عبارة "SELECT" في استعلامات الخلية لفرز البيانات. يستخدم أعمدة في جداول Hive لفرز قيم الأعمدة المحددة المذكورة باستخدام ORDER BY، ويعرض الاستعلام النتائج بترتيب تصاعدي أو تنازلي لتلك القيم.
إذا كان حقل ORDER BY المذكور عبارة عن سلسلة نصية، فسيتم عرض النتيجة بترتيب أبجدي. في الواجهة الخلفية، يجب تمرير مجموعة النتائج كاملةً إلى مُختزل واحد.
يؤدي هذا المُختزل الوحيد أيضًا إلى جعل عبارة ORDER BY مكلفة على جدول كبير، لذا في الوضع الصارم (hive.mapred.mode=strict) يرفض Hive عبارة ORDER BY التي لا تحتوي على شرط LIMIT.
تُظهر لقطة الشاشة أدناه استعلام ORDER BY والصفوف المصنفة.
من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:
- هذا الاستعلام يُنفذ على جدول "employees_guru" باستخدام عبارة ORDER BY، حيث يكون اسم عمود ORDER BY هو "Department". وبما أن "Department" عبارة عن سلسلة نصية، فإن النتائج تُعرض وفقًا للترتيب الأبجدي.
- هذه هي النتيجة الفعلية للاستعلام. يتم عرض النتائج بناءً على عمود القسم، مثل الإدارة والمالية وما إلى ذلك، بالترتيب.
الاستعلام:
SELECT * FROM employees_guru ORDER BY Department;
تجميع حسب الاستعلام
تستخدم عبارة GROUP BY أعمدة في جداول Hive للتجميعping يتم تحديد قيم الأعمدة المحددة باستخدام GROUP BY، ويقوم الاستعلام بتحديد وعرض النتائج المجمعة حسب تلك القيم.
على سبيل المثال، تُظهر لقطة الشاشة أدناه إجمالي عدد الموظفين الموجودين في كل قسم. هنا لدينا "القسم" كقيمة GROUP BY.
من خلال لقطة الشاشة أعلاه، سنلاحظ ما يلي:
- إنها الاستعلام الذي يتم تنفيذه على جدول "employees_guru" باستخدام عبارة GROUP BY و Department كاسم عمود GROUP BY المحدد.
- يُظهر الناتج هنا اسم القسم وعدد الموظفين في مختلف الأقسام. يتم تجميع جميع الموظفين المنتمين إلى قسم معين وعرضهم، لذا فإن كل صف من النتائج يمثل اسم القسم مع إجمالي عدد موظفيه.
الاستعلام:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
الترتيب حسب
تُستخدم عبارة SORT BY لفرز أسماء أعمدة جداول Hive. يمكننا استخدام DESC للفرز تنازليًا و ASC للفرز تصاعديًا.
تقوم دالة SORT BY بترتيب الصفوف قبل إدخالها إلى المُختزل، مما يضمن الترتيب داخل كل مُختزل بدلاً من الترتيب على مستوى النتيجة بأكملها. ويعتمد الترتيب دائمًا على نوع العمود.
على سبيل المثال، إذا كان نوع العمود رقميًا، فسيتم فرزه بترتيب رقمي، وإذا كان نوع العمود نصيًا، فسيتم فرزه بترتيب معجمي.
تُظهر لقطة الشاشة أدناه استعلام SORT BY باستخدام DESC.
من لقطة الشاشة أعلاه يمكننا ملاحظة ما يلي:
- هذا هو الاستعلام الذي تم تنفيذه على جدول "employees_guru" باستخدام عبارة SORT BY و"Id" كاسم عمود SORT BY المحدد. استخدمنا الكلمة المفتاحية DESC.
- لذا فإن الناتج المعروض يكون بترتيب تنازلي حسب "المعرف".
الاستعلام:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
يتم استخدام CLUSTER BY كبديل لكل من DISTRIBUTE BY و SORT BY في HiveQL.
تُستخدم عبارة CLUSTER BY في الجداول الموجودة في Hive. يستخدم Hive الأعمدة الموجودة في CLUSTER BY لتوزيع الصفوف بين وحدات الاختزال، حيث تُوزّع أعمدة CLUSTER BY على عدة وحدات اختزال. كما تضمن هذه العبارة ترتيب فرز القيم الموجودة في وحدات الاختزال المتعددة.
على سبيل المثال، يُشار إلى عبارة CLUSTER BY في اسم عمود Id في جدول employees_guru. يُنتج تنفيذ هذا الاستعلام نتائج لعدة دوال اختزال في قاعدة البيانات، بينما في واجهة المستخدم، تُعد هذه العبارة بديلاً لعبارتي SORT BY و DISTRIBUTE BY.
هذه هي عملية المعالجة الخلفية عند تنفيذ استعلام باستخدام SORT BY أو GROUP BY أو CLUSTER BY في إطار عمل MapReduce. لذا، إذا أردنا تخزين النتائج في عدة وحدات اختزال، نستخدم CLUSTER BY.
تقبل قواعد CLUSTER BY أسماء الأعمدة فقط، لذلك لا يمكن إرفاق ASC و DESC بها؛ تحتاج النتيجة التنازلية إلى DISTRIBUTE BY مع SORT BY … DESC منفصل.
تُظهر لقطة الشاشة أدناه استعلام CLUSTER BY على المعرف.
من لقطة الشاشة أعلاه نحصل على الملاحظات التالية:
- هذا الاستعلام هو الذي يُنفذ عبارة CLUSTER BY على قيمة حقل Id. هنا سيتم فرز البيانات بناءً على قيم Id.
- يعرض قيم المعرف والاسم الموجودة في employees_guru بترتيب فرز.
الاستعلام:
SELECT Id, Name from employees_guru CLUSTER BY Id;
توزيع بواسطة
تُستخدم عبارة DISTRIBUTE BY في الجداول الموجودة في Hive. يستخدم Hive الأعمدة الموجودة في DISTRIBUTE BY لتوزيع الصفوف بين وحدات الاختزال، بحيث تذهب جميع الصفوف التي تشترك في نفس قيمة عمود DISTRIBUTE BY إلى وحدة الاختزال نفسها.
- يضمن ذلك حصول كل مُخفِّض من المُخفِّضات N على عدم تداخلping مجموعة قيم العمود
- لا يقوم بفرز مخرجات كل مُختزل، ولا يُضمن أن تكون الصفوف المتطابقة متجاورة.
تُظهر لقطة الشاشة أدناه استعلام DISTRIBUTE BY على المعرف.
من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:
- يتم تنفيذ عبارة DISTRIBUTE BY على معرف جدول "employees_guru".
- يُظهر الناتج المعرّف والاسم. في الواجهة الخلفية، تُرسل الصفوف التي تحمل نفس المعرّف إلى نفس المُختزِل.
الاستعلام:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;
من السهل الخلط بين البنود الأربعة، لذا يقارن الجدول أدناه بينها.
| بند | مخفضات | ما يضمنه |
|---|---|---|
| ترتيب حسب | واحد | الترتيب الإجمالي عبر النتيجة الكاملة |
| ترتيب حسب | كثير | الطلب داخل كل مخفض فقط |
| يتم التوزيع بواسطة | كثير | نفس المفتاح يصل إلى نفس المُخفِّض، دون فرز. |
| التجميع حسب | كثير | توزيع حسب بالإضافة إلى فرز حسب، تصاعديًا |






