Training
Module
Delta Lake gebruiken in Azure Synapse Analytics - Training
Delta Lake is een open source relationele opslagruimte voor Spark die u kunt gebruiken om een data lakehouse-architectuur te implementeren in Azure Synapse Analytics.
Deze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
U kunt met behulp van de clone
opdracht een kopie van een bestaande Delta Lake-tabel in Azure Databricks maken op een specifieke versie. Klonen kunnen diep of ondiep zijn.
Azure Databricks biedt ook ondersteuning voor het klonen van Parquet- en Iceberg-tabellen. Zie Incrementeel Parquet- en Iceberg-tabellen klonen naar Delta Lake.
Zie Ondiepe kloon voor Unity Catalog-tabellen voor meer informatie over het gebruik van kloon met Unity Catalog.
Notitie
Databricks raadt aan Delta Sharing te gebruiken om alleen-lezentoegang te bieden tot tabellen in verschillende organisaties. Zie Wat is Delta Sharing?
De metagegevens die worden gekloond, omvatten: schema, partitioneringsgegevens, invarianten, nullability. Alleen voor diepe klonen worden zowel de stream als de COPY INTO-metagegevens gekloond. Metagegevens die niet zijn gekloond, zijn de tabelbeschrijving en door de gebruiker gedefinieerde doorvoermetagegevens.
Als u werkt met een Delta-tabel die is geregistreerd bij de Hive-metastore of als een verzameling bestanden die niet zijn geregistreerd als een tabel, heeft de kloon de volgende semantiek:
Belangrijk
In Databricks Runtime 13.3 LTS en hoger bieden beheerde tabellen van Unity Catalog ondersteuning voor ondiepe klonen. Kloonsemantiek voor Unity Catalog-tabellen verschilt aanzienlijk van delta lake-kloonsemantiek in andere omgevingen. Zie Ondiepe kloon voor Unity Catalog-tabellen.
vacuum
, kunnen clients de gegevensbestanden waarnaar wordt verwezen niet meer lezen en wordt er een FileNotFoundException
gegenereerd. In dit geval herstelt het uitvoeren van een kloon met vervanging door de ondiepe kloon de kloon. Als dit vaak gebeurt, kunt u overwegen een diepe kloon te gebruiken die niet afhankelijk is van de brontabel.replace
een doel dat al een tabel in dat pad heeft, wordt er een Delta-logboek gemaakt als er geen deltalogboek bestaat op dat pad. U kunt alle bestaande gegevens opschonen door deze uit te voeren vacuum
.Create Table As Select
of CTAS
. Een kloon kopieert de metagegevens van de brontabel naast de gegevens. Klonen heeft ook een eenvoudigere syntaxis: u hoeft geen partitionering, indeling, invarianten, null-waarde enzovoort op te geven, omdat ze uit de brontabel worden gehaald.In de volgende codevoorbeelden ziet u de syntaxis voor het maken van diepe en ondiepe klonen:
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)
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)
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
Zie CREATE TABLE CLONEvoor syntaxisdetails.
CLONE
rapporteert de volgende metrische gegevens als één rij DataFrame zodra de bewerking is voltooid:
source_table_size
: Grootte van de brontabel die wordt gekloond in bytes.source_num_of_files
: het aantal bestanden in de brontabel.num_removed_files
: Als de tabel wordt vervangen, hoeveel bestanden uit de huidige tabel worden verwijderd.num_copied_files
: Aantal bestanden dat is gekopieerd uit de bron (0 voor ondiepe klonen).removed_files_size
: Grootte in bytes van de bestanden die uit de huidige tabel worden verwijderd.copied_files_size
: Grootte in bytes van de bestanden die naar de tabel zijn gekopieerd.
U moet machtigingen configureren voor toegangsbeheer voor Azure Databricks-tabellen en uw cloudprovider.
De volgende machtigingen zijn vereist voor zowel diepe als ondiepe klonen:
SELECT
machtiging voor de brontabel.CLONE
een nieuwe tabel maakt, CREATE
moet u toestemming geven voor de database waarin u de tabel maakt.CLONE
een tabel vervangt, moet u gemachtigd zijn MODIFY
voor de tabel.Als u een diepe kloon hebt gemaakt, moet elke gebruiker die de diepe kloon leest leestoegang hebben tot de map van de kloon. Als u wijzigingen wilt aanbrengen in de kloon, moeten gebruikers schrijftoegang hebben tot de map van de kloon.
Als u een ondiepe kloon hebt gemaakt, moet elke gebruiker die de ondiepe kloon leest, toestemming nodig om de bestanden in de oorspronkelijke tabel te lezen, omdat de gegevensbestanden in de brontabel met ondiepe klonen blijven staan, evenals de map van de kloon. Als u wijzigingen wilt aanbrengen in de kloon, moeten gebruikers schrijftoegang hebben tot de map van de kloon.
U kunt diepe kloon gebruiken om de status van een tabel op een bepaald moment te behouden voor archiveringsdoeleinden. U kunt diepe kloons incrementeel synchroniseren om een bijgewerkte status van een brontabel te behouden voor herstel na noodgevallen.
-- Every month run
CREATE OR REPLACE TABLE archive_table CLONE my_prod_table
Wanneer u machine learning uitvoert, wilt u mogelijk een bepaalde versie van een tabel archiveren waarop u een ML-model hebt getraind. Toekomstige modellen kunnen worden getest met behulp van deze gearchiveerde gegevensset.
-- Trained model on version 15 of Delta table
CREATE TABLE model_dataset CLONE entire_dataset VERSION AS OF 15
Als u een werkstroom op een productietabel wilt testen zonder de tabel te beschadigen, kunt u eenvoudig een ondiepe kloon maken. Hiermee kunt u willekeurige werkstromen uitvoeren in de gekloonde tabel die alle productiegegevens bevat, maar die geen invloed heeft op productieworkloads.
-- 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;
Onderdrukkingen van tabeleigenschappen zijn met name handig voor:
CREATE OR REPLACE TABLE archive_table CLONE prod.my_table
TBLPROPERTIES (
delta.logRetentionDuration = '3650 days',
delta.deletedFileRetentionDuration = '3650 days'
)
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)
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)
Training
Module
Delta Lake gebruiken in Azure Synapse Analytics - Training
Delta Lake is een open source relationele opslagruimte voor Spark die u kunt gebruiken om een data lakehouse-architectuur te implementeren in Azure Synapse Analytics.