استخدام UniForm لقراءة جداول Delta مع عملاء Iceberg
يسمح لك Delta Lake Universal Format (UniForm) بقراءة جداول Delta مع عملاء قارئ Iceberg. تتطلب هذه الميزة Databricks Runtime 14.3 LTS أو أعلى.
هام
للحصول على وثائق لميزة جدول UniForm IcebergCompatV1
القديم، راجع Legacy UniForm IcebergCompatV1.
يمكنك تكوين اتصال خارجي ليكون كتالوج Unity بمثابة كتالوج Iceberg. راجع القراءة باستخدام نقطة نهاية كتالوج Unity Iceberg.
يستخدم UniForm Iceberg Zstandard بدلا من Snappy كمبرمج ضغط لملفات بيانات Parquet الأساسية.
ملاحظة
يتم تشغيل إنشاء بيانات تعريف UniForm بشكل غير متزامن على الحساب المستخدم لكتابة البيانات إلى جداول Delta، مما قد يزيد من استخدام موارد برنامج التشغيل.
يستفيد UniForm من حقيقة أن Delta Lake و Iceberg يتكونان من ملفات بيانات Parquet وطبقة بيانات التعريف. يقوم UniForm تلقائيا بإنشاء بيانات تعريف Iceberg بشكل غير متزامن، دون إعادة كتابة البيانات، بحيث يمكن لعملاء Iceberg قراءة جداول Delta. تقدم نسخة واحدة من ملفات البيانات تنسيقات متعددة.
لتمكين UniForm Iceberg، يجب استيفاء المتطلبات التالية:
- يجب تسجيل جدول Delta في كتالوج Unity. يتم دعم كل من الجداول المدارة والخارجية.
- يجب تمكين تعيين العمود للجدول. راجع إعادة تسمية الأعمدة وإفلاتها باستخدام تعيين عمود Delta Lake.
- يجب أن يحتوي جدول Delta على
minReaderVersion
>= 2 وminWriterVersion
>= 7. راجع كيف تدير Azure Databricks توافق ميزة Delta Lake؟. - يجب أن تستخدم عمليات الكتابة إلى الجدول Databricks Runtime 14.3 LTS أو أعلى.
ملاحظة
لا يمكنك تمكين متجهات الحذف على جدول مع تمكين UniForm Iceberg.
يستخدم REORG
لتعطيل متجهات الحذف ومسحها أثناء تمكين UniForm Iceberg على جدول موجود مع تمكين متجهات الحذف. راجع تمكين أو ترقية باستخدام REORG.
هام
يؤدي تمكين 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 لأول مرة، يبدأ إنشاء بيانات التعريف غير المتزامنة. يجب أن تكتمل هذه المهمة قبل أن يتمكن العملاء الخارجيون من الاستعلام عن الجدول باستخدام Iceberg. راجع التحقق من حالة إنشاء بيانات التعريف في Iceberg.
للحصول على قائمة بالقيود، راجع القيود.
يجب تمكين تعيين العمود لاستخدام UniForm Iceberg. يحدث هذا تلقائيا إذا قمت بتمكين UniForm Iceberg أثناء إنشاء الجدول، كما في المثال التالي:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
في Databricks Runtime 15.4 LTS وما فوق، يمكنك تمكين أو ترقية UniForm Iceberg على جدول موجود باستخدام بناء الجملة التالي:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
يمكنك استخدام REORG
لتمكين UniForm Iceberg وإعادة كتابة ملفات البيانات الأساسية، كما في المثال التالي:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
استخدم REORG
إذا كان أي مما يلي صحيحا:
- تم تمكين متجهات الحذف في الجدول.
- لقد قمت مسبقا بتمكين
IcebergCompatV1
إصدار UniForm Iceberg. - تحتاج إلى القراءة من محركات Iceberg التي لا تدعم ملفات Parquet على غرار Hive، مثل Athena أو Redshift.
يقوم Azure Databricks بتشغيل إنشاء بيانات التعريف بشكل غير متزامن بعد اكتمال معاملة كتابة Delta Lake. تستخدم عملية إنشاء بيانات التعريف هذه نفس الحساب الذي أكمل معاملة Delta.
ملاحظة
يمكنك أيضا تشغيل إنشاء بيانات تعريف Iceberg يدويا. راجع تشغيل تحويل بيانات تعريف Iceberg يدويا.
لتجنب زمن انتقال الكتابة المقترن بإنشاء بيانات التعريف، قد تقوم جداول Delta ذات التثبيتات المتكررة بتجميع عمليات تثبيت دلتا المتعددة في تثبيت واحد لبيانات تعريف Iceberg.
تضمن Delta Lake أن عملية إنشاء بيانات تعريف واحدة فقط قيد التقدم في أي وقت على مورد حساب معين. الالتزامات التي من شأنها أن تؤدي إلى عملية إنشاء بيانات تعريف متزامنة ثانية بنجاح إلى Delta، ولكن لا تؤدي إلى إنشاء بيانات تعريف Iceberg غير متزامنة. يمنع هذا زمن الانتقال المتتالي لإنشاء بيانات التعريف لأحمال العمل ذات التثبيتات المتكررة (من ثوان إلى دقائق بين عمليات التثبيت).
راجع إصدارات جدول Delta و Iceberg.
تسمح Delta Lake و Iceberg باستعلامات السفر عبر الوقت باستخدام إصدارات الجدول أو الطوابع الزمنية المخزنة في بيانات تعريف الجدول.
بشكل عام، لا تتوافق إصدارات جدول Delta مع إصدارات Iceberg إما بواسطة الطابع الزمني للتثبيت أو معرف الإصدار. للتحقق من إصدار جدول Delta الذي يتوافق مع إصدار معين من جدول Iceberg، يمكنك استخدام خصائص الجدول المقابلة. راجع التحقق من حالة إنشاء بيانات التعريف في Iceberg.
يضيف UniForm الحقول التالية إلى كتالوج Unity وبيانات تعريف جدول Iceberg لتتبع حالة إنشاء بيانات التعريف:
حقل بيانات التعريف | الوصف |
---|---|
converted_delta_version |
أحدث إصدار من جدول Delta الذي تم إنشاء بيانات تعريف Iceberg له بنجاح. |
converted_delta_timestamp |
الطابع الزمني لأحدث تثبيت Delta الذي تم إنشاء بيانات تعريف Iceberg له بنجاح. |
في Azure Databricks، يمكنك مراجعة حقول بيانات التعريف هذه عن طريق القيام بأحد الإجراءات التالية:
- مراجعة القسم الذي
Delta Uniform Iceberg
تم إرجاعه بواسطةDESCRIBE EXTENDED table_name
. - مراجعة بيانات تعريف الجدول باستخدام مستكشف الكتالوج.
- استخدام واجهة برمجة تطبيقات REST للحصول على جدول.
راجع وثائق عميل قارئ Iceberg لمعرفة كيفية مراجعة خصائص الجدول خارج Azure Databricks. بالنسبة إلى OSS Apache Spark، يمكنك مشاهدة هذه الخصائص باستخدام بناء الجملة التالي:
SHOW TBLPROPERTIES <table-name>;
يمكنك تشغيل إنشاء بيانات تعريف Iceberg يدويا للحصول على أحدث إصدار من جدول Delta. تعمل هذه العملية بشكل متزامن، ما يعني أنه عند اكتمالها، تعكس محتويات الجدول المتوفرة في Iceberg أحدث إصدار من جدول Delta المتوفر عند بدء عملية التحويل.
يجب ألا تكون هذه العملية ضرورية في ظل الظروف العادية، ولكن يمكن أن تساعد إذا واجهت ما يلي:
- ينتهي نظام المجموعة قبل نجاح إنشاء بيانات التعريف التلقائية.
- يؤدي الخطأ أو فشل الوظيفة إلى مقاطعة إنشاء بيانات التعريف.
- يكتب عميل لا يدعم UniForm Iceberg metadata gneration إلى جدول Delta.
استخدم بناء الجملة التالي لتشغيل إنشاء بيانات تعريف Iceberg يدويا:
MSCK REPAIR TABLE <table-name> SYNC METADATA
راجع جدول الإصلاح.
يتطلب بعض عملاء 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
.
يمكن لبعض عملاء Iceberg الاتصال بكتالوج Iceberg REST. يوفر كتالوج Unity تنفيذا للقراءة فقط لواجهة برمجة تطبيقات كتالوج Iceberg REST لجداول Delta مع تمكين UniForm باستخدام نقطة /api/2.1/unity-catalog/iceberg
النهاية . راجع مواصفات Iceberg REST API للحصول على تفاصيل حول استخدام واجهة برمجة تطبيقات REST هذه.
العملاء المعروفين بدعم واجهة برمجة تطبيقات كتالوج Iceberg تشمل Apache Spark وFlink و Trino. راجع وثائق عميل قارئ Iceberg للحصول على تفاصيل التكوين.
هناك متطلبان للوصول إلى البيانات المسجلة في كتالوج Unity باستخدام api/2.1/unity-catalog/iceberg
نقطة النهاية من الخدمات الخارجية:
- المصادقة باستخدام OAuth أو رمز وصول شخصي ل Databricks. راجع مصادقة الوصول إلى موارد Azure Databricks.
- تمكين الوصول إلى البيانات الخارجية لمخزن بيانات التعريف الخاص بك. وهذا يحد من الوصول إلى المستخدمين الذين لديهم
EXTERNAL USE SCHEMA
امتياز على المخطط الذي تقرأ منه واجهة برمجة التطبيقات. راجع التحكم في الوصول الخارجي إلى البيانات في كتالوج Unity.
فيما يلي مثال على الإعدادات المستخدمة لتكوين 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.type": "rest",
"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.warehouse": "<uc_catalog_name>"
استبدل عنوان URL الكامل لمساحة العمل التي قمت فيها بإنشاء رمز الوصول الشخصي المميز ل <api-root>
.
عند الاستعلام عن الجداول في كتالوج Unity باستخدام تكوينات Spark، ضع ما يلي في الاعتبار:
تستخدم معرفات الكائنات النمط
unity.<schema-name>.<table-name>
.يستخدم هذا النمط نفس مساحة الاسم ثلاثية المستويات المستخدمة في كتالوج Unity، ولكن مع استبدال اسم الكتالوج ب
unity
."spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
تحتاج فقط إذا كنت تقوم بتشغيل الإجراءات المخزنة الخاصة ب Iceberg.إذا كنت تستخدم موفر سحابة للتخزين، يجب إضافة حزمة Iceberg الخاصة بالسحابة كحزم Spark:
- AWS:
org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
- Azure:
org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
- GCP:
org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>
للحصول على التفاصيل، راجع وثائق تكامل Iceberg AWS ل Spark.
- AWS:
يمكنك أيضا استخدام استدعاء REST API مثل استدعاء في مثال curl هذا لتحميل جدول:
curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>
يجب أن تتلقى بعد ذلك استجابة مثل هذا:
{
"metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
"metadata": <iceberg-table-metadata-json>,
"config": {
"expires-at-ms": "<epoch-ts-in-millis>",
"adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
}
}
ملاحظة
expires-at-ms
يشير الحقل في الاستجابة إلى وقت انتهاء صلاحية بيانات الاعتماد ولديه وقت انتهاء صلاحية افتراضي مدته ساعة واحدة. للحصول على أداء أفضل، اطلب من العميل تخزين بيانات الاعتماد مؤقتا حتى وقت انتهاء الصلاحية قبل طلب بيانات اعتماد جديدة.
توجد القيود التالية لكافة جداول UniForm:
- لا يعمل UniForm على الجداول مع تمكين متجهات الحذف. راجع ما هي متجهات الحذف؟.
- لا تدعم جداول Delta مع تمكين UniForm أنواعا
VOID
. - يمكن لعملاء Iceberg القراءة فقط من UniForm. عمليات الكتابة غير معتمدة.
- قد يكون لدى عملاء قارئ Iceberg قيود فردية، بغض النظر عن UniForm. راجع الوثائق الخاصة بالعميل الذي اخترته.
- يمكن لمستلمي Delta Sharing قراءة الجدول فقط على أنه Delta، حتى عند تمكين UniForm.
- بعض ميزات جدول Delta Lake المستخدمة من قبل UniForm Iceberg غير مدعومة من قبل بعض عملاء قارئ Delta Sharing. راجع ما المقصود بمشاركة دلتا؟.
يعمل Change Data Feed لعملاء Delta عند تمكين UniForm، ولكن ليس لديه دعم في Iceberg.