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

عمليات الجدول مثل الإنشاء والتعديل والحذفping يمكنك الاطلاع على الجداول في Hive من خلال هذا الشرح. يتم عرض كل عملية أولاً كجلسة مباشرة، ثم كعبارة قابلة لإعادة الاستخدام.
كيفية إنشاء جدول وتعديله وحذفه في Hive
في لقطة الشاشة أدناه، نقوم بإنشاء جدول يحتوي على أعمدة ونقوم بتغيير اسم الجدول.
- إنشاء جدول guru_sample بعمودين باسمين مثل "empid" و "empname"
- عرض الجداول الموجودة في قاعدة بيانات guru99
- نموذج المعلم معروض ضمن الجداول
- تغيير الجدول "guru_sample" إلى "guru_sampleNew"
- مرة أخرى، عند تنفيذ الأمر "show"، سيظهر الاسم الجديد guru_sampleNew
تُنفذ الجلسة أدناه جميع الخطوات الخمس بالترتيب التالي: خلية> يؤدي الأمر prompt، واستدعاءات SHOW TABLES قبل وبعد إعادة التسمية، إلى جعل التأثير مرئيًا.
قطرةping جدول guru_sampleNew:
يؤدي تنفيذ أمر DROP TABLE واحد إلى إزالة الجدول الذي تمت إعادة تسميته، ويجيب Hive بـ 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 بإدارة دورة الحياة الكاملة للبيانات بما في ذلك الحذف
نموذج مقتطف التعليمات البرمجية للجدول الداخلي
- لإنشاء الجدول الداخلي
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- تحميل البيانات في الجدول الداخلي
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- عرض محتوى الجدول
Hive>select * from guruhive_internaltable;
- لإسقاط الجدول الداخلي
Hive>DROP TABLE guruhive_internaltable;
إذا حذفت جدول guruhive_internaltable، فسيتم حذف بياناته الوصفية وبياناته من Hive. ما لم يتم تحديد أمر PURGE، فسيتم نقل الملفات إلى مجلد المهملات في نظام ملفات Hadoop الموزع (HDFS) بدلاً من حذفها فوراً.
من خلال لقطة الشاشة التالية، يمكننا ملاحظة مخرجات جميع العبارات الأربع في جلسة واحدة، والتي تنتهي بعملية الإسقاط الناجحة.
في الكود أعلاه ومن لقطة الشاشة، نقوم بالأمور التالية:
- إنشاء الجدول الداخلي
- تحميل البيانات في الجدول الداخلي
- عرض محتوى الجدول
- لإسقاط الجدول الداخلي
الجداول الخارجية في هايف
- الجدول الخارجي ذو طبيعة غير مترابطة. ستكون البيانات متاحة في نظام ملفات Hadoop الموزع (HDFS). سيتم إنشاء الجدول على بيانات HDFS.
- بمعنى آخر، يمكننا القول إنها تقوم بإنشاء مخطط على البيانات.
- وقت السقوطping الجدول الذي يتم حذفه هو المخطط فقط، وستظل البيانات متاحة في نظام ملفات Hadoop الموزع (HDFS) كما كانت من قبل.
- توفر الجداول الخارجية خيارًا لإنشاء مخططات متعددة للبيانات المخزنة في HDFS بدلاً من حذف البيانات في كل مرة يتم فيها تحديث المخطط
- ابتداءً من Hive 4.0.0، يؤدي تعيين خاصية الجدول external.table.purge إلى القيمة true إلى حذف البيانات بواسطة أمر DROP أيضاً.
متى تختار الجدول الخارجي؟
- إذا كانت بيانات المعالجة متوفرة في نظام ملفات Hadoop الموزع (HDFS).
- يكون مفيدًا عند استخدام الملفات خارج الخلية
نموذج مقتطف التعليمات البرمجية للجدول الخارجي
- إنشاء جدول خارجي
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- إذا لم نحدد الموقع عند إنشاء الجدول، فيمكننا تحميل البيانات يدويًا
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- عرض محتوى الجدول
Hive>select * from guruhive_external;
- لحذف الجدول الخارجي
Hive>DROP TABLE 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 قبل تنفيذ عملية الحذف.




