أنواع بيانات الخلية: كيفية إنشاء قواعد البيانات وإسقاطها في الخلية

⚡ ملخص ذكي

تحدد أنواع بيانات Hive ما يمكن أن يحتويه كل عمود من أعمدة الجدول، وتقوم أوامر CREATE DATABASE و DROP DATABASE بإنشاء أو إزالة مساحة الاسم التي توجد فيها تلك الجداول داخل مخزن بيانات Hive.

  • 🔢 الأنواع الرقمية: تغطي أنواع البيانات من TINYINT إلى BIGINT الأعداد الصحيحة، بينما يحتفظ نوع البيانات DECIMAL(precision, scale) بالقيم الدقيقة التي لا يستطيع نوعا البيانات FLOAT و DOUBLE الاحتفاظ بها.
  • 🔤 أنواع السلاسل النصية: لا يوجد حد معلن لـ STRING، ويقبل VARCHAR من 1 إلى 65535 حرفًا، و CHAR ثابت بحد أقصى 255.
  • 📅 التاريخ والوقت: يخزن DATE قيمة YYYY-MM-DD عادية، ويضيف TIMESTAMP دقة اختيارية بالنانو ثانية فوقها.
  • 🧩 الأنواع المعقدة: تقوم الصيغ ARRAY و MAP و STRUCT و UNIONTYPE بتجميع عدة قيم ذات صلة في عمود واحد بدلاً من العديد منها.
  • ؟؟؟؟ ️ إنشاء قاعدة بيانات: يقوم الأمر CREATE DATABASE بتسجيل مساحة اسم في مخزن البيانات الوصفية، ويؤكد الأمر SHOW DATABASES وجودها.
  • 🗑️ حذف قاعدة بيانات: يؤدي حذف قاعدة البيانات إلى إزالة مساحة الاسم، ويكون استخدام CASCADE مطلوبًا كلما كانت الجداول لا تزال موجودة داخلها.

أنواع بيانات Hive وكيفية إنشاء قواعد البيانات وحذفها في 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 باستخدام Hive shell وعرض قائمة قواعد البيانات باستخدام الأمر show

من خلال لقطة الشاشة أعلاه، نلاحظ أننا نقوم بأمرين:

  1. إنشاء قاعدة بيانات "guru99" في الخلية
  2. عرض قواعد البيانات الموجودة باستخدام الأمر "show"

في نفس الشاشة، يتم عرض قاعدة البيانات "guru99" في النهاية عند تنفيذ أمر العرض، مما يعني أن قاعدة البيانات "guru99" قد تم إنشاؤها بنجاح.

الخطوة الثانية: حذف قاعدة البيانات في هايف

للقطرping في قاعدة البيانات في واجهة Hive، يجب علينا استخدام الأمر "drop" كما هو موضح في الصيغة أدناه:

بناء الجملة:

Drop database <DatabaseName>

مثال: حذف قاعدة البيانات guru99

في لقطة الشاشة التالية، يتم تنفيذ أمر الحذف أولاً، وأمر العرض الذي يليه لم يعد يسرد قاعدة البيانات.

إسقاط قشرة خلية النحلping قاعدة بيانات Guru99 وتأكيد الإزالة باستخدام الأمر show

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

  1. نحن نسقطping قاعدة بيانات 'guru99' من Hive
  2. التحقق من ذلك باستخدام الأمر "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.

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

لا، كلمتا DATABASE و SCHEMA متطابقتان في HiveQL، لذا فإنّ CREATE SCHEMA sales و CREATE DATABASE sales تُنتجان نفس كائن metastore. الاختيار بينهما مسألة أسلوب برمجة مُعتمد.

يوجد ملف قاعدة البيانات في دليل المستودع، عادةً /user/hive/warehouse/database_name.db على نظام ملفات Hadoop الموزع (HDFS). يؤدي استخدام عبارة LOCATION في أمر CREATE DATABASE إلى تجاوز هذا المسار، بينما يُبلغ أمر DESCRIBE DATABASE عن الموقع الذي تم استخدامه فعليًا.

يُعدّ نوع البيانات STRING الخيار المعتاد لأنه لا يفرض حدًا أقصى مُعلنًا ولا يحتاج إلى حشو. أما نوع البيانات VARCHAR فيُفيد عند الحاجة إلى تحديد طول مُعين، بينما يُناسب نوع البيانات CHAR الرموز القصيرة ذات العرض الثابت مثل اختصارات الدول.

النوع DOUBLE هو نوع بيانات ثنائي ذو فاصلة عائمة، لذا فإن عمليات الجمع المتكررة تنحرف بمقدار أجزاء من السنت. أما النوع DECIMAL فيخزن القيم الدقيقة بدقة ومقياس محددين، مما يحافظ على إمكانية تكرار المجاميع المالية عبر عمليات التشغيل.

لا يعتمد الطابع الزمني العادي على المنطقة الزمنية، ويُقرأ كما هو مكتوب تمامًا. أضاف Hive 3.1 خاصية الطابع الزمني مع المنطقة الزمنية المحلية، والتي تُوحّد القيمة إلى التوقيت العالمي المنسق (UTC) عند الكتابة، وتُحوّلها عند القراءة.

نعم. يمكن أن يكون عنصر STRUCT موجودًا داخل عنصر ARRAY، وقد تكون قيمة MAP نفسها عنصر STRUCT، لذا ARRAY > صالحة في خلية النحليؤدي التداخل العميق إلى تعقيد المحددات، لذا اجعله سطحيًا.

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

يقوم برنامج Copilot بصياغة أوامر CREATE TABLE و CREATE DATABASE من تعليق قصير، ويمكن للمساعدين الآليين تحويل ملف نموذجي إلى مخطط. تأكد دائمًا من التحقق من مقياس DECIMAL وعبارات الفاصلة قبل تشغيل النتيجة.

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