Vad är Apache Iceberg i Azure Databricks?

Apache Iceberg är ett tabellformat med öppen källkod för analysarbetsbelastningar som 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

Om du vill använda Apache Iceberg-hanterade eller externa tabeller måste du uppfylla följande krav:

  • Använd en arbetsyta med Unity Catalog aktiverat.
  • Använd Databricks Runtime 16.4 LTS eller senare.

För hanterade tabeller måste du också uppfylla följande krav:

  • En arbetsyta med serverlös beräkning aktiverad

Azure Databricks använder serverlös beräkning för att underhålla Iceberg-tabellmetadata för hanterade tabeller. Serverlös beräkning måste ha nätverksanslutning till det molnlagringskonto som backar upp tabellen. Om en brandvägg skyddar lagringskontot konfigurerar du serverlös nätverksanslutning så att serverlös beräkning kan nå den. Vilken konfiguration som krävs beror på ditt moln. Mer information finns i Nätverk för serverlöst beräkningslager.

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.
  • Flytande klustring förbättrar frågeprestanda.
  • Förutsägelseoptimering automatiserar åtgärder för att minska lagringskostnaderna och förbättra frågehastigheten.
  • materialiserade vyer stöder inkrementell uppdatering för att hålla resultaten uppdaterade när källdata ändras.
  • strömmande tabeller stöder inkrementell datainläsning från Kafka och molnobjektlagring med databricks SQL.

Databricks rekommenderar att du använder Iceberg-klientversion 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.

Klona hanterade Iceberg-tabeller

Du kan skapa en fullständig, oberoende kopia av en hanterad Isbergstabell med hjälp av DEEP CLONE. En djup klon kopierar tabellens datafiler och metadata till en ny hanterad isbergstabell i Unity Catalog. Se Klona en hanterad isbergstabell.

Skapa en materialiserad vy som är kompatibel med externa Iceberg-läsare

Important

Hanterade Iceberg-materialiserade vyer finns i offentlig förhandsversion. Om du vill aktivera den här funktionen kontaktar du ditt Databricks-kontoteam.

Du kan skapa en materialiserad vy som är kompatibel med externa Iceberg-läsare. Om du vill skapa en använder du USING ICEBERG i -instruktionen CREATE MATERIALIZED VIEW . Fullständig syntax finns i CREATE MATERIALIZED VIEW (pipelines). Fullständiga krav finns i Aktivera extern dataåtkomst till strömmande tabeller och materialiserade vyer.

CREATE MATERIALIZED VIEW <mv_name>
USING ICEBERG
AS
SELECT * FROM samples.nyctaxi.trips;

När du har skapat den materialiserade vyn kör du REPAIR TABLE med SYNC METADATA. Se även REPAIR TABLE.

REPAIR TABLE <mv_name> SYNC METADATA;

Externa Iceberg-läsare kan läsa den materialiserade vyn men kan inte skriva till den. Information om hur du läser den materialiserade vyn från en extern Iceberg-läsare finns i Aktivera extern dataåtkomst till strömmande tabeller och materialiserade vyer.

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.