Tablo yardımcı programı komutları

Delta tabloları bir dizi yardımcı programı komutu destekler.

Artık Delta tablosu tarafından başvurulmay dosyaları kaldırma

Delta tablosu tarafından başvurulmayan ve saklama süresinden daha eski olan dosyaları kaldırabilirsiniz komutu tabloda vacuum çalıştırarak eşik değerine neden olur. Vakum otomatik olarak tetiklenmiyor. Aşağıdakiler: dosyalar için varsayılan saklama eşiği 7 gündür. Bu davranışı değiştirmek için bkz. Veri saklama.

Önemli

  • vacuum günlük dosyalarını değil yalnızca veri dosyalarını siler. Günlük dosyaları denetim noktası işlemlerinden sonra otomatik ve zaman uyumsuz olarak silinir. Günlük dosyalarının varsayılan saklama süresi 30 gündür ve bu süre, SQL delta.logRetentionDurationALTER TABLE SET TBLPROPERTIES yöntemiyle ayar SQL. Bkz. Tablo özellikleri.
  • saklama süresinden daha eski bir sürüme geri seyahat etme özelliği çalıştırndikten sonra kaybolur.

Not

Delta önbelleği etkinleştirildiğinde, bir küme ile silinmiş Parquet dosyalarından veriler vacuum içerebilir. Bu nedenle, dosyaları silinmiş olan önceki tablo sürümlerinin verilerini sorgulamak mümkün olabilir. Kümenin yeniden başlatılması önbelleğe alınan verileri kaldırır. Bkz. Delta önbelleğini yapılandırma.

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

Spark SQL söz dizimi ayrıntıları için bkz.

  • Databricks Runtime 7.x ve üzeri: VACUUM
  • Databricks Runtime 5.5 LTS ve 6.x: Vacuum

Python

Not

Python API'si 6.1 Databricks Runtime ve üzerinde kullanılabilir.

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

Not

Scala API'si 6.0 Databricks Runtime ve üzerinde kullanılabilir.

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

Not

Java API'si 6.0 Databricks Runtime ve üzerinde kullanılabilir.

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

Scala, Java ve Python söz dizimi ayrıntıları için Delta Lake API başvurusuna bakın.

Uyarı

Databricks saklama aralığını en az 7 gün olarak ayarlamayı, çünkü eski anlık görüntüler ve işlanmamış dosyalar hala eşzamanlı olarak kullanılabilir tabloya okuyucular veya yazarlar. Etkin VACUUM dosyaları temizlerse, eş zamanlı okuyucular başarısız olabilir veya daha kötü bir durum olduğunda tablolar bozulabilir VACUUM henüz işlanmadı dosyaları siler. Bir aralık seçmeniz gerekir en uzun çalışan eş zamanlı işlemden ve en uzun olandan daha uzun olan herhangi bir akışın tablodaki en son güncelleştirmenin gerisinde kalma süresi.

Delta Lake'in tehlikeli bir çalıştırmayı önlemek için bir güvenlik denetimi vardır VACUUM Komut. üzerinde gerçekleştirilen hiçbir işlem olmadığını biliyorsanız bu tablo, belirtmeyi planladnız saklama aralığından daha uzun sürer, Spark yapılandırma özelliğini ayarerek bu güvenlik denetimlerini kapatabilirsiniz spark.databricks.delta.retentionDurationCheck.enabled için false .

Denetim bilgileri

VACUUM Delta işlem günlüğüne commit'ler denetim bilgilerini içerir. denetim olaylarını kullanarak DESCRIBE HISTORY sorguabilirsiniz.

Delta tablo geçmişini alma

Delta tablosuna yapılan her yazma için işlemler, kullanıcı, zaman damgası ve diğer işlemler hakkında bilgi edinebilirsiniz komutunu history çalıştırarak. İşlemler ters kronolojik sırayla döndürülür. Varsayılan olarak tablo geçmişi 30 gün boyunca korunur.

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

Spark SQL söz dizimi ayrıntıları için bkz.

Python

Not

Python API'si 6.1 Databricks Runtime ve üzerinde kullanılabilir.

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

Not

Scala API'si 6.0 Databricks Runtime ve üzerinde kullanılabilir.

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

Not

Java API'si 6.0 Databricks Runtime ve üzerinde kullanılabilir.

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

Scala/Java/Python söz dizimi ayrıntıları için Delta Lake API başvurusuna bakın.

Geçmiş şeması

İşlem history çıktısı aşağıdaki sütunlara sahip olur.

Sütun Tür Description
sürüm long İşlem tarafından oluşturulan tablo sürümü.
timestamp timestamp Bu sürüm işlendi.
userId string İşlemden geçen kullanıcının kimliği.
userName string İşlemden geçen kullanıcının adı.
operation string İşlem adı.
operationParameters map İşlem parametreleri (örneğin, parametreler.)
struct İşlemden geçen işin ayrıntıları.
not defteri struct İşlem çalıştırıldı not defterinin ayrıntıları.
clusterId string İşlem üzerinde çalışma yapılan kümenin kimliği.
readVersion long Yazma işlemini gerçekleştirmek için okunan tablonun sürümü.
ısolationlevel string Bu işlem için kullanılan yalıtım düzeyi.
IBU Dappend boolean Bu işlemin verileri sonuna eklenip eklenmediğini belirtir.
Operationölçümlerini map İşlemin ölçümleri (örneğin, satır sayısı ve değiştirilen dosyalar)
userMetadata string Belirtilmişse Kullanıcı tanımlı COMMIT meta verileri
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+
|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...|
+-------+-------------------+------+--------+---------+--------------------+----+--------+---------+-----------+-----------------+-------------+--------------------+

Not

  • İşlem ölçümleri yalnızca geçmiş komutu ve geçmişteki işlem Databricks Runtime 6,5 veya üzeri kullanılarak çalıştırıldığında kullanılabilir.
  • Aşağıdaki yöntemleri kullanarak bir Delta tablosuna yazarsanız diğer sütunlardan bazıları kullanılamaz:
  • Gelecekte eklenen sütunlar her zaman son sütundan sonra eklenecektir.

İşlem ölçümleri anahtarları

historyİşlem, sütun eşlemesindeki işlem ölçümlerinin bir koleksiyonunu döndürür operationMetrics .

Aşağıdaki tablolarda işleme göre eşleme anahtarı tanımları listelenmektedir.

İşlem Ölçüm adı Description
YAZıN, CREATE TABLE SEÇIN, TABLOYU SEÇ OLARAK DEĞIŞTIRIN, KOPYALA
numFiles Yazılan dosya sayısı.
numOutputBytes Yazılan içeriklerin bayt cinsinden boyutu.
numOutputRows Yazılan satır sayısı.
AKıŞ GÜNCELLEŞTIRME
numAddedFiles Eklenen dosya sayısı.
numRemovedFiles Kaldırılan dosya sayısı.
numOutputRows Yazılan satır sayısı.
numOutputBytes Bayt cinsinden yazma boyutu.
DELETE
numAddedFiles Eklenen dosya sayısı. Tablonun bölümleri silindiğinde sağlanmadı.
numRemovedFiles Kaldırılan dosya sayısı.
numDeletedRows Kaldırılan satır sayısı. Tablonun bölümleri silindiğinde sağlanmadı.
numCopiedRows Dosya silme işleminde kopyalanan satır sayısı.
executionTimeMs İşlemin tamamının yürütülmesi için geçen süre.
scanTimeMs Dosyalarda eşleşme taraması yapmak için geçen süre.
rewriteTimeMs Eşleşen dosyaları yeniden yazmak için geçen süre.
KESILEMEDI
numRemovedFiles Kaldırılan dosya sayısı.
executionTimeMs İşlemin tamamının yürütülmesi için geçen süre.
BIRLEÞTIRMEK
numSourceRows Kaynak veri çerçevesindeki satır sayısı.
numtargetrowsınserınser Hedef tabloya yerleştirilen satır sayısı.
numTargetRowsUpdated Hedef tabloda güncellenen satır sayısı.
numTargetRowsDeleted Hedef tabloda silinen satır sayısı.
numtargetrowscop Kopyalanmış hedef satır sayısı.
numOutputRows Toplam yazılan satır sayısı.
numTargetFilesAdded Havuza eklenen dosya sayısı (hedef).
Numtargetfileskaldırıldı Alıcıdan (hedef) kaldırılan dosya sayısı.
executionTimeMs İşlemin tamamının yürütülmesi için geçen süre.
scanTimeMs Dosyalarda eşleşme taraması yapmak için geçen süre.
rewriteTimeMs Eşleşen dosyaları yeniden yazmak için geçen süre.
UPDATE
numAddedFiles Eklenen dosya sayısı.
numRemovedFiles Kaldırılan dosya sayısı.
numUpdatedRows Güncellenen satır sayısı.
numCopiedRows Dosya güncelleştirme sürecinde yalnızca üzerine kopyalanan satır sayısı.
executionTimeMs İşlemin tamamının yürütülmesi için geçen süre.
scanTimeMs Dosyalarda eşleşme taraması yapmak için geçen süre.
rewriteTimeMs Eşleşen dosyaları yeniden yazmak için geçen süre.
FSCK numRemovedFiles Kaldırılan dosya sayısı.
CONVERT numConvertedFiles Dönüştürülen Parquet dosyalarının sayısı.
İşlem Ölçüm adı Description
CLONE (1)
sourceTableSize Kopyalanan sürümde kaynak tablonun bayt cinsinden boyutu.
sourceNumOfFiles Kopyalanan sürümde kaynak tablodaki dosya sayısı.
numRemovedFiles Önceki bir Delta tablosu değiştirilmişse hedef tablodan kaldırılan dosya sayısı.
removedFilesSize Önceki bir Delta tablosu değiştirilmişse hedef tablodan kaldırılan dosyaların bayt cinsinden toplam boyutu.
numCopiedFiles Yeni konuma kopyalanan dosya sayısı. Basit kopyalar için 0.
copiedFilesSize Yeni konuma kopyalanan dosyaların bayt cinsinden toplam boyutu. Basit kopyalar için 0.
RESTORE (2)
tableSizeAfterRestore Geri yüklemeden sonra bayt cinsinden tablo boyutu.
numOfFilesAfterRestore Geri yüklemeden sonra tablodaki dosya sayısı.
numRemovedFiles Geri yükleme işlemi tarafından kaldırılan dosya sayısı.
numRestoredFiles Geri yükleme sonucunda eklenen dosya sayısı.
removedFilesSize Geri yükleme tarafından kaldırılan dosyaların bayt cinsinden boyutu.
restoredFilesSize Geri yükleme tarafından eklenen dosyaların bayt cinsinden boyutu.
OPTIMIZE
numAddedFiles Eklenen dosya sayısı.
numRemovedFiles İyileştirilmiş dosya sayısı.
numAddedBytes Tablo iyileştirilmiş olduktan sonra eklenen bayt sayısı.
numRemovedBytes Kaldırılan bayt sayısı.
minFileSize Tablo iyileştirilmiş olduktan sonra en küçük dosyanın boyutu.
p25FileSize Tablo iyileştirilmiş olduktan sonra 25. yüzdebirlik dosyanın boyutu.
p50FileSize Tablo iyileştirilmiş olduktan sonra orta boy dosya boyutu.
p75FileSize Tablo iyileştirilmiş olduktan sonra 75. yüzdebirlik dosyanın boyutu.
maxFileSize Tablo en iyi duruma getirilmiş olan en büyük dosyanın boyutu.
VACUUM (3)
numDeletedFiles Silinen dosyaların sayısı.
numVacuumedDirectories Vakumlu dizinlerin sayısı.
numFilesToDelete Silinecek dosya sayısı.

(1) 7.3 LTS Databricks Runtime veya üzerini gerektirir.

(2) 7.4 veya Databricks Runtime gerektirir.

(3) 8.2 Databricks Runtime veya üzerini gerektirir.

Delta tablosu ayrıntılarını alma

Kullanarak bir Delta tablosu hakkında ayrıntılı bilgi (örneğin, dosya sayısı, veri boyutu) DESCRIBE DETAIL edinebilirsiniz.

DESCRIBE DETAIL '/data/events/'

DESCRIBE DETAIL eventsTable

Spark SQL söz dizimi ayrıntıları için bkz.

Ayrıntı şeması

Bu işlem çıktısı, aşağıdaki şemaya sahip yalnızca bir satır içerir.

Sütun Tür Description
biçim string Tablonun biçimi, yani delta .
kimlik string Tablonun benzersiz kimliği.
name string Meta veri deposu içinde tanımlandığı şekilde tablonun adı.
açıklama string Tablonun açıklaması.
location string Tablonun konumu.
createdAt timestamp Tablo oluşturulduğunda.
Lastmodified timestamp Tablonun en son ne zaman değiştirildiğinde.
partitionColumns dize dizisi Tablo bölümlenmişse bölüm sütunlarının adları.
numFiles long Tablonun en son sürümündeki dosyaların sayısı.
sizeInBytes int Tablonun en son anlık görüntüsünün bayt cinsinden boyutu.
properties dize dizesi eşleme Bu tablo için ayarlanan tüm özellikler.
minReaderVersion int Tabloyu okuyabilen en düşük okuyucu sürümü (günlük protokolüne göre).
minWriterVersion int Tabloya yazabilmesi gereken en düşük yazıcı sürümü (günlük protokolüne göre).
+------+--------------------+------------------+-----------+--------------------+--------------------+-------------------+----------------+--------+-----------+----------+----------------+----------------+
|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|
+------+--------------------+------------------+-----------+--------------------+--------------------+-------------------+----------------+--------+-----------+----------+----------------+----------------+

Bir Parquet tablosunu bir Delta tablosuna Dönüştür

Bir Parquet tablosunu yerinde bir Delta tablosuna dönüştürün. Bu komut dizindeki tüm dosyaları listeler, bu dosyaları izleyen bir Delta Gölü işlem günlüğü oluşturur ve tüm Parquet dosyalarının alt bilgilerini okuyarak veri şemasını otomatik olarak okur. Verileriniz bölümlenirse, Bölüm sütunlarının şemasını DDL biçimli bir dize (yani,) olarak belirtmeniz gerekir <column-name1> <type>, <column-name2> <type>, ... .

Not

bir parquet tablosu yapılandırılmış akış tarafından oluşturulduysa, dosya listesinin, _spark_metadata SQL yapılandırmasını olarak ayarlama tablosunda yer alan dosyalar için truth kaynağı olarak, alt dizin kullanılarak kaçınılabilir spark.databricks.delta.convert.useMetadataLogtrue .

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)

Sözdizimi ayrıntıları için bkz.

Python

Not

Python API 'SI Databricks Runtime 6,1 ve üzeri sürümlerde kullanılabilir.

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

Not

Scala API 'SI Databricks Runtime 6,0 ve üzeri sürümlerde kullanılabilir.

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

Not

Scala API 'SI Databricks Runtime 6,0 ve üzeri sürümlerde kullanılabilir.

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");

Not

Delta Gölü tarafından izlenmeyen tüm dosyalar görünmez ve çalıştırdığınızda silinebilir vacuum . Dönüştürme işlemi sırasında veri dosyalarını güncelleştirmeden veya eklemekten kaçının. Tablo dönüştürüldükten sonra, tüm yazmamaların Delta Gölü aracılığıyla geldiğinden emin olun.

Delta tablosunu bir Parquet tablosuna dönüştürme

Aşağıdaki adımları kullanarak, bir Delta tablosunu bir Parquet tablosuna kolayca geri dönüştürebilirsiniz:

  1. Veri dosyalarını (örneğin, veya) değiştiremeyen Delta Gölü işlemleri gerçekleştirdiyseniz deletemerge , tablonun en son sürümüne ait olmayan tüm veri dosyalarını silmek için 0 saat bekletmede delete 'yi çalıştırın.
  2. _delta_logTablo dizinindeki dizini silin.

Bir Delta tablosunu önceki bir duruma geri yükleme

Not

Databricks Runtime 7,4 ve üzeri sürümlerde kullanılabilir.

Bir Delta tablosunu komutunu kullanarak önceki durumuna geri yükleyebilirsiniz RESTORE . Bir Delta tablosu, tablonun önceki bir duruma geri yüklenmesini sağlayan geçmiş sürümlerini dahili olarak tutar. Önceki duruma karşılık gelen bir sürüm veya önceki durumun oluşturulduğu zaman damgası komut tarafından seçenekler olarak desteklenir RESTORE .

Önemli

  • Zaten geri yüklenmiş bir tabloyu ve klonlanmış tabloları geri yükleyebilirsiniz.
  • Tablo, veri dosyalarının el ile silindiği eski bir sürüme geri yükleme vacuum işlemi başarısız olur. Olarak ayarlanırsa, bu sürüme kısmen geri yükleme işlemi yine de mümkündür spark.sql.files.ignoreMissingFilestrue .
  • Önceki bir duruma geri yükleme için zaman damgası biçimi yyyy-MM-dd HH:mm:ss . Yalnızca Date ( yyyy-MM-dd ) dizesi sağlama de desteklenir.

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

Sözdizimi ayrıntıları için bkz. restore (Azure Databricks Delta Lake).

Ölçümleri geri yükleme

Not

Databricks Runtime 8,2 ve üzeri sürümlerde kullanılabilir.

RESTORE işlem tamamlandıktan sonra aşağıdaki ölçümleri tek satırlık bir veri çerçevesi olarak raporlar:

  • table_size_after_restore: Geri yüklendikten sonra tablonun boyutu.
  • num_of_files_after_restore: Geri yüklendikten sonra tablodaki dosya sayısı.
  • num_removed_files: Tablodan kaldırılan dosya sayısı (mantıksal olarak silinir).
  • num_restored_files: Geri alınması nedeniyle geri yüklenen dosya sayısı.
  • removed_files_size: Tablodan kaldırılan dosyaların bayt cinsinden toplam boyutu.
  • restored_files_size: Geri yüklenen dosyaların bayt cinsinden toplam boyutu.

Ölçümleri geri yükleme örneği

Tabloya erişim denetimi

MODIFYGeri yüklenmekte olan tabloda izninizin olması gerekir.

Bir Delta tablosu kopyalama

Not

Databricks Runtime 7.1 ve üzerinde kullanılabilir.

Komutunu kullanarak, mevcut bir Delta tablosunun bir kopyasını belirli bir sürümde oluşturabilirsiniz clone . Klonlar derin ya da yüzeysel olabilir.

Bu bölümdeki konular:

Kopya türleri

  • Derin bir kopya , kaynak tablo verilerini var olan tablonun meta verilerine ek olarak kopyalama hedefine kopyalayan bir kopyadır. Ayrıca, akış meta verileri de, Delta tablosuna yazan bir akış bir kaynak tabloda durdurulup bir kopyanın hedeften itibaren devam ettirmeye devam edebildiği şekilde klonlanır.
  • Basit bir kopya , veri dosyalarını kopya hedefine kopyalamakbir kopyasıdır. Tablo meta verileri kaynak ile eşdeğerdir. Bu kopyalar oluşturmak için de kullanılır.

Derin ya da yüzeysel klonlara yapılan tüm değişiklikler, kaynak tabloya değil yalnızca klonları etkiler.

Kopyalanan meta veriler şunları içerir: şema, bölümleme bilgileri, ınvaryantlar, null olabilme. Yalnızca derin kopyalar için, Stream ve Copy (Azure Databricks Delta Lake) meta verileri de klonlanır. Kopyalanmamış meta veriler tablo açıklaması ve Kullanıcı tanımlı tamamlama meta verileri.

Önemli

  • Kaynak dizindeki basit klonların başvuru verileri dosyaları. vacuumKaynak tabloda çalıştırırsanız istemciler artık başvurulan veri dosyalarını okuyamayacak ve bir FileNotFoundException oluşturulur. Bu durumda, yüzeysel kopya üzerinde Değiştir ile birlikte çalışma, kopyayı onarır. Bu durum genellikle oluşursa, kaynak tabloya bağlı olmayan derin bir kopya kullanmayı düşünün.
  • Derin klonlar klonlanan kaynağa bağlı değildir, ancak derin bir kopya, verileri ve meta verileri de kopyalar.
  • Bu yolda zaten bir tablo olan bir hedefe ile kopyalama, replace Bu yolda mevcut değilse bir Delta günlüğü oluşturur. ' İ çalıştırarak var olan tüm verileri temizleyebilirsiniz vacuum . Mevcut tablo bir Delta tablosu ise, yeni meta verileri ve kaynak tablodaki yeni verileri içeren varolan Delta tablosunda yeni bir kayıt oluşturulur.
  • Bir tabloyu kopyalama veya ile aynı Create Table As SelectCTAS değildir. Kopya, verilere ek olarak kaynak tablonun meta verilerini kopyalar. Kopyalamanın daha basit söz dizimi de vardır: Kaynak tablodan alınarak bölümleme, biçim, sabitler, null kullanılabilirlik gibi değerleri belirtmenize gerek yok.
  • Kopyalanan tablo, kaynak tablosundan bağımsız bir geçmiş içerir. Kopyalanan bir tablodaki zaman yolculuğu sorguları, kaynak tablosunda olduğu gibi aynı girişlerle birlikte çalışmaz.

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

Söz dizimi ayrıntıları için bkz. CLONE (Azure Databricks Delta Lake).

Ölçümleri kopyalama

Not

8.2 Databricks Runtime ve üzeri bir şekilde kullanılabilir.

CLONE işlem tamamlandıktan sonra aşağıdaki ölçümleri tek satırlık bir DataFrame olarak raporlar:

  • source_table_size: Bayt cinsinden kopyalanan kaynak tablonun boyutu.
  • source_num_of_files: Kaynak tablodaki dosya sayısı.
  • num_removed_files: Tablo değiştirılıyorsa, geçerli tablodan kaç dosya kaldırılır.
  • num_copied_files: Kaynaktan kopyalanan dosya sayısı (basit kopyalar için 0).
  • removed_files_size: Geçerli tablodan kaldırılan dosyaların bayt cinsinden boyutu.
  • copied_files_size: Tabloya kopyalanan dosyaların bayt cinsinden boyutu.

Ölçümleri kopyalama örneği

İzinler

Tablo erişim denetimi Azure Databricks bulut sağlayıcınız için izinleri yapılandırmanız gerekir.

Tabloya erişim denetimi

Hem derin hem de basit kopyalar için aşağıdaki izinler gereklidir:

  • SELECT kaynak tablo üzerinde izni.
  • yeni bir CLONE tablo oluşturmak için kullanıyorsanız, CREATE tabloyu oluşturmakta olduğu veritabanı üzerinde izin.
  • Bir tabloyu CLONE değiştirmek için kullanıyorsanız tablo üzerinde MODIFY izninizin olması gerekir.

Bulut sağlayıcısı izinleri

Bir derin kopya oluşturduysanız, derin kopyayı okuyabilen tüm kullanıcılar kopyanın dizinine okuma erişimine sahip olmalıdır. Kopyada değişiklik yapmak için kullanıcıların kopyanın dizinine yazma erişimi olmalıdır.

Basit bir kopya oluşturduysanız, basit kopyayı okuyabilen tüm kullanıcılar özgün tablodaki dosyaları okuma iznine sahip olmalıdır çünkü veri dosyaları hem basit kopyalarla kaynak tabloda hem de kopyanın dizininde kalır. Kopyada değişiklik yapmak için kullanıcıların kopyanın dizinine yazma erişimi olmalıdır.

Kopyalama kullanım örnekleri

Bu bölümdeki konular:

Veri arşivleme

Verilerin zaman yolculuğu veya olağanüstü durum kurtarma için uygun olandan daha uzun süre tutulması gerekir. Bu durumlarda, bir tablonun arşiv için belirli bir noktada durumunu korumak için bir derin kopya oluşturabilirsiniz. Artımlı arşivleme, olağanüstü durum kurtarma için bir kaynak tablonun sürekli güncelleştirilen durumunu tutmak için de mümkündür.

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

Makine öğrenmesi akışı yeniden üretme

Makine öğrenmesi yaparken, bir tablodaki belirli bir sürümü arşivlemek ve bu modeli eğitmiş ML olabilir. Bu arşivlenmiş veri kümesi kullanılarak gelecekteki modeller test edilebilir.

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

Üretim tablosunda kısa süreli denemeler

Bir iş akışını tabloyu bozmadan üretim tablosunda test etmek için kolayca basit bir kopya oluşturabilirsiniz. Bu, tüm üretim verilerini içeren ancak üretim iş yüklerini etkilemeden kopyalanan tabloda rastgele iş akışları çalıştırmanızı sağlar.

-- 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;

Veri paylaşımı

Tek bir kuruluş içindeki diğer iş birimleri aynı verilere erişmek istiyor olabilir ancak en son güncelleştirmeleri istemeyebilirsiniz. Kaynak tabloya doğrudan erişim vermek yerine farklı iş birimleri için farklı izinlere sahip kopyalar sebilirsiniz. Kopyanın performansı basit bir görünümün performansını aşabilirsiniz.

-- 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`;

Tablo özelliği geçersiz kılmaları

Tablo özelliği geçersiz kılmaları özellikle aşağıdakiler için yararlıdır:

  • Farklı iş birimleriyle veri paylaşımında tablolara sahip veya kullanıcı bilgileriyle açıklama ekleme.

  • Delta tablolarını ve zaman yolculuğu arşivlemek gerekir. Arşiv tablosu için günlük saklama dönemini bağımsız olarak belirtebilirsiniz. Örneğin:

    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 oturumunda son işleme sürümünü bulma

Not

Databricks Runtime 7.1 ve üzerinde kullanılabilir.

Tüm iş parçacıklarında geçerli tarafından yazılan son işlemenin sürüm SparkSession numarasını almak için ve tüm tablolar için sorgu spark.databricks.delta.lastCommitVersionInSession SQL.

SQL

SET spark.databricks.delta.lastCommitVersionInSession

Python

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

Scala

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

tarafından herhangi bir işleme SparkSession yapılmışsa, anahtarı sorgulamak boş bir değer döndürür.

Not

Aynı şeyi birden çok iş SparkSession parçacığında paylaşıyorsanız, bu bir değişkeni paylaşmaya benzer birden çok iş parçacığında; Yapılandırma değeri güncelleştirildiğinde yarış koşullarına isabet ediyor olabilir Aynı anda.