Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
komutunu kullanarak clone belirli bir sürümde Azure Databricks'te var olan bir tablonun kopyasını oluşturun. Klonlar derin veya sığ olabilir.
Azure Databricks, Parquet ve Apache Iceberg tablolarını kopyalamayı da destekler. Bkz. Parquet ve Apache Iceberg tablolarını Delta Lake'e artımlı olarak kopyalama.
Unity Kataloğu ile çoğaltmayı kullanma hakkında ayrıntılı bilgi için bkz. Unity Kataloğu tabloları için Shallow Clone.
Not
Databricks, farklı kuruluşlar genelindeki tablolara salt okunur erişim sağlamak için Delta Sharing kullanılmasını önerir. Bkz . Delta Sharing nedir?.
Klon türleri
- Derin kopya, var olan tablonun meta verilerine ek olarak kaynak tablo verilerini kopyalama hedefine kopyalayan bir kopyadır. Ayrıca, Delta tablosuna yazan bir akışın, bir kaynak tabloda durdurulabilmesi ve kopyanın hedef tablosunda kaldığı yerden devam edebilmesi için akış meta verileri de klonlanır.
- Sığ bir kopya, veri dosyalarını kopyalama hedefine kopyalamayan bir kopyadır. Tablo meta verileri kaynağa eşdeğerdir. Bu kopyaların oluşturulması daha ucuz.
Kopyalanan meta veriler şunlardır: şema, bölümleme bilgileri, değişmezler, boş değer atanabilirliği. Yalnızca derin kopyalarda, akış ve COPY INTO meta veri de kopyalanır. Meta veriler kopyalanmamış tablo açıklaması ve kullanıcı tanımlı işleme meta verileridir.
Delta kopyalama işlemlerinin semantiği nedir?
Hive meta veri deposuna kayıtlı bir Delta tablosuyla veya tablo olarak kaydedilmemiş bir dosya koleksiyonuyla çalışıyorsanız, clone aşağıdaki semantiği içerir:
Önemli
Databricks Runtime 13.3 LTS ve üzeri sürümlerde, Unity Catalog tarafından yönetilen tablolar, yüzeysel kopyaları destekler. Unity Kataloğu tabloları için kopya semantiği, diğer ortamlardaki kopya semantiğinden farklıdır. Unity Kataloğu tabloları için Shallow clone ifadesine bakın.
- Derin veya sığ kopyalarda yapılan tüm değişiklikler, kaynak tabloyu değil yalnızca kopyaları etkiler.
- Sığ kopyalar kaynak dizindeki veri dosyalarına başvurur. Kaynak tabloda çalıştırırsanız
vacuum, istemciler artık başvurulan veri dosyalarını okuyamıyor ve birFileNotFoundExceptionoluşturulur. Bu durumda, sığ kopya üzerinde "replace" ile klonu çalıştırmak klonu onarır. Bu durum sık sık gerçekleşirse, bunun yerine kaynak tabloya bağımlı olmayan derin bir kopya kullanmayı göz önünde bulundurun. - Derin kopyalamalar, kopyalandıkları kaynağa bağlı değildir, ancak derin bir kopya hem verileri hem de meta verileri kopyaladığı için oluşturulması pahalıdır.
-
replacekullanılarak kopyalama, bu yol üzerinde zaten bir tablo bulunan bir hedefe gönderildiğinde ve bu yolda bir Delta günlüğü mevcut değilse, bir Delta günlüğü oluşturur. komutunu çalıştırarakvacuummevcut verileri temizleyebilirsiniz. - Mevcut Delta tabloları için, yeni meta verileri ve kaynak tablodaki yeni verileri içeren yeni bir işleme oluşturulur. Bu yeni işleme artımlı olur, yani yalnızca son kopyadan bu yana yapılan yeni değişiklikler tabloya işlenir.
- Tabloyu klonlama,
Create Table As SelectveyaCTASile aynı değildir. Kopya, verilere ek olarak kaynak tablonun meta verilerini de kopyalar. Kopyalama işleminin daha basit bir söz dizimi vardır: bölümleme, biçim, sabit değerler, null değer atanabilirliği vb. özellikleri belirtmeniz gerekmez, çünkü bunlar kaynak tablodan alındıkları için otomatik olarak uygulanır. - Kopyalanan bir tablonun kaynak tablosundan bağımsız bir geçmişi vardır. Kopyalanan bir tablodaki zaman bazlı sorgular, kaynak tabloda kullanılan aynı girişlerle çalışmaz.
Örnek klon söz dizimi
Aşağıdaki kod örneklerinde derin ve sığ kopya oluşturmaya yönelik söz dizimi gösterilmektedir:
SQL
CREATE TABLE target_table CLONE source_table; -- Create a deep clone of source_table as target_table
CREATE OR REPLACE TABLE target_table CLONE source_table; -- Replace the target
CREATE TABLE IF NOT EXISTS target_table CLONE source_table; -- No-op if the target table exists
CREATE TABLE target_table SHALLOW CLONE source_table;
CREATE TABLE target_table SHALLOW CLONE source_table VERSION AS OF version;
CREATE TABLE target_table SHALLOW CLONE source_table TIMESTAMP AS OF timestamp_expression; -- timestamp can be like “2019-01-01” or like date_sub(current_date(), 1)
Piton
Python DeltaTable API'si Delta Lake'e özgüdür.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "source_table")
deltaTable.clone(target="target_table", isShallow=True, replace=False) # clone the source at latest version
deltaTable.cloneAtVersion(version=1, target="target_table", isShallow=True, replace=False) # clone the source at a specific version
# clone the source at a specific timestamp such as timestamp="2019-01-01"
deltaTable.cloneAtTimestamp(timestamp="2019-01-01", target="target_table", isShallow=True, replace=False)
Scala programlama dili
Scala DeltaTable API'si Delta Lake'e özgüdür.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "source_table")
deltaTable.clone(target="target_table", isShallow=true, replace=false) // clone the source at latest version
deltaTable.cloneAtVersion(version=1, target="target_table", isShallow=true, replace=false) // clone the source at a specific version
deltaTable.cloneAtTimestamp(timestamp="2019-01-01", target="target_table", isShallow=true, replace=false) // clone the source at a specific timestamp
Söz dizimi ayrıntıları için bkz. CREATE TABLE CLONE.
Metrikleri klonlama
CLONE işlem tamamlandıktan sonra aşağıdaki ölçümleri tek satırlık DataFrame olarak bildirir:
-
source_table_size: Bayt cinsinden kopyalanan kaynak tablonun boyutu. -
source_num_of_files: Kaynak tablodaki dosya sayısı. -
num_removed_files: Tablo değiştiriliyorsa, geçerli tablodan kaç dosya kaldırılır. -
num_copied_files: Kaynaktan kopyalanan dosyaların sayısı (sığ klonlar 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.
İzinler
Azure Databricks tablosu erişim denetimi ve bulut sağlayıcınız için izinleri yapılandırmanız gerekir.
Tabloya erişim denetimi
Hem derin hem de sığ kopyalar için aşağıdaki izinler gereklidir:
-
SELECTkaynak tablosu üzerindeki izinler. - Yeni bir tablo oluşturmak için
CLONEkullanıyorsanız, tabloyu oluşturduğunuz veritabanındaCREATEizinlerine sahip olun. - Tabloyu değiştirmek için
CLONEkullanıyorsanız, tablo üzerindeMODIFYiznine sahip olmalısınız.
Bulut sağlayıcısı izinleri
Derin bir kopya oluşturduysanız, derin kopyayı okuyan tüm kullanıcıların kopyanın dizinine okuma erişimi olmalıdır. Kopyada değişiklik yapmak için kullanıcıların kopyanın dizinine yazma erişimi olmalıdır.
Sığ bir kopya oluşturduysanız, sığ kopyayı okuyan herhangi bir kullanıcının özgün tablodaki dosyaları okuma iznine sahip olması gerekir, çünkü veri dosyaları hem sığ kopyalarla hem de kopyanın diziniyle kaynak tabloda kalır. Kopyada değişiklik yapmak için kullanıcıların kopyanın dizinine yazma erişimine sahip olması gerekir.
Veri arşivleme için kopya kullanma
Arşivleme amacıyla bir tablonun belirli bir noktadaki durumunu korumak için derin kopya kullanabilirsiniz. Olağanüstü durum kurtarma için bir kaynak tablonun güncellenmiş bir durumunu korumak amacıyla derin kopyaları artımlı olarak eşitleyebilirsiniz.
-- Every month run
CREATE OR REPLACE TABLE archive_table CLONE my_prod_table
Makine öğrenimi modeli çoğaltmak için klon kullanın.
Makine öğrenmesi yaparken, ml modelini eğittiğiniz tablonun belirli bir sürümünü arşivleyebilirsiniz. Gelecekteki modeller bu arşivlenmiş veri kümesi kullanılarak test edilebilir.
-- Trained model on version 15 of Delta table
CREATE TABLE model_dataset CLONE entire_dataset VERSION AS OF 15
Üretim tablosunda kısa süreli denemeler için klon kullanma
Üretim tablosundaki bir iş akışını tabloyu bozmadan test etmek için kolayca sığ bir kopya oluşturabilirsiniz. Bu, kopyalanan tabloda tüm üretim verilerini içeren ancak üretim iş yüklerini etkilemeyen 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;
Tablo özelliklerini aşmak için klon kullanma
Tablo özelliklerinin geçersiz kılınması özellikle şu durumlar için kullanışlıdır:
- Farklı iş birimleriyle veri paylaşırken sahip veya kullanıcı bilgileriyle tablolara açıklama ekleme.
- Delta tablolarının ve tablo geçmişinin arşivlenmesi veya geçmişe yönelik sorgulama yapılması gereklidir. Arşiv tablosu için verileri ve günlük saklama sürelerini bağımsız olarak belirtebilirsiniz. Örneğin:
SQL
-- For Delta tables
CREATE OR REPLACE TABLE archive_table CLONE prod.my_table
TBLPROPERTIES (
delta.logRetentionDuration = '3650 days',
delta.deletedFileRetentionDuration = '3650 days'
)
-- For Iceberg tables
CREATE OR REPLACE TABLE archive_table CLONE prod.my_table
TBLPROPERTIES (
iceberg.logRetentionDuration = '3650 days',
iceberg.deletedFileRetentionDuration = '3650 days'
)
Piton
Python DeltaTable API'si Delta Lake'e özgüdür.
dt = DeltaTable.forName(spark, "prod.my_table")
tblProps = {
"delta.logRetentionDuration": "3650 days",
"delta.deletedFileRetentionDuration": "3650 days"
}
dt.clone(target="archive_table", isShallow=False, replace=True, tblProps)
Scala programlama dili
Scala DeltaTable API'si Delta Lake'e özgüdür.
val dt = DeltaTable.forName(spark, "prod.my_table")
val tblProps = Map(
"delta.logRetentionDuration" -> "3650 days",
"delta.deletedFileRetentionDuration" -> "3650 days"
)
dt.clone(target="archive_table", isShallow = false, replace = true, properties = tblProps)