توافق التنسيق العالمي (UniForm) ل Iceberg مع جداول Delta

يسمح لك Delta Universal Format (UniForm) بقراءة جداول Delta مع عملاء قارئ Iceberg. تتطلب هذه الميزة Databricks Runtime 14.3 LTS أو أعلى.

هام

للحصول على وثائق لميزة جدول UniForm IcebergCompatV1 القديم، راجع Legacy UniForm IcebergCompatV1.

يستفيد UniForm من حقيقة أن كلا من Delta Lake و Iceberg يتكون من ملفات بيانات Parquet وطبقة بيانات التعريف. يقوم UniForm تلقائيا بإنشاء بيانات تعريف Iceberg بشكل غير متزامن، دون إعادة كتابة البيانات، بحيث يمكن لعملاء Iceberg قراءة جداول Delta كما لو كانت جداول Iceberg. تخدم نسخة واحدة من ملفات البيانات كلا التنسيقين.

يمكنك تكوين اتصال خارجي ليكون كتالوج Unity بمثابة كتالوج Iceberg. راجع القراءة باستخدام نقطة نهاية كتالوج Unity Iceberg.

يستخدم UniForm zstd بدلا من snappy كمبرمج ضغط لملفات بيانات Parquet الأساسية.

إشعار

يتم تشغيل إنشاء بيانات تعريف UniForm بشكل غير متزامن على الحساب المستخدم لكتابة البيانات إلى جداول Delta، مما قد يزيد من استخدام موارد برنامج التشغيل.

المتطلبات

لتمكين UniForm، يجب استيفاء المتطلبات التالية:

إشعار

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

تمكين Delta UniForm

هام

يؤدي تمكين Delta UniForm إلى تعيين ميزة IcebergCompatV2جدول Delta ، وهي ميزة بروتوكول الكتابة. يمكن فقط للعملاء الذين يدعمون ميزة الجدول هذه الكتابة إلى الجداول الممكنة بواسطة UniForm. يجب استخدام Databricks Runtime 14.3 LTS أو أعلى للكتابة إلى جداول Delta مع تمكين هذه الميزة.

يمكنك إيقاف تشغيل UniForm عن طريق إلغاء تحديد delta.universalFormat.enabledFormats خاصية الجدول. لا يمكنك إيقاف تشغيل تعيين العمود بعد تمكينه، ولا يمكن التراجع عن الترقيات إلى إصدارات بروتوكول قارئ Delta Lake والكاتب.

يجب تعيين خصائص الجدول التالية لتمكين دعم UniForm ل Iceberg:

'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'

يجب أيضا تمكين تعيين العمود لاستخدام UniForm. يتم تمكين هذا تلقائيا إذا قمت بتمكين UniForm أثناء إنشاء الجدول، كما في المثال التالي:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

يمكنك تمكين UniForm على جدول موجود باستخدام بناء الجملة التالي:

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

إشعار

يعمل بناء الجملة هذا أيضا للترقية من إصدار المعاينة العامة من UniForm، الذي استخدم ميزة IcebergCompatV1الجدول .

يقوم بناء الجملة هذا تلقائيا بتعطيل وإزالة متجهات الحذف من الجدول. تتم إعادة كتابة الملفات الموجودة حسب الضرورة لجعلها متوافقة مع 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، يمكنك مراجعة حقول بيانات التعريف هذه عن طريق القيام بأحد الإجراءات التالية:

راجع وثائق عميل قارئ 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

في Azure Databricks، يمكنك مراجعة موقع بيانات التعريف هذا عن طريق القيام بأحد الإجراءات التالية:

  • مراجعة القسم الذي Delta Uniform Iceberg تم إرجاعه بواسطة DESCRIBE EXTENDED table_name.
  • مراجعة بيانات تعريف الجدول باستخدام مستكشف الكتالوج.
  • استخدام الأمر التالي مع واجهة برمجة تطبيقات 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 على الجداول مع تمكين متجهات الحذف. راجع ما هي متجهات الحذف؟.
  • لا تدعم جداول Delta مع تمكين UniForm أنواعا VOID .
  • يمكن لعملاء Iceberg القراءة فقط من UniForm. عمليات الكتابة غير معتمدة.
  • قد يكون لدى عملاء قارئ Iceberg قيود فردية، بغض النظر عن UniForm. راجع الوثائق الخاصة بالعميل الذي اخترته.
  • يمكن لمستلمي Delta Sharing قراءة الجدول فقط على أنه Delta، حتى عند تمكين UniForm.

يعمل Change Data Feed لعملاء Delta عند تمكين UniForm، ولكن ليس لديه دعم في Iceberg.

بعض ميزات جدول Delta Lake المستخدمة من قبل UniForm غير معتمدة من قبل بعض عملاء قارئ Delta Sharing. راجع مشاركة البيانات والأصول الذكاء الاصطناعي بأمان باستخدام Delta Sharing.