عرض Hive والفهرسة: إنشاء باستخدام الأمثلة
⚡ ملخص ذكي
تُعتبر طرق العرض في Hive عبارة عن استعلامات محفوظة تعمل مثل الجداول للقراءة فقط، بينما تكون الفهارس عبارة عن مؤشرات إلى عمود تعمل على تسريع عمليات البحث، ويتم إنشاء كليهما باستخدام عبارات HiveQL قصيرة موضحة هنا.

ما هو العرض؟
تُشبه طرق العرض الجداول، ويتم إنشاؤها بناءً على المتطلبات. طريقة العرض عبارة عن كائن منطقي بحت لا يحتوي على مساحة تخزين خاصة به: يحتفظ Hive فقط بنص الاستعلام في مخزن البيانات الوصفية ويُقيّمه في كل مرة تتم فيها الإشارة إلى طريقة العرض.
- يمكننا حفظ أي بيانات لمجموعة النتائج كطريقة عرض في الخلية
- طريقة الاستخدام مشابهة لطرق العرض المستخدمة في SQL
- العرض للقراءة فقط، لذا لا يمكن أن يكون هدفًا لعبارة LOAD أو INSERT أو ALTER التي تكتب البيانات
إنشاء العرض:
بناء الجملة:
Create VIEW <VIEWNAME> AS SELECT
يقبل النموذج الموثق بالكامل أيضًا عبارة IF NOT EXISTS وقائمة أعمدة اختيارية، وهو أمر مفيد عندما تحتوي قائمة SELECT على تعبيرات بدلاً من أسماء أعمدة عادية.
على سبيل المثال:
Hive>Create VIEW Sample_View AS SELECT * FROM employees WHERE salary>25000
في هذا المثال، نقوم بإنشاء العرض Sample_View، الذي يعرض جميع قيم الصفوف التي تحتوي على حقل راتب أكبر من 25000. يوجد عامل التصفية داخل العرض، لذا فإن أي استعلام يختار من Sample_View سيرى تلك الصفوف فقط.
ما هو الفهرس؟
الفهارس هي مؤشرات إلى اسم عمود معين في جدول. يهدف الفهرس إلى تحسين سرعة البحث: فبدونه، لن تتمكن الاستعلامات التي تحتوي على شرط مثل حيث يكون العمود الأول في الجدول 1 يساوي 10 يقوم بتحميل الجدول بأكمله أو القسم ويعالج كل صف، بينما يسمح الفهرس الموجود على العمود 1 لـ Hive بقراءة جزء فقط من الملف.
- يجب على المستخدم تحديد الفهرس يدويًا
- أينما نقوم بإنشاء فهرس، فهذا يعني أننا نقوم بإنشاء مؤشر إلى اسم عمود معين في الجدول.
- يتم تخزين أي تغييرات تُجرى على العمود الموجود في الجدول باستخدام قيمة الفهرس التي تم إنشاؤها على اسم العمود.
هذا التسريع ليس مجانيًا. فبناء الفهرس يتطلب معالجة إضافية، كما أن الفهرس نفسه يشغل مساحة على القرص يجب الاحتفاظ بها بجانب الجدول.
بناء الجملة:
Create INDEX <INDEX_NAME> ON TABLE <TABLE_NAME(column names)>
على سبيل المثال:
Create INDEX sample_Index ON TABLE guruhive_internaltable(id)
هنا نقوم بإنشاء فهرس على جدول guruhive_internaltable لعمود اسم المعرّف. تجدر الإشارة إلى أن العبارة الكاملة في إصدار لا يزال يدعم الفهرسة تتطلب أيضًا عبارة معالجة الفهرس، والتي يوضحها القسم التالي بالتفصيل.
الفرق بين العرض والفهرس في هايف
غالبًا ما تُستخدم طرق العرض والفهارس معًا لأن كليهما يعتمد على جدول موجود، لكنهما يحلان مشكلات مختلفة. تُغير طريقة العرض ما يراه الاستعلام، بينما يُغير الفهرس سرعة عثور Hive عليه. يُقارن الجدول أدناه بينهما.
| البعد | عرض الطلب | فهرس |
|---|---|---|
| ما يخزنه | عبارة SELECT فقط، في مخزن البيانات الوصفية | جدول فهرس منفصل يحتوي على مؤشرات إلى البيانات |
| الهدف | تبسيط أو تقييد ما تُرجعه الاستعلامات | قلل كمية البيانات التي يتم فحصها لشرط معين |
| تكلفة القرص | بدون سلوفان | مساحة تخزين إضافية بالإضافة إلى إعادة بناء البيانات بعد تغييرات البيانات |
| الوصول للكتابة | للقراءة فقط | لا يتم الاستعلام عنها مباشرة؛ يستخدمها مُحسِّن الاستعلام. |
| الحالة الحالية | بدعم كامل | تمت إزالته في Hive 3.0 |
من الناحية العملية، يتم إنشاء عرض من أجل سهولة القراءة والتحكم في الوصول، ويتم إنشاء فهرس فقط لتحسين الأداء على عمود محدد.
أنواع الفهرسة في هايف مع بناء الجملة
تضمنت الإصدارات حتى Hive 2.x معالجين للفهرسة، ويتم تحديد اسم المعالج في عبارة AS الإلزامية. أُضيفت الفهرسة المضغوطة في Hive 0.7.0، والفهرسة النقطية في Hive 0.8.0.
- فهرس مختصر: يخزن القيمة مع عنوان كتلة HDFS التي تحتويها، بدلاً من تسجيل موقع كل قيمة على حدة. وهو مناسب للأعمدة التي تحتوي على العديد من القيم المختلفة.
- فهرس الصور النقطية: يخزن خريطة نقطية لكل قيمة مميزة، وهو النهج المعتاد لعمود يحتوي على عدد قليل فقط من القيم المميزة، مثل علامة الحالة أو الجنس.
يتم إنشاء فهرس مضغوط وإدراجه وحذفه على النحو التالي:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT'; SHOW INDEX ON table01; DROP INDEX table01_index ON table01;
يُسجّل خيار WITH DEFERRED REBUILD الفهرس دون تعبئته، لذا يمكن جدولة عملية البناء بشكل منفصل باستخدام ALTER INDEX. ويتم إنشاء فهرس bitmap بنفس الطريقة، ولكن باسم معالج مختلف.
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD; ALTER INDEX table03_index ON table03 REBUILD; SHOW FORMATTED INDEX ON table03; DROP INDEX table03_index ON table03;
لا يتم تحديث الفهرس تلقائيًا. كلما استقبل الجدول الأساسي بيانات جديدة، يجب إعادة تشغيل الأمر ALTER INDEX … REBUILD، وفي حالة الجداول المقسمة، يمكن حصر عملية إعادة البناء في قسم واحد فقط.
لماذا تمت إزالة الفهرسة في Hive 3.0
أُزيلت خاصية الفهرسة من Hive في الإصدار 3.0 تحت رقم HIVE-18448، لذا لم تعد أوامر CREATE INDEX وSHOW INDEX وDROP INDEX موجودة في المجموعة الحالية. نادرًا ما كانت هذه الخاصية تستحق تكلفة إعادة بناء النظام بعد تطور التخزين العمودي ومُحسِّن التكلفة. ثلاثة بدائل تُغطي نفس الغرض.
- وجهات نظر مادية: تم تقديمها في Hive 3.0.0، رؤية محققة يقوم بتخزين النتيجة المحسوبة مسبقًا للاستعلام، ويقوم المحسن بإعادة كتابة الاستعلامات الواردة بناءً عليها تلقائيًا.
- تنسيقات الملفات العمودية: يحتوي كل من ORC و Parquet على فهارس خفيفة الوزن وإحصائيات الحد الأدنى/الأقصى الخاصة بهما، بحيث يمكن للقارئ تخطي الشرائح أو الكتل أو الملفات بأكملها دون أي فهرس محدد من قبل المستخدم.
- الأقسام والمجموعات: التقسيم والتقسيم إلى مجموعات حذف البيانات على مستوى الدليل والملف، وهو ما يؤدي عادةً إلى إزالة مدخلات أكثر بكثير مما كان يفعله الفهرس.
في Hive 2.x لا يزال الفهرس صالحًا، ولكن العمل الجديد يُفضل أن يتم تنفيذه باستخدام أحد الخيارات المذكورة أعلاه.
