أنواع بيانات الخلية: كيفية إنشاء قواعد البيانات وإسقاطها في الخلية
⚡ ملخص ذكي
تحدد أنواع بيانات Hive ما يمكن أن يحتويه كل عمود من أعمدة الجدول، وتقوم أوامر CREATE DATABASE و DROP DATABASE بإنشاء أو إزالة مساحة الاسم التي توجد فيها تلك الجداول داخل مخزن بيانات Hive.
تُعدّ أنواع البيانات عناصر بالغة الأهمية في لغة استعلام Hive ونمذجة البيانات. ولتحديد أنواع أعمدة الجدول، يجب علينا معرفة أنواع البيانات وكيفية استخدامها.
فيما يلي لمحة موجزة عن بعض أنواع البيانات الموجودة في Hive:
- أنواع رقمية
- أنواع السلاسل
- أنواع التاريخ/الوقت
- أنواع معقدة
أنواع البيانات في الخلية
يتم تعريف كل عمود في Hive بأحد الأنواع التالية. تأتي الأنواع الأساسية أولاً، تليها الأنواع المعقدة التي تحتوي على أكثر من قيمة واحدة في عمود واحد.
أنواع البيانات الرقمية للخلية
تتراوح الأعمدة الرقمية من بايت واحد إلى ثمانية بايتات، لذا فإن اختيار أصغر نوع يناسب القيم يحافظ على انخفاض كل من تكلفة التخزين والمسح الضوئي.
| النوع | تخصيص الذاكرة |
|---|---|
| صغيرة | عدد صحيح بتوقيع 1 بايت (-128 إلى 127) |
| SMALLINT | عدد صحيح بتوقيع 2 بايت (-32,768 إلى 32,767) |
| INT | عدد صحيح بتوقيع 4 بايت (-2,147,483,648 إلى 2,147,483,647) |
| كبير | عدد صحيح بتوقيع 8 بايت (-9,223,372,036,854,775,808 إلى 9,223,372,036,854,775,807) |
| تطفو | عدد عشري أحادي الدقة مكون من 4 بايت |
| DOUBLE | عدد عشري مزدوج الدقة مكون من 8 بايت |
| عدد عشري | يمكننا تحديد الدقة والمقياس في هذا النوع، كـ DECIMAL(precision, scale). عند حذفهما، يستخدم Hive النوع DECIMAL(10,0). |
أنواع بيانات سلسلة الخلية
تأتي أعمدة الأحرف بثلاثة أشكال، والفرق يكمن فيما إذا كان Hive يفرض طولًا محددًا أم لا.
| النوع | الطول |
|---|---|
| CHAR | طول ثابت، يصل إلى 255 حرفًا. يتم إضافة مسافات إلى القيم الأقصر. |
| فاركار | من 1 إلى 65,535 حرفًا. يتم اقتطاع القيمة الأطول تلقائيًا. |
| STRING | يمكننا تحديد الطول هنا (بدون حد) |
أنواع بيانات التاريخ/الوقت في الخلية
يتم تخزين الأعمدة الزمنية بدون أي إزاحة للمنطقة الزمنية، وهو أمر يجدر تذكره قبل مقارنة القيم المكتوبة بواسطة مجموعات مختلفة.
| النوع | الأستعمال |
|---|---|
| الطابع الزمني | يدعم التقليدية يونكس الطابع الزمني بدقة النانو ثانية الاختيارية |
| التاريخ | وهو بتنسيق YYYY-MM-DD. يتراوح نطاق القيم المدعومة لنوع التاريخ من 0000-01-01 إلى 9999-12-31، وذلك اعتمادًا على الدعم المقدم من قبل العنصر الأساسي Java التاريخ المعتاد |
أنواع البيانات المتنوعة في هايف
يوجد نوعان أساسيان آخران خارج عائلات الأرقام والسلاسل والتواريخ، لكنهما يظهران بانتظام في المخططات الحقيقية.
| النوع | الأستعمال |
|---|---|
| BOOLEAN | يخزن القيمة صحيحة أو خاطئة |
| الثنائية | يخزن مصفوفة من البايتات، مما يبقي المحتوى الخام خارج عمود السلسلة النصية. |
أنواع البيانات المعقدة في Hive
تتضمن الأنواع المعقدة القيم داخل عمود واحد، مما يزيل عملية الربط الإضافية التي يحتاجها التصميم العلائقي.
| النوع | الأستعمال |
|---|---|
| المصفوفات | مجموعة مصفوفة القيم السالبة والتعبيرات غير الثابتة غير مسموح بها |
| برنامج Maps | خريطة القيم السالبة والتعبيرات غير الثابتة غير مسموح بها |
| الهياكل | هيكل |
| الاتحاد | نوع الاتحاد |
مثال على أنواع البيانات المعقدة في Hive
يوضح الجدول أعلاه صيغة الإعلان. أما العبارة أدناه فتضع ثلاثة من الأنواع المعقدة في جدول واحد بحيث يمكن رؤية بنود الفاصلة وصيغة الوصول معًا.
CREATE TABLE employees ( name STRING, skills ARRAY<STRING>, deductions MAP<STRING, FLOAT>, address STRUCT<street:STRING, city:STRING, pin:INT> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n' STORED AS TEXTFILE;
يلزم هنا استخدام ثلاثة فواصل منفصلة: فاصل بين الأعمدة، وفاصل بين عناصر المصفوفة أو البنية، وفاصل بين مفتاح الخريطة وقيمته. بمجرد إنشاء الجدول، تتم قراءة كل عمود معقد باستخدام دالة الوصول الخاصة به.
SELECT name, skills[0], deductions['tax'], address.city FROM employees;
يلخص الجدول أدناه أي أداة وصول تنتمي إلى أي نوع.
| النوع | كيفية قراءة القيمة |
|---|---|
| مجموعة مصفوفة | مؤشر يبدأ من الصفر، مثل المهارات[0] |
| MAP | البحث عن المفتاح بين قوسين مربعين، مثل deductions['tax'] |
| الهيكل | استخدام النقطة في اسم الحقل، مثل address.city |
| نوع الاتحاد | نادرًا ما يُستخدم، لأن دعم الاستعلامات له ظل غير مكتمل |
قد تكون الأنواع المعقدة متداخلة، لذا ARRAY > هو تعريف عمود صحيح. بمجرد تحديد تخطيط الأعمدة، يتم إنشاء الجداول نفسها باستخدام العبارات الموضحة في إنشاء وتعديل وحذف الجداول في Hive.
كيفية إنشاء وإسقاط قواعد البيانات في الخلية
قاعدة البيانات في Hive هي ببساطة مساحة اسم تجمع الجداول، لذا فهي أول عنصر يتم إنشاؤه قبل البدء في أي عملية متعلقة بالجداول. فيما يلي خطوات إنشاء وحذف قواعد البيانات في Hive.
الخطوة 1) إنشاء قاعدة بيانات في Hive
لإنشاء قاعدة بيانات في واجهة Hive، يجب علينا استخدام الأمر كما هو موضح في الصيغة أدناه:
بناء الجملة:
Create database <DatabaseName>
مثال: إنشاء قاعدة بيانات "guru99"
تُظهر لقطة الشاشة أدناه عبارة الإنشاء متبوعة بأمر عرض يسرد كل قاعدة بيانات على المجموعة.
من خلال لقطة الشاشة أعلاه، نلاحظ أننا نقوم بأمرين:
- إنشاء قاعدة بيانات "guru99" في الخلية
- عرض قواعد البيانات الموجودة باستخدام الأمر "show"
في نفس الشاشة، يتم عرض قاعدة البيانات "guru99" في النهاية عند تنفيذ أمر العرض، مما يعني أن قاعدة البيانات "guru99" قد تم إنشاؤها بنجاح.
الخطوة الثانية: حذف قاعدة البيانات في هايف
للقطرping في قاعدة البيانات في واجهة Hive، يجب علينا استخدام الأمر "drop" كما هو موضح في الصيغة أدناه:
بناء الجملة:
Drop database <DatabaseName>
مثال: حذف قاعدة البيانات guru99
في لقطة الشاشة التالية، يتم تنفيذ أمر الحذف أولاً، وأمر العرض الذي يليه لم يعد يسرد قاعدة البيانات.
في لقطة الشاشة أعلاه، نقوم بأمرين:
- نحن نسقطping قاعدة بيانات 'guru99' من Hive
- التحقق من ذلك باستخدام الأمر "show".
في نفس الشاشة، وبعد التحقق من قواعد البيانات باستخدام أمر العرض، لم تظهر قاعدة البيانات "guru99" داخل Hive. لذا يمكننا الآن التأكيد على حذف قاعدة البيانات "guru99".
أوامر قاعدة بيانات Hive: USE، DESCRIBE، SHOW، وALTER DATABASE
يستخدم البيانان أعلاه أقصر صيغة لهما. تتضمن الصيغة الموثقة بنودًا اختيارية تحدد مكان حفظ الملفات وما يحدث في حال كان الاسم مستخدمًا بالفعل.
CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
تُستخدم الكلمتان المفتاحيتان DATABASE و SCHEMA بشكل تبادلي في جميع أنحاء البرنامج، لذا فإن الأمر CREATE SCHEMA والأمر CREATE DATABASE يؤديان نفس الوظيفة تمامًا. أما الأوامر المتبقية فتُكمل العمل اليومي مع مساحة الاسم.
| أمر | ماذا يفعل |
|---|---|
| عرض قواعد البيانات ؛ | يعرض جميع قواعد البيانات المسجلة في مخزن البيانات الوصفية |
| USE database_name ؛ | يُحدد قاعدة البيانات الحالية بحيث لا تحتاج أسماء الجداول إلى بادئة. |
| وصف قاعدة البيانات database_name؛ | يشير التقرير إلى التعليق وموقع HDFS والمالك |
| وصف قاعدة البيانات الموسعة باسم قاعدة البيانات؛ | يضيف أزواج المفاتيح والقيم الخاصة بـ DBPROPERTIES إلى هذا الناتج |
| ALTER DATABASE database_name SET DBPROPERTIES (…); | يضيف أو يستبدل خصائص البيانات الوصفية |
| ALTER DATABASE database_name SET OWNER USER user_name; | ينقل الملكية إلى مستخدم أو دور آخر |
| ALTER DATABASE database_name SET LOCATION hdfs_path; | يُغيّر المسار الذي تستخدمه الجداول التي يتم إنشاؤها من ذلك الحين فصاعدًا |
هناك إعدادان افتراضيان جديران بالحفظ. بدون شرط LOCATION، توجد الملفات ضمن دليل المستودع، عادةً /user/hive/warehouse/database_name.db، وبدون شرط IF EXISTS، يؤدي حذف قاعدة بيانات لاسم مفقود إلى ظهور خطأ بدلاً من المرور بسلاسة. يتم الاحتفاظ بكلا الإعدادين في خلية نقية.
تحويل أنواع بيانات Hive والأخطاء الشائعة
لا تُستخدم الأنواع دائمًا كما هي مُعلنة تمامًا. يقوم Hive بتوسيع القيمة تلقائيًا عندما لا يمكن فقدان أي معلومات، ويترك كل شيء آخر للتحويل الصريح.
- يتبع التوسيع الضمني سلسلة TINYINT إلى SMALLINT إلى INT إلى BIGINT إلى FLOAT إلى DOUBLE، ويتم ترقية STRING الذي يحتوي على أرقام إلى DOUBLE.
- لا يحدث التضييق من تلقاء نفسه أبدًا، لذا فإن قيمة DOUBLE المعينة لعمود INT تحتاج إلى تحويل مكتوب.
- تقوم الدالة CAST بإجراء هذا التحويل المكتوب، وتعيد قيمة NULL بدلاً من الخطأ عندما يتعذر تحويل القيمة.
SELECT CAST(salary AS DECIMAL(10,2)) FROM employees;
الأخطاء المذكورة أدناه تمثل معظم المفاجآت التي يواجهها المبتدئون في مخططهم الأول.
| عرض | السبب والحل |
|---|---|
| فشلت عملية الحذف بينما لا تزال قاعدة البيانات تحتوي على الجداول | الوضع الافتراضي هو RESTRICT. أضف CASCADE لحذف الجداول معه. |
| يصل خيط طويل وقد تم تقصيره | يقوم نوع البيانات VARCHAR باقتطاع البيانات تلقائيًا بعد تجاوز طولها المُعلن. استخدم نوع البيانات STRING عندما لا يكون هناك حدٌّ للطول المطلوب. |
| يظهر العمود كقيمة فارغة (NULL) بعد عملية التحويل. | لم يتمكن الأمر CAST من تحليل القيمة. تحقق من بيانات المصدر قبل توسيع النوع. |
| تفقد قيمة العملات قيمتها بالبيز أو السنت. | DECIMAL بدون وسائط يعني DECIMAL(10,0). حدد المقياس بشكل صريح. |
| لا يتطابق تاريخان متطابقان ظاهريًا أبدًا | يُعدّ كلٌّ من نوع STRING date و DATE column نوعين مختلفين. قم بتحويل أحد النوعين قبل المقارنة. |
بمجرد أن تصبح أنواع البيانات متوافقة، فإن الخطوة التالية هي تحميل البيانات والاستعلام عنها، وهو ما يتم تناوله في استعلامات Hive مع Order By و Group By و Cluster By.



