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.
Belirli bir sürümde CLONE bağımsız bir kopya oluşturmak için komutunu kullanarak Delta Lake veya Apache Iceberg tablosunu kopyalayın. Derin kopyalar hem verileri hem de meta verileri kopyalar. Basit kopyalar yalnızca meta verileri kopyalar ve derin kopyalardan daha az işlem ve depolama kullanarak kaynak veri dosyalarına başvurur.
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 ve Yönetilen Iceberg tablosunu 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.
Note
Databricks, farklı kuruluşlar genelindeki tablolara salt okunur erişim sağlamak için OpenSharing kullanılmasını önerir. Bkz. OpenSharing nedir?.
Klon türleri
Aşağıdaki kopya türleri kullanılabilir:
| Type | SQL Söz Dizimi | Açıklama |
|---|---|---|
| Derin klonlama |
CLONE veya DEEP CLONE |
Hem verileri hem de meta verileri kaynak tablodan kopya hedefine kopyalar( akış meta verileri de dahil). Kaynak tablosuna yazan bir akış durdurulup klon hedefinde kaldığı yerden devam ettirilebilir. |
| Sığ kopya | SHALLOW CLONE |
Kaynak tablodan kopya hedefine yalnızca meta verileri kopyalar. Veri dosyaları kopyalanmaz. İşlem daha az işlem kaynağı ve depolama alanı kullandığından, basit kopyaların oluşturulması daha ucuz olur. |
Kopyalanan meta verileri şunları içerir: şema, bölümleme bilgileri, değişmezler, boş değer atanabilirliği ve TBLPROPERTIES. Yalnızca derin kopyalarda, akış ve COPY INTO meta veri de kopyalanır. Meta veriler kopyalanmamış tablo açıklaması, kullanıcı tanımlı işleme meta verileri, Delta Lake tablo geçmişi ve etiketler gibi Unity Kataloğu özellikleridir.
Note
Akış tabloları ve somutlaştırılmış görünümler CLONE desteklemez. Bir derin veya sığ kopyada kaynak ya da hedef olarak akış tablosu veya somutlaştırılmış görünüm kullanamazsınız. Bkz. Sınırlamalar ve Sınırlamalar.
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 kopyanın okuyucuları, kopyanın dizinine okuma erişimine ihtiyaç duyar. Yazarlar, kopyanın dizinine yazma erişimine sahip olmalıdır.
Basit bir kopyanın okuyucuları hem kaynak tablonun veri dosyalarına hem de kopyanın dizinine okuma erişimine ihtiyaç duyar, çünkü veri dosyaları kaynakta kalır. Yazarlar, kopyanın dizinine yazma erişimine sahip olmalıdır.
Examples
Derin veya sığ klonlar oluşturma
Aşağıdaki kod örnekleri, derin ve sığ kopyaların nasıl oluşturulacağını gösterir:
SQL
Derin bir kopya oluşturun:
CREATE TABLE target_table CLONE source_table;
Var olan bir hedefi değiştirme:
CREATE OR REPLACE TABLE target_table CLONE source_table;
Derin bir kopya oluşturun veya hedef zaten mevcutsa atlayın:
CREATE TABLE IF NOT EXISTS target_table CLONE source_table;
En son sürümde, belirli bir sürümde veya belirli bir zaman damgasında sığ bir kopya oluşturun. Zaman damgası gibi '2019-01-01' bir tarih dizesi veya gibi date_sub(current_date(), 1)bir ifade olabilir.
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;
Python
Python DeltaTable API'si Delta Lake'e özgüdür.
Kaynağı en son sürümde klonla:
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "source_table")
deltaTable.clone(target="target_table", isShallow=True, replace=False)
Kaynağı belirli bir sürümde klonlayın:
deltaTable.cloneAtVersion(version=1, target="target_table", isShallow=True, replace=False)
Kaynağı belirli bir zaman damgasında klonlayın:
deltaTable.cloneAtTimestamp(timestamp="2019-01-01", target="target_table", isShallow=True, replace=False)
Scala
Scala DeltaTable API'si Delta Lake'e özgüdür.
Kaynağı en son sürümde klonla:
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "source_table")
deltaTable.clone(target="target_table", isShallow=true, replace=false)
Kaynağı belirli bir sürümde klonlayın:
deltaTable.cloneAtVersion(version=1, target="target_table", isShallow=true, replace=false)
Kaynağı belirli bir zaman damgasında klonlayın:
deltaTable.cloneAtTimestamp(timestamp="2019-01-01", target="target_table", isShallow=true, replace=false)
Söz dizimi ayrıntıları için bkz. CREATE TABLE CLONE.
Kopyalama sırasında meta verilerini kontrol etme CLONE
Bu örnek, CLONE işlemleri sırasında hangi meta verilerin kopyalanıp hangilerinin kopyalanmadığını, özellikle de TBLPROPERTIES, Unity Catalog etiketleri ve Delta Lake geçmişini gösterir.
Özel özelliği ve varsayılan olmayan günlük saklama süresi olan bir kaynak tablo oluşturun, ardından tablo geçmişi oluşturmak için veri ekleyin:
CREATE OR REPLACE TABLE test_clone_source (id INT, val STRING)
TBLPROPERTIES ('my.custom.prop' = 'hello', 'delta.logRetentionDuration' = '12 days');
ALTER TABLE test_clone_source SET TAGS ('team' = 'data-eng', 'env' = 'prod');
INSERT INTO test_clone_source VALUES (1, 'a');
INSERT INTO test_clone_source VALUES (2, 'b');
Derin bir kopya ve sığ bir kopya oluşturun:
CREATE OR REPLACE TABLE test_clone_deep DEEP CLONE test_clone_source;
CREATE TABLE test_clone_shallow SHALLOW CLONE test_clone_source;
Note
Unity Kataloğu'nda, mevcut bir sığ klonun üzerine yazmak için CREATE OR REPLACE kullanamazsınız.
DROP TABLE öğesini ve ardından CREATE TABLE öğesini kullanın ya da yeni bir tablo adı kullanın. Bkz. Sınırlamalar.
TBLPROPERTIES öğesinin her iki klona da kopyalandığını onaylayın:
SHOW TBLPROPERTIES test_clone_source;
SHOW TBLPROPERTIES test_clone_deep;
SHOW TBLPROPERTIES test_clone_shallow;
Unity Kataloğu etiketlerinin kopyalara kopyalanmamış olduğunu onaylayın:
SELECT catalog_name, schema_name, table_name, tag_name, tag_value FROM information_schema.table_tags WHERE table_name = 'test_clone_source';
SELECT catalog_name, schema_name, table_name, tag_name, tag_value FROM information_schema.table_tags WHERE table_name = 'test_clone_deep';
SELECT catalog_name, schema_name, table_name, tag_name, tag_value FROM information_schema.table_tags WHERE table_name = 'test_clone_shallow';
Delta Lake geçmişinin klonlara kopyalanmadığını doğrulayın:
DESCRIBE HISTORY test_clone_source;
DESCRIBE HISTORY test_clone_deep;
DESCRIBE HISTORY test_clone_shallow;
Temizlemek:
DROP TABLE IF EXISTS test_clone_shallow;
DROP TABLE IF EXISTS test_clone_source;
DROP TABLE IF EXISTS test_clone_deep;
Veri arşivleme
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.
Arşivi eşitlemek için ayda bir kez aşağıdaki komutu çalıştırın:
CREATE OR REPLACE TABLE archive_table CLONE my_prod_table
ML modeli yeniden oluşturma
Makine öğrenmesi kullanım örnekleri için, ml modelini eğitmek için kullanılan bir tablonun sürümünü arşivleyebilirsiniz. Gelecekteki modeller bu arşivlenmiş veri kümesi kullanılarak test edilebilir. ile CLONEbir veri kümesi sürümünü arşiv etmek için aşağıdakileri yapın:
Örneğin, bir modeli 15. sürümde eğitmek için kullanılan tablonun sürümünü arşivle:
CREATE TABLE model_dataset CLONE entire_dataset VERSION AS OF 15
Üretim tablosunda kısa süreli denemeler
Üretim tablosundaki bir iş akışını tabloyu bozmadan test etmek için sığ bir kopya oluşturun. Sığ klonlar, tüm üretim verilerini referans alan ancak hiçbir üretim iş yükünü etkilemeyen klonlanan tabloda iş yükleri çalıştırmanıza olanak tanır.
Üretim tablosunun sığ bir kopyasını oluşturun:
CREATE TABLE my_test SHALLOW CLONE my_prod_table;
Note
Unity Kataloğu'nda, mevcut bir sığ klonun üzerine yazmak için CREATE OR REPLACE kullanamazsınız.
DROP TABLE öğesini ve ardından CREATE TABLE öğesini kullanın ya da yeni bir tablo adı kullanın. Bkz. Sınırlamalar.
Kopyada güncelleştirmeleri ve doğrulamaları çalıştırın:
UPDATE my_test WHERE user_id is null SET invalid=true;
Hazır olduğunuzda değişiklikleri birleştirin. Birleştirme, yalnızca mümkün olduğunda değiştirilen dosyaları ayıklamak için kopyadaki güncelleştirme bilgilerini kullanır:
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 *;
İşiniz bittiğinde klonu silin:
DROP TABLE my_test;
Tablo özelliklerini geçersiz kılma
Tablo özelliklerini geçersiz kılma şunlar için kullanışlıdır:
- Farklı iş birimleriyle veri paylaşırken sahip veya kullanıcı bilgileriyle tablolara açıklama ekleme.
- Arşivde zaman yolculuğuna ihtiyacınız olduğunda Delta Lake tablolarını arşivleme. Arşiv tablosu için verileri ve günlük saklama sürelerini bağımsız olarak belirtebilirsiniz. Örneğin:
SQL
Delta Lake tablosu için:
CREATE OR REPLACE TABLE archive_table CLONE prod.my_table
TBLPROPERTIES (
delta.logRetentionDuration = '3650 days',
delta.deletedFileRetentionDuration = '3650 days'
)
Iceberg tablosu için:
CREATE OR REPLACE TABLE archive_table CLONE prod.my_table
TBLPROPERTIES (
iceberg.logRetentionDuration = '3650 days',
iceberg.deletedFileRetentionDuration = '3650 days'
)
Python
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
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)
Eski Hive meta veri deposu için kopyalama işlemi davranışı
Important
Databricks Runtime 13.3 LTS ve üzeri sürümlerde, Unity Catalog tarafından yönetilen tablolar sığ klonları destekler. Unity Kataloğu tabloları için kopyalama davranışı, diğer ortamlardaki kopyalama davranışından farklıdır. Unity Kataloğu tabloları için Shallow clone ifadesine bakın.
Hive meta veri deposuna kaydedilmiş bir Delta Lake tablosu veya tablo olarak kaydedilmemiş bir dosya koleksiyonu için, kopya aşağıdaki davranışlara sahiptir:
- Derin veya sığ klonlarda yapılan değişiklikler kaynak tabloyu etkilemez.
- Sığ kopyalar kaynak dizindeki veri dosyalarına başvurur. Kaynak tabloda çalıştırırsanız
VACUUM, istemciler artık bu veri dosyalarını okuyamıyor ve bu da birFileNotFoundExceptionoluşturur. Düzeltmek için, sığ klon üzerindereplaceile clone komutunu çalıştırın. Bu durum sık sık gerçekleşirse, kaynak tabloya bağlı olmayan derin bir kopya kullanmayı göz önünde bulundurun. - Derin kopyalamalar kaynak tabloya bağımlı değildir, ancak hem verileri hem de meta verileri kopyaladıkları için oluşturulması pahalıdır.
-
replaceile, bu yolda zaten bir tablo bulunan bir hedefe klonlama, mevcut değilse bir Delta günlüğü oluşturur. Mevcut verileri temizlemek için komutunu çalıştırınVACUUM. - Mevcut Delta Lake tabloları için kopyalama, son kopyadan bu yana kaynak tablodan yalnızca yeni meta verileri ve verileri içeren yeni bir artımlı işleme oluşturur.
- Bir tablonun kopyalanması (
Create Table As SelectileCTASarasında farklılık gösterir. Kopya, verilere ek olarak kaynak tablo meta verilerini de kopyalar. Bölümleme, biçim, değişmezler, null olabilirlik veya diğer ayarları belirtmeniz gerekmez. - Kopyalanan bir tablonun kaynak tablosundan bağımsız bir geçmişi vardır. Kopyalanan bir tablodaki zaman yolculuğu sorguları, kaynak tablodakilerle aynı girişlerle çalışmaz.