Hive ETL: تحميل أمثلة بيانات JSON وXML والنص

⚡ ملخص ذكي

يقوم Hive ETL بتحويل ملفات النصوص وملفات XML وملفات JSON إلى جداول قابلة للاستعلام عن طريق تحميلها إلى Hive واستخراجهاtracالقيم باستخدام xpath() و get_json_object()، مما يمنح المحللين واجهة SQL على بيانات Hadoop شبه المهيكلة.

  • 🧱 الأحمال المنظمة: يتحول ملف نصي محدد إلى جدول باستخدام تنسيق الصف المحدد بالإضافة إلى الحقول المنتهية بواسطة، ثم يتم تحميل البيانات المحلية في المسار.
  • 🏷️ مثال XMLtracنشوئها: يحتوي عمود STRING واحد على كل مستند XML، ويقوم xpath() باستخراج القيم من العلامات المسماة.
  • 🔑 مثال JSONtracنشوئها: تقرأ الدالة get_json_object() تعبير JSONPath واحد لكل استدعاء، لذلك يحتاج كل حقل إلى استدعاء خاص به.
  • 🪜 حمولات متداخلة: يتم تحميل JSON المعقد بنفس الطريقة تمامًا، ويتم تتبع التسلسل الهرمي باستخدام تعبيرات JSONPath المنقطة.
  • 📍 قواعد المسار: تقوم الكلمة المفتاحية LOCAL بالقراءة من نظام ملفات Linux، بينما يؤدي حذفها إلى حل المسار على HDFS.
  • 🎯 أين يناسب: يناسب Hive تخزين البيانات على دفعات وعمليات ETL شبه المهيكلة بدلاً من عمليات البحث عن السجلات ذات زمن الاستجابة المنخفض.

Hive ETL: تحميل بيانات JSON وXML والنص

Hive كأداة ETL وتخزين البيانات على رأس Hadoop يوفر النظام البيئي وظائف مثل نمذجة البيانات، ومعالجة البيانات، ومعالجتها، والاستعلام عنها.tracيشير مصطلح "tion" في Hive إلى إنشاء الجداول في Hive وتحميل البيانات المهيكلة وشبه المهيكلة بالإضافة إلى الاستعلام عن البيانات بناءً على المتطلبات.

لمعالجة البيانات على دفعات، سنكتب نصوصًا برمجية مخصصة باستخدام نصوص برمجية مخصصة للخرائط والاختزال في لغة برمجة نصية. وهذا يوفر SQL مثل البيئة ودعم الاستعلام السهل.

العمل مع البيانات المنظمة باستخدام الخلية

البيانات المنظمة تعني أن البيانات تأتي بتنسيق صحيح من صفوف وأعمدة. وهذا أشبه بـ RDBMS البيانات مع الصفوف والأعمدة المناسبة.

سنقوم هنا بتحميل البيانات المنظمة الموجودة في ملفات نصية في Hive.

الخطوة 1) في هذه الخطوة نقوم بإنشاء جدول "employees_guru" بأسماء الأعمدة مثل المعرف والاسم والعمر والعنوان والرواتب وقسم الموظفين مع أنواع البيانات.

إنشاء جدول employees_guru وتحميل ملف Employees.txt في Hive

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:

  1. إنشاء جدول "employees_guru"
  2. جارٍ تحميل البيانات من ملف Employees.txt إلى جدول "employees_guru"

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

حدد مخرجات الاستعلام التي تعرض صفوف جدول employees_guru في Hive

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

الاستعلامات المطلوب تنفيذها

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

العمل مع البيانات شبه المهيكلة باستخدام Hive (XML، JSON)

يؤدي Hive وظائف ETL في نظام Hadoop البيئي من خلال العمل كـ أداة ETLقد يكون من الصعب تنفيذ MapReduce في بعض أنواع التطبيقات؛ يمكن لـ Hive تقليل هذا التعقيد وتوفير أفضل حل لتطبيقات تكنولوجيا المعلومات من حيث قطاع تخزين البيانات.

يمكن معالجة البيانات شبه المهيكلة، مثل XML وJSON، بسهولة أكبر باستخدام Hive. سنستعرض أولاً كيفية استخدام Hive لـ XML.

جدول XML إلى Hive

في هذا، سنقوم بتحميل بيانات XML إلى جداول الخلية، وسنجلب القيم المخزنة داخل علامات XML.

الخطوة 1) إنشاء جدول "xmlsample_guru" مع عمود من نوع بيانات السلسلة النصية.

إنشاء جدول xmlsample_guru وتحميل ملف test.xml إلى Hive

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:

  1. إنشاء الجدول "xmlsample_guru"
  2. جارٍ تحميل البيانات من ملف test.xml إلى الجدول "xmlsample_guru"

الخطوة 2) باستخدام كسباث باستخدام الطريقة xpath()، سنتمكن من جلب البيانات المخزنة داخل علامات XML.

استعلام xpath() الذي يُعيد قيم ename وesal من عمود XML

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:

  1. باستخدام طريقة xpath()، نقوم بجلب القيم المخزنة تحت /emp/esal/ و /emp/ename/
  2. القيم الموجودة داخل وسوم XML. في هذه الخطوة، نعرض القيم الفعلية المخزنة ضمن وسوم XML في الجدول "xmlsample_guru".

لاحظ أن xpath() تُرجع مصفوفة من السلاسل النصية؛ xpath_string() و xpath_int() و xpath_double() تُرجع قيمة واحدة من نوع محدد.

الخطوة 3) في هذه الخطوة، سنقوم بجلب وعرض ملف XML الخام للجدول "xmlsample_guru".

يتم تخزين مستندات XML الخام في عمود str من xmlsample_guru

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:

  • يتم عرض بيانات XML الفعلية مع العلامات
  • إذا لاحظنا علامة واحدة، فستكون مع "emp" كعلامة رئيسية مع "ename" و "esal" كعلامات فرعية.

Code مقتطف:

الاستعلامات المطلوب تنفيذها

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

جسون (Javaتدوين كائنات النص

تُخزَّن بيانات مواقع التواصل الاجتماعي والمواقع الإلكترونية عادةً بصيغة JSON. عند محاولة جلب البيانات من الخوادم الإلكترونية، تُعاد ملفات JSON. باستخدام Hive كمخزن بيانات، يُمكننا تحميل بيانات JSON إلى جداول Hive عبر إنشاء مخططات.

JSON إلى جدول Hive

في هذا، سنقوم بتحميل بيانات JSON إلى جداول Hive، وسنقوم بجلب القيم المخزنة في مخطط JSON.

الخطوة 1) في هذه الخطوة، سنقوم بإنشاء جدول JSON باسم "json_guru". بعد إنشائه، سنقوم بتحميل وعرض محتويات المخطط الفعلي.

إنشاء json_guru، وتحميل ملف test.json، وعرض مخطط JSON

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:

  1. إنشاء الجدول "json_guru"
  2. جارٍ تحميل البيانات من ملف test.json إلى الجدول "json_guru"
  3. عرض المخطط الفعلي لملف JSON المخزن في جدول json_guru

الخطوة 2) باستخدام طريقة get_json_object() يمكننا جلب قيم البيانات المخزنة في التسلسل الهرمي JSON.

تُخرج الدالة get_json_object() قائمةً بـ ecode و ename و salary من json_guru

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:

  1. باستخدام الدالة get_json_object(str,'$.ecode')، يمكن استرجاع قيم ecode من جدول json_guru. وبالمثل، باستخدام الدالتين get_json_object(str,'$.ename') و get_json_object(str,'$.sal')، سيتم استرجاع قيم ename و sal من جدول json_guru.
  2. القيم المخزنة داخل التسلسل الهرمي لـ JSON في json_guru

لأن get_json_object() يقوم بتحليل المستند مرة واحدة لكل استدعاء، فإن json_tuple() يكون أرخص عندما تكون هناك حاجة إلى عدة مفاتيح، ويقوم JSON SerDe بربط المستند بالأعمدة المكتوبة في وقت التحميل.

Code قصاصة

الاستعلامات المطلوب تنفيذها

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

تحويل بيانات JSON المعقدة إلى جدول Hive

في هذا، سنقوم بتحميل بيانات JSON المعقدة إلى جداول Hive، وسنقوم بجلب القيم المخزنة في مخطط JSON.

الخطوة 1) إنشاء complexjson_guru بحقل عمود واحد.

إنشاء complexjson_guru وتحميل emp.json في جدول Hive

من لقطة الشاشة أعلاه، يمكننا ملاحظة ما يلي:

  1. إنشاء جدول complexjson_guru يحتوي على حقل عمود واحد من نوع بيانات نصية.
  2. تحميل البيانات إلى complexjson_guru من ملف emp.json المعقد بصيغة JSON

الخطوة 2) باستخدام get_json_object يمكننا استرداد المحتوى الفعلي المخزن داخل التسلسل الهرمي لملف JSON.

من خلال لقطة الشاشة التالية، يمكننا رؤية مخرجات البيانات المخزنة في complexjson_guru.

Extracted ecode وقيم المفاتيح المتداخلة من مستند JSON المعقد

الخطوة 3) في هذه الخطوة، باستخدام أمر "Select" يمكننا رؤية بيانات JSON المعقدة المخزنة داخل الجدول "complexjson_guru".

حدد المخرجات التي تعرض صفوف JSON المعقدة الخام في complexjson_guru

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

الاستعلامات المطلوب تنفيذها

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

هايف في المشاريع الآنية - متى وأين يُستخدم

متى وأين يُستخدم Hive في بيئة Hadoop؟

متى

  • عند العمل مع وظائف إحصائية قوية وفعالة في بيئة هادوب
  • عند العمل مع معالجة البيانات المنظمة وشبه المنظمة
  • كأداة لتخزين البيانات مع هادوب
  • استيعاب البيانات في الوقت الفعلي باستخدام HBase، حيث يمكن استخدام Hive

في

  • لسهولة الاستخدام كأداة ETL وتخزين البيانات
  • لتوفير بيئة شبيهة بـ SQL وللاستعلام مثل SQL باستخدام HiveQL
  • استخدام ونشر نصوص برمجية مخصصة للخرائط والمُخفِّضات لتلبية متطلبات العميل المحددة

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

يقوم الأمر LOCAL بنسخ الملف من نظام ملفات جهاز العميل. بدون LOCAL، يتعامل Hive مع المسار على أنه HDFS وينقل الملف، لذا يتم حل المسار النسبي ضمن مجلد HDFS الرئيسي للمستخدم.

عادةً ما تكون دالة json_tuple() أسرع: فهي تُحلل المستند مرة واحدة وتُعيد عدة مفاتيح معًا، بينما تُعيد دالة get_json_object() تحليل السلسلة لكل حقل. استخدم دالة get_json_object() لقيمة واحدة.

لا. يكفي عمود نصي واحد بالإضافة إلى دوال JSON. يُناسب مُسلسل البيانات المُعاد توجيهه (SerDe) مثل org.apache.hive.hcatalog.data.JsonSerDe الاستعلامات المتكررة في بيئة الإنتاج، والخرائط.ping يتم إدخال المفاتيح في الأعمدة المكتوبة مرة واحدة بدلاً من كل قراءة.

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

تُعيد الدالة xpath() دائمًا مصفوفة من السلاسل النصية. استخدم بدلاً من ذلك أحد المتغيرات المُحددة النوع: xpath_string()، أو xpath_int()، أو xpath_long()، أو xpath_float()، أو xpath_double()، أو xpath_boolean(). تُعيد كل دالة قيمة عددية واحدة من ذلك النوع.

يُعدّ استخدام البيانات الخارجية أكثر أمانًا لبيانات الهبوط الخام، لأن السقوطping يُبقي الجدول الملفات في مكانها. أما الجدول المُدار فيحذف دليل بياناته عند تنفيذ أمر DROP، وهو أمر مناسب للجداول المؤقتة، ولكنه مُدمر للملفات المشتركة.

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

يقوم البرنامج بصياغة أوامر إنشاء الجداول، وأوامر تحميل البيانات، وتعبيرات JSONPath من سجل نموذجي يتم لصقه في المحرر. لا يمكنه الوصول إلى المجموعة، لذا يجب التحقق من الأسماء والمسارات وتهجئة الكلمات الرئيسية أولاً.

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