Delen via


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_BINARYnaar 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-previewtable-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-previewtable functie niet respecteren, vallen terug op de standaardsortering van UTF8_BINARY.
  • Een MAP kan geen sleutel hebben die een gesorteerde tekenreeks is.
  • UniForm werkt niet met sorteringen.