Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Naklonujte tabulku Delta Lake nebo Apache Iceberg pomocí CLONE příkazu k vytvoření nezávislé kopie v konkrétní verzi. Hluboké klony kopírují data i metadata. Mělké klony kopírují pouze metadata a odkazují na zdrojové datové soubory, které využívají méně výpočetních prostředků a úložiště než hluboké klony.
Azure Databricks také podporuje klonování tabulek Parquet a Apache Iceberg. Viz Postupné klonování tabulek Parquet a Apache Iceberg do Delta Lake a Klonování spravované tabulky Iceberg.
Podrobnosti o použití klonování s katalogem Unity naleznete v tématu Mělké klonování pro tabulky katalogu Unity.
Poznámka:
Databricks doporučuje používat OpenSharing k zajištění přístupu jen pro čtení k tabulkám v různých organizacích. Viz Co je OpenSharing?
Typy klonů
K dispozici jsou následující typy klonů:
| Typ | Syntaxe SQL | Description |
|---|---|---|
| Hloubkové klonování |
CLONE nebo DEEP CLONE |
Zkopíruje data i metadata ze zdrojové tabulky do cíle klonování, včetně metadat datového proudu. Stream, který zapisuje do zdrojové tabulky, se dá zastavit a pokračovat v cíli klonování, ze kterého skončil. |
| Mělký klon | SHALLOW CLONE |
Zkopíruje pouze metadata ze zdrojové tabulky do cíle klonování. Datové soubory se nekopírují. Mělké klony jsou levnější k vytvoření, protože operace využívá méně výpočetních prostředků a úložného prostoru. |
Klonovaná metadata zahrnují: schéma, informace o dělení, invarianty, nulovost a TBLPROPERTIES. Pouze pro hluboké klony se naklonují také metadata datových proudů a COPY INTO. Mezi metadata, která se neklonují, patří popis tabulky, metadata commitu definovaná uživatelem, historie tabulky v systému Delta Lake a vlastnosti katalogu Unity, jako jsou tagy.
Poznámka:
Streamované tabulky a materializovaná zobrazení nepodporují CLONE. Jako zdroj nebo cíl hlubokého nebo mělkového klonu nelze použít streamovací tabulku nebo materializované zobrazení. Viz Omezení a omezení.
Klonované metriky
CLONE po dokončení operace udává následující metriky jako datový rámec s jedním řádkem:
-
source_table_size: Velikost zdrojové tabulky, která se klonuje v bajtech. -
source_num_of_files: Počet souborů ve zdrojové tabulce. -
num_removed_files: Pokud se tabulka nahrazuje, kolik souborů se z aktuální tabulky odebere. -
num_copied_files: Počet souborů, které byly zkopírovány ze zdroje (0 pro mělké klony). -
removed_files_size: Velikost v bajtech souborů, které jsou odebrány z aktuální tabulky. -
copied_files_size: Velikost v bajtech souborů zkopírovaných do tabulky.
Permissions
Musíte nakonfigurovat oprávnění pro řízení přístupu k tabulce Azure Databricks a poskytovatele cloudu.
Řízení přístupu k tabulkám
Pro hluboké i mělké klony jsou vyžadována následující oprávnění:
-
SELECToprávnění ke zdrojové tabulce. - Pokud k vytvoření nové tabulky používáte
CLONE, oprávnění k databázi,CREATEve které vytváříte tabulku. - Pokud k nahrazení tabulky používáte
CLONE, musíte mítMODIFYoprávnění k tabulce.
Oprávnění poskytovatele cloudu
Uživatelé hlubokého klonu potřebují oprávnění ke čtení adresáře klonu. Pro zápis do adresáře klonu je vyžadováno oprávnění k zápisu.
Čtenáři mělkých klonů potřebují přístup pro čtení k datovým souborům zdrojové tabulky i k adresáři klonu, protože datové soubory zůstávají ve zdroji. Pro zápis do adresáře klonu je vyžadováno oprávnění k zápisu.
Examples
Vytvořte hluboké nebo mělké klony
Následující příklady kódu ukazují, jak vytvořit hluboké a mělké klony:
SQL
Vytvoření hlubokého klonu:
CREATE TABLE target_table CLONE source_table;
Nahrazení existujícího cíle:
CREATE OR REPLACE TABLE target_table CLONE source_table;
Vytvořte hloubkový klon nebo přeskočte, pokud cíl již existuje:
CREATE TABLE IF NOT EXISTS target_table CLONE source_table;
Vytvořte mělký klon v nejnovější verzi, v konkrétní verzi nebo v určitém časovém razítku. Časové razítko může být řetězec kalendářního data, například '2019-01-01' nebo výraz jako date_sub(current_date(), 1).
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
Rozhraní API Python DeltaTable je specifické pro Delta Lake.
Naklonujte zdroj v nejnovější verzi:
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "source_table")
deltaTable.clone(target="target_table", isShallow=True, replace=False)
Naklonujte zdroj v konkrétní verzi:
deltaTable.cloneAtVersion(version=1, target="target_table", isShallow=True, replace=False)
Klonujte zdroj k určitému časovému okamžiku:
deltaTable.cloneAtTimestamp(timestamp="2019-01-01", target="target_table", isShallow=True, replace=False)
Scala
Rozhraní Scala DeltaTable API je specifické pro Delta Lake.
Naklonujte zdroj v nejnovější verzi:
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "source_table")
deltaTable.clone(target="target_table", isShallow=true, replace=false)
Naklonujte zdroj v konkrétní verzi:
deltaTable.cloneAtVersion(version=1, target="target_table", isShallow=true, replace=false)
Klonujte zdroj k určitému časovému okamžiku:
deltaTable.cloneAtTimestamp(timestamp="2019-01-01", target="target_table", isShallow=true, replace=false)
Podrobnosti o syntaxi najdete v sekci CREATE TABLE CLONE.
Kontrola metadat zkopírovaných během CLONE
Tento příklad ukazuje metadata, která se během operací CLONE kopírují a nekopírují, konkrétně TBLPROPERTIES, tagy Unity Catalog a historii Delta Lake.
Vytvořte zdrojovou tabulku s vlastní vlastností a ne výchozí dobou uchovávání protokolů a vložte data pro generování historie tabulek:
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');
Vytvořte hluboký klon a mělký klon:
CREATE OR REPLACE TABLE test_clone_deep DEEP CLONE test_clone_source;
CREATE TABLE test_clone_shallow SHALLOW CLONE test_clone_source;
Poznámka:
V Unity Catalogu nemůžete použít CREATE OR REPLACE k přepsání existujícího mělkého klonu. Použijte DROP TABLE následovaný CREATE TABLEnebo použijte nový název tabulky. Viz Omezení.
Ověřte, že TBLPROPERTIES byly zkopírovány do obou klonů:
SHOW TBLPROPERTIES test_clone_source;
SHOW TBLPROPERTIES test_clone_deep;
SHOW TBLPROPERTIES test_clone_shallow;
Ověřte, že se značky katalogu Unity nekopírují do klonů:
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';
Ověřte, že se historie Delta Lake do klonů nekopíruje:
DESCRIBE HISTORY test_clone_source;
DESCRIBE HISTORY test_clone_deep;
DESCRIBE HISTORY test_clone_shallow;
Odklidit:
DROP TABLE IF EXISTS test_clone_shallow;
DROP TABLE IF EXISTS test_clone_source;
DROP TABLE IF EXISTS test_clone_deep;
Archivace dat
Pomocí hloubkového klonování můžete zachovat stav tabulky v určitém časovém okamžiku pro účely archivace. Hloubkové klony můžete synchronizovat přírůstkově, aby se zachoval aktualizovaný stav zdrojové tabulky pro zotavení po havárii.
Spuštěním následujícího příkazu jednou měsíčně synchronizujte archiv:
CREATE OR REPLACE TABLE archive_table CLONE my_prod_table
Reprodukce modelu ML
V případě případů použití strojového učení můžete chtít archivovat verzi tabulky, která byla použita k trénování modelu ML. Budoucí modely je možné testovat pomocí této archivované datové sady. Chcete-li archivovat verzi datové sady pomocí CLONE, postupujte takto:
Pokud chcete například archivovat verzi tabulky použitou k trénování modelu ve verzi 15:
CREATE TABLE model_dataset CLONE entire_dataset VERSION AS OF 15
Krátkodobé experimenty v produkční tabulce
Pokud chcete otestovat pracovní postup v produkční tabulce bez poškození tabulky, vytvořte mělký klon. Mělké klony umožňují spouštět úlohy v naklonované tabulce, která odkazuje na všechna produkční data, ale nemá vliv na žádné produkční úlohy.
Vytvořte mělký klon produkční tabulky:
CREATE TABLE my_test SHALLOW CLONE my_prod_table;
Poznámka:
V Unity Catalogu nemůžete použít CREATE OR REPLACE k přepsání existujícího mělkého klonu. Použijte DROP TABLE následovaný CREATE TABLEnebo použijte nový název tabulky. Viz Omezení.
Spusťte aktualizace a ověřování na klonu:
UPDATE my_test WHERE user_id is null SET invalid=true;
Až budete připraveni, slučte změny zpět. Sloučení používá informace o aktualizacích v klonu k tomu, aby se tam, kde je to možné, omezilo pouze na změněné soubory:
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 *;
Po dokončení klon odstraňte:
DROP TABLE my_test;
Přepsání vlastností tabulky
Přepsání vlastností tabulky je užitečné pro:
- Přidávání poznámek k tabulkám s informacemi vlastníka nebo uživatele při sdílení dat s různými organizačními jednotkami
- Archivování tabulek Delta Lake, když je v archivu potřeba přístup k historickým verzím. Pro archivní tabulku můžete nezávisle zadat dobu uchovávání dat a protokolů. Příklad:
SQL
Pro tabulku Delta Lake:
CREATE OR REPLACE TABLE archive_table CLONE prod.my_table
TBLPROPERTIES (
delta.logRetentionDuration = '3650 days',
delta.deletedFileRetentionDuration = '3650 days'
)
Pro tabulku Iceberg:
CREATE OR REPLACE TABLE archive_table CLONE prod.my_table
TBLPROPERTIES (
iceberg.logRetentionDuration = '3650 days',
iceberg.deletedFileRetentionDuration = '3650 days'
)
Python
Rozhraní Python DeltaTable API je specifické pro Delta Lake.
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
Rozhraní SCALA DeltaTable API je specifické pro Delta Lake.
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)
Chování operace klonování pro starší metastore systému Hive
Important
V Databricks Runtime 13.3 LTS a novějších podporují spravované tabulky v Unity Catalog mělké klony. Chování klonování pro tabulky katalogu Unity se liší od chování klonování v jiných prostředích. Viz Shallow clone pro tabulky Unity Catalog.
U tabulky Delta Lake zaregistrované v metastoru Hive nebo v kolekci souborů, které nejsou zaregistrované jako tabulka, má klon následující chování:
- Změny hlubokých nebo mělkých klonů nemají vliv na zdrojovou tabulku.
- Mělké klony odkazují na datové soubory ve zdrojovém adresáři. Pokud spustíte
VACUUMnad zdrojovou tabulkou, klienti už nebudou moct číst tyto datové soubory, což vyvolá chybuFileNotFoundException. Chcete-li provést opravu, spusťte klon sreplacena mělkém klonu. Pokud k tomu dojde často, zvažte použití hloubkového klonu, který nezávisí na zdrojové tabulce. - Hloubkové klony nezávisí na zdrojové tabulce, ale jejich vytvoření je nákladné, protože kopírují data i metadata.
- Klonování pomocí
replacedo cíle, který už v daném umístění obsahuje tabulku, vytvoří Delta log, pokud ještě neexistuje. SpuštěnímVACUUMvyčistíte všechna existující data. - U existujících tabulek Delta Lake vytvoří klonování nový přírůstkový zápis, který obsahuje pouze nová metadata a data ze zdrojové tabulky od posledního klonování.
- Klonování tabulky se liší od
Create Table As Select(CTAS). Klon kromě dat zkopíruje metadata zdrojové tabulky. Nemusíte zadávat dělení, formát, invarianty, nullability ani jiná nastavení. - Klonovaná tabulka má nezávislou historii ze zdrojové tabulky. Dotazy na časovou cestu na klonované tabulce nefungují se stejnými vstupy jako ve zdrojové tabulce.