تخطي إلى المحتوى الرئيسي

عارض SQL

يتيح لك عارض SQL الخاص ب Ilum تشغيل استعلامات SQL مباشرة في واجهة المستخدم ، دون الحاجة إلى كتابة أي كود Scala أو Python . تم تصميمه من أجل البساطة ، ويوفر واجهة سهلة الاستخدام لتشغيل استعلامات SQL ، استكشاف البيانات واكتساب الرؤى بسرعة وكفاءة.

سواء كنت تقوم بإنشاء نماذج أولية أو تحليل البيانات أو تصحيح الأخطاء ، فإن عارض SQL يسمح لك بما يلي: ركز فقط على منطق الاستعلام دون إدارة التعليمات البرمجية الأساسية.

إنه قابل للتكوين بدرجة كبيرة من خلال قيم نشر واجهة المستخدم أو Helm ، مما يسمح بالمرونة في ، على سبيل المثال ، اختيار تنسيق جدول مختلف ، مثل Delta Lake و Apache Hudi ، أو أباتشي آيسبرغ.

كيف ستساعدك؟

يعد SQL Viewer أداة قوية لإعداد التقارير وتصحيح الأخطاء أثناء تطبيق Spark تطور. بدلا من إنشاء برنامج Spark SQL بالكامل للاستعلام عن جداولك ، يمكنك إرسال SQL العبارات مباشرة داخل واجهة Ilum.

لتصحيح الأخطاء ، يعد SQL Viewer لا يقدر بثمن - مما يلغي الحاجة إلى الكتابة والتحويل البرمجي بشكل متكرر وأرسل التعليمات البرمجية مثل:

valمجموعة البيانات = شراره . SQL ( "select ...") 

بدلا من ذلك، يمكنك اختبار عبارات SQL بشكل تفاعلي دون إعادة إنشاء جلسات العمل في كل مرة.

بالإضافة إلى نتائج الاستعلام ، يوفر SQL Viewer أدوات استكشاف البيانات وتصورها ، جنبا إلى جنب باستخدام السجلات وإحصائيات التنفيذ، مما يمنحك رؤى أعمق حول عملية الاستعلام.

مع الاندماج في أباتشي هايف ميتستور ، يوفر SQL Viewer إمكانية الوصول إليها ، بيئة مشتركة لتشغيل استعلامات SQL - مناسبة تماما للتعاون عبر مكونات Ilum.

نشر

لاستخدام عارض SQL ، تحتاج إلى نشر Ilum مع كل من SQL Viewer و Hive تمكين Metastore. للحصول على إرشادات الإعداد، يرجى الرجوع إلى صفحة الإنتاج .

بمجرد تكوينه ، يجب أن يكون SQL Viewer متاحا من الشريط الجانبي ومتصلا ب خلية ميتستور.

بدء استخدام عارض SQL

  1. إنشاء نموذج جدول

    خلق 
    أو استبدل جدول my_health_data (
    الطابع الزمني الطابع الزمني ,
    معدل ضربات القلب الباحث ,
    حركة اليد الباحث ,
    مرحلة النوم فارشار ( 20 )
    ) ;
  2. إدراج القيم

    أدخل  إلى my_health_data ( الطابع الزمني , معدل ضربات القلب , حركة اليد , مرحلة النوم ) 
    القيم ( يلقي ( '2024-10-01 00:00:00' مثل الطابع الزمني ) , 70 , 1 , "مستيقظ" ) ,
    ( يلقي ( '2024-10-01 01:00:00' مثل الطابع الزمني ) , 68 , 0 , "ضوء" ) ,
    ( يلقي ( '2024-10-01 02:00:00' مثل الطابع الزمني ) , 65 , 0 , "عميق" ) ,
    ( يلقي ( '2024-10-01 03:00:00' مثل الطابع الزمني ) , 64 , 1 , "عميق" ) ,
    ( يلقي ( '2024-10-01 04:00:00' مثل الطابع الزمني ) , 66 , 0 , "ضوء" ) ,
    ( يلقي ( '2024-10-01 05:00:00' مثل الطابع الزمني ) , 72 , 1 , "مستيقظ" ) ,
    . . .
  3. تشغيل استعلام SELECT

    اختار مرحلة النوم ,  متوسط ( معدل ضربات القلب ) 
    من my_health_data
    مجموعة ب مرحلة النوم
  4. مراقبة الجداول وطرق العرض في علامة التبويب "الموارد"

    علامة التبويب موارد SQL

  5. الاطلاع على نتائج الاستعلام قائمة بيانات SQL

  6. استخدام أداة استكشاف البيانات أداة استكشاف بيانات SQL

  7. فحص السجلات والإحصائيات

    توفر الإحصائيات معلومات حول الوقت المستغرق في تنفيذ الاستعلام وقد تكون مفيدة لتحسين الاستعلام. إحصائيات تنفيذ استعلام SQL

    يمكن أن تكون السجلات مفيدة لتصحيح أخطاء الاستعلام واكتشاف المشكلات العامة. سجلات تنفيذ استعلام SQL

تحميل مثال الاستعلام ودفتر الملاحظات

يوفر Ilum مثالا للاستعلام ودفتر الملاحظات لمساعدة المستخدمين الجدد على البدء بسرعة. مثال على الاستعلام وتحميل دفتر الملاحظات ممكن بشكل افتراضي. ومع ذلك ، يمكنك تعطيله باستخدام --set ilum-core.examples.sqlQuery=false (يعطل استعلام التحميل) و --set ilum-core.examples.sqlNotebook=false (يعطل تحميل الكمبيوتر المحمول).

محركات بديلة

الثلاثي

Trino هو محرك استعلام SQL موزع عالي الأداء مصمم لتحليلات البيانات الضخمة. إنه يوفر بديلا مقنعا ل Spark SQL ، خاصة بالنسبة للأخف ، أحمال العمل المخصصة حيث تكون سرعة تنفيذ الاستعلام وزمن الانتقال المنخفض من الأولويات. للحصول على تفاصيل التكوين الكاملة، راجع وثائق ترينو .

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

تحذير

لا يتم تمكين Trino المدمج افتراضيا. لإعداده ، تحتاج إلى تكوينه في قيم الدفة الخاصة بك.

توصيل Trino المدمج ب Hive Metastore

بينما يمكن ل Trino العمل بشكل مستقل ، فإن توصيله ب Ilum's Hive Metastore يوفر وصولا سلسا إلى نفس البيانات المتوفرة في Spark. يتطلب هذا التكامل إنشاء كتالوج مخصص في Trino يشير إلى Hive Metastore ، يستخدم تخزين S3 ، ويدعم مجموعة متنوعة من التنسيقات ، تماما كما يفعل Spark.

بشكل افتراضي ، يأتي Trino في Ilum مع ملف إيلوم دلتا الكتالوج، الذي تم تكوينه باستخدام اتصال Hive Metastore الافتراضي، تخزين S3 الافتراضي ودعم Delta Lake.

تم ذلك عن طريق تعيين التكوين التالي في القيم.yaml ملف مخطط Ilum helm الرئيسي:

ILUM-SQL : 
التكوين :
ترينو :
تمكين : صحيح
كتالوج : إيلوم - الدلتا

ترينو :
تمكين : صحيح
كتالوجات :
إيلوم دلتا : | # اسم الكتالوج الذي تم إنشاؤه
connector.name=delta_lake # اسم الموصل (بحيرة دلتا هذه المرة)
delta.metastore.store - جدول - البيانات الوصفية = صحيح # يجعل Trino يخزن البيانات الوصفية في Hive Metastore
دلتا.سجل - جدول - procedure.enabled=صحيح # تمكين إجراءات تسجيل الجدول في Trino
hive.metastore.uri=التوفير : إيلوم - خلية - ميتا ستور : 9083 # Hive Metastore URI
fs.native - s3.enabled=صحيح # تمكين دعم S3
s3.endpoint=http : إيلوم - مينيو : 9000 # نقطة نهاية S3
s3.region=الولايات المتحدة - شرق - 1 # منطقة S3
S3.المسار - نمط - الوصول = صحيح # الوصول إلى نمط مسار S3
S3.AWS - ولوج - المفتاح = minioadmin # مفتاح الوصول S3
S3.AWS - سر - المفتاح = minioadmin # مفتاح سري S3
تحذير

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

مثيل Trino الخارجي

من الممكن أيضا توصيل مثيل Trino الخاص بك عن طريق توفير قيم الدفة التالية:

ilum-sql.config.trino.enabled= صحيح 
# عنوان URL يشير إلى منسق Trino
ilum-sql.config.trino.url = http://ilum-trino:8080
# اسم الكتالوج الأساسي الذي تريد استخدامه
ilum-sql.config.trino.catalog = نظام

نصائح والممارسات الجيدة

استخدام عملاء SQL خارجيين مع JDBC

بينما يعمل SQL Viewer فقط في المستعرض ، يمكنك أيضا توصيل Ilum SQL بالبيئات الخارجية التي تدعم برامج تشغيل Hive / Spark JDBC. بهذه الطريقة ، يمكنك تشغيل الاستعلامات على بيانات Ilum الخاصة بك من عميل SQL المفضل لديك أو أداة BI.

للقيام بذلك، قم بإعداد اتصال JDBC باستخدام سلسلة الاتصال التالية:

JDBC: Hive2://<ilum-sql-host>:<thrift-binary-port>/<database-name>;؟ spark.ilum.sql.cluster.id=<cluster-id> 

أين:

  • <ilum-sql-host> هو اسم المضيف لمكون خدمة Ilum SQL الخاص بك (على سبيل المثال، ILUM-SQL بدون رأس أو ilum-sql-thrift-binary )
  • <thrift-binary-port> هو المنفذ الذي تتعرض عليه خدمة التوفير (الافتراضي هو 10009 )
  • <database-name> هو اسم قاعدة البيانات التي تريد الاتصال بها (وضع افتراضي هناك)
  • <cluster-id> هو معرف مجموعة Spark التي تريد الاتصال بها (يمكنك العثور عليها في Ilum Ui)

استخدام عارض SQL على مجموعات البيانات من مكونات Ilum الأخرى

يقوم SQL Viewer بإنشاء جداول في Hive Metastore بشكل افتراضي ، مما يعني أن أي موارد Spark ، والتي تستخدم أيضا نفس metastore ، ستتمكن من رؤية هذه الجداول.

عادة ما تحتوي الوظيفة التي تستخدم metastore على التكوين التالي:

spark.sql.الكتالوجالتنفيذ = خلية 
spark.hadoop.hive.metastore.uris = thrift://<hive-metastore-host>:<hive-metastore-port>
# موقع التخزين للمخزن الوصفي (على سبيل المثال ، s3)
spark.hadoop.fs.s3a.access.key = <access-key>
spark.hadoop.fs.s3a.secret.key = <secret-key>
spark.hadoop.fs.s3a.endpoint = <s3-endpoint>
spark.hadoop.fs.s3a.path.style.access = صحيح
spark.hadoop.fs.s3a.fast.upload = صحيح

يمكننا أن نرى أنه يتم توفير uri الخاص ب metastore ويتم استخدام موقع تخزين مشترك.

علامة تبويب موارد عارض SQL مثال على المكون الذي يستخدم أيضا metastore هو مستكشف طاولة Ilum .

استفد من عناصر تحسين Spark

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

يوضح المثال التالي تعريف جدول يتضمن العديد من تقنيات التحسين:

  1. تقسيم الجدول حسب تاريخ و بلد ، مما يسمح ل Spark بتخطي الأقسام غير ذات الصلة
  2. تجميع البيانات حسب معرف المستخدم لتحسين موقع البيانات للصفوف ذات الصلة
  3. فرز البيانات حسب وقت المشاهدة لاستعلامات نطاق أكثر كفاءة
  4. تنظيم البيانات في حاويات لتوزيع أفضل
  5. باستخدام السمة الباركيه التنسيق المحسن للتخزين العمودي والاستعلام الفعال
خلق  جدول page_view 
(
وقت المشاهدة الباحث ,
معرف المستخدم بيجينت ,
page_url سلسلة ,
referrer_url سلسلة ,
صفيف الأصدقاء < بيجينت > ,
خريطة العقارات < خيط , خيط > ,
سلسلة DT ,
سلسلة البلد
) التعليق "هذا هو جدول عرض الصفحة"
تقسيم ب ( دي تي , بلد )
متفاوت المسافات ب ( معرف المستخدم ) فرز ب ( وقت المشاهدة ) إلى 32 الجرادل
تخزين مثل الباركيه

يمكن تحقيق تأثير مماثل باستخدام الميزات التي توفرها تنسيقات الجداول البديلة ، وهي مناقشه ادناه

استخدام ملحقات Spark SQL لزيادة أداء الاستعلامات الخاصة بك

يسمح لك Spark SQL باستخدام العديد من ملحقات SQL لتحسين وظيفة SQL المضمنة. يتم ذلك عبر spark.sql. الامتدادات مال. على سبيل المثال، يمكنك إضافة بحيرة دلتا ، والذي يوفر ميزات إضافية للعمل مع جداول دلتا.

ومع ذلك، يمكن أيضا استخدام هذه الخاصية لتمكين الملحقات الأخرى، مثل ملحق تحسين SQL لمحركات تنفيذ Spark. لتمكينه، إما:

  • استخدم إحدى صور Ilum Spark الأحدث
  • أضف ملف JAR للملحق من مستودع Maven: org.apache.kyuubi:kyuubi-extension-spark-<SPARK_VERSION>_<SCALA_VERSION>:<KYUUBI_VERSION>
  • قم بتعديل صورة الحاوية الخاصة ب Spark وأضف ملف JAR إلى مسار الفصل

سيسمح لك ذلك بإضافة الملحق إلى محرك SQL الخاص بك على النحو التالي: spark.sql.extensions=org.apache.kyuubi.sql.KyuubiSparkSQLExtension . هذه الخاصية عبارة عن قائمة ملحقات مفصولة بفواصل، بحيث يمكنك إضافة ملحقات متعددة.

حفظ الاستعلامات واستيراد واستعلامات SQL وتصديرها

يتيح لك عارض SQL حفظ استفساراتك لاستخدامها لاحقا ، بالإضافة إلى استيرادها وتصديرها.

وظيفة الحفظ / الاستيراد / التصدير لعارض SQL

استفد من تنسيقات البيانات الأكثر تقدما: Apache Iceberg و Apache Hudi و Delta Tables

جداول دلتا

Delta Lake هي طبقة تخزين مفتوحة المصدر تجلب معاملات ACID إلى Apache Spark و أحمال عمل البيانات الضخمة. يستخدم جداول دلتا كتنسيقها الأساسي ، الجمع بين ملفات الباركيه مع سجلات المعاملات . تتعقب هذه السجلات إصدارات الجدول وتلتقط عمليات DML و التعامل مع التزامن مع الأقفال.

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

دلتا ليك سهلة الاستخدام وخيار ممتاز لدمج إضافة ميزات إضافية إلى بيئة Ilum الخاصة بك.

لمزيد من التفاصيل حول إدارة التزامن في Delta Lake مع اورينت (التحكم في التزامن المتفائل) ، و كيف يدمج البث والكتابة المجمعة ، نوصي بزيارة توثيق بحيرة دلتا .

ملامح:
  • صيانة خصائص الحمض
  • دعم عمليات التحديث والحذف والدمج
  • تطور المخطط: تغيير الجداول
  • تعيين الإصدار: القدرة على السفر عبر الزمن إلى الإصدارات السابقة من مجموعة البيانات
  • تحسين أفضل مقارنة بالتنسيقات التقليدية
  • تكامل هذه الميزات لكل من البث والدفعات
كيفية استخدام جداول دلتا؟

بشكل افتراضي ، يتم تمكين جداول دلتا داخل عارض SQL الخاص ب Ilum. يتم تعيين التكوينات التالية لك:

spark.sql. الامتدادات = io.delta.sql.DeltaSparkSessionExtension 
spark.sql.catalog.spark_catalog = org.apache.spark.sql.delta.catalog.DeltaCatalog
spark.databricks.delta.catalog.update.enabled = صحيح

لذلك ، يمكنك الاستفادة من جداول دلتا داخل عارض SQL الخاص بك دون أي خطوات إضافية.

  1. إنشاء جدول دلتا

    خلق  جدول my_health_data_delta 
    (
    الطابع الزمني الطابع الزمني ,
    معدل ضربات القلب الباحث ,
    حركة اليد الباحث ,
    مرحلة النوم فارشار ( 20 )
    ) استخدام الدلتا ;
  2. تشغيل بعض عمليات DML

    أدخل  إلى my_health_data_delta ( الطابع الزمني , معدل ضربات القلب , حركة اليد , مرحلة النوم )  القيم 
    ( يلقي ( '2024-10-01 00:00:00' مثل الطابع الزمني ) , 70 , 1 , "مستيقظ" ) ,
    ( يلقي ( '2024-10-01 01:00:00' مثل الطابع الزمني ) , 68 , 0 , "ضوء" ) ,
    ( يلقي ( '2024-10-01 02:00:00' مثل الطابع الزمني ) , 65 , 0 , "عميق" ) ,
    ( يلقي ( '2024-10-01 03:00:00' مثل الطابع الزمني ) , 64 , 1 , "عميق" ) ,
    ( يلقي ( '2024-10-01 04:00:00' مثل الطابع الزمني ) , 66 , 0 , "ضوء" ) ;
    حذف  من my_health_data_delta 
    أين الطابع الزمني = '2024-10-01 02:00:00' ;
    تحديث my_health_data_delta 
    جبر معدل ضربات القلب = 50
    أين الطابع الزمني = '2024-10-01 03:00:00' ;
  3. انظر إلى محفوظات الإصدار والتفاصيل

    وصف التاريخ my_health_data_delta 

    سجل جدول دلتا SQL

  4. استخدام وظيفة السفر عبر الوقت والإصدار

    اختار  * 
    من my_health_data_delta الإصدار مثل من 1

    أو للسفر إلى تاريخ محدد (على سبيل المثال ، عودة يوم واحد):

    اختار  * 
    من my_health_data_delta الطابع الزمني مثل من date_sub ( current_date ( ) , 1 )
  5. تنظيف

    بينما تم تحسين جداول دلتا للأداء ، يمكن أن تتراكم عدد كبير من الملفات بمرور الوقت. ال مِكْنَسَة كَهْرَبَائِيَّة تساعد العملية على تنظيف هذه الملفات وتحسين الجدول. يمكنك أن تقرأ عنها هنا .

    فراغ my_health_data_delta 

    أو لمعرفة الملفات التي سيتم حذفها (حتى 1000):

    فراغ my_health_data_delta تشغيل جاف 

أباتشي هودي

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

لتبسيط العملية، التكوين الضغط العمليات ضرورية. ينشئ الضغط شريحة جديدة بملف أساسي محدث، مما يحسن الأداء.

هذا الهيكل ، جنبا إلى جنب مع التحسين الشامل ل Hudi ، يعزز كفاءة الكتابة ، مما يجعله أسرع من التنسيقات البديلة في سيناريوهات معينة. علاوة على ذلك ، يدعم Hudi NBCC (التحكم في التزامن غير المحظور) بدلاً من اورينت (التحكم المتفائل في التزامن) ، وهو أكثر فاعلية في البيئات التي تحتوي على عمليات الكتابة المتزامنة العالية.

SQL Hudi Architecture

باختصار ، يعد Apache Hudi مناسبا تماما للبيئات ذات عمليات الكتابة المتزامنة الثقيلة و يوفر مزيدا من التحكم في التحسينات المخصصة ، على الرغم من أنه قد يكون أقل سهولة في الاستخدام من Delta Lake.

لمعرفة المزيد حول هذا الموضوع ، يجب عليك زيارة صفحة توثيق أباتشي هودي

كيفية استخدام أباتشي هودي؟

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

{ 
"شرارة.جارات.حزمات" : "org.apache.hudi:hudi-spark3.5-bundle_2.12:0.15.0" ,
"سبارك.سيريالايزر" : "org.apache.spark.serializer.KryoSerializer" ,
"spark.sql.catalog.spark_catalog" : "org.apache.spark.sql.hudi.catalog.HoodieCatalog" ,
"spark.sql. الامتدادات" : "org.apache.spark.sql.hudi.HoodieSparkSessionExtension" ,
"spark.kryo.registrator" : "org.apache.spark.HoodieSparkKryoRegistrar"
}

تذكر أن تتأكد من أن إصدار جرة Hudi-spark يتطابق مع إصدار Spark الذي تستخدمه.

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

  1. إنشاء جدول هودي

    خلق  جدول my_sales_data_hudi ( 
    sale_id سلسلة ,
    sale_date الطابع الزمني ,
    product_id سلسلة ,
    كم الباحث ,
    ثمن عشري ( 10 , 2 )
    ) استخدام هودي
    خصائص TBL (
    نوع = "مور" ,
    أساسيمفتاح = 'sale_id'
    ) ;

    لاحظ النوع = "mor" الخاصية ، والتي تعني دمج عند القراءة . تغير هذه الخاصية نوع الجدول، الذي يوازن بين التحسين بين القراءة والكتابة العمليات.

  2. إجراء عمليات DML

    أدخل  إلى my_sales_data_hudi ( sale_id , sale_date , product_id , كم , ثمن )  القيم 
    ( "S001" , يلقي ( '2024-10-01 10:00:00' مثل الطابع الزمني ) , "P001" , 10 , 99.99 ) ,
    ( "S002" , يلقي ( '2024-10-01 11:00:00' مثل الطابع الزمني ) , "P002" , 5 , 49.99 ) ,
    ( "S003" , يلقي ( '2024-10-01 12:00:00' مثل الطابع الزمني ) , "P003" , 20 , 19.99 ) ,
    ( "S004" , يلقي ( '2024-10-01 13:00:00' مثل الطابع الزمني ) , "P004" , 15 , 29.99 ) ,
    ( "S005" , يلقي ( '2024-10-01 14:00:00' مثل الطابع الزمني ) , "P005" , 8 , 39.99 ) ;
    تحديث my_sales_data_hudi 
    جبر ثمن = 89.99
    أين sale_id = "S001" ;
    حذف  من my_sales_data_hudi 
    أين sale_id = "S003" ;
  3. قائمة الالتزامات

    دعا show_commits ( جدول  = >  'my_sales_data_hudi' ,  حد  = >  5 ) 

    SQL Hudi يلتزم بنتائج الاستعلام

    لاحظ هنا commit_time ، والذي يعرض وقت الالتزام. يمكننا استخدام هذه القيمة لأداء السفر عبر الزمن.

  4. استخدام وظيفة السفر عبر الزمن

    دعا rollback_to_instant ( جدول  = >  'my_sales_data_hudi' , instant_time = >  '<commit-time-from-last-step>' ) ; 

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

أباتشي آيسبرغ

Apache Iceberg هو تنسيق جدول عالي الأداء مصمم خصيصا لبحيرات البيانات ، تقدم إمكانات فريدة مقارنة بالتنسيقات الأخرى. بنيت حول هندسة معمارية مميزة ، يستخدمها Iceberg لقطات لإدارة حالات الجدول، تجنب الاعتماد على سجلات المعاملات التقليدية. يلتقط هذا التصميم المستند إلى اللقطة الحالة الكاملة للجدول في نقاط زمنية محددة.

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

يوفر Iceberg أيضا ميزات قوية مثل التفرع ووضع العلامات , السماح للمستخدمين بإنشاء فروع للجداول وتعيين علامات يمكن للبشر قراءتها للقطات. هذه الميزات ضرورية للتحكم في الإصدار ، تمكين الفرق من إدارة التحديثات المتزامنة واختبار التغييرات قبل إلزامها بالإنتاج.

مع خيارات تنظيم البيانات المرنة وقدرات تعيين الإصدار القوية، يتيح Apache Iceberg إدارة بيانات قابلة للتطوير وأداء لبحيرات البيانات الحديثة.

تفرع SQL Iceberg

المزيد عن وثائق Apache Iceberg

كيفية استخدام Apache Iceberg؟

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

{ 
"شرارة.جارات.حزمات" : "org.apache.iceberg: iceberg-spark-runtime-3.5_2.12: 1.6.1" ,
"spark.sql. الامتدادات" : "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" ,
"spark.sql.catalog.spark_catalog" : "org.apache.iceberg.spark.SparkSessionCatalog" ,
"spark.sql.catalog.spark_catalog.type" : "خلية النحل" ,
"spark.sql.catalog.spark_catalog.uri" : "thrift://ilum-hive-metastore:9083"
}

تذكر أن تتأكد من أن إصدار جرة Iceberg يتطابق مع إصدار Spark الذي تستخدمه و أن Hive Metastore متاح على عنوان URI المحدد.

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

  1. قم بإنشاء جدول جبل جليدي:

    خلق  جدول weather_stations 
    (
    station_id سلسلة ,
    reading_time الطابع الزمني ,
    درجة الحرارة عشري ( 4 , 1 ) ,
    رطوبة الباحث ,
    wind_speed عشري ( 4 , 1 )
    ) استخدام مثلجة
  2. إدراج البيانات في الجدول

    أدخل  إلى weather_stations القيم 
    ( "WS001" , يلقي ( '2024-03-01 08:00:00' مثل الطابع الزمني ) , 15.5 , 65 , 12.3 ) ,
    ( "WS001" , يلقي ( '2024-03-01 09:00:00' مثل الطابع الزمني ) , 17.2 , 62 , 10.5 ) ,
    ( "WS001" , يلقي ( '2024-03-01 10:00:00' مثل الطابع الزمني ) , 19.8 , 58 , 11.7 ) ,
    ( "WS002" , يلقي ( '2024-03-01 08:00:00' مثل الطابع الزمني ) , 14.2 , 70 , 8.9 ) ,
    ( "WS002" , يلقي ( '2024-03-01 09:00:00' مثل الطابع الزمني ) , 16.0 , 68 , 9.2 ) ,
    ( "WS002" , يلقي ( '2024-03-01 10:00:00' مثل الطابع الزمني ) , 18.5 , 63 , 10.1 ) ,
    ( "WS003" , يلقي ( '2024-03-01 08:00:00' مثل الطابع الزمني ) , 13.7 , 72 , 15.4 ) ,
    ( "WS003" , يلقي ( '2024-03-01 09:00:00' مثل الطابع الزمني ) , 15.9 , 69 , 14.8 ) ,
    ( "WS003" , يلقي ( '2024-03-01 10:00:00' مثل الطابع الزمني ) , 18.1 , 65 , 13.2 ) ;
  3. إنشاء علامة من اللقطة الحالية

    تغيير  جدول weather_stations خلق العلامه ` initial_state ` 
  4. قم بإجراء بعض التعديلات على البيانات

    تحديث weather_stations 
    جبر
    درجة الحرارة = 16.5
    أين
    station_id = "WS001"
    و reading_time = يلقي ( '2024-03-01 08:00:00' مثل الطابع الزمني )
    حذف  من weather_stations أين station_id =  "WS002" 
  5. سرد جميع اللقطات

    اختار  *  من spark_catalog . افتراضي . weather_stations . لقطات 

    نتائج استعلام لقطات SQL Iceberg

    حفظ الطابع الزمني ( commited_at ) من اللقطة التي تريد السفر عبر الزمن إليها لوقت لاحق.

  6. الحصول على السجل

    اختار  *  من spark_catalog . افتراضي . weather_stations . تاريخ 
  7. التراجع إلى علامة معينة

    دعا spark_catalog . نظام . set_current_snapshot ( 
    جدول = > "spark_catalog.default.weather_stations" ,
    الرقم المرجعي = > 'initial_state'
    )
  8. السفر عبر الزمن إلى لقطة معينة

    اختار  *  من weather_stations الطابع الزمني  مثل  من  < الطابع الزمني - من - درج - 5 > 

كيفية استخدام UDFs في عارض SQL؟

UDFs (الوظائف المعرفة من قبل المستخدم) هي ميزة قوية في SQL تسمح لك بتحديد وظائف مخصصة لاستخدامها في استعلاماتك. كما أنها مدعومة في عارض SQL ، مما يسمح لك بتوسيع وظائف استعلاماتك.

  1. إنشاء فصل دراسي ل UDF الخاص بك

    حزمة  example

    استورد org. apache. hadoop. خلية . ql. exec. UDF

    فصل سكالا یو دي اف extends UDF {
    مواطنه evaluate( str: String) : Int = {
    str. length( )
    }
    }

    تأكد من تضمين التبعية اللازمة ل الخلية التنفيذية: 3.1.3 في مشروعك:

    < تبعية > 
    < معرف المجموعة > org.apache.hive </ معرف المجموعة >
    < معرف القطعة الأثرية > خلية تنفيذية </ معرف القطعة الأثرية >
    < الإصدار > 3.1.3 </ الإصدار >
    </ تبعية >
  2. اصنع عبوة جرة وضعها في التخزين الموزع

    ملف جرة SQL UDF

    تأكد من تذكر المسار المؤدي إلى ملف البرطمان.

  3. إضافته إلى جلسة عمل شرارة عارض SQL

    جمع مرطبان '<the-path-to-your-jar-file>' 
  4. قم بإنشاء دالة مرتبطة ب udf الذي حددته

    خلق 
    أو استبدل دالة سكالا یو دي اف مثل "مثال. ScalaUDF
  5. استخدمه في استعلام

    اختار اسم , سكالا یو دي اف ( اسم ) 
    من NewtableName

استكشاف الاخطاء

من المفيد معرفة أنه عند تنفيذ استعلامات SQL من صفحة SQL Viewer ، تكون محركات تنفيذ SQL مرئية كوظائف Ilum العادية. هذا يعني أنه يمكنك مراقبة حالتهم والتحقق من السجلات والإحصائيات ، تماما مثل أي وظيفة أخرى في علامة التبويب "الوظائف".

كومة JVM خارج الذاكرة أثناء إرسال الشرارة

إذا وجدت خطأ مثل هذا في سجلات تشغيل المحرك:

استثناء في مؤشر ترابط "رئيسي" io.fabric8.kubernetes.client.KubernetesClientException: مساحة كومة الذاكرة المؤقتة في Java 
في io.fabric8.kubernetes.client.dsl.internal.OperationSupport.waitForResult (OperationSupport.java:520)
في io.fabric8.kubernetes.client.dsl.internal. OperationSupport.handleResponse(OperationSupport.java:535)
...
في org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1129)
في org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
الناجم عن: java.lang.OutOfMemoryError: مساحة كومة الذاكرة المؤقتة في Java
...

من المحتمل أن يكون سببه حجم كومة JVM الافتراضي لإرسال الشرارة الداخلي ل Ilum صغير جدا بالنسبة لمهمتك.

لإصلاح ذلك، يمكنك التبديل إلى إرسال الشرارة الخارجية . بهذه الطريقة ، لن تكون عملية إرسال الشرارة مقيدة بموارد جراب Ilum.