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 Delta-tabellen 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 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:
- De Delta-tabel moet worden geregistreerd bij Unity Catalog. Zowel beheerde als externe tabellen worden ondersteund.
- Voor de tabel moet kolomtoewijzing zijn ingeschakeld. Zie Kolommen een andere naam geven en verwijderen met Delta Lake-kolom-mapping.
- De Delta-tabel moet een
minReaderVersion
>= 2 enminWriterVersion
>= 7 hebben. Zie Hoe beheert Azure Databricks de compatibiliteit van Delta Lake-functies? - Schrijfbewerkingen naar de tabel moeten Databricks Runtime 13.2 of hoger gebruiken.
Delta UniForm inschakelen
Belangrijk
Als u Delta UniForm inschakelt, wordt de Delta-tabelfunctie ingesteld IcebergCompatV1
, 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
-eigenschap van de tabel te verwijderen. 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 kolomtoewijzingen , en IcebergCompatV1
inschakelen om UniForm te kunnen 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 maakt met een CTAS-instructie, moet u handmatig de 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 spark.databricks.delta.write.dataFilesToSubdir
instellen op true
in 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 metagegevens van Iceberg succesvol 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 tabelop 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 de generatie van UniForm Iceberg-metagegevens schrijft 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 via het Unity Catalog Iceberg-catalogus-eindpunt
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 Toegang tot Azure Databricks-resources autoriseren.
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 naamruimten die aanwezig zijn in Unity Catalog, maar voegt daarbij het extra voorvoegsel unity
toe.
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 op basis van de commit-tijdstempel 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 typen
LIST
,MAP
enVOID
. - 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 naar UniForm-tabellen schrijven 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