Écritures transactionnelles dans le stockage cloud avec DBIO

Important

Cette documentation a été mise hors service et peut ne pas être mise à jour. Les produits, services ou technologies mentionnés dans ce contenu ne sont plus pris en charge. Consultez En quoi consistent les garanties ACID sur Azure Databricks ?.

Le package Databricks DBIO fournit des écritures transactionnelles dans le stockage cloud pour les tâches Apache Spark. Cela résout un certain nombre de problèmes de performances et d’exactitude qui se produisent quand Spark est utilisé dans un paramètre cloud natif (par exemple, en écrivant directement dans les services de stockage).

Important

Le protocole de validation n’est pas respecté lorsque vous accédez à des données à l’aide de chemins se terminant par *. Par exemple, la lecture de dbfs:/my/path retourne uniquement les modifications validées, tandis que la lecture de dbfs:/my/path/* retourne le contenu de tous les fichiers de données du répertoire, que leur contenu ait été validé ou non. Ce comportement est normal.

Avec la validation transactionnelle DBIO, les fichiers de métadonnées commençant par _started_<id> et _committed_<id> accompagnent les fichiers de données créés par les tâches Spark. En règle générale, vous ne devez pas modifier ces fichiers directement. Au lieu de cela, vous devez utiliser la commande VACUUM pour les nettoyer.

Nettoyer les fichiers non validés

Pour nettoyer les fichiers non validés laissés par les tâches Spark, utilisez la commande VACUUM pour les supprimer. Normalement VACUUM se produit automatiquement une fois les tâches Spark terminées, mais vous pouvez également l’exécuter manuellement en cas d’abandon d’une tâche.

Par exemple, VACUUM ... RETAIN 1 HOUR supprime les fichiers non validés datant de plus d’une heure.

Important

  • Évitez le nettoyage avec un délai de moins d’une heure. Cela peut entraîner une incohérence des données.

Voir également VACUUM.

SQL

-- recursively vacuum an output path
VACUUM '/path/to/output/directory' [RETAIN <N> HOURS]

-- vacuum all partitions of a catalog table
VACUUM tableName [RETAIN <N> HOURS]

Langage de programmation Scala

// recursively vacuum an output path
spark.sql("VACUUM '/path/to/output/directory' [RETAIN <N> HOURS]")

// vacuum all partitions of a catalog table
spark.sql("VACUUM tableName [RETAIN <N> HOURS]")