Legacy UniForm IcebergCompatV1
هام
تم إيقاف هذه الوثائق وقد لا يتم تحديثها. لم تعد المنتجات أو الخدمات أو التقنيات المذكورة في هذا المحتوى مدعومة. راجع استخدام UniForm لقراءة جداول Delta مع عملاء Iceberg.
هام
هذه الميزة موجودة في المعاينة العامة في Databricks Runtime 13.2 وما فوق.
يسمح لك Delta Universal Format (UniForm) بقراءة جداول Delta مع عملاء قارئ Iceberg.
يستفيد UniForm من حقيقة أن كلا من Delta Lake و Iceberg يتكون من ملفات بيانات Parquet وطبقة بيانات التعريف. يقوم UniForm تلقائيا بإنشاء بيانات تعريف Iceberg بشكل غير متزامن، دون إعادة كتابة البيانات، بحيث يمكن لعملاء Iceberg قراءة جداول Delta كما لو كانت جداول Iceberg. تخدم نسخة واحدة من ملفات البيانات كلا التنسيقين.
يمكنك تكوين اتصال خارجي ليكون كتالوج Unity بمثابة كتالوج Iceberg. راجع القراءة باستخدام نقطة نهاية كتالوج Unity Iceberg.
إشعار
يتم تشغيل إنشاء بيانات تعريف UniForm بشكل غير متزامن على الحساب المستخدم لكتابة البيانات إلى جداول Delta، مما قد يزيد من استخدام موارد برنامج التشغيل.
المتطلبات
لتمكين UniForm، يجب استيفاء المتطلبات التالية:
- يجب تسجيل جدول Delta في كتالوج Unity. يتم دعم كل من الجداول المدارة والخارجية.
- يجب تمكين تعيين العمود للجدول. راجع إعادة تسمية الأعمدة وإفلاتها باستخدام تعيين عمود Delta Lake.
- يجب أن يحتوي جدول Delta على
minReaderVersion
>= 2 وminWriterVersion
>= 7. راجع كيف تدير Azure Databricks توافق ميزة Delta Lake؟. - يجب أن تستخدم عمليات الكتابة إلى الجدول Databricks Runtime 13.2 أو أعلى.
تمكين Delta UniForm
هام
يؤدي تمكين Delta UniForm إلى تعيين ميزة IcebergCompatV1
جدول Delta ، وهي ميزة بروتوكول الكتابة. يمكن فقط للعملاء الذين يدعمون ميزة الجدول هذه الكتابة إلى الجداول الممكنة بواسطة UniForm. يجب استخدام Databricks Runtime 13.2 أو أعلى للكتابة إلى جداول Delta مع تمكين هذه الميزة.
يمكنك إيقاف تشغيل UniForm عن طريق إلغاء تحديد delta.universalFormat.enabledFormats
خاصية الجدول. لا يمكنك إيقاف تشغيل تعيين العمود بعد تمكينه، ولا يمكن التراجع عن الترقيات إلى إصدارات بروتوكول قارئ Delta Lake والكاتب.
تتيح خاصية الجدول التالية دعم UniForm ل Iceberg. iceberg
هي القيمة الصالحة الوحيدة.
'delta.universalFormat.enabledFormats' = 'iceberg'
يجب أيضا تمكين تعيين العمود واستخدام IcebergCompatV1
UniForm. يتم تعيين هذه تلقائيا إذا قمت بتمكين UniForm أثناء إنشاء الجدول، كما في المثال التالي:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.universalFormat.enabledFormats' = 'iceberg');
إذا قمت بإنشاء جدول جديد باستخدام عبارة CTAS، يجب تحديد تعيين العمود يدويا، كما في المثال التالي:
CREATE TABLE T
TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.universalFormat.enabledFormats' = 'iceberg')
AS
SELECT * FROM source_table;
إذا كنت تقوم بتغيير جدول موجود، يجب تحديد كافة هذه الخصائص، كما في المثال التالي:
ALTER TABLE T SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV1' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
عند تمكين UniForm لأول مرة، يبدأ إنشاء بيانات التعريف غير المتزامنة. يجب أن تكتمل هذه المهمة قبل أن يتمكن العملاء الخارجيون من الاستعلام عن الجدول باستخدام Iceberg. راجع التحقق من حالة إنشاء بيانات التعريف في Iceberg.
إشعار
إذا كنت تخطط لاستخدام BigQuery كجهاز عميل قارئ Iceberg، فيجب عليك التعيين spark.databricks.delta.write.dataFilesToSubdir
إلى true
على Azure Databricks لاستيعاب متطلبات BigQuery لتخطيط البيانات.
راجع القيود.
متى ينشئ UniForm بيانات تعريف جبل الجليد؟
يقوم Azure Databricks بتشغيل إنشاء بيانات التعريف في Iceberg بشكل غير متزامن بعد اكتمال معاملة كتابة Delta Lake باستخدام نفس الحساب الذي أكمل معاملة Delta. يمكنك أيضا تشغيل إنشاء بيانات تعريف Iceberg يدويا. راجع تشغيل تحويل بيانات تعريف Iceberg يدويا.
لتجنب زمن انتقال الكتابة المرتبط بإنشاء بيانات التعريف في Iceberg، قد تجمع جداول دلتا ذات التثبيتات المتكررة عمليات تثبيت دلتا المتعددة في تثبيت جبل جليدي واحد.
تضمن Delta Lake أن عملية إنشاء بيانات تعريف جبل جليدي واحدة فقط قيد التقدم في أي وقت. ستلتزم عمليات التثبيت التي من شأنها أن تؤدي إلى عملية إنشاء بيانات تعريف Iceberg متزامنة ثانية بنجاح في Delta، ولكنها لن تؤدي إلى إنشاء بيانات تعريف غير متزامنة في Iceberg. يمنع هذا زمن الانتقال المتتالي لإنشاء بيانات التعريف لأحمال العمل ذات التثبيتات المتكررة (من ثوان إلى دقائق بين عمليات التثبيت).
راجع إصدارات جدول Delta و Iceberg.
التحقق من حالة إنشاء بيانات التعريف في Iceberg
يضيف UniForm الحقول التالية إلى كتالوج Unity وبيانات تعريف جدول Iceberg لتتبع حالة إنشاء بيانات التعريف:
حقل بيانات التعريف | الوصف |
---|---|
converted_delta_version |
أحدث إصدار من جدول Delta الذي تم إنشاء بيانات تعريف Iceberg له بنجاح. |
converted_delta_timestamp |
الطابع الزمني لأحدث تثبيت Delta الذي تم إنشاء بيانات تعريف Iceberg له بنجاح. |
في Azure Databricks، يمكنك مراجعة حقول بيانات التعريف هذه باستخدام مستكشف الكتالوج. يتم إرجاع هذه الحقول والقيم أيضا عند استخدام واجهة برمجة تطبيقات REST للحصول على جدول.
راجع وثائق عميل قارئ Iceberg لمعرفة كيفية مراجعة خصائص الجدول خارج Azure Databricks. بالنسبة إلى OSS Apache Spark، يمكنك مشاهدة هذه الخصائص باستخدام بناء الجملة التالي:
SHOW TBLPROPERTIES <table-name>;
تشغيل تحويل بيانات تعريف Iceberg يدويا
يمكنك تشغيل إنشاء بيانات تعريف Iceberg يدويا للحصول على أحدث إصدار من جدول Delta. تعمل هذه العملية بشكل متزامن، ما يعني أنه عند اكتمالها، تعكس محتويات الجدول المتوفرة في Iceberg أحدث إصدار من جدول Delta المتوفر عند بدء عملية التحويل.
يجب ألا تكون هذه العملية ضرورية في ظل الظروف العادية، ولكن يمكن أن تساعد إذا واجهت ما يلي:
- ينتهي نظام المجموعة قبل نجاح إنشاء بيانات التعريف التلقائية.
- يؤدي الخطأ أو فشل الوظيفة إلى مقاطعة إنشاء بيانات التعريف.
- يكتب عميل لا يدعم UniForm Iceberg metadata gneration إلى جدول Delta.
استخدم بناء الجملة التالي لتشغيل إنشاء بيانات تعريف Iceberg يدويا:
MSCK REPAIR TABLE <table-name> SYNC METADATA
راجع جدول الإصلاح.
القراءة باستخدام مسار JSON لبيانات التعريف
يتطلب بعض عملاء Iceberg توفير مسار لملفات بيانات التعريف التي تم إصدارها لتسجيل جداول Iceberg الخارجية. في كل مرة يحول فيها UniForm إصدارا جديدا من جدول Delta إلى Iceberg، فإنه ينشئ ملف JSON لبيانات التعريف الجديدة.
يتضمن العملاء الذين يستخدمون مسارات JSON لبيانات التعريف لتكوين Iceberg BigQuery. راجع وثائق عميل قارئ Iceberg للحصول على تفاصيل التكوين.
تخزن Delta Lake بيانات تعريف Iceberg ضمن دليل الجدول، باستخدام النمط التالي:
<table-path>/metadata/<version-number>-<uuid>.metadata.json
يمكنك العثور على مسار هذا الملف باستخدام مستكشف الكتالوج. بالنسبة للجداول التي تم تمكين UniForm بها، تتضمن تفاصيل جدول Delta حقلا لموقع بيانات تعريف Iceberg.
يمكنك أيضا استخدام واجهة برمجة تطبيقات REST للحصول على جميع التفاصيل لجدول، بما في ذلك موقع بيانات التعريف. استخدم أمر التالي:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>
يتضمن الرد المعلومات التالية:
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
هام
قد يتطلب عملاء قارئ Iceberg المستند إلى المسار تحديث مسارات JSON لبيانات التعريف وتحديثها يدويا لقراءة إصدارات الجدول الحالية. قد يواجه المستخدمون أخطاء عند الاستعلام عن جداول Iceberg باستخدام إصدارات قديمة حيث تتم إزالة ملفات بيانات Parquet من جدول Delta باستخدام VACUUM
.
القراءة باستخدام نقطة نهاية كتالوج Unity Iceberg
يمكن لبعض عملاء Iceberg الاتصال بكتالوج Iceberg REST. يوفر كتالوج Unity تنفيذا للقراءة فقط لواجهة برمجة تطبيقات كتالوج Iceberg REST لجداول Delta مع تمكين UniForm باستخدام نقطة /api/2.1/unity-catalog/iceberg
النهاية . راجع مواصفات Iceberg REST API للحصول على تفاصيل حول استخدام واجهة برمجة تطبيقات REST هذه.
العملاء المعروفين بدعم واجهة برمجة تطبيقات كتالوج Iceberg تشمل Apache Spark وFlink و Trino. يجب تكوين الوصول إلى تخزين كائن السحابة الأساسي الذي يحتوي على جدول Delta مع تمكين UniForm. راجع وثائق عميل قارئ Iceberg للحصول على تفاصيل التكوين.
يجب إنشاء وتكوين رمز مميز للوصول الشخصي ل Azure Databricks للسماح للخدمات الأخرى بالاتصال بكتالوج Unity. راجع مصادقة الوصول إلى موارد Azure Databricks.
فيما يلي مثال على الإعدادات لتكوين OSS Apache Spark لقراءة UniForm ك Iceberg:
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO
استبدل عنوان URL الكامل لمساحة العمل التي قمت فيها بإنشاء رمز الوصول الشخصي المميز ل <api-root>
.
إشعار
عند الاستعلام عن الجداول في كتالوج Unity باستخدام هذا الأسلوب، تستخدم معرفات الكائنات النمط التالي:
unity.<catalog-name>.<schema-name>.<table-name>
يستخدم هذا النمط نفس مسار الأسماء ثلاثي الطبقات الموجود في كتالوج Unity، ولكنه يضيف بادئة unity
إضافية .
إصدارات جدول Delta و Iceberg
يسمح كل من Delta Lake و Iceberg باستعلامات السفر عبر الوقت باستخدام إصدارات الجدول أو الطوابع الزمنية المخزنة في بيانات تعريف الجدول.
بشكل عام، لا تتم محاذاة إصدارات جدول Iceberg و Delta إما بواسطة الطابع الزمني للالتزام أو معرف الإصدار. إذا كنت ترغب في التحقق من إصدار جدول Delta الذي يتوافق مع إصدار معين من جدول Iceberg، يمكنك استخدام خصائص الجدول المقابلة التي تم تعيينها على جدول Iceberg. راجع التحقق من حالة إنشاء بيانات التعريف في Iceberg.
القيود
توجد القيود التالية:
- لا يعمل UniForm على الجداول مع تمكين متجهات الحذف. راجع ما هي متجهات الحذف؟.
- لا تدعم
LIST
MAP
جداول Delta مع تمكين UniForm الأنواع و وVOID
. - يمكن لعملاء Iceberg القراءة فقط من UniForm. عمليات الكتابة غير معتمدة.
- قد يكون لدى عملاء قارئ Iceberg قيود فردية، بغض النظر عن UniForm. راجع الوثائق الخاصة بالعميل الذي اخترته.
- لا يدعم
INT96
عملاء قارئ Iceberg الإصدار 1.2.0 والإصدارات أدناه نوع الطابع الزمني الذي كتبه Apache Spark. استخدم التعليمات البرمجية التالية في دفاتر الملاحظات التي تكتب إلى جداول UniForm لتجنب هذا القيد:spark.conf.set(“spark.sql.parquet.outputTimestampType”, “TIMESTAMP_MICROS”)
- إصدار المعاينة العامة لنقطة نهاية Unity Catalog Iceberg غير مخصص لأحمال عمل الإنتاج واسعة النطاق. قد تواجه تحديد المعدل إذا تجاوزت حد 5 استعلامات في الثانية.
تعمل ميزات Delta Lake التالية لعملاء Delta عند تمكين UniForm، ولكن ليس لديها دعم في Iceberg:
- تغيير موجز البيانات
- مشاركة دلتا