Share via


Verouderde UniForm IcebergCompatV1

Belangrijk

Deze documentatie is buiten gebruik gesteld en wordt mogelijk niet bijgewerkt. De producten, services of technologieën die in deze inhoud worden genoemd, worden niet meer ondersteund. Zie UniForm gebruiken om Delta-tabellen te lezen met Iceberg-clients.

Belangrijk

Deze functie bevindt zich in openbare preview in Databricks Runtime 13.2 en hoger.

Met Delta Universal Format (UniForm) kunt u Delta-tabellen lezen met Iceberg reader-clients.

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.

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:

Delta UniForm inschakelen

Belangrijk

Als u Delta UniForm inschakelt, wordt de deltatabelfunctie IcebergCompatV1ingesteld, een functie voor schrijfprotocollen. Alleen clients die deze tabelfunctie ondersteunen, kunnen schrijven naar tabellen met UniForm-functionaliteit. U moet Databricks Runtime 13.2 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.

Met de volgende tabeleigenschap wordt UniForm-ondersteuning voor Iceberg ingeschakeld. iceberg is de enige geldige waarde.

'delta.universalFormat.enabledFormats' = 'iceberg'

U moet ook kolomtoewijzing inschakelen en IcebergCompatV1 UniForm gebruiken. Deze worden automatisch ingesteld als u UniForm inschakelt tijdens het maken van de tabel, zoals in het volgende voorbeeld:

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

Als u een nieuwe tabel met een CTAS-instructie maakt, moet u handmatig kolomtoewijzing opgeven, zoals in het volgende voorbeeld:

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

Als u een bestaande tabel wijzigt, moet u al deze eigenschappen opgeven, zoals in het volgende voorbeeld:

ALTER TABLE T SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  'delta.enableIcebergCompatV1' = 'true',
  'delta.universalFormat.enabledFormats' = '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 bekijken met Behulp van Catalog Explorer. Deze velden en waarden worden ook geretourneerd wanneer u de REST API gebruikt 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

U vindt het pad van dit bestand met Behulp van Catalog Explorer. Voor tabellen waarvoor UniForm is ingeschakeld, bevatten de details voor de Delta-tabel een veld voor de locatie van de icebergmetagegevens.

U kunt ook de REST API gebruiken om alle details voor een tabel op te halen, inclusief de locatie van de metagegevens. Gebruik de volgende opdracht:

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 LISTvoor typen MAPen 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.
  • Iceberg reader-clients versie 1.2.0 en lager bieden geen ondersteuning voor INT96 het tijdstempeltype dat is geschreven door Apache Spark. Gebruik de volgende code in notebooks die schrijven naar UniForm-tabellen om deze beperking te voorkomen: spark.conf.set(“spark.sql.parquet.outputTimestampType”, “TIMESTAMP_MICROS”)
  • De openbare preview-versie van het Unity Catalog Iceberg-eindpunt is niet bedoeld voor grootschalige productieworkloads. Mogelijk ondervindt u snelheidsbeperking als u een drempelwaarde van 5 query's per seconde overschrijdt.

De volgende Delta Lake-functies werken voor Delta-clients wanneer UniForm is ingeschakeld, maar geen ondersteuning hebben in Iceberg:

  • Gegevensfeed wijzigen
  • Delta Delen