Delta-tabellen lezen met Iceberg-clients
Dit artikel bevat informatie over het inschakelen van Iceberg-leesbewerkingen over tabellen die zijn opgeslagen met Delta Lake in Azure Databricks. Voor deze functie is Databricks Runtime 14.3 LTS of hoger vereist.
Notitie
Deze functionaliteit werd voorheen Delta Lake Universal Format (UniForm) genoemd.
U kunt een externe verbinding configureren om Unity Catalog als een Iceberg-catalogus te laten fungeren. Zie Databricks-tabellen lezen van Iceberg-clients.
Hoe werken Iceberg-leesbewerkingen (UniForm)?
Zowel Delta Lake als Iceberg bestaan uit Parquet-gegevensbestanden en een metagegevenslaag. Als u Iceberg-leesbewerkingen inschakelt, worden uw tabellen zodanig geconfigureerd dat ze automatisch IJsberg-metagegevens asynchroon genereren zonder gegevens te herschrijven, zodat Iceberg-clients Delta-tabellen kunnen lezen die zijn geschreven door Azure Databricks. Eén kopie van de gegevensbestanden heeft meerdere indelingen.
Belangrijk
- Tabellen met Iceberg-leesbewerkingen gebruiken Zstandard in plaats van Snappy als de compressiecodec voor onderliggende Parquet-gegevensbestanden.
- Het genereren van Iceberg-metagegevens wordt asynchroon uitgevoerd op de rekenkracht die wordt gebruikt voor het schrijven van gegevens naar Delta-tabellen, waardoor het gebruik van de resources van de driver kan toenemen.
- Voor documentatie voor de verouderde UniForm
IcebergCompatV1
-tabelfunctie, zie Legacy UniForm IcebergCompatV1.
Vereisten
Om Iceberg-lezen in te schakelen, moet aan de volgende vereisten worden voldaan:
- 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-kolomtoewijzing.
- 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 14.3 LTS of hoger gebruiken.
Notitie
U kunt verwijderingsvectoren in een tabel niet inschakelen met Iceberg-leesbewerkingen ingeschakeld.
Gebruik REORG
om verwijderingsvectoren uit te schakelen en op te schoonen terwijl Iceberg leesbewerkingen op een bestaande tabel inschakelt waarvoor verwijderingsvectoren zijn ingeschakeld. Zie Leesondersteuning voor Iceberg inschakelen of upgraden met behulp van REORG-.
Iceberg-leesbewerkingen inschakelen (UniForm)
Belangrijk
Wanneer u Iceberg-leesbewerkingen inschakelt, wordt de functie schrijfprotocol IcebergCompatV2
toegevoegd aan de tabel. Alleen clients die deze tabelfunctie ondersteunen, kunnen schrijven naar tabellen met Iceberg-leesbewerkingen ingeschakeld. In Azure Databricks moet u Databricks Runtime 14.3 LTS of hoger gebruiken om naar ingeschakelde tabellen te schrijven.
U kunt Iceberg-leesbewerkingen uitschakelen door de tabeleigenschap delta.universalFormat.enabledFormats
terug te zetten. Upgrades naar delta lake-lezer- en schrijfprotocolversies kunnen niet ongedaan worden gemaakt.
U moet de volgende tabeleigenschappen instellen om Iceberg-leesbewerkingen in te schakelen:
'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'
Wanneer u Iceberg-leesbewerkingen voor het eerst inschakelt, begint het genereren van asynchrone metagegevens. 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.
Zie Beperkingenvoor een lijst met beperkingen.
Iceberg-leesbewerkingen inschakelen tijdens het maken van tabellen
Kolomtoewijzing moet zijn ingeschakeld voor het gebruik van Iceberg-leesbewerkingen. Dit gebeurt automatisch als u Iceberg-leesbewerkingen inschakelt tijdens het maken van de tabel, zoals in het volgende voorbeeld:
CREATE TABLE T(c1 INT) TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Iceberg-lezen inschakelen voor een bestaande tabel
In Databricks Runtime 15.4 LTS en hoger kunt u IJsberg-leesbewerkingen in een bestaande tabel in- of bijwerken met behulp van de volgende syntaxis:
ALTER TABLE table_name SET TBLPROPERTIES(
'delta.columnMapping.mode' = 'name',
'delta.enableIcebergCompatV2' = 'true',
'delta.universalFormat.enabledFormats' = 'iceberg');
Leesondersteuning voor Iceberg inschakelen of upgraden met behulp van REORG
U kunt REORG
gebruiken om Iceberg-leesopdrachten en het herschrijven van onderliggende databestanden in te schakelen, zoals in het volgende voorbeeld:
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
Gebruik REORG
als een van de volgende waar is:
- In de tabel zijn verwijderingsvectoren ingeschakeld.
- U hebt eerder de
IcebergCompatV1
versie van UniForm Iceberg ingeschakeld. - U moet lezen uit Iceberg-engines die geen Ondersteuning bieden voor Parquet-bestanden in Hive-stijl, zoals Athene of Redshift.
Wanneer vindt het genereren van metagegevens van Iceberg plaats?
Azure Databricks activeert het genereren van metagegevens asynchroon nadat een Delta Lake-schrijftransactie is voltooid. Dit proces voor het genereren van metagegevens maakt gebruik van dezelfde berekening die de Delta-transactie heeft voltooid.
Notitie
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 metagegevens, kunnen Delta-tabellen met frequente doorvoeringen meerdere Delta-doorvoeringen groeperen in één doorvoering naar Iceberg-metagegevens.
Delta Lake zorgt ervoor dat slechts één proces voor het genereren van metagegevens wordt uitgevoerd op een bepaalde rekenresource. Commits die een tweede gelijktijdig proces voor het genereren van metagegevens activeren, worden succesvol doorgevoerd naar Delta, maar 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.
Delta- en Iceberg-tabelversies
Delta Lake en Iceberg staan query's voor tijdreizen toe met behulp van tabelversies of tijdstempels die zijn opgeslagen in tabelmetagegevens.
Over het algemeen komen Delta-tabelversies niet overeen met Iceberg-versies 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. Zie De status van het genereren van IJsberg-metagegevens controleren.
Status van het genereren van IJsberg-metagegevens controleren
Als u Iceberg-leesbewerkingen voor een tabel inschakelt, worden de volgende velden toegevoegd aan metagegevens van unity-catalogus- en icebergtabellen 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 doorDESCRIBE EXTENDED table_name
. - Tabelmetagegevens controleren met Catalog Explorer.
- Gebruik de REST API 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 het genereren 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.
Iceberg lezen met behulp van een JSON-pad naar metagegevens
Voor sommige Iceberg-clients moet u een pad naar bestanden met geversiede metagegevens opgeven om externe Iceberg-tabellen te registreren. Telkens wanneer Azure Databricks 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 metagegevens van Iceberg 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 doorDESCRIBE 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
.
Beperkingen
De volgende beperkingen gelden voor alle tabellen waarvoor Iceberg-leesbewerkingen zijn ingeschakeld:
- Ijsbergleesbewerkingen werken niet op tabellen waarvoor verwijderingsvectoren zijn ingeschakeld. Zie Wat zijn verwijderingsvectoren?
- Delta-tabellen waarvoor Iceberg-leesbewerkingen zijn ingeschakeld, bieden geen ondersteuning voor
VOID
typen. - De ondersteuning van Iceberg-clients is alleen lezen. Schrijfbewerkingen worden niet ondersteund.
- IJsberglezerclients hebben mogelijk afzonderlijke beperkingen, ongeacht Azure Databricks-ondersteuning voor Iceberg-lezen. Raadpleeg de documentatie voor de door u gekozen client.
- De ontvangers van Delta Sharing kunnen de tabel alleen lezen als Delta, zelfs wanneer Iceberg leesbewerkingen zijn ingeschakeld.
- Sommige Delta Lake-tabelfuncties die door Iceberg-leesbewerkingen worden gebruikt, worden niet ondersteund door sommige lezersclients van Delta Sharing. Zie Wat is Delta Sharing?
Change Data Feed werkt voor Delta-clients wanneer Iceberg-leesbewerkingen zijn ingeschakeld, maar wordt niet ondersteund in Iceberg.