أوامر أداة الجدول المساعدة

تعتمد جداول دلتا عدد من أوامر الأداة المساعدة.

إزالة الملفات التي لم تعد المشار إليها بواسطة جدول دلتا

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

هام

  • vacuum حذف ملفات البيانات فقط، وليس ملفات السجل. يتم حذف ملفات السجل تلقائيا وغير متزامن بعد عمليات نقطة التحقق. فترة الاحتفاظ الافتراضية لملفات السجل هي 30 يوما، قابلة للتكوين من خلال delta.logRetentionDuration الخاصية التي قمت بتعيينها باستخدام أسلوب ALTER TABLE SET TBLPROPERTIES SQL. راجع خصائص الجدول.
  • يتم فقدان القدرة على السفر عبر الزمن مرة أخرى إلى إصدار أقدم من فترة الاستبقاء بعد تشغيل .

ملاحظة

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

SQL

VACUUM eventsTable   -- vacuum files not required by versions older than the default retention period

VACUUM '/data/events' -- vacuum files in path-based table

VACUUM delta.`/data/events/`

VACUUM delta.`/data/events/` RETAIN 100 HOURS  -- vacuum files not required by versions more than 100 hours old

VACUUM eventsTable DRY RUN    -- do dry run to get the list of files to be deleted

للحصول على تفاصيل بناء الجملة SQL Spark، راجع

  • Databricks وقت التشغيل 7.x وما فوق: فراغ
  • Databricks وقت التشغيل 5.5 LTS و 6.x: فراغ

Python

ملاحظة

يتوفر PYTHON API في Databricks وقت التشغيل 6.1 وما فوق.

from delta.tables import *

deltaTable = DeltaTable.forPath(spark, pathToTable)  # path-based tables, or
deltaTable = DeltaTable.forName(spark, tableName)    # Hive metastore-based tables

deltaTable.vacuum()        # vacuum files not required by versions older than the default retention period

deltaTable.vacuum(100)     # vacuum files not required by versions more than 100 hours old

Scala

ملاحظة

يتوفر API Scala في Databricks وقت التشغيل 6.0 وما فوق.

import io.delta.tables._

val deltaTable = DeltaTable.forPath(spark, pathToTable)

deltaTable.vacuum()        // vacuum files not required by versions older than the default retention period

deltaTable.vacuum(100)     // vacuum files not required by versions more than 100 hours old

Java

ملاحظة

API جافا متاح في Databricks وقت التشغيل 6.0 وما فوق.

import io.delta.tables.*;
import org.apache.spark.sql.functions;

DeltaTable deltaTable = DeltaTable.forPath(spark, pathToTable);

deltaTable.vacuum();        // vacuum files not required by versions older than the default retention period

deltaTable.vacuum(100);     // vacuum files not required by versions more than 100 hours old

راجع مرجع API بحيرة دلتا لتفاصيل بناء الجملة سكالا وجافا وبيثون.

تحذير

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

دلتا ليك لديها فحص السلامة لمنعك من تشغيل VACUUM أمر خطير. إذا كنت متأكدا من عدم وجود عمليات يتم تنفيذها على هذا الجدول تستغرق وقتا أطول من الفاصل الزمني للاحتفاظ الذي تخطط لتحديده، يمكنك إيقاف تشغيل التحقق من الأمان هذا عن طريق تعيين خاصية تكوين Spark spark.databricks.delta.retentionDurationCheck.enabled إلى false .

معلومات التدقيق

VACUUM الالتزام بسجل معاملات دلتا يحتوي على معلومات التدقيق. يمكنك الاستعلام عن أحداث التدقيق باستخدام DESCRIBE HISTORY .

استرداد محفوظات جدول دلتا

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

SQL

DESCRIBE HISTORY '/data/events/'          -- get the full history of the table

DESCRIBE HISTORY delta.`/data/events/`

DESCRIBE HISTORY '/data/events/' LIMIT 1  -- get the last operation only

DESCRIBE HISTORY eventsTable

للحصول على تفاصيل بناء الجملة SQL Spark، راجع

Python

ملاحظة

يتوفر PYTHON API في Databricks وقت التشغيل 6.1 وما فوق.

from delta.tables import *

deltaTable = DeltaTable.forPath(spark, pathToTable)

fullHistoryDF = deltaTable.history()    # get the full history of the table

lastOperationDF = deltaTable.history(1) # get the last operation

Scala

ملاحظة

يتوفر API Scala في Databricks وقت التشغيل 6.0 وما فوق.

import io.delta.tables._

val deltaTable = DeltaTable.forPath(spark, pathToTable)

val fullHistoryDF = deltaTable.history()    // get the full history of the table

val lastOperationDF = deltaTable.history(1) // get the last operation

Java

ملاحظة

API جافا متاح في Databricks وقت التشغيل 6.0 وما فوق.

import io.delta.tables.*;

DeltaTable deltaTable = DeltaTable.forPath(spark, pathToTable);

DataFrame fullHistoryDF = deltaTable.history();       // get the full history of the table

DataFrame lastOperationDF = deltaTable.history(1);    // fetch the last operation on the DeltaTable

راجع مرجع API بحيرة دلتا للحصول على تفاصيل بناء الجملة Scala/Java/Python.

مخطط المحفوظات

يحتوي إخراج history العملية على الأعمدة التالية.

العمود النوع الوصف
version long إصدار الجدول الذي تم إنشاؤه بواسطة العملية.
طابع زمني طابع زمني عندما تم الالتزام بهذا الإصدار.
معرّف المستخدم سلسلة معرف المستخدم الذي قام بتشغيل العملية.
‏‏اسم المستخدم سلسلة اسم المستخدم الذي قام بتشغيل العملية.
‏‏العملية سلسلة اسم العملية.
operationParameters map معلمات العملية (على سبيل المثال، دالات التقييم.)
المهمة البنيه تفاصيل المهمة التي أدارت العملية.
notebook البنيه تفاصيل دفتر الملاحظات الذي تم تشغيل العملية منه.
clusterId سلسلة معرف الكتلة التي تم تشغيل العملية عليها.
readVersion long إصدار الجدول الذي تمت قراءته لتنفيذ عملية الكتابة.
isolationLevel سلسلة مستوى العزل المستخدم لهذه العملية.
isBlindAppend منطقي ما إذا كانت هذه العملية إلحاق البيانات.
العملياتقياسات map مقاييس العملية (على سبيل المثال، عدد الصفوف والملفات التي تم تعديلها.)
المستخدمMetadata سلسلة بيانات تعريف الالتزام المعرفة من قبل المستخدم إذا تم تحديدها
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
|version|          timestamp|userId|userName|operation| operationParameters| job|notebook|clusterId|readVersion|   isolationLevel|isBlindAppend|    operationMetrics|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
|      5|2019-07-29 14:07:47|   ###|     ###|   DELETE|[predicate -> ["(...|null|     ###|      ###|          4|WriteSerializable|        false|[numTotalRows -> ...|
|      4|2019-07-29 14:07:41|   ###|     ###|   UPDATE|[predicate -> (id...|null|     ###|      ###|          3|WriteSerializable|        false|[numTotalRows -> ...|
|      3|2019-07-29 14:07:29|   ###|     ###|   DELETE|[predicate -> ["(...|null|     ###|      ###|          2|WriteSerializable|        false|[numTotalRows -> ...|
|      2|2019-07-29 14:06:56|   ###|     ###|   UPDATE|[predicate -> (id...|null|     ###|      ###|          1|WriteSerializable|        false|[numTotalRows -> ...|
|      1|2019-07-29 14:04:31|   ###|     ###|   DELETE|[predicate -> ["(...|null|     ###|      ###|          0|WriteSerializable|        false|[numTotalRows -> ...|
|      0|2019-07-29 14:01:40|   ###|     ###|    WRITE|[mode -> ErrorIfE...|null|     ###|      ###|       null|WriteSerializable|         true|[numFiles -> 2, n...|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+

ملاحظة

مفاتيح مقاييس التشغيل

historyتقوم العملية بإرجاع مجموعة من مقاييس العمليات في مخطط operationMetrics العمود.

تسرد الجداول التالية تعريفات مفتاح الخريطة حسب العملية.

‏‏التشغيل اسم قياسي الوصف
الكتابة، إنشاء جدول كتحديد، استبدال الجدول كما حدد، نسخ إلى
numFiles عدد الملفات المكتوبة.
numOutputBytes الحجم بالبايت من المحتويات المكتوبة.
numOutputRows عدد الصفوف المكتوبة.
تحديث الدفق
num الملفات المضافة عدد الملفات المضافة.
numRe نقل الملفات عدد الملفات التي تمت إزالتها.
numOutputRows عدد الصفوف المكتوبة.
numOutputBytes حجم الكتابة بالبايت.
DELETE
num الملفات المضافة عدد الملفات المضافة. لا يتم توفيرها عند حذف أقسام الجدول.
numRe نقل الملفات عدد الملفات التي تمت إزالتها.
نومديليتيدروس عدد الصفوف التي تمت إزالتها. لا يتم توفيرها عند حذف أقسام الجدول.
نومكوبيدروس عدد الصفوف المنسوخة في عملية حذف الملفات.
التنفيذ تيمز الوقت المستغرق لتنفيذ العملية بأكملها.
scanTimeMs الوقت المستغرق لمسح الملفات بحثا عن تطابقات.
إعادة كتابة تيمز الوقت المستغرق لإعادة كتابة الملفات المتطابقة.
اقتطاع
numRe نقل الملفات عدد الملفات التي تمت إزالتها.
التنفيذ تيمز الوقت المستغرق لتنفيذ العملية بأكملها.
دمج
numSourceRows عدد الصفوف في مصدر DataFrame.
numTargetRowsInserted عدد الصفوف المدرجة في الجدول الهدف.
numTargetRowsUpdated عدد الصفوف التي تم تحديثها في الجدول الهدف.
numTargetRowsDeleted عدد الصفوف المحذوفة في الجدول الهدف.
numTargetRowsCopied عدد الصفوف المستهدفة المنسوخة.
numOutputRows إجمالي عدد الصفوف التي تم كتابتها.
numTargetFiles تمت إضافته عدد الملفات المضافة إلى المغسلة(الهدف).
numTargetFilesتم نقل عدد الملفات التي تمت إزالتها من المصارف (الهدف).
التنفيذ تيمز الوقت المستغرق لتنفيذ العملية بأكملها.
scanTimeMs الوقت المستغرق لمسح الملفات بحثا عن تطابقات.
إعادة كتابة تيمز الوقت المستغرق لإعادة كتابة الملفات المتطابقة.
UPDATE
num الملفات المضافة عدد الملفات المضافة.
numRe نقل الملفات عدد الملفات التي تمت إزالتها.
numUpdatedRows عدد الصفوف التي تم تحديثها.
نومكوبيدروس عدد الصفوف التي تم نسخها للتو أثناء عملية تحديث الملفات.
التنفيذ تيمز الوقت المستغرق لتنفيذ العملية بأكملها.
scanTimeMs الوقت المستغرق لمسح الملفات بحثا عن تطابقات.
إعادة كتابة تيمز الوقت المستغرق لإعادة كتابة الملفات المتطابقة.
FSCK numRe نقل الملفات عدد الملفات التي تمت إزالتها.
حول numConvertedFiles عدد ملفات باركيه التي تم تحويلها.
‏‏التشغيل اسم قياسي الوصف
استنساخ (1)
مصدرTableSize الحجم بالبايت من الجدول المصدر في الإصدار المستنسخ.
ملفات المصدر عدد الملفات في الجدول المصدر في الإصدار المستنسخ.
numRe نقل الملفات عدد الملفات التي تمت إزالتها من الجدول الهدف إذا تم استبدال جدول دلتا سابق.
إزالةFilesIze إجمالي الحجم بالبايت من الملفات التي تمت إزالتها من الجدول الهدف إذا تم استبدال جدول دلتا سابق.
numCopiedFiles عدد الملفات التي تم نسخها إلى الموقع الجديد. 0 للاستنساخ الضحلة.
نسخالملفات الحجم إجمالي الحجم بالبايت من الملفات التي تم نسخها إلى الموقع الجديد. 0 للاستنساخ الضحلة.
استعادة (2)
tableSizeAfterمستور حجم الجدول بالبايت بعد الاستعادة.
numOfFilesAfterRestore عدد الملفات في الجدول بعد الاستعادة.
numRe نقل الملفات عدد الملفات التي تمت إزالتها بواسطة عملية الاستعادة.
numRestoredالملفات عدد الملفات التي تمت إضافتها نتيجة الاستعادة.
إزالةFilesIze الحجم بالبايت من الملفات التي تمت إزالتها بواسطة الاستعادة.
استعادةFilesSize الحجم بالبايت من الملفات التي تمت إضافتها بواسطة الاستعادة.
تحسين
num الملفات المضافة عدد الملفات المضافة.
numRe نقل الملفات عدد الملفات المحسنة.
num إضافة بايت عدد وحدات البايت المضافة بعد تحسين الجدول.
numRe نقل بايت عدد وحدات البايت التي تمت إزالتها.
حجم الملف الدقيق حجم أصغر ملف بعد تحسين الجدول.
p25FileSize حجم ملف المئين 25 بعد تحسين الجدول.
p50FileSize متوسط حجم الملف بعد تحسين الجدول.
p75FileSize حجم الملف المئين 75 بعد تحسين الجدول.
حجم الملفات القصوى حجم أكبر ملف بعد تحسين الجدول.
فراغ (3)
numDeletedالملفات عدد الملفات المحذوفة.
numVacuumedالاتجاهات عدد الدلائل المفرغة.
numFilesToDelete عدد الملفات المراد حذفها.

(1) يتطلب Databricks وقت التشغيل 7.3 LTS أو أعلى.

(2) يتطلب Databricks وقت التشغيل 7.4 أو أكثر.

(3) يتطلب Databricks وقت التشغيل 8.2 أو أكثر.

استرداد تفاصيل جدول دلتا

يمكنك استرداد معلومات مفصلة حول جدول دلتا (على سبيل المثال، عدد الملفات، حجم البيانات) باستخدام DESCRIBE DETAIL .

DESCRIBE DETAIL '/data/events/'

DESCRIBE DETAIL eventsTable

للحصول على تفاصيل بناء الجملة SQL Spark، راجع

مخطط التفاصيل

إخراج هذه العملية يحتوي على صف واحد فقط مع المخطط التالي.

العمود النوع الوصف
التنسيق سلسلة تنسيق الجدول، delta أي.
المعرف سلسلة معرف فريد للجدول.
الاسم سلسلة اسم الجدول كما هو معرف في المخزن.
الوصف سلسلة وصف الجدول.
الموقع سلسلة موقع الجدول.
تم الإنشاءAt طابع زمني عندما تم إنشاء الجدول.
lastModified طابع زمني عندما تم تعديل الجدول آخر مرة.
التقسيمكولومين مجموعة من السلاسل أسماء أعمدة القسم إذا كان الجدول مقسما.
numFiles long عدد الملفات في أحدث إصدار من الجدول.
الحجمالبايت Int حجم أحدث لقطة للجدول بالبايت.
خصائص مخطط سلسلة السلسلة كافة الخصائص التي تم تعيينها لهذا الجدول.
مين ريديرفيرفيرس Int الحد الأدنى من القراء (وفقا لبروتوكول السجل) التي يمكن قراءة الجدول.
مينالترفور Int الحد الأدنى لإصدار الكتاب (وفقا لبروتوكول السجل) الذي يمكن الكتابة إلى الجدول.
+------+--------------------+------------------+-----------+--------------------+--------------------+-------------------+----------------+--------+-----------+----------+----------------+----------------+
|format|                  id|              name|description|            location|           createdAt|       lastModified|partitionColumns|numFiles|sizeInBytes|properties|minReaderVersion|minWriterVersion|
+------+--------------------+------------------+-----------+--------------------+--------------------+-------------------+----------------+--------+-----------+----------+----------------+----------------+
| delta|d31f82d2-a69f-42e...|default.deltatable|       null|file:/Users/tuor/...|2020-06-05 12:20:...|2020-06-05 12:20:20|              []|      10|      12345|        []|               1|               2|
+------+--------------------+------------------+-----------+--------------------+--------------------+-------------------+----------------+--------+-----------+----------+----------------+----------------+

تحويل جدول باركيه إلى جدول دلتا

تحويل جدول باركيه إلى جدول دلتا في مكان. يسرد هذا الأمر كافة الملفات الموجودة في الدليل، ينشئ سجل معاملات Delta Lake الذي يتتبع هذه الملفات، ويستنتج مخطط البيانات تلقائيا عن طريق قراءة تذييلات كافة ملفات Parquet. إذا تم تقسيم البيانات الخاصة بك، يجب تحديد مخطط أعمدة القسم كسلسلة DDL-تنسيق <column-name1> <type>, <column-name2> <type>, ... (أي).

ملاحظة

إذا تم إنشاء جدول باركيه بواسطة "تدفق منظم"، يمكن تجنب سرد الملفات باستخدام _spark_metadata الدليل الفرعي كمصدر للحقيقة للملفات الموجودة في الجدول إعداد التكوين SQL spark.databricks.delta.convert.useMetadataLog إلى true .

SQL

-- Convert unpartitioned Parquet table at path '<path-to-table>'
CONVERT TO DELTA parquet.`<path-to-table>`

-- Convert partitioned Parquet table at path '<path-to-table>' and partitioned by integer columns named 'part' and 'part2'
CONVERT TO DELTA parquet.`<path-to-table>` PARTITIONED BY (part int, part2 int)

للحصول على تفاصيل بناء الجملة، راجع

Python

ملاحظة

يتوفر PYTHON API في Databricks وقت التشغيل 6.1 وما فوق.

from delta.tables import *

# Convert unpartitioned Parquet table at path '<path-to-table>'
deltaTable = DeltaTable.convertToDelta(spark, "parquet.`<path-to-table>`")

# Convert partitioned parquet table at path '<path-to-table>' and partitioned by integer column named 'part'
partitionedDeltaTable = DeltaTable.convertToDelta(spark, "parquet.`<path-to-table>`", "part int")

Scala

ملاحظة

يتوفر API Scala في Databricks وقت التشغيل 6.0 وما فوق.

import io.delta.tables._

// Convert unpartitioned Parquet table at path '<path-to-table>'
val deltaTable = DeltaTable.convertToDelta(spark, "parquet.`<path-to-table>`")

// Convert partitioned Parquet table at path '<path-to-table>' and partitioned by integer columns named 'part' and 'part2'
val partitionedDeltaTable = DeltaTable.convertToDelta(spark, "parquet.`<path-to-table>`", "part int, part2 int")

Java

ملاحظة

يتوفر API Scala في Databricks وقت التشغيل 6.0 وما فوق.

import io.delta.tables.*;

// Convert unpartitioned Parquet table at path '<path-to-table>'
DeltaTable deltaTable = DeltaTable.convertToDelta(spark, "parquet.`<path-to-table>`");

// Convert partitioned Parquet table at path '<path-to-table>' and partitioned by integer columns named 'part' and 'part2'
DeltaTable deltaTable = DeltaTable.convertToDelta(spark, "parquet.`<path-to-table>`", "part int, part2 int");

ملاحظة

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

تحويل جدول دلتا إلى جدول باركيه

يمكنك بسهولة تحويل جدول دلتا مرة أخرى إلى جدول باركيه باستخدام الخطوات التالية:

  1. إذا قمت بتنفيذ عمليات Delta Lake التي يمكن أن تغير ملفات البيانات (على سبيل المثال، deletemerge أو)، قم بتشغيل delete مع الاحتفاظ بساعات 0 لحذف كافة ملفات البيانات التي لا تنتمي إلى أحدث إصدار من الجدول.
  2. حذف _delta_log الدليل في دليل الجدول.

استعادة جدول دلتا إلى حالة سابقة

ملاحظة

متوفر في Databricks وقت التشغيل 7.4 وما فوق.

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

هام

  • يمكنك استعادة جدول تم استعادته بالفعل وجداول مستنسخة.
  • سيتم فشل استعادة جدول إلى إصدار أقدم حيث تم حذف ملفات البيانات يدويا أو vacuum بواسطة. استعادة هذا الإصدار جزئيا لا يزال ممكنا إذا spark.sql.files.ignoreMissingFiles تم تعيينه إلى true .
  • تنسيق الطابع الزمني لاستعادة إلى حالة سابقة yyyy-MM-dd HH:mm:ss هو . كما يتم اعتماد توفير yyyy-MM-dd تاريخ () سلسلة فقط.

SQL

RESTORE TABLE db.target_table TO VERSION AS OF <version>
RESTORE TABLE delta.`/data/target/` TO TIMESTAMP AS OF <timestamp>

Python

from delta.tables import *

deltaTable = DeltaTable.forPath(spark, <path-to-table>)  # path-based tables, or
deltaTable = DeltaTable.forName(spark, <table-name>)    # Hive metastore-based tables

deltaTable.restoreToVersion(0) # restore table to oldest version

deltaTable.restoreToTimestamp('2019-02-14') # restore to a specific timestamp

Scala

import io.delta.tables._

val deltaTable = DeltaTable.forPath(spark, <path-to-table>)
val deltaTable = DeltaTable.forName(spark, <table-name>)

deltaTable.restoreToVersion(0) // restore table to oldest version

deltaTable.restoreToTimestamp("2019-02-14") // restore to a specific timestamp

Java

import io.delta.tables.*;

DeltaTable deltaTable = DeltaTable.forPath(spark, <path-to-table>);
DeltaTable deltaTable = DeltaTable.forName(spark, <table-name>);

deltaTable.restoreToVersion(0) // restore table to oldest version

deltaTable.restoreToTimestamp("2019-02-14") // restore to a specific timestamp

للحصول على تفاصيل بناء الجملة، راجع RESTORE (دلتا ليك على Azure Databricks).

استعادة المقاييس

ملاحظة

متوفر في Databricks وقت التشغيل 8.2 وما فوق.

RESTORE تقارير المقاييس التالية كصف واحد DataFrame بمجرد اكتمال العملية:

  • table_size_after_restoreحجم الجدول بعد الاستعادة:
  • num_of_files_after_restoreعدد الملفات في الجدول بعد استعادتها.
  • num_removed_filesعدد الملفات التي تمت إزالتها (حذفها منطقيا) من الجدول.
  • num_restored_filesعدد الملفات التي تمت استعادتها بسبب التراجع.
  • removed_files_sizeالحجم الإجمالي بالبايت من الملفات التي تتم إزالتها من الجدول:
  • restored_files_sizeالحجم الإجمالي بالبايت من الملفات التي تمت استعادتها.

Restore metrics example

التحكم في الوصول إلى الجدول

يجب أن يكون لديك MODIFY إذن على الجدول الذي يتم استعادته.

استنساخ جدول دلتا

ملاحظة

متوفر في Databricks وقت التشغيل 7.2 وما فوق.

يمكنك إنشاء نسخة من جدول دلتا موجود في إصدار معين باستخدام clone الأمر. يمكن أن تكون المستنسخات إما عميقة أو ضحلة.

في هذا القسم:

أنواع النسخ

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

وأي تغييرات تطرأ على المستنسخين العميقين أو الضحلين لا تؤثر إلا على المستنسخين أنفسهم وليس على الجدول المصدر.

تتضمن بيانات التعريف المستنسخة: مخطط، تقسيم المعلومات، المتغيرات، قابلية الإبطال. بالنسبة للاستنساخ العميق فقط ، يتم أيضا استنساخ البيانات الوصفية للتيار و COPY INTO (دلتا ليك على Azure Databricks). بيانات التعريف غير المستنسخة هي وصف الجدول وبيانات تعريف الالتزام المعرفة من قبل المستخدم.

هام

  • استنساخ سطحية مرجع ملفات البيانات في الدليل المصدر. إذا قمت بتشغيل vacuum على عملاء الجدول المصدر لن تكون قادرا على قراءة ملفات البيانات المشار إليها ثم سيتم FileNotFoundException طرح. في هذه الحالة، تشغيل استنساخ مع استبدال أكثر من استنساخ الضحلة إصلاح استنساخ. إذا كان هذا يحدث في كثير من الأحيان، والنظر في استخدام استنساخ عميق بدلا من ذلك الذي لا يعتمد على الجدول المصدر.
  • ولا تعتمد المستنسخات العميقة على المصدر الذي استنسخت منه، ولكنها مكلفة لإنشائها لأن استنساخا عميقا ينسخ البيانات وكذلك البيانات الوصفية.
  • الاستنساخ مع replace هدف يحتوي بالفعل على جدول في هذا المسار بإنشاء سجل دلتا إذا كان أحد غير موجود في هذا المسار. يمكنك تنظيف أي بيانات موجودة عن طريق تشغيل vacuum . إذا كان الجدول الموجود جدول دلتا، يتم إنشاء التزام جديد على جدول دلتا الموجود الذي يتضمن بيانات التعريف الجديدة والبيانات الجديدة من الجدول المصدر.
  • استنساخ جدول ليست هي نفسها Create Table As Select أو CTAS . نسخة نسخ بيانات التعريف الجدول المصدر بالإضافة إلى البيانات. الاستنساخ أيضا أبسط بناء الجملة : لا تحتاج إلى تحديد التقسيم ، والشكل ، والمتغيرات ، و nullability وهلم جرا لأنها مأخوذة من الجدول المصدر.
  • جدول مستنسخ له تاريخ مستقل من جدول المصدر الخاص به. لن تعمل استعلامات السفر عبر الزمن على جدول مستنسخ مع نفس المدخلات التي تعمل بها على جدول المصدر الخاص بها.

SQL

 CREATE TABLE delta.`/data/target/` CLONE delta.`/data/source/` -- Create a deep clone of /data/source at /data/target

 CREATE OR REPLACE TABLE db.target_table CLONE db.source_table -- Replace the target

 CREATE TABLE IF NOT EXISTS TABLE delta.`/data/target/` CLONE db.source_table -- No-op if the target table exists

 CREATE TABLE db.target_table SHALLOW CLONE delta.`/data/source`

 CREATE TABLE db.target_table SHALLOW CLONE delta.`/data/source` VERSION AS OF version

 CREATE TABLE db.target_table SHALLOW CLONE delta.`/data/source` TIMESTAMP AS OF timestamp_expression -- timestamp can be like “2019-01-01” or like date_sub(current_date(), 1)

Python

 from delta.tables import *

 deltaTable = DeltaTable.forPath(spark, pathToTable)  # path-based tables, or
 deltaTable = DeltaTable.forName(spark, tableName)    # Hive metastore-based tables

 deltaTable.clone(target, isShallow, replace) # clone the source at latest version

 deltaTable.cloneAtVersion(version, target, isShallow, replace) # clone the source at a specific version

# clone the source at a specific timestamp such as timestamp=“2019-01-01”
 deltaTable.cloneAtTimestamp(timestamp, target, isShallow, replace)

Scala

 import io.delta.tables._

 val deltaTable = DeltaTable.forPath(spark, pathToTable)
 val deltaTable = DeltaTable.forName(spark, tableName)

 deltaTable.clone(target, isShallow, replace) // clone the source at latest version

 deltaTable.cloneAtVersion(version, target, isShallow, replace) // clone the source at a specific version

 deltaTable.cloneAtTimestamp(timestamp, target, isShallow, replace) // clone the source at a specific timestamp

Java

 import io.delta.tables.*;

 DeltaTable deltaTable = DeltaTable.forPath(spark, pathToTable);
 DeltaTable deltaTable = DeltaTable.forName(spark, tableName);

 deltaTable.clone(target, isShallow, replace) // clone the source at latest version

 deltaTable.cloneAtVersion(version, target, isShallow, replace) // clone the source at a specific version

 deltaTable.cloneAtTimestamp(timestamp, target, isShallow, replace) // clone the source at a specific timestamp

للحصول على تفاصيل بناء الجملة، راجع CLONE (دلتا ليك على Azure Databricks).

استنساخ المقاييس

ملاحظة

متوفر في Databricks وقت التشغيل 8.2 وما فوق.

CLONE تقارير المقاييس التالية كصف واحد DataFrame بمجرد اكتمال العملية:

  • source_table_sizeحجم الجدول المصدر الذي يتم استنساخه بالبايت.
  • source_num_of_filesعدد الملفات في الجدول المصدر:
  • num_removed_filesإذا كان يتم استبدال الجدول، كم عدد الملفات التي تتم إزالتها من الجدول الحالي.
  • num_copied_filesعدد الملفات التي تم نسخها من المصدر (0 للاستنساخ الضحلة).
  • removed_files_sizeحجم بالبايت من الملفات التي يتم إزالتها من الجدول الحالي:
  • copied_files_sizeحجم بالبايت من الملفات المنسوخة إلى الجدول:

Clone metrics example

الأذونات

يجب تكوين أذونات لعنصر تحكم الوصول إلى جدول Azure Databricks ومزود مجموعة النظراء.

التحكم في الوصول إلى الجدول

الأذونات التالية مطلوبة لكل من المستنسخين العميقة والضحلة:

  • SELECT إذن على الجدول المصدر.
  • إذا كنت تستخدم CLONE لإنشاء جدول جديد إذن على قاعدة البيانات التي تقوم بإنشاء CREATE الجدول.
  • إذا كنت تستخدم CLONE لاستبدال جدول، يجب أن يكون لديك MODIFY إذن على الجدول.

أذونات موفر مجموعة النظراء

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

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

حالات استخدام النسخ

في هذا القسم:

أرشفة البيانات

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

-- Every month run
CREATE OR REPLACE TABLE delta.`/some/archive/path` CLONE my_prod_table

استنساخ تدفق التعلم الآلي

عند القيام بالتعلم الآلي، قد ترغب في أرشفة إصدار معين من جدول قمت بتدريب نموذج ML عليه. يمكن اختبار النماذج المستقبلية باستخدام مجموعة البيانات المؤرشفة هذه.

-- Trained model on version 15 of Delta table
CREATE TABLE delta.`/model/dataset` CLONE entire_dataset VERSION AS OF 15

تجارب قصيرة الأجل على طاولة إنتاج

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

-- Perform shallow clone
CREATE OR REPLACE TABLE my_test SHALLOW CLONE my_prod_table;

UPDATE my_test WHERE user_id is null SET invalid=true;
-- Run a bunch of validations. Once happy:

-- This should leverage the update information in the clone to prune to only
-- changed files in the clone if possible
MERGE INTO my_prod_table
USING my_test
ON my_test.user_id <=> my_prod_table.user_id
WHEN MATCHED AND my_test.user_id is null THEN UPDATE *;

DROP TABLE my_test;

مشاركة البيانات

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

-- Perform deep clone
CREATE OR REPLACE TABLE shared_table CLONE my_prod_table;

-- Grant other users access to the shared table
GRANT SELECT ON shared_table TO `<user-name>@<user-domain>.com`;

تجاوز خاصية الجدول

ملاحظة

متوفر في Databricks وقت التشغيل 7.5 وما فوق.

تجاوزات خاصية الجدول مفيدة بشكل خاص ل:

  • تعليق توضيحي للجداول مع معلومات المالك أو المستخدم عند مشاركة البيانات مع وحدات عمل مختلفة.

  • مطلوب أرشفة جداول دلتا والسفر عبر الزمن. يمكنك تحديد فترة الاحتفاظ بالسجل بشكل مستقل لجدول الأرشيف. على سبيل المثال:

    SQL
    CREATE OR REPLACE TABLE archive.my_table CLONE prod.my_table
    TBLPROPERTIES (
      delta.logRetentionDuration = '3650 days',
      delta.deletedFileRetentionDuration = '3650 days'
    )
    LOCATION 'xx://archive/my_table'
    
    Python
    dt = DeltaTable.forName(spark, "prod.my_table")
    tblProps = {
      "delta.logRetentionDuration": "3650 days",
      "delta.deletedFileRetentionDuration": "3650 days"
    }
    dt.clone('xx://archive/my_table', isShallow=False, replace=True, tblProps)
    
    Scala
    val dt = DeltaTable.forName(spark, "prod.my_table")
    val tblProps = Map(
      "delta.logRetentionDuration" -> "3650 days",
      "delta.deletedFileRetentionDuration" -> "3650 days"
    )
    dt.clone("xx://archive/my_table", isShallow = false, replace = true, properties = tblProps)
    

البحث عن إصدار الالتزام الأخير في جلسة عمل Spark

ملاحظة

متوفر في Databricks وقت التشغيل 7.1 وما فوق.

للحصول على رقم الإصدار من الالتزام الأخير مكتوب بواسطة الحالي SparkSession عبر كافة مؤشرات الترابط وكافة الجداول الاستعلام عن تكوين SQL spark.databricks.delta.lastCommitVersionInSession .

SQL

SET spark.databricks.delta.lastCommitVersionInSession

Python

spark.conf.get("spark.databricks.delta.lastCommitVersionInSession")

Scala

spark.conf.get("spark.databricks.delta.lastCommitVersionInSession")

إذا لم يتم إجراء أية عمليات تنفيذ بواسطة SparkSession ، فإن الاستعلام عن المفتاح يرجع قيمة فارغة.

ملاحظة

إذا كنت تشارك نفس SparkSession عبر مؤشرات ترابط متعددة، فإنه يشبه مشاركة متغير عبر مؤشرات ترابط متعددة؛ قد تصل إلى ظروف السباق كما يتم تحديث قيمة التكوين في وقت واحد.