إنشاء جدول في Hive: داخلي، تعديل وحذف مع أمثلة

⚡ ملخص ذكي

إنشاء وتعديل وإسقاطping تستخدم الجداول في Apache Hive لغة تعريف البيانات (DDL) المألوفة على نمط SQL، ولكن النتيجة تعتمد على ما إذا كان الجدول داخليًا، والذي يملكه Hive، أو خارجيًا، والذي يصف الملفات فقط.

  • 🧱 اصنع جدول: يحدد بيان واحد الأعمدة وتنسيق الصف، وموقع تخزين جدول Hive اختياريًا.
  • 🏷️ تغيير الجدول: يقوم الأمر RENAME بتغيير اسم الجدول، بينما يقوم الأمر ADD COLUMNS أو CHANGE COLUMN بتعديل المخطط دون إعادة تحميل البيانات.
  • 🗑️ حذف الجدول: قطرةping يقوم جدول داخلي بحذف كل من المخطط والبيانات، بينما يقوم أمر الحذف (drop) بحذف الجدول الداخلي.ping يقوم الجدول الخارجي بإزالة البيانات الوصفية فقط.
  • 🔒 الملكية الداخلية مملوكة لـ: يوجد جدول داخلي أو مُدار ضمن دليل المستودع، ويتحكم Hive في دورة حياته الكاملة.
  • 🔗 تمت الإشارة إلى جهة خارجية: يشير جدول خارجي إلى الملفات التي تقرأها أدوات أخرى أيضًا، لذلك تبقى تلك الملفات بعد عملية الحذف.
  • 🔎 تحقق من النوع: يقوم الأمر DESCRIBE FORMATTED بوصف الجداول المُدارة أو الجداول الخارجية، مما يزيل أي تخمين قبل عملية الحذف.

أوامر إنشاء الجداول وتعديلها وحذفها في Hive مع أمثلة

عمليات الجدول مثل الإنشاء والتعديل والحذفping يمكنك الاطلاع على الجداول في Hive من خلال هذا الشرح. يتم عرض كل عملية أولاً كجلسة مباشرة، ثم كعبارة قابلة لإعادة الاستخدام.

كيفية إنشاء جدول وتعديله وحذفه في Hive

في لقطة الشاشة أدناه، نقوم بإنشاء جدول يحتوي على أعمدة ونقوم بتغيير اسم الجدول.

  1. إنشاء جدول guru_sample بعمودين باسمين مثل "empid" و "empname"
  2. عرض الجداول الموجودة في قاعدة بيانات guru99
  3. نموذج المعلم معروض ضمن الجداول
  4. تغيير الجدول "guru_sample" إلى "guru_sampleNew"
  5. مرة أخرى، عند تنفيذ الأمر "show"، سيظهر الاسم الجديد guru_sampleNew

تُنفذ الجلسة أدناه جميع الخطوات الخمس بالترتيب التالي: خلية> يؤدي الأمر prompt، واستدعاءات SHOW TABLES قبل وبعد إعادة التسمية، إلى جعل التأثير مرئيًا.

جلسة Hive تقوم بإنشاء guru_sample وإعادة تسميته إلى guru_sampleNew

قطرةping جدول guru_sampleNew:

يؤدي تنفيذ أمر DROP TABLE واحد إلى إزالة الجدول الذي تمت إعادة تسميته، ويجيب Hive بـ OK.

إسقاط قشرة خلية النحلping جدول guru_sampleNew مع استجابة OK

صيغة إنشاء جدول في Hive والعبارات الشائعة

يستخدم المثال أعلاه أقصر صيغة ممكنة. تقبل العبارة الموثقة عدة بنود اختيارية، ويحدد كل بند منها شيئًا ما، بينما يتركه المثال على وضعه الافتراضي.

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
  [(col_name data_type [COMMENT col_comment], ...)]
  [COMMENT table_comment]
  [PARTITIONED BY (col_name data_type, ...)]
  [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS]
  [ROW FORMAT row_format]
  [STORED AS file_format]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)];
بند ما الذي يتحكم فيه
الخارجية يُنشئ جدولًا خارجيًا، لذا فإن أمر DROP يُبقي ملفات البيانات في مكانها.
مؤقت ينشئ جدولاً بنطاق الجلسة يختفي عند انتهاء الجلسة
إذا لم يكن خارج يقوم هذا الخيار بإخفاء الخطأ عندما يكون هناك جدول بهذا الاسم موجودًا بالفعل
مقسمة بواسطة يقسم الجدول إلى دليل واحد لكل قيمة مفتاح
مُجمّعة حسب … في n من الدلاء يقوم بتقسيم الصفوف إلى عدد ثابت من الملفات
تنسيق الصف / مخزن كـ يحدد الفاصل أو SerDe وتنسيق الملف، مثل TEXTFILE أو ORC أو Parquet
الموقع يشير الجدول إلى مسار محدد في نظام ملفات Hadoop الموزع (HDFS) بدلاً من المسار الافتراضي للمستودع.
تي بي إل بروبرتيز يُرفق أزواج القيم الرئيسية للبيانات الوصفية، بما في ذلك external.table.purge

شكل ذو صلة، إنشاء جدول جديد مشابه للجدول الحاليتقوم هذه العملية بنسخ المخطط دون نسخ أي صفوف. وتُغطى العبارات الهيكلية مثل PARTITIONED BY و CLUSTERED BY بالتفصيل في الدليل الخاص بـ أقسام وخلايا النحل.

أنواع الجدول واستخداماته

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

يتعامل Hive مع نوعين من هياكل الجداول، الجداول الداخلية والخارجية، وذلك اعتمادًا على تحميل وتصميم المخطط في خلية النحلإن هذا الخيار ليس شكليًا: فهو يحدد من يملك ملفات البيانات وماذا يحدث لها عند حذف الجدول.

الجداول الداخلية في هايف

  • الجدول الداخلي مترابط بطبيعته. في هذا النوع من الجداول، يجب أولاً إنشاء الجدول وتحميل البيانات.
  • يمكننا تسمية هذا ببيانات المخطط.
  • عن طريق القطرةping سيتم حذف هذا الجدول، كل من البيانات والمخطط.
  • سيكون الموقع المخزن لهذا الجدول في /user/hive/warehouse.
  • تُسمى الجداول الداخلية أيضًا بالجداول المُدارة، وهي الوحيدة التي تدعم معاملات TRUNCATE و ARCHIVE و MERGE و CONCATENATE و ACID.

متى تختار الجدول الداخلي؟

  • إذا كانت بيانات المعالجة متوفرة في نظام الملفات المحلي
  • إذا أردنا أن تقوم Hive بإدارة دورة الحياة الكاملة للبيانات بما في ذلك الحذف

نموذج مقتطف التعليمات البرمجية للجدول الداخلي

  1. لإنشاء الجدول الداخلي
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. تحميل البيانات في الجدول الداخلي
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. عرض محتوى الجدول
        Hive>select * from guruhive_internaltable;
  4. لإسقاط الجدول الداخلي
        Hive>DROP TABLE guruhive_internaltable;

إذا حذفت جدول guruhive_internaltable، فسيتم حذف بياناته الوصفية وبياناته من Hive. ما لم يتم تحديد أمر PURGE، فسيتم نقل الملفات إلى مجلد المهملات في نظام ملفات Hadoop الموزع (HDFS) بدلاً من حذفها فوراً.

من خلال لقطة الشاشة التالية، يمكننا ملاحظة مخرجات جميع العبارات الأربع في جلسة واحدة، والتي تنتهي بعملية الإسقاط الناجحة.

إنشاء جلسة Hive وتحميلها والاستعلام عنها وحذفهاping guruhive_internaltable

في الكود أعلاه ومن لقطة الشاشة، نقوم بالأمور التالية:

  • إنشاء الجدول الداخلي
  • تحميل البيانات في الجدول الداخلي
  • عرض محتوى الجدول
  • لإسقاط الجدول الداخلي

الجداول الخارجية في هايف

  • الجدول الخارجي ذو طبيعة غير مترابطة. ستكون البيانات متاحة في نظام ملفات Hadoop الموزع (HDFS). سيتم إنشاء الجدول على بيانات HDFS.
  • بمعنى آخر، يمكننا القول إنها تقوم بإنشاء مخطط على البيانات.
  • وقت السقوطping الجدول الذي يتم حذفه هو المخطط فقط، وستظل البيانات متاحة في نظام ملفات Hadoop الموزع (HDFS) كما كانت من قبل.
  • توفر الجداول الخارجية خيارًا لإنشاء مخططات متعددة للبيانات المخزنة في HDFS بدلاً من حذف البيانات في كل مرة يتم فيها تحديث المخطط
  • ابتداءً من Hive 4.0.0، يؤدي تعيين خاصية الجدول external.table.purge إلى القيمة true إلى حذف البيانات بواسطة أمر DROP أيضاً.

متى تختار الجدول الخارجي؟

  • إذا كانت بيانات المعالجة متوفرة في نظام ملفات Hadoop الموزع (HDFS).
  • يكون مفيدًا عند استخدام الملفات خارج الخلية

نموذج مقتطف التعليمات البرمجية للجدول الخارجي

  1. إنشاء جدول خارجي
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. إذا لم نحدد الموقع عند إنشاء الجدول، فيمكننا تحميل البيانات يدويًا
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. عرض محتوى الجدول
      Hive>select * from guruhive_external;
  4. لحذف الجدول الخارجي
      Hive>DROP TABLE guruhive_external;

من خلال لقطة الشاشة التالية، يمكننا ملاحظة الناتج. لاحظ أن عملية السحب والإفلات في النهاية تزيل المخطط فقط، بينما يبقى الملف الموجود ضمن مسار الموقع دون تغيير.

إنشاء جلسة Hive وتحميلها والاستعلام عنها وحذفهاping guruhive_external

في الكود أعلاه، نقوم بالأمور التالية

  • إنشاء الجدول الخارجي
  • تحميل البيانات في الجدول الخارجي
  • عرض محتوى الجدول
  • قطرةping جدول خارجي

الفرق بين الجداول الداخلية والخارجية

الميزات داخلي خارجي
مخطط البيانات على المخطط مخطط على البيانات
مكان التخزين /المستخدم/الخلية/المستودع موقع نظام ملفات Hadoop الموزع (HDFS) مُحدد بواسطة الموقع
إتاحة البيانات ضمن نظام الملفات المحلي ضمن HDFS
تأثير الهبوط يحذف المخطط والبيانات يحذف المخطط فقط، إلا إذا كانت قيمة external.table.purge صحيحة.
دعم وظيفة TRUNCATE عائلات غير معتمد
معاملات حامض عائلات غير معتمد

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

مرجع أوامر ALTER TABLE و DROP TABLE

تُظهر لقطات الشاشة أعلاه عملية إعادة تسمية وحذف فقط. هذه هي العبارات التي يستخدمها الممارس غالبًا في جدول موجود.

ملخص الحساب الهدف
ALTER TABLE table_name RENAME TO new_name; يُعيد تسمية الجدول؛ وبالنسبة للجداول المُدارة، ينقل هذا أيضًا دليل HDFS الخاص بها.
ALTER TABLE table_name ADD COLUMNS (col_name data_type); يُلحق عمودًا واحدًا أو أكثر بنهاية المخطط
ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; إعادة تسمية عمود أو تغيير نوعه
ALTER TABLE table_name REPLACE COLUMNS (…); يستبدل قائمة الأعمدة بأكملها بقائمة جديدة
ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); يحوّل الجدول المُدار إلى جدول خارجي، و FALSE يعكسه.
حذف الجدول [إن وجد] اسم_الجدول [تنظيف]؛ يزيل الجدول؛ يتجاهل أمر PURG مجلد المهملات، لذا لا يمكن استعادة البيانات.
حذف جميع البيانات من الجدول [اسم_الجدول]؛ يزيل جميع الصفوف مع الحفاظ على المخطط؛ للجداول المُدارة فقط

هناك إجراءان وقائيان جديران بالاهتمام يجب تضمينهما في أي برنامج نصي. الأول هو "IF EXISTS" لمنع فشل عملية الحذف على جدول تم حذفه بالفعل، والثاني هو "DESCRIBE FORMATTED" للتأكد مما إذا كان الجدول المستهدف هو MANAGED_TABLE أو EXTERNAL_TABLE قبل تنفيذ عملية الحذف.

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

شغّل الأمر DESCRIBE FORMATTED table_name. سيُظهر صف نوع الجدول إما MANAGED_TABLE أو EXTERNAL_TABLE. يُعد التحقق قبل الحذف الطريقة الأقل تكلفة لتجنب حذف البيانات التي لا تزال عمليات أخرى تقرأها.

نعم. الأمر ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') يُغيّر نوع البيانات في قاعدة البيانات الوصفية، بينما يُعيد الأمر FALSE النوع إلى وضعه الأصلي. تبقى ملفات البيانات في مكانها، لذا لا حاجة لإعادة تحميلها.

عادةً لا، يتم حذف بيانات قاعدة البيانات الوصفية فقط. ولكن بدءًا من Hive 4.0.0، يتم حذف بيانات الجدول الخارجي الذي يحمل الخاصية external.table.purge مضبوطة على true بواسطة أمر DROP أيضًا، لذا تحقق من الخصائص أولًا.

يُنتج أمر CREATE TABLE العادي الآن جدول ORC مُدارًا ومعاملاتيًا افتراضيًا بدلًا من جدول نصي بسيط. إضافة الكلمة المفتاحية EXTERNAL هي ما يُبقي على السلوك القديم غير المتوافق مع خصائص ACID في مجموعة Hive 3.

يحذف الأمر TRUNCATE جميع الصفوف مع الحفاظ على بنية الجدول، وهو يعمل فقط على الجداول المُدارة. أما الأمر DROP فيحذف البنية أيضًا. يُعدّ TRUNCATE الخيار الأكثر أمانًا عندما يجب أن تبقى بنية الجدول محفوظة بعد إعادة تحميله.

لا. يقوم Hive بتحويل المعرّفات إلى أحرف صغيرة في قاعدة البيانات الوصفية، لذا فإن GURU_SAMPLE و guru_sample يشيران إلى الجدول نفسه. تظل قيم السلاسل النصية داخل البيانات حساسة لحالة الأحرف، ولهذا السبب قد لا تزال مقارنة WHERE تُغفل بعض الصفوف.

نعم. تقوم ميزات التعلم الآلي في أدوات الفهرسة بتحليل عدد القيم في الأعمدة، ومعدلات القيم الفارغة، وأنماط الاستعلام، ثم تقترح أنواع البيانات، وتنسيقات الملفات، ومفاتيح التقسيم. تعامل مع المخرجات كمسودة، لأن النموذج لا يمكنه رؤية أحمال العمل المخطط لها.

يقوم Copilot بإكمال عبارات CREATE و ALTER و DROP من تعليق قصير، ويمكن للمساعدين الآليين إنتاج نص برمجي كامل للهجرة. Revانظر إلى الكلمة المفتاحية EXTERNAL وأي خيار PURGE، لأن التخمين الخاطئ هناك يحذف البيانات الحقيقية.

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