استعلامات الخلية: الترتيب حسب، التجميع حسب، التوزيع حسب، Cluster بالأمثلة
توفر Hive لغة استعلام من نوع SQL لغرض ETL في الأعلى Hadoop نظام الملفات.
توفر لغة Hive Query (HiveQL) بيئة من نوع SQL في Hive للعمل مع الجداول وقواعد البيانات والاستعلامات.
يمكن أن يكون لدينا نوع مختلف من البنود المرتبطة بالخلية لإجراء عمليات معالجة واستعلام للبيانات من نوع مختلف. لتحسين الاتصال مع العقد المختلفة خارج البيئة. توفر HIVE اتصال JDBC أيضًا.
توفر استعلامات Hive الميزات التالية:
- نمذجة البيانات مثل إنشاء قواعد البيانات والجداول وغيرها.
- وظائف ETL مثل الاستخراج والتحويل وتحميل البيانات إلى الجداول
- ينضم لدمج جداول البيانات المختلفة
- برامج نصية مخصصة خاصة بالمستخدم لسهولة التعليمات البرمجية
- أداة استعلام أسرع على رأس Hadoop
إنشاء جدول في الخلية
قبل البدء بموضوعنا الرئيسي لهذا البرنامج التعليمي، سنقوم أولاً بإنشاء جدول لاستخدامه كمراجع للبرنامج التعليمي التالي.
هنا في هذا البرنامج التعليمي، سنقوم بإنشاء جدول "employees_guru" المكون من 6 أعمدة.
من لقطة الشاشة أعلاه،
- نقوم بإنشاء جدول "employees_guru" بقيم 6 أعمدة مثل المعرف، والاسم، والعمر، والعنوان، والراتب، والقسم، الذي ينتمي إلى الموظفين الموجودين في المؤسسة "المعلم".
- هنا في هذه الخطوة نقوم بتحميل البيانات إلى جدول users_guru. سيتم وضع البيانات التي سنقوم بتحميلها ضمن ملف Staffs.txt
الترتيب حسب الاستعلام
يشبه بناء جملة ORDER BY في HiveQL بناء جملة ORDER BY في SQL لغة.
الترتيب حسب هو البند الذي نستخدمه مع عبارة "SELECT" في استعلامات الخليةمما يساعد على فرز البيانات. استخدم عبارة "الترتيب حسب" الأعمدة الموجودة في جداول الخلية لفرز قيم أعمدة معينة مذكورة مع "الترتيب حسب". مهما كان اسم العمود، فإننا نحدد الترتيب حسب الجملة، وسيقوم الاستعلام بتحديد وعرض النتائج بترتيب تصاعدي أو تنازلي لقيم العمود المعين.
إذا كان الترتيب المذكور حسب الحقل عبارة عن سلسلة، فسيتم عرض النتيجة بالترتيب المعجمي. في النهاية الخلفية، يجب أن يتم تمريره إلى مخفض واحد.
من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي
- إنه الاستعلام الذي يتم تنفيذه على جدول "employees_guru" مع عبارة ORDER BY مع القسم كما هو محدد باسم عمود ORDER BY. "القسم" هو سلسلة لذا فإنه سيعرض النتائج بناءً على الترتيب المعجمي.
- هذا هو الناتج الفعلي للاستعلام. إذا لاحظناه بشكل صحيح، يمكننا أن نرى أنه يحصل على نتائج معروضة بناءً على عمود القسم مثل ADMIN وFinance وما إلى ذلك في ترتيب الاستعلام الذي سيتم تنفيذه.
الاستعلام:
SELECT * FROM employees_guru ORDER BY Department;
تجميع حسب الاستعلام
تجميع حسب العبارة استخدم الأعمدة الموجودة في جداول الخلية لتجميع قيم أعمدة معينة مذكورة مع المجموعة حسب. مهما كان اسم العمود الذي نحدده عبارة "groupby"، فسيقوم الاستعلام بتحديد النتائج وعرضها عن طريق تجميع قيم العمود المعينة.
على سبيل المثال، في لقطة الشاشة أدناه، ستعرض العدد الإجمالي للموظفين الموجودين في كل قسم. هنا لدينا "القسم" كمجموعة حسب القيمة.
من لقطة الشاشة أعلاه، سنلاحظ ما يلي
- إنه الاستعلام الذي يتم تنفيذه في جدول "employees_guru" باستخدام عبارة GROUP BY مع القسم كما هو محدد باسم عمود GROUP BY.
- النتيجة المعروضة هنا هي اسم القسم وعدد الموظفين في أقسام مختلفة. هنا يتم تجميع جميع الموظفين الذين ينتمون إلى قسم معين وعرضهم في النتائج. وبالتالي تكون النتيجة هي اسم القسم مع العدد الإجمالي للموظفين الموجودين في كل قسم.
الاستعلام:
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
الترتيب حسب
يتم تنفيذ الترتيب حسب الجملة على أسماء الأعمدة في جداول الخلية لفرز المخرجات. يمكننا أن نذكر DESC لفرز الترتيب تنازليًا ونذكر ASC للترتيب التصاعدي للصنف.
في هذا الفرز، سيتم فرز الصفوف قبل التغذية إلى المخفض. يعتمد الفرز دائمًا على أنواع الأعمدة.
على سبيل المثال، إذا كانت أنواع الأعمدة رقمية، فسيتم فرزها بترتيب رقمي، وإذا كانت أنواع الأعمدة عبارة عن سلسلة، فسيتم فرزها بترتيب معجمي.
من لقطة الشاشة أعلاه يمكننا ملاحظة ما يلي:
- إنه الاستعلام الذي يتم تنفيذه على الجدول "employees_guru" باستخدام عبارة SORT BY مع "id" كما هو محدد لاسم العمود SORT BY. استخدمنا الكلمة الرئيسية DESC.
- وبالتالي فإن الناتج المعروض سيكون بالترتيب التنازلي لـ "المعرف".
الاستعلام:
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster بواسطة يستخدم كبديل لكل من عبارات Distribute BY وSort BY في Hive-QL.
Cluster عبارة BY المستخدمة في الجداول الموجودة في الخلية. تستخدم الخلية الأعمدة الموجودة في Cluster بواسطة لتوزيع الصفوف بين المخفضات. Cluster سوف تذهب الأعمدة BY إلى المخفضات المتعددة.
- إنه يضمن ترتيب ترتيب القيم الموجودة في مخفضات متعددة
على سبيل المثال، Cluster حسب البند المذكور في اسم عمود المعرف في جدول الموظفين_غورو. سيعطي الإخراج عند تنفيذ هذا الاستعلام نتائج لمخفضات متعددة في النهاية الخلفية. ولكن كواجهة أمامية، فهي عبارة عن بند بديل لكل من Sort By وDistribute By.
هذه في الواقع عملية خلفية عندما ننفذ استعلامًا باستخدام الفرز حسب والتجميع حسب والتجميع حسب إطار عمل Map Reduce. لذا إذا أردنا تخزين النتائج في عدة مختزلات، فسنستخدم Cluster من قبل.
من لقطة الشاشة أعلاه نحصل على الملاحظات التالية:
- هذا هو الاستعلام الذي يقوم بتنفيذ عبارة CLUSTER BY على قيمة حقل Id. هنا سيتم الحصول على فرز لقيم Id.
- يعرض المعرف والأسماء الموجودة في فرز guru_employees مرتبة حسب
الاستعلام:
SELECT Id, Name from employees_guru CLUSTER BY Id;
توزيع بواسطة
جملة التوزيع BY المستخدمة في الجداول الموجودة في الخلية. تستخدم الخلية الأعمدة الموجودة في التوزيع حسب لتوزيع الصفوف بين المخفضات. ستنتقل جميع أعمدة Distribute BY إلى نفس المخفض.
- إنه يضمن حصول كل من مخفضات N على نطاقات غير متداخلة من الأعمدة
- لا يقوم بفرز مخرجات كل مخفض
من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي
- التوزيع حسب البند الذي يتم تنفيذه على معرف جدول "empoloyees_guru".
- يظهر الإخراج المعرف والاسم. في الجزء الخلفي، سيتم الانتقال إلى نفس المُختزل
الاستعلام:
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;