مشاركة عبر


إسقاط جدول دلتا أو استبداله

يدعم Azure Databricks أوامر DDL القياسية SQL لإسقاط الجداول المسجلة مع كتالوج Unity أو Hive metastore واستبدالها. توفر هذه المقالة أمثلة على إسقاط جداول دلتا واستبدالها وتوصيات بناء الجملة اعتمادا على البيئة التي تم تكوينها والنتيجة المطلوبة.

متى يتم إسقاط جدول

يجب استخدام DROP TABLE لإزالة جدول من metastore عندما تريد حذف الجدول نهائيا وليس لديك أي نية لإنشاء جدول جديد في نفس الموقع. على سبيل المثال:

DROP TABLE table_name

DROP TABLE له دلالات مختلفة اعتمادا على نوع الجدول وما إذا كان الجدول مسجلا في كتالوج Unity أو مخزن بيانات تعريف Hive القديم.

نوع الجدول Metastore سلوك
مُدار كتالوج Unity تتم إزالة الجدول من metastore ويتم وضع علامة على البيانات الأساسية للحذف. يمكنك UNDROP البيانات في الجداول المدارة في كتالوج Unity لمدة 7 أيام.
مُدار Hive تتم إزالة الجدول من metastore ويتم حذف البيانات الأساسية.
خارجي كتالوج Unity تتم إزالة الجدول من metastore ولكن تبقى البيانات الأساسية. تخضع امتيازات الوصول إلى URI الآن للموقع الخارجي الذي يحتوي على البيانات.
خارجي Hive تتم إزالة الجدول من metastore ولكن تبقى البيانات الأساسية. لم تتغير أي امتيازات وصول إلى URI.

DROP TABLE تختلف الدلالات عبر أنواع الجداول، ويحتفظ كتالوج Unity بمحفوظات جداول Delta باستخدام معرف جدول داخلي. ومع ذلك، تشترك جميع الجداول في النتيجة الشائعة أنه بعد اكتمال العملية، لم يعد اسم الجدول المسجل مسبقا يحتوي على ارتباط نشط للبيانات ومحفوظات الجدول من metastore.

راجع DROP TABLE.

إشعار

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

متى يتم استبدال جدول

توصي Databricks باستخدام CREATE OR REPLACE TABLE عبارات لحالات الاستخدام حيث تريد الكتابة فوق الجدول الهدف بالكامل ببيانات جديدة. على سبيل المثال، للكتابة فوق جدول Delta مع كافة البيانات من دليل Parquet، يمكنك تشغيل الأمر التالي:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

CREATE OR REPLACE TABLE له نفس الدلالات بغض النظر عن نوع الجدول أو metastore قيد الاستخدام. فيما يلي مزايا مهمة ل CREATE OR REPLACE TABLE:

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

راجع CREATE TABLE [USING].

استبدال البيانات بعمليات متزامنة

عندما تريد إجراء استبدال كامل للبيانات في جدول قد يتم استخدامه في العمليات المتزامنة، يجب عليك استخدام CREATE OR REPLACE TABLE.

يجب عدم استخدام النمط المضاد التالي:

-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;

CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;

تختلف أسباب هذه التوصية استنادا إلى ما إذا كنت تستخدم جداول مدارة أو خارجية وما إذا كنت تستخدم كتالوج Unity، ولكن عبر جميع أنواع جداول Delta التي تستخدم هذا النمط يمكن أن تؤدي إلى خطأ أو سجلات تم إسقاطها أو نتائج تالفة.

بدلا من ذلك، توصي Databricks دائما باستخدام CREATE OR REPLACE TABLE، كما في المثال التالي:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

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