Utiliser le déchiquetage de variantes pour optimiser les performances

La fragmentation des variants améliore les performances des requêtes sur les colonnes VARIANT en enregistrant les champs fréquemment présents sous forme de colonnes distinctes dans les fichiers Parquet sous-jacents. La fragmentation réduit les E/S nécessaires à la lecture des champs et améliore la compression grâce à un format en colonnes plutôt qu’à un bloc binaire.

Consultez VARIANT le type, la prise en charge des types variant pour Apache Iceberg et Delta Lake et les données de variante de requête.

Requirements

Databricks Runtime 17.3 ou version ultérieure est nécessaire pour lire et écrire des tables VARIANT déchiquetées. Pour des performances de requête optimales avec la collecte de statistiques sur les variantes et le data skipping, Databricks recommande Databricks Runtime 18.1 ou version supérieure.

Activer le déchiquetage

À partir de Databricks Runtime 17.3, le déchiquetage est automatiquement activé lorsque vous créez une nouvelle table avec une ou plusieurs colonnes VARIANT à l’aide de CREATE TABLE.

CREATE OR REPLACE TABLE et ALTER TABLE n’activent pas automatiquement le déchiquetage. Cela évite de modifier le mode de fragmentation des tables existantes et des charges de travail.

Pour les tables existantes, vous pouvez choisir manuellement de déchiqueter en définissant la enableVariantShredding propriété de table sur TRUE et en la désengageant en définissant la propriété sur FALSE:

Lac Delta

ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'true');

Table Iceberg

ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'true');

Vérifiez que le déchiquetage est activé en vérifiant que la propriété de la table enableVariantShredding est définie sur true.

Désactiver le partitionnement horizontal pour une table spécifique

Pour exclure une table spécifique du déchiquetage lors des écritures ultérieures, définissez la propriété de table enableVariantShredding sur FALSE:

Lac Delta

ALTER TABLE my_table SET TBLPROPERTIES ('delta.enableVariantShredding' = 'false');

Table Iceberg

ALTER TABLE my_table SET TBLPROPERTIES ('iceberg.enableVariantShredding' = 'false');

Supprimer le partitionnement d’une table existante

Pour supprimer le déchiquetage sur une table existante, supprimez la fonctionnalité avec la ALTER TABLE commande. Cette opération réécrit également les données fragmentées VARIANT en place au format défragmenté VARIANT et définit la propriété de la table enableVariantShredding sur faux.

ALTER TABLE my_table DROP FEATURE "variantShredding";

Limitations

  • La fragmentation des données introduit une surcharge sur les écritures.
  • L’activation du déchiquetage ne convertit pas automatiquement les données existantes VARIANT dans une table. Elle s’applique uniquement aux données écrites une fois la fonctionnalité activée. Pour réécrire des données existantes VARIANT , utilisez REORG TABLE my_table APPLY (SHRED VARIANT).
  • Le fragmentation s’applique aux colonnes VARIANT de niveau supérieur ou aux champs VARIANT dans les structs, à l’exclusion des données VARIANT stockées dans des tableaux ou des cartes.