UniForm gebruiken om Delta-tabellen te lezen met Iceberg-clients

Met Delta Universal Format (UniForm) kunt u Delta-tabellen lezen met Iceberg reader-clients. Voor deze functie is Databricks Runtime 14.3 LTS of hoger vereist.

UniForm maakt gebruik van het feit dat zowel Delta Lake als Iceberg bestaan uit Parquet-gegevensbestanden en een metagegevenslaag. UniForm genereert automatisch icebergmetagegevens asynchroon, zonder gegevens te herschrijven, zodat Iceberg-clients Delta-tabellen kunnen lezen alsof ze Iceberg-tabellen waren. Eén kopie van de gegevensbestanden dient beide indelingen.

U kunt een externe verbinding configureren om Unity Catalog als een Iceberg-catalogus te laten fungeren. Zie Lezen met behulp van het eindpunt van de Unity Catalog Iceberg-catalogus.

UniForm gebruikt zstd in plaats van snappy als de compressiecodec voor onderliggende Parquet-gegevensbestanden.

Notitie

Het genereren van UniForm-metagegevens wordt asynchroon uitgevoerd op de berekening die wordt gebruikt voor het schrijven van gegevens naar Delta-tabellen, waardoor het resourcegebruik van het stuurprogramma kan toenemen.

Vereisten

Als u UniForm wilt inschakelen, moet u voldoen aan de volgende vereisten:

Notitie

U kunt verwijderingsvectoren niet inschakelen voor een tabel waarvoor UniForm is ingeschakeld. Bij het inschakelen van UniForm op een bestaande tabel waarvoor verwijderingsvectoren zijn ingeschakeld, schakelt UniForm verwijderingsvectoren uit en verwijdert ze deze indien nodig en worden gegevensbestanden herschreven.

Delta UniForm inschakelen

Belangrijk

Als u Delta UniForm inschakelt, wordt de deltatabelfunctie IcebergCompatV2ingesteld, een functie voor schrijfprotocollen. Alleen clients die deze tabelfunctie ondersteunen, kunnen schrijven naar tabellen met UniForm-functionaliteit. U moet Databricks Runtime 14.3 LTS of hoger gebruiken om naar Delta-tabellen te schrijven waarvoor deze functie is ingeschakeld.

U kunt UniForm uitschakelen door de delta.universalFormat.enabledFormats tabeleigenschap uit te schakelen. U kunt kolomtoewijzing niet uitschakelen nadat deze is ingeschakeld en upgrades naar Delta Lake-lezer- en writer-protocolversies kunnen niet ongedaan worden gemaakt.

U moet de volgende tabeleigenschappen instellen om UniForm-ondersteuning in te schakelen voor Iceberg:

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

U moet ook kolomtoewijzing inschakelen om UniForm te kunnen gebruiken. Dit wordt automatisch ingeschakeld als u UniForm inschakelt tijdens het maken van de tabel, zoals in het volgende voorbeeld:

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

U kunt UniForm inschakelen voor een bestaande tabel met behulp van de volgende syntaxis:

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

Notitie

Deze syntaxis werkt ook om een upgrade uit te voeren van de openbare preview-versie van UniForm, die de tabelfunctie IcebergCompatV1heeft gebruikt.

Met deze syntaxis worden verwijderingsvectoren automatisch uit de tabel uitgeschakeld en verwijderd. Bestaande bestanden worden zo nodig herschreven om ze geschikt te maken voor Iceberg.

Wanneer u UniForm voor het eerst inschakelt, wordt het genereren van asynchrone metagegevens gestart. Deze taak moet worden voltooid voordat externe clients een query kunnen uitvoeren op de tabel met behulp van Iceberg. Zie De status van het genereren van IJsberg-metagegevens controleren.

Notitie

Als u BigQuery wilt gebruiken als uw Iceberg Reader-client, moet u deze instellen spark.databricks.delta.write.dataFilesToSubdirtrue op Azure Databricks om te voldoen aan een BigQuery-vereiste voor gegevensindeling.

Zie beperkingen.

Wanneer genereert UniForm icebergmetagegevens?

Azure Databricks activeert het genereren van iceberg-metagegevens asynchroon nadat een Delta Lake-schrijftransactie is voltooid met behulp van dezelfde berekening die de Delta-transactie heeft voltooid. U kunt ook het genereren van iceberg-metagegevens handmatig activeren. Zie Handmatig conversie van iceberg-metagegevens activeren.

Om schrijflatenties te voorkomen die zijn gekoppeld aan het genereren van iceberg-metagegevens, kunnen Delta-tabellen met frequente doorvoeringen meerdere Delta-doorvoeringen bundelen in één Iceberg-doorvoer.

Delta Lake zorgt ervoor dat slechts één proces voor het genereren van iceberg-metagegevens op elk gewenst moment wordt uitgevoerd. Doorvoeringen die een tweede gelijktijdig proces voor het genereren van iceberg-metagegevens activeren, worden doorgevoerd in Delta, maar ze activeren geen asynchrone iceberg-metagegevensgeneratie. Dit voorkomt trapsgewijze latentie voor het genereren van metagegevens voor workloads met frequente doorvoeringen (seconden tot minuten tussen doorvoeringen).

Zie Delta- en Iceberg-tabelversies.

Status van het genereren van IJsberg-metagegevens controleren

UniForm voegt de volgende velden toe aan metagegevens van de Unity Catalog- en Iceberg-tabel om de status van het genereren van metagegevens bij te houden:

Metagegevensveld Beschrijving
converted_delta_version De nieuwste versie van de Delta-tabel waarvoor iceberg-metagegevens zijn gegenereerd.
converted_delta_timestamp De tijdstempel van de meest recente Delta-doorvoer waarvoor iceberg-metagegevens zijn gegenereerd.

In Azure Databricks kunt u deze metagegevensvelden controleren door een van de volgende handelingen uit te voeren:

  • Delta Uniform Iceberg De sectie controleren die wordt geretourneerd door DESCRIBE EXTENDED table_name.
  • Tabelmetagegevens controleren met Catalog Explorer.
  • Gebruik de REST API om een tabel op te halen.

Raadpleeg de documentatie voor uw Iceberg-lezerclient voor het controleren van tabeleigenschappen buiten Azure Databricks. Voor OSS Apache Spark ziet u deze eigenschappen met behulp van de volgende syntaxis:

SHOW TBLPROPERTIES <table-name>;

Iceberg-metagegevensconversie handmatig activeren

U kunt het genereren van metagegevens van Iceberg handmatig activeren voor de nieuwste versie van de Delta-tabel. Deze bewerking wordt synchroon uitgevoerd, wat betekent dat de inhoud van de tabel die beschikbaar is in Iceberg, overeenkomt met de nieuwste versie van de Delta-tabel die beschikbaar is wanneer het conversieproces is gestart.

Deze bewerking moet niet nodig zijn onder normale omstandigheden, maar kan helpen als u het volgende tegenkomt:

  • Een cluster wordt beëindigd voordat het automatisch genereren van metagegevens slaagt.
  • Een fout of taakfout onderbreekt het genereren van metagegevens.
  • Een client die geen ondersteuning biedt voor gneration van UniForm Iceberg-metagegevens naar de Delta-tabel.

Gebruik de volgende syntaxis om het genereren van metagegevens van Iceberg handmatig te activeren:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Zie REPAIR TABLE.

Lezen met behulp van een JSON-pad voor metagegevens

Voor sommige Iceberg-clients moet u een pad opgeven naar bestanden met versies van metagegevens om externe Iceberg-tabellen te registreren. Telkens wanneer UniForm een nieuwe versie van de Delta-tabel converteert naar Iceberg, wordt er een nieuw JSON-bestand met metagegevens gemaakt.

Clients die JSON-paden voor metagegevens gebruiken voor het configureren van Iceberg, omvatten BigQuery. Raadpleeg de documentatie voor de Iceberg Reader-client voor configuratiedetails.

Delta Lake slaat icebergmetagegevens op onder de tabelmap, met behulp van het volgende patroon:

<table-path>/metadata/<version-number>-<uuid>.metadata.json

In Azure Databricks kunt u deze metagegevenslocatie controleren door een van de volgende handelingen uit te voeren:

  • Delta Uniform Iceberg De sectie controleren die wordt geretourneerd door DESCRIBE EXTENDED table_name.
  • Tabelmetagegevens controleren met Catalog Explorer.
  • Gebruik de volgende opdracht met de REST API:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>

Het antwoord bevat de volgende informatie:

{
    ...
          "delta_uniform_iceberg": {
              "metadata_location":  "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
    }
}

Belangrijk

Op pad gebaseerde Iceberg-lezerclients vereisen mogelijk handmatig het bijwerken en vernieuwen van JSON-paden voor metagegevens om de huidige tabelversies te lezen. Gebruikers kunnen fouten tegenkomen bij het uitvoeren van query's op Iceberg-tabellen met verouderde versies, omdat Parquet-gegevensbestanden worden verwijderd uit de Delta-tabel met VACUUM.

Lezen met het Unity Catalog Iceberg-cataloguseindpunt

Sommige Iceberg-clients kunnen verbinding maken met een Iceberg REST-catalogus. Unity Catalog biedt een alleen-lezen implementatie van de Iceberg REST-catalogus-API voor Delta-tabellen waarvoor UniForm is ingeschakeld met behulp van het eindpunt /api/2.1/unity-catalog/iceberg. Zie de iceberg REST API-specificatie voor meer informatie over het gebruik van deze REST API.

Clients die bekend zijn om de Iceberg-catalogus-API te ondersteunen, zijn Apache Spark, Flink en Trino. U moet de toegang tot de onderliggende cloudobjectopslag met de Delta-tabel configureren waarvoor UniForm is ingeschakeld. Raadpleeg de documentatie voor de Iceberg Reader-client voor configuratiedetails.

U moet een persoonlijk toegangstoken van Azure Databricks genereren en configureren om andere services verbinding te laten maken met Unity Catalog. Zie Verificatie voor Azure Databricks-automatisering - overzicht.

Hier volgt een voorbeeld van de instellingen voor het configureren van OSS Apache Spark voor het lezen van UniForm als Iceberg:

"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

Vervang de volledige URL van de werkruimte waarin u het persoonlijke toegangstoken hebt gegenereerd voor <api-root>.

Notitie

Bij het uitvoeren van query's op tabellen in Unity Catalog met behulp van deze methode, gebruiken object-id's het volgende patroon:

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

Dit patroon maakt gebruik van dezelfde drielaagse namen die aanwezig zijn in Unity Catalog, maar voegt een extra voorvoegsel unitytoe.

Delta- en Iceberg-tabelversies

Delta Lake en Iceberg maken query's voor tijdreizen mogelijk met behulp van tabelversies of tijdstempels die zijn opgeslagen in tabelmetagegevens.

In het algemeen worden iceberg- en Delta-tabelversies niet uitgelijnd met de tijdstempel voor doorvoeren of de versie-id. Als u wilt controleren met welke versie van een Delta-tabel een bepaalde versie van een Iceberg-tabel overeenkomt, kunt u de bijbehorende tabeleigenschappen gebruiken die zijn ingesteld op de tabel Iceberg. Zie De status van het genereren van IJsberg-metagegevens controleren.

Beperkingen

De volgende beperkingen gelden:

  • UniForm werkt niet op tabellen waarvoor verwijderingsvectoren zijn ingeschakeld. Zie Wat zijn verwijderingsvectoren?
  • Delta-tabellen waarvoor UniForm is ingeschakeld, bieden geen ondersteuning voor VOID typen.
  • Iceberg-clients kunnen alleen lezen van UniForm. Schrijfbewerkingen worden niet ondersteund.
  • IJsberglezers kunnen afzonderlijke beperkingen hebben, ongeacht UniForm. Raadpleeg de documentatie voor de door u gekozen client.
  • De ontvangers van Delta Sharing kunnen de tabel alleen lezen als Delta, zelfs als UniForm is ingeschakeld.

Change Data Feed werkt voor Delta-clients wanneer UniForm is ingeschakeld, maar heeft geen ondersteuning in Iceberg.

Sommige Delta Lake-tabelfuncties die door UniForm worden gebruikt, worden niet ondersteund door sommige lezers van Delta Sharing. Zie Gegevens en AI-assets veilig delen met Delta Sharing.