Vad är Apache Iceberg i Azure Databricks?

Apache Iceberg är ett tabellformat med öppen källkod för analysarbetsbelastningar. Den stöder funktioner som schemautveckling, tidsresor och dold partitionering. Precis som Delta Lake skapar Iceberg ett abstraktionslager som tillåter ACID-transaktioner på dina data i objektlagring.

Azure Databricks stöder Iceberg-tabeller som använder Apache Parquet-filformatet och versionerna 1, 2 och 3 av Iceberg-specifikationen. Iceberg upprätthåller atomitet och konsekvens genom att skriva nya metadatafiler för varje tabelländring. Alla isbergstabeller i Azure Databricks följer specifikationen för det öppna isbergstabellformatet. Se specifikationen för Iceberg-tabellen.

En Isbergskatalog är det översta lagret i isbergstabellarkitekturen som returnerar aktuella metadata vid inläsning av en tabell. Iceberg-katalogen hanterar åtgärder som att skapa, släppa och byta namn på tabeller.

Azure Databricks stöder Iceberg-tabeller som hanteras av:

Requirements

Du måste uppfylla följande krav:

  • En arbetsyta med Unity Catalog aktiverat.
  • Använd Databricks Runtime 16.4 LTS eller senare för både hanterade isbergstabeller och utländska isbergstabeller.

Skapa isbergstabeller i Unity Catalog

Iceberg-tabeller som du skapar i Unity Catalog är hanterade Iceberg-tabeller. Du kan skapa dessa tabeller med hjälp av:

Hanterade Iceberg-tabeller är helt integrerade med funktionerna i Azure Databricks-plattformen:

  • Unity Catalog hanterar livscykeluppgifter som förfallotid för ögonblicksbilder och filkomprimering på dessa tabeller.
  • Hanterade isbergstabeller stöder också flytande klustring, vilket förbättrar frågeprestanda.
  • Förutsägelseoptimering automatiserar åtgärder för att minska lagringskostnaderna och förbättra frågehastigheten.
  • Hanterade isbergstabeller har också stöd för materialiserade vyer och strömmande tabeller.

Databricks rekommenderar att du använder Iceberg-klienterna 1.9.2 och senare för att läsa och skriva till Unity Catalog.

Läsa isbergstabeller som hanteras av andra kataloger

En isbergstabell från en främmande källa är en isbergstabell som hanteras av en katalog utanför Unity Catalog. Den externa katalogen lagrar tabellens aktuella metadata. Azure Databricks använder Lakehouse Federation för att hämta metadata och läsa tabellen från objektlagring.

Utländska isbergstabeller är skrivskyddade i Azure Databricks och har begränsat plattformsstöd.

Få åtkomst till Iceberg-tabeller med hjälp av externa system

Du kan komma åt alla Iceberg-tabeller i Unity Catalog med hjälp av API:et iceberg REST Catalog. Det här öppna API:et stöder läs- och skrivåtgärder från externa isbergsmotorer på olika språk och plattformar. Se Access Azure Databricks-tabeller från Apache Iceberg-klienter.

REST-katalogen stöder autentiseringsdistribution, vilken levererar tillfälliga autentiseringsuppgifter till externa system för åtkomst till den underliggande lagringen. Mer information finns i Unity Catalog-autentiseringsuppgifter för extern systemåtkomst.

Varning

Utdelning av autentiseringsuppgifter stöds inte på arbetsytor som använder standardlagring. Se Begränsningar.

Partitionsutveckling

Med partitionsutveckling kan du ändra partitioneringsschemat för en befintlig Apache Iceberg-tabell utan att skriva om data. Nya data skrivs med den uppdaterade partitionslayouten och befintliga data behåller sin ursprungliga partitionslayout. Apache Iceberg spårar partitionsspecifikationerna och tillämpar rätt filter vid frågetillfället. Se partitionsutveckling för Apache Iceberg.

Anmärkning

Partitionsutveckling stöds på hanterade isbergstabeller via externa isbergsmotorer med hjälp av Iceberg REST Catalog, men inte via Databricks SQL. Uttrycksbaserade partitionstransformer som years() och bucket() stöds inte för hanterade Isbergstabeller. Se Begränsningar.

Information om hur du konfigurerar extern åtkomst finns i Access Azure Databricks-tabeller från Apache Iceberg-klienter.

Följande exempel visar hur du använder partitionsutveckling med Spark SQL och Iceberg-tillägget. Apache Iceberg-partitionsutvecklingssyntax och transformeringar som stöds finns i Apache Iceberg Spark DDL.

Lägga till ett partitionsfält

Så här lägger du till ett nytt partitionsfält i en befintlig tabell:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

Ta bort ett partitionsfält

Så här tar du bort ett befintligt partitionsfält från en tabell:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

Ersätt ett partitionsfält

Så här växlar du ett partitionsfält mot ett annat utan mellanliggande ompartition:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

Begränsningar

Följande begränsningar gäller för Isbergstabeller i Azure Databricks och kan komma att ändras:

  • Isbergstabeller stöder bara filformatet Apache Parquet.
  • För Iceberg v2 stöds inte positionsborttagningar och likhetsbaserade borttagningar. I stället stöder Azure Databricks Iceberg v3-borttagningsvektorer för borttagningar på radnivå.
  • Förgrening och taggning stöds inte. Endast huvudgrenen är tillgänglig när man arbetar med utländska Iceberg-tabeller.
  • Partitionering:
    • Partitionsutveckling stöds endast på de hanterade Iceberg-tabellerna vid interaktion från externa Iceberg-motorer.
    • Utländska isbergstabeller stöder inte partitionsutveckling.
    • Partitionering efter BINARY typ stöds inte.
  • vyer kan inte nås från externa Iceberg-motorer.
  • Följande datatyper stöds inte:
    • UUID
    • Fixed(L)
    • TIME
    • Kapslad STRUCT med obligatoriska fält
  • Begränsningar som är specifika för Iceberg v3 finns i Begränsningar.

Begränsningar för hanterade isbergstabeller

Följande begränsningar gäller specifikt för hanterade isbergstabeller:

  • Hanterade isbergstabeller kan bara skapas om förutsägande optimering är aktiverat för tabellunderhåll.
  • Följande tabellegenskaper hanteras av Unity Catalog och kan inte anges manuellt:
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • Komprimeringskodcen för att ändra tabellkomprimering stöds inte. Alla tabeller använder Zstd som standard.
  • Partitionering efter uttryck (till exempel years(), months(), days(), hours(), ) bucket()stöds inte.
  • Funktioner som inte stöds i Apache Iceberg är inte heller tillgängliga för hanterade isbergstabeller. Detta inkluderar Delta Lake-genererade kolumner, Constraints på Azure Databricks och Collation-stöd för Delta Lake.

Begränsningar för utländska isbergstabeller

Följande begränsningar gäller specifikt för utländska isbergstabeller:

  • Tidsresor stöds endast för Iceberg-snapshots som tidigare har lästs i Azure Databricks (dvs. snapshots där en SELECT-instruktion kördes).
  • Om du använder bucket-transformeringsfunktioner för Iceberg-partitionering kan prestandan för frågor försämras när konditionella filter används.
  • Produkter för lagringslösningar i molnet, såsom Amazon S3, är inte integrerade med utomstående Iceberg-tabeller. Åtkomst till utländska Iceberg-tabeller i Azure Databricks kan återställa data som arkiverats på lagringsnivåer med lägre kostnad.
  • I dedikerade åtkomstlägeskluster kräver läsningar och REFRESH FOREIGN TABLE-åtgärder på Iceberg-tabeller ALL PRIVILEGES.