Collatieondersteuning voor Delta Lake
U kunt sortering opgeven voor tekenreeksvelden in Delta tables in Databricks Runtime 16.1 en hoger.
Als u sortering voor een table inschakelt, wordt de functie collations-preview
writer table toegevoegd. U kunt tables lezen met sortering ingeschakeld in Databricks Runtime 15.4 en hoger. Zie Hoe beheert Azure Databricks de compatibiliteit van Delta Lake-functies?.
Notitie
Standaard stelt Delta Lake de sortering voor tekenreeksvelden in op UTF8_BINARY
.
Een table maken met sortering op column niveau
U kunt een nieuwe table maken met sortering op column niveau met behulp van de volgende opdracht:
CREATE TABLE $tableName (
nonCollatedColName STRING,
collatedColName STRING COLLATE UNICODE,
structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
mapColName MAP<STRING, STRING COLLATE UNICODE>,
arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta
Een tablecolumn-instelling wijzigen om sortering op te geven
U kunt een bestaande columnupdate om sortering te gebruiken met behulp van de volgende opdrachten:
ALTER TABLE tableName ALTER COLUMN columnName TYPE newType
Als u een niet-standaardsortering wilt remove (indien aanwezig):
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY
De column-sortering wijzigen in utf8_lcase
:
ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE
Het wijzigen van de sortering voor een table wijzigt niet automatisch de update-statistieken of de gegevensindeling voor eerder geschreven gegevens. Om het overslaan van bestanden met historische gegevens binnen de nieuwe sorteervolgorde te verbeteren, raadt Databricks het volgende aan:
- Voer
ANALYZE table_name COMPUTE DELTA STATISTICS
tot en met update bestandoverslagstatistieken uit voor bestaande gegevensbestanden. - Voor tables waarbij vloeistofclustering is ingeschakeld, voert u
OPTIMIZE FULL table_name
tot update vloeistofclustering uit. - Ga als volgt te werk voor tables die gebruikmaken van
ZORDER
:Schakel incrementele optimalisatie in de Spark-sessie uit door de standaard-Spark-configuratie te overschrijven met de volgende opdracht:
SET spark.databricks.optimize.incremental=false
Voer
OPTIMIZE table_name ZORDER BY zorder_column
uit om alle bestaande gegevensbestanden opnieuw te schrijven.
Azure Databricks zal de collatie altijd respecteren in de resultaten van de query.
Collatie voor een table uitschakelen
U moet voor elke tekenreeks column in een table de sortering expliciet uitschakelen voordat u de sorteerfunctie verwijdert.
Gebruik de volgende syntaxis om de sortering voor een column te UTF8_BINARY
naar set.
ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY
Als u de functie table wilt verwijderen, voert u de volgende opdracht uit:
ALTER TABLE table_name
DROP FEATURE collations-preview
Zie functionaliteiten Drop Delta table.
Schema evolutie en verzameling
Sortering interageert met schema evolutie volgens de volgende regels:
- Als er al een bron column in het doel tablebestaat, blijft de sortering van de column in het doel table ongewijzigd.
- Als een bron-column een sortering heeft opgegeven, gebruikt de column die aan het doel table wordt toegevoegd de opgegeven sortering.
- Als het table-doel geen sortering heeft ingeschakeld wanneer een column met sortering wordt toegevoegd, wordt de
collations-preview
table-functie ingeschakeld.
Beperkingen
De volgende beperkingen gelden voor tables waarvoor sortering is ingeschakeld:
- Delta tables extern gemaakt met een sortering die niet wordt herkend door de Databricks Runtime, genereert een uitzondering wanneer er een query wordt uitgevoerd.
- Er is geen ondersteuning voor Delta Sharing.
- Samengevoegde columns kan niet worden gebruikt met
CHECK
beperkingen. - Het gegenereerde columns kan geen collatie gebruiken.
- Gecombineerde columns kan niet worden gebruikt met bloom filter index columns.
- Er is geen ondersteuning voor sortering in OSS Delta Lake-API's voor Scala of Python. U moet Spark SQL- of DataFrame-API's gebruiken om sortering in te schakelen.
- Dynamische partition-overschrijving wordt niet ondersteund bij samengestelde columns.
- Er kan niet naar columns worden verwezen in stateful queries voor gestructureerde streaming.
- Externe lezers die de
collations-preview
table functie niet respecteren, vallen terug op de standaardsortering vanUTF8_BINARY
. - Een
MAP
kan geen sleutel hebben die een gesorteerde tekenreeks is. - UniForm werkt niet met sorteringen.