عرض Hive والفهرسة: إنشاء باستخدام الأمثلة

⚡ ملخص ذكي

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

  • 👁️ الرأي منطقي: لا يخزن العرض سوى عبارة SELECT الخاصة به في مخزن البيانات الوصفية، لذلك فهو لا يشغل أي مساحة قرص خاصة به.
  • 🔒 للقراءة فقط حسب التصميم: لا يمكن أن يكون العرض هدفًا لعمليات التحميل أو الإدراج أو التعديل، لأن Hive يقوم بتقييمه من جديد في كل استعلام.
  • 📍 يشير المؤشر إلى البيانات: الفهرس هو مؤشر إلى قيمة عمود يسمح لـ Hive بقراءة جزء من الملف بدلاً من الجدول بأكمله.
  • 🗂️ اثنان من المشرفين: يناسب الفهرسة المضغوطة الأعمدة ذات العدد الكبير من القيم، بينما يناسب فهرسة الخرائط النقطية الأعمدة ذات القيم المميزة القليلة.
  • 🔄 إعادة بناء يدوية: لا يتم تحديث الفهرس تلقائيًا أبدًا، لذلك يجب تشغيل ALTER INDEX REBUILD بعد تغيير الجدول الأساسي.
  • 🚫 تمت إزالته في Hive 3.0: تم إسقاط الفهرسة في HIVE-18448، وحلت محلها طرق العرض المادية، وتخزين ORC أو Parquet والتقسيم.

شرح طرق العرض والفهارس في Hive مع أمثلة

ما هو العرض؟

تُشبه طرق العرض الجداول، ويتم إنشاؤها بناءً على المتطلبات. طريقة العرض عبارة عن كائن منطقي بحت لا يحتوي على مساحة تخزين خاصة به: يحتفظ 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 لا يزال الفهرس صالحًا، ولكن العمل الجديد يُفضل أن يتم تنفيذه باستخدام أحد الخيارات المذكورة أعلاه.

الأسئلة الشائعة

يؤدي الأمر DROP VIEW view_name إلى حذف العرض، بينما يؤدي الأمر ALTER VIEW view_name RENAME TO new_name إلى تغيير اسمه. ولأن العرض لا يحتوي على أي بيانات، فإن الأمر DROP VIEW يُلغي هذه الخاصية.ping لا يتم تعديل الجدول الأساسي مطلقًا؛ بل يختفي فقط إدخال مخزن البيانات الوصفية.

يخزن العرض المادي نتيجة الاستعلام المحسوبة مسبقًا كبيانات حقيقية، لذا فهو يستهلك مساحة تخزين ويتطلب إعادة بناء. أما العرض العادي فيخزن نص الاستعلام فقط، ويُعاد حسابه عند كل مرجع.

لا. يحتفظ مخزن البيانات الوصفية بعبارة SELECT وقائمة الأعمدة المُحلَّلة، لا أكثر. كل مرجع يُعيد تشغيل الاستعلام الأساسي، ولهذا السبب يبقى عرض البيانات المُجمَّعة ببطء بطيئًا.

في Hive 0.12.0 والإصدارات الأقدم، كان اسم الفهرس حساسًا لحالة الأحرف في أوامر CREATE INDEX وDROP INDEX، بينما كان اسم الفهرس يتطلب أحرفًا صغيرة. أما في Hive 0.13.0، فقد أصبح اسم الفهرس غير حساس لحالة الأحرف في جميع الأوامر.

نعم، على أي مجموعة حديثة. تعمل عملية تقليم الأقسام على إزالة الدلائل بأكملها قبل بدء الفحص، كما أن التجميع يضيّق نطاق الربط أو العينة إلى ملفات محددة، وهو ما يتفوق عادةً على ما يمكن أن يقدمه جدول الفهرس.

تقوم أدوات التعلم الآلي بتحليل سجلات الاستعلامات، وترتيب أعمدة المسند حسب الانتقائية والتكرار، واقتراح المواضع التي قد يكون فيها استخدام عرض مادي أو مخطط تقسيم مفيدًا. تحقق من صحة كل اقتراح باستخدام خطة EXPLAIN قبل تطبيقه.

يُنتج هذا الأمر عبارات CREATE VIEW بشكل موثوق من تعليق قصير. تحقق من أي شيء خاص بالإصدار، لأنه لا يزال يُصدر صيغة CREATE INDEX التي يرفضها نظام Hive 3.0 أو الإصدارات الأحدث رفضًا قاطعًا.

الفهرس عبارة عن جدول منفصل من المؤشرات، ولا يقوم Hive بتحديثه عند تغيير الجدول الأساسي. وبدون إعادة بناء، تصبح المؤشرات قديمة، لذا يتجاهل المُحسِّن الفهرس أو يُعيد نتائج مطابقة قديمة.

تلخيص هذه التدوينة بـ: