Dela via


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 IcebergCompatV1table-funktionen finns i Legacy UniForm IcebergCompatV1.

Krav

För att isbergsläsningar ska kunna aktiveras måste följande krav uppfyllas:

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.enabledFormatstable. 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 av DESCRIBE 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 av DESCRIBE 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.