Läs Delta tables med Iceberg-klienter
Den här artikeln innehåller information om hur du möjliggör Iceberg-läsningar på tables som lagras i samband med Delta Lake i Azure Databricks. Den här funktionen kräver Databricks Runtime 14.3 LTS eller senare.
Kommentar
Den här funktionen kallades tidigare Delta Lake Universal Format (UniForm).
Du kan konfigurera en extern anslutning så att Unity Catalog fungerar som ett isberg catalog. Se Läs Databricks tables med Iceberg-klienter.
Hur fungerar Iceberg-läsningar (UniForm)?
Både Delta Lake och Iceberg består av Parquet-datafiler och ett metadatalager. Om du aktiverar Iceberg-läsningar konfigureras din tables att automatiskt generate Iceberg-metadata asynkront, utan att skriva om data, så att Iceberg-klienter kan läsa Delta tables skrivet av Azure Databricks. En enda kopia av datafilerna har flera format.
Viktigt!
- Tables med Iceberg-läsningar aktiverade använder Zstandard i stället för Snappy som komprimeringscodec för underliggande Parquet-datafiler.
- Generering av isbergsmetadata körs asynkront på den beräkning som används för att skriva data till Delta tables, vilket kan öka drivrutinsresursanvändningen.
- Dokumentation om den äldre UniForm
IcebergCompatV1
table-funktionen finns i Legacy UniForm IcebergCompatV1.
Krav
För att isbergsläsningar ska kunna aktiveras måste följande krav uppfyllas:
- Delta-table måste vara registrerat i Unity Catalog. Både hanterade och externa tables stöds.
- table måste ha column mappning aktiverat. Se Byt namn på och ta bort columns med Delta Lake column mappning.
- Delta-table måste ha en
minReaderVersion
>= 2 ochminWriterVersion
>= 7. Se Hur hanterar Azure Databricks funktionskompatibilitet med Delta Lake?. - Skrivningar till table måste använda Databricks Runtime 14.3 LTS eller senare.
Kommentar
Du kan inte aktivera borttagningsvektorer på en table när Iceberg-läsningar är aktiverade.
Använd REORG
för att inaktivera och rensa bort borttagningsvektorer samtidigt som du aktiverar Iceberg-läsningar på en befintlig table med borttagningsvektorer aktiverade. Se Aktivera eller uppgradera lässtöd för Iceberg med HJÄLP av REORG.
Aktivera isbergsläsningar (UniForm)
Viktigt!
När du aktiverar Iceberg-läsningarna läggs funktionen för skrivprotokoll IcebergCompatV2
till i table. Endast klienter som stöder denna table-funktion kan skriva till tables med Iceberg-läsningar aktiverade. På Azure Databricks ska du använda Databricks Runtime 14.3 LTS eller senare för att skriva till det aktiverade tables.
Du kan stänga av Iceberg-läsningar genom att ta bort egenskapen delta.universalFormat.enabledFormats
table. Det går inte att ångra uppgraderingar till Delta Lake-läsare och skrivarprotokollversioner.
Du måste set följande table egenskaper för att aktivera Iceberg-läsningar:
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
När du först aktiverar Iceberg-läsningar börjar asynkron metadatagenerering. Den här uppgiften måste slutföras innan externa klienter kan fråga table med Iceberg. Se Kontrollera status för icebergmetadatagenerering.
För list av begränsningar, se Begränsningar.
Aktivera Iceberg-läsningar under table-skapande
Column mappning måste aktiveras för att Iceberg-läsningar ska kunna användas. Detta sker automatiskt om du aktiverar Iceberg-läsningar vid skapandet av table, som i följande exempel:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Aktivera Iceberg-avläsningar på en befintlig table
I Databricks Runtime 15.4 LTS och senare kan du aktivera eller uppgradera Iceberg-läsningar på en befintlig table med hjälp av följande syntax:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Aktivera eller uppgradera lässtöd för Iceberg med hjälp av REORG
Du kan använda REORG
för att aktivera Iceberg-läsningar och skriva om underliggande datafiler, som i följande exempel:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Använd REORG
om något av följande är sant:
- Din table har borttagningsvektorer aktiverade.
- Du har tidigare aktiverat
IcebergCompatV1
versionen av UniForm Iceberg. - Du måste läsa från Iceberg-motorer som inte stöder Parquet-filer i Hive-stil, till exempel Athena eller Redshift.
När sker generering av icebergmetadata?
Azure Databricks utlöser metadatagenerering asynkront när en Delta Lake-skrivtransaktion har slutförts. Den här metadatagenereringsprocessen använder samma beräkning som slutförde Delta-transaktionen.
Kommentar
Du kan också utlösa icebergmetadatagenerering manuellt. Se Utlösa isbergsmetadatakonvertering manuellt.
För att undvika skrivfördröjningar som är associerade med metadatagenerering kan Delta tables med frekventa incheckningar gruppera flera Delta-incheckningar i en enda incheckning av Iceberg-metadata.
Delta Lake säkerställer att endast en process för metadatagenerering pågår på en viss beräkningsresurs. Ändringar som skulle utlösa en andra samtidig metadatagenereringsprocess slutförs framgångsrikt i Delta men startar inte asynkron generering av Iceberg-metadata. Detta förhindrar sammanhängande svarstider för metadatagenerering för arbetsbelastningar med frekventa incheckningar (sekunder till minuter mellan incheckningar).
Se Delta- och Iceberg-table versioner.
Delta- och Iceberg-table versioner
Delta Lake och Iceberg möjliggör tidsresesökningar genom att använda table versioner eller tidsstämplar som finns i table metadata.
I allmänhet överensstämmer Delta table-versioner inte med Iceberg-versioner, vare sig genom kommentidsstämpeln eller versions-ID:t. Om du vill kontrollera vilken version av en Delta-table en viss version av en Iceberg-table motsvarar kan du använda motsvarande table egenskaper. Se Kontrollera status för icebergmetadatagenerering.
Kontrollera status för generering av isbergsmetadata
Om du aktiverar Iceberg-läsningar på en table läggs följande fält till i Unity Catalog och Iceberg table metadata för att spåra metadatagenereringsstatus:
Metadatafält | beskrivning |
---|---|
converted_delta_version |
Den senaste versionen av Delta table för vilken Iceberg-metadata framgångsrikt genererades. |
converted_delta_timestamp |
Tidsstämpeln för den senaste Delta-incheckningen som Iceberg-metadata har genererats för. |
I Azure Databricks kan du granska dessa metadatafält genom att göra något av följande:
- Granska avsnittet som
Delta Uniform Iceberg
returnerades avDESCRIBE EXTENDED table_name
. - Granska table metadata med Catalog Explorer.
- Använder REST-API:et för att get en table.
Mer information om hur du granskar table egenskaper utanför Azure Databricks finns i dokumentationen för din Iceberg-läsarklient. För OSS Apache Spark kan du se dessa egenskaper med hjälp av följande syntax:
SHOW TBLPROPERTIES <table-name>;
Utlösa isbergsmetadatakonvertering manuellt
Du kan utlösa icebergmetadatagenerering manuellt för den senaste versionen av Delta table. Den här åtgärden körs synkront, vilket innebär att när den är klar återspeglar det table innehåll som är tillgängligt i Iceberg den senaste versionen av Delta-table tillgänglig när konverteringsprocessen startade.
Den här åtgärden bör inte vara nödvändig under normala förhållanden, men kan vara till hjälp om du stöter på följande:
- Ett kluster avslutas innan automatisk metadatagenerering lyckas.
- Ett fel eller ett jobbfel avbryter metadatagenereringen.
- En klient som inte stöder UniForm Iceberg-metadatagenerering skriver till Delta table.
Använd följande syntax för att utlösa generering av Iceberg-metadata manuellt:
MSCK REPAIR TABLE <table-name> SYNC METADATA
Se REPAIR TABLE.
Läsa Isberg med en metadata-JSON-sökväg
Vissa Iceberg-klienter kräver att du anger en sökväg till versionsmetadatafiler för registrering av externa Iceberg-tables. Varje gång Azure Databricks konverterar en ny version av Delta table till Iceberg skapas en ny metadata-JSON-fil.
Klienter som använder metadata-JSON-sökvägar för att konfigurera Isberg är BigQuery. Se dokumentationen för Iceberg-läsarklienten för konfigurationsinformation.
Delta Lake lagrar Iceberg-metadata under katalogen table med hjälp av följande mönster:
<table-path>/metadata/<version-number>-<uuid>.metadata.json
I Azure Databricks kan du granska den här metadataplatsen genom att göra något av följande:
- Granska avsnittet som
Delta Uniform Iceberg
returnerades avDESCRIBE EXTENDED table_name
. - Granska table metadata med Catalog Explorer.
- Använd följande kommando med REST-API:et:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>
Svaret innehåller följande information:
{
...
"delta_uniform_iceberg": {
"metadata_location": "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
}
}
Viktigt!
Sökvägsbaserade Iceberg-läsarklienter kan kräva manuell uppdatering och uppfräschning av metadata-JSON-sökvägar för att kunna läsa aktuella versioner av table. Användare kan stöta på fel när de gör frågor till Iceberg tables med föråldrade versioner eftersom Parquet-datafiler tas bort från Delta table med hjälp av VACUUM
.
Begränsningar
Följande begränsningar finns för alla tables med Iceberg Läsningar aktiverade:
- Isbergsläsningar fungerar inte när borttagningsvektorer är aktiverade på tables. Se Vad är borttagningsvektorer?.
- Delta tables med isbergsläsningar aktiverade stöder inte
VOID
-typer. - Iceberg-klientstöd är endast läsbar. Skrivningar stöds inte.
- Klienter för Isberg-läsning kan ha individuella begränsningar, oberoende av Azure Databricks stöd för Isberg-läsningar. Se dokumentationen för din valda klient.
- recipients för Deltadelning kan bara läsa table som Delta, även när Iceberg-läsningar är aktiverade.
- Vissa Delta Lake-table funktioner som används av Iceberg-läsningar stöds inte av vissa Delta Sharing-läsarklienter. Se Vad är deltadelning?.
Ändringsdataflöde fungerar för Delta-klienter när Isbergsläsningar är aktiverade men inte har stöd i Iceberg.