Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 STATISTICSpour mettre à jour les statistiques d’omission des fichiers de données existants.Pour les tables avec clustering liquide activé, exécutez
OPTIMIZE FULL table_namepour 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=falseExécutez
OPTIMIZE table_name ZORDER BY zorder_columnpour 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
É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-previewfonctionnalité 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-previewse replient sur le classement par défaut deUTF8_BINARY. - Un
MAPne peut pas avoir de clé qui soit une chaîne de caractères triée. - UniForm ne fonctionne pas avec les interclassements.