Partager via


Prise en charge du tri pour Delta Lake

Vous pouvez spécifier des classements sur des champs de chaîne et lire des tables Delta qui utilisent des classements dans Databricks Runtime 16.4 LTS et versions ultérieures.

L’activation de la collation des données pour une table ajoute la fonctionnalité de table collations-preview. Consultez les protocoles et la compatibilité des fonctionnalités Delta Lake.

Remarque

Par défaut, Delta Lake définit le classement des champs de chaîne à UTF8_BINARY.

Créer une table avec collationnement au niveau de la colonne

Vous pouvez créer une table avec classement au niveau de la colonne à l’aide de la commande suivante :

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

Modifier une colonne de table pour spécifier le classement

Vous pouvez mettre à jour une colonne existante pour utiliser le classement à l’aide des commandes suivantes :

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

Pour supprimer un interclassement autre que par défaut (si un tel interclassement était présent) :

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

Pour modifier la collation de colonne en utf8_lcase:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

La modification du classement d’une table ne met pas automatiquement à jour les statistiques ou la disposition des données pour les données écrites précédemment. Pour améliorer le saut de fichier sur les données historiques sous le nouveau classement, Databricks recommande les éléments suivants :

  • Exécutez ANALYZE table_name COMPUTE DELTA STATISTICS pour mettre à jour les statistiques d’omission des fichiers de données existants.

  • Pour les tables avec clustering liquide activé, exécutez OPTIMIZE FULL table_name pour mettre à jour le clustering liquide.

  • Pour les tables qui utilisent ZORDER, procédez comme suit :

    • Désactivez l’optimisation incrémentielle dans la session Spark en remplaçant la configuration Spark par défaut avec la commande suivante :

      SET spark.databricks.optimize.incremental=false
      
    • Exécutez OPTIMIZE table_name ZORDER BY zorder_column pour réécrire tous les fichiers de données existants.

L'ordre de tri sera toujours respecté par Azure Databricks dans les résultats de la requête.

Désactiver le classement d’une table

Vous devez désactiver explicitement le classement pour chaque colonne de chaîne d’un tableau avant de supprimer la fonctionnalité de classement.

Utilisez la syntaxe suivante pour définir le classement d’une colonne sur UTF8_BINARY:

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

Pour supprimer la fonctionnalité de table, exécutez la commande suivante :

ALTER TABLE table_name
DROP FEATURE collations-preview

Consultez Supprimer une fonctionnalité de table Delta Lake et passer à une version antérieure du protocole de table.

Évolution du schéma et tri

Le classement interagit avec l’évolution du schéma à l’aide des règles suivantes :

  • Si une colonne source existe déjà dans la table cible, le classement de la colonne de la table cible reste inchangé.
  • Si une colonne source a un classement spécifié, la colonne ajoutée à la table cible utilise le classement spécifié.
  • Si la table cible n’a pas de classement activé lorsqu’une colonne avec classement est ajoutée, la collations-preview fonctionnalité de table est activée.

Limites

Les limitations suivantes existent pour les tables avec classement activé :

  • Les tables Delta créées en externe avec une collation non reconnue par Databricks Runtime génèrent une exception lorsqu’elles sont interrogées.
  • Il n’existe aucune prise en charge du partage Delta.
  • Les colonnes triées ne peuvent pas être utilisées avec des contraintes CHECK.
  • Les colonnes générées ne peuvent pas utiliser la collation.
  • Les colonnes regroupées ne peuvent pas être utilisées avec des colonnes d'index de filtre Bloom.
  • Il n’existe aucune prise en charge du classement dans les API OSS Delta Lake pour Scala ou Python. Vous devez utiliser les API Spark SQL ou DataFrame pour activer le classement.
  • Le remplacement de partition dynamique n’est pas pris en charge sur les colonnes compilées.
  • Les colonnes collationnées ne peuvent pas être référencées dans les requêtes d'état de streaming structuré.
  • Les lecteurs externes qui ne respectent pas la fonctionnalité de la table collations-preview se replient sur le classement par défaut de UTF8_BINARY.
  • Un MAP ne peut pas avoir de clé qui soit une chaîne de caractères triée.
  • UniForm ne fonctionne pas avec les interclassements.