Använda UniForm för att läsa deltatabeller med Iceberg-klienter

Med Delta Universal Format (UniForm) kan du läsa Delta-tabeller med Iceberg-läsarklienter. Den här funktionen kräver Databricks Runtime 14.3 LTS eller senare.

Viktigt!

Dokumentation om den äldre UniForm-tabellfunktionen IcebergCompatV1 finns i Äldre UniForm IcebergCompatV1.

UniForm utnyttjar det faktum att både Delta Lake och Iceberg består av Parquet-datafiler och ett metadatalager. UniForm genererar automatiskt Iceberg-metadata asynkront, utan att skriva om data, så att Iceberg-klienter kan läsa Delta-tabeller som om de vore Isbergstabeller. En enda kopia av datafilerna hanterar båda formaten.

Du kan konfigurera en extern anslutning så att Unity Catalog fungerar som en Isbergskatalog. Se Läsa med hjälp av Unity Catalog Iceberg-katalogslutpunkten.

UniForm använder zstd i stället för snappy som komprimeringskod för underliggande Parquet-datafiler.

Kommentar

UniForm-metadatagenerering körs asynkront på den beräkning som används för att skriva data till Delta-tabeller, vilket kan öka drivrutinsresursanvändningen.

Krav

Om du vill aktivera UniForm måste du uppfylla följande krav:

Kommentar

Du kan inte aktivera borttagningsvektorer i en tabell med UniForm aktiverat. När du aktiverar UniForm i en befintlig tabell med borttagningsvektorer aktiverat inaktiverar och rensar UniForm borttagningsvektorer och skriver om datafiler efter behov.

Aktivera Delta UniForm

Viktigt!

Om du aktiverar Delta UniForm anges deltatabellfunktionen IcebergCompatV2, en skrivprotokollfunktion. Endast klienter som stöder den här tabellfunktionen kan skriva till UniForm-aktiverade tabeller. Du måste använda Databricks Runtime 14.3 LTS eller senare för att skriva till Delta-tabeller med den här funktionen aktiverad.

Du kan inaktivera UniForm genom att ta bort tabellegenskapen delta.universalFormat.enabledFormats . Du kan inte inaktivera kolumnmappning när den har aktiverats och uppgraderingar till Delta Lake-läsare och skrivprotokollversioner kan inte ångras.

Du måste ange följande tabellegenskaper för att aktivera UniForm-stöd för Iceberg:

'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'

Du måste också aktivera kolumnmappning för att använda UniForm. Detta aktiveras automatiskt om du aktiverar UniForm när tabellen skapas, som i följande exempel:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Du kan aktivera UniForm i en befintlig tabell med hjälp av följande syntax:

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

Kommentar

Den här syntaxen fungerar också för att uppgradera från den offentliga förhandsversionen av UniForm, som använde tabellfunktionen IcebergCompatV1.

Den här syntaxen inaktiverar och rensar automatiskt borttagningsvektorer från tabellen. Befintliga filer skrivs om efter behov för att göra dem kompatibla med Iceberg.

När du först aktiverar UniForm börjar asynkron metadatagenerering. Den här uppgiften måste slutföras innan externa klienter kan köra frågor mot tabellen med iceberg. Se Kontrollera status för icebergmetadatagenerering.

Kommentar

Om du planerar att använda BigQuery som isbergsläsarklient måste du ange spark.databricks.delta.write.dataFilesToSubdir till true på Azure Databricks för att uppfylla ett BigQuery-krav för datalayout.

Se Begränsningar.

När genererar UniForm isbergsmetadata?

Azure Databricks utlöser generering av Iceberg-metadata asynkront när en Delta Lake-skrivtransaktion har slutförts med samma beräkning som slutförde Delta-transaktionen. Du kan också utlösa icebergmetadatagenerering manuellt. Se Utlösa isbergsmetadatakonvertering manuellt.

För att undvika skrivfördröjningar som är associerade med generering av Iceberg-metadata kan Delta-tabeller med frekventa incheckningar paketera flera Delta-incheckningar i en enda Iceberg-incheckning.

Delta Lake säkerställer att endast en process för generering av isbergsmetadata pågår när som helst. Incheckningar som utlöser en andra samtidig utvecklingsprocess för Iceberg-metadata kommer att checkas in till Delta, men de utlöser 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-tabellversioner.

Kontrollera status för generering av isbergsmetadata

UniForm lägger till följande fält i Unity Catalog- och Iceberg-tabellmetadata för att spåra metadatagenereringsstatus:

Metadatafält beskrivning
converted_delta_version Den senaste versionen av Delta-tabellen som Iceberg-metadata har genererats för.
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 tabellmetadata med Catalog Explorer.
  • Använda REST-API:et för att hämta en tabell.

Mer information om hur du granskar tabellegenskaper 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-tabellen. Den här åtgärden körs synkront, vilket innebär att när den är klar återspeglar tabellinnehållet som är tillgängligt i Iceberg den senaste versionen av deltatabellen som är 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-metadata-gnerationsskrivningar till Delta-tabellen.

Använd följande syntax för att manuellt utlösa generering av Iceberg-metadata:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Se REPARATIONSTABELL.

Läsa med hjälp av en JSON-sökväg för metadata

Vissa Iceberg-klienter kräver att du anger en sökväg till versionshanterade metadatafiler för att registrera externa Isbergstabeller. Varje gång UniForm konverterar en ny version av Delta-tabellen 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 tabellkatalogen 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 tabellmetadata 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 manuellt uppdatering och uppdatering av metadata-JSON-sökvägar för att läsa aktuella tabellversioner. Användare kan stöta på fel när de kör frågor mot Iceberg-tabeller med inaktuella versioner eftersom Parquet-datafiler tas bort från Delta-tabellen med VACUUM.

Läsa med hjälp av Unity Catalog Iceberg-katalogslutpunkten

Vissa Isbergsklienter kan ansluta till en Rest-katalog för isberg. Unity Catalog tillhandahåller en skrivskyddad implementering av ISBERG REST-katalog-API:et för Delta-tabeller med UniForm aktiverat med hjälp av slutpunkten /api/2.1/unity-catalog/iceberg. Mer information om hur du använder det här REST-API:et finns i specifikationen för Iceberg REST API.

Klienter som är kända för att stödja Iceberg-katalog-API:et är Apache Spark, Flink och Trino. Du måste konfigurera åtkomst till den underliggande molnobjektlagringen som innehåller Delta-tabellen med UniForm aktiverat. Se dokumentationen för Iceberg-läsarklienten för konfigurationsinformation.

Du måste generera och konfigurera en personlig åtkomsttoken för Azure Databricks så att andra tjänster kan ansluta till Unity Catalog. Se Autentisering för Azure Databricks-automatisering – översikt.

Följande är ett exempel på inställningarna för att konfigurera OSS Apache Spark att läsa UniForm som isberg:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.unity"="org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.unity.catalog-impl": "org.apache.iceberg.rest.RESTCatalog",
"spark.sql.catalog.unity.uri": "<api-root>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.unity.token":"<your_personal_access_token>",
"spark.sql.catalog.unity.io-impl": "org.apache.iceberg.aws.s3.S3FileIO

Ersätt den fullständiga URL:en för arbetsytan där du genererade den personliga åtkomsttoken för <api-root>.

Kommentar

När du kör frågor mot tabeller i Unity Catalog med den här metoden använder objektidentifierare följande mönster:

unity.<catalog-name>.<schema-name>.<table-name>

Det här mönstret använder samma namn på tre nivåer som finns i Unity Catalog, men lägger till ytterligare ett prefix unity.

Delta- och Iceberg-tabellversioner

Både Delta Lake och Iceberg tillåter tidsresefrågor med tabellversioner eller tidsstämplar som lagras i tabellmetadata.

I allmänhet justeras inte Iceberg- och Delta-tabellversionerna efter tidsstämpeln för incheckningen eller versions-ID:t. Om du vill kontrollera vilken version av en Delta-tabell som en viss version av en isbergstabell motsvarar kan du använda motsvarande tabellegenskaper som angetts i tabellen Iceberg. Se Kontrollera status för icebergmetadatagenerering.

Begränsningar

Följande begränsningar finns:

  • UniForm fungerar inte i tabeller med borttagningsvektorer aktiverade. Se Vad är borttagningsvektorer?.
  • Deltatabeller med UniForm aktiverat stöder VOID inte typer.
  • Iceberg-klienter kan bara läsa från UniForm. Skrivningar stöds inte.
  • Isbergsläsarklienter kan ha individuella begränsningar, oavsett UniForm. Se dokumentationen för din valda klient.
  • Mottagarna av deltadelning kan bara läsa tabellen som Delta, även när UniForm är aktiverat.

Ändringsdataflöde fungerar för Delta-klienter när UniForm är aktiverat, men har inte stöd i Iceberg.

Vissa Delta Lake-tabellfunktioner som används av UniForm stöds inte av vissa deltadelningsläsare. Se Dela data och AI-tillgångar på ett säkert sätt med deltadelning.