Dela via


Äldre UniForm IcebergCompatV1

Viktigt!

Den här dokumentationen har dragits tillbaka och kanske inte uppdateras. De produkter, tjänster eller tekniker som nämns i det här innehållet stöds inte längre. Se Använda UniForm för att läsa Deltatabeller med Iceberg-klienter.

Viktigt!

Den här funktionen finns i offentlig förhandsversion i Databricks Runtime 13.2 och senare.

Med Delta Universal Format (UniForm) kan du läsa Delta-tabeller med Iceberg-läsarklienter.

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.

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:

Aktivera Delta UniForm

Viktigt!

Om du aktiverar Delta UniForm anges deltatabellfunktionen IcebergCompatV1, en skrivprotokollfunktion. Endast klienter som stöder den här tabellfunktionen kan skriva till UniForm-aktiverade tabeller. Du måste använda Databricks Runtime 13.2 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.

Följande tabellegenskap aktiverar UniForm-stöd för Iceberg. iceberg är det enda giltiga värdet.

'delta.universalFormat.enabledFormats' = 'iceberg'

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

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

Om du skapar en ny tabell med en CTAS-instruktion måste du manuellt ange kolumnmappning, som i följande exempel:

CREATE TABLE T
TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.universalFormat.enabledFormats' = 'iceberg')
AS
  SELECT * FROM source_table;

Om du ändrar en befintlig tabell måste du ange alla dessa egenskaper, som i följande exempel:

ALTER TABLE T SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV1' = 'true',
  'delta.universalFormat.enabledFormats' = '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 med hjälp av Catalog Explorer. Dessa fält och värden returneras också när du använder 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

Du hittar sökvägen till den här filen med hjälp av Catalog Explorer. För tabeller med UniForm aktiverat innehåller informationen för Delta-tabellen ett fält för isbergsmetadataplatsen.

Du kan också använda REST-API:et för att hämta all information för en tabell, inklusive metadataplatsen. Ange följande kommando:

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 LISTinte , MAPoch VOID 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.
  • Isbergsläsarklienter version 1.2.0 och nedan stöder INT96 inte tidsstämpeltyp som skrivits av Apache Spark. Använd följande kod i notebook-filer som skriver till UniForm-tabeller för att undvika den här begränsningen: spark.conf.set(“spark.sql.parquet.outputTimestampType”, “TIMESTAMP_MICROS”)
  • Den offentliga förhandsversionen av Unity Catalog Iceberg-slutpunkten är inte avsedd för storskaliga produktionsarbetsbelastningar. Du kan uppleva hastighetsbegränsning om du överskrider ett tröskelvärde på 5 frågor per sekund.

Följande Delta Lake-funktioner fungerar för Delta-klienter när UniForm är aktiverat, men har inte stöd i Iceberg:

  • Ändra dataflöde
  • Deltadelning