CONVERT TO DELTA
S’applique à : Databricks SQL Databricks Runtime
Convertit une table Parquet existante en une table Delta sur place. Cette commande répertorie tous les fichiers du répertoire, crée un journal des transactions Delta Lake qui effectue le suivi de ces fichiers et déduit automatiquement le schéma de données en lisant les pieds de page de tous les fichiers Parquet. Le processus de conversion collecte les statistiques pour améliorer les performances des requêtes dans la table Delta convertie. Si vous fournissez un nom de table, le metastore est également mis à jour pour indiquer que la table est maintenant une table Delta.
Cette commande prend en charge la conversion de tables Iceberg dont le format de fichier sous-jacent est Parquet. Dans ce cas, le convertisseur génère le journal des transactions Delta Lake basé sur le schéma, les informations de partitionnement et le manifeste de fichier natif de la table Iceberg.
Syntaxe
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Paramètres
-
Soit un identificateur de table qualifié au choix, soit un chemin à un répertoire de fichier
parquet
ouiceberg
. Le nom ne doit pas inclure de spécification temporelle ou de spécification d’options. Pour les tables Iceberg, vous ne pouvez utiliser que des chemins, car la conversion de tables Iceberg managées n’est pas prise en charge. NO STATISTICS
Contournez les collections de statistiques pendant le processus de conversion et accélérez la conversion. Une fois la table convertie en Delta Lake, vous pouvez utiliser
OPTIMIZE ZORDER BY
pour réorganiser la disposition des données et générer des statistiques.-
Partitionnez la table créée par les colonnes spécifiées. Quand
table_name
est un chemin,PARTITIONED BY
est obligatoire pour les données partitionnées. Quandtable_name
est un identificateur de table qualifié, la clausePARTITIONED BY
est facultative et la spécification de la partition est chargée à partir du metastore. Quelle que soit l’approche, le processus de conversion s’interrompt et lève une exception si la structure du répertoire n’est pas conforme à la spécificationPARTITIONED BY
fournie ou chargée.Notes
Dans Databricks Runtime 11.1 et antérieur,
PARTITIONED BY
est un argument obligatoire pour toutes les données partitionnées.
Exemples
Notes
Vous n’avez pas besoin de fournir des informations de partitionnement pour les tables Icebergs ou les tables inscrites dans le metastore.
CONVERT TO DELTA database_name.table_name; -- only for Parquet tables
CONVERT TO DELTA parquet.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`
PARTITIONED BY (date DATE); -- if the table is partitioned
CONVERT TO DELTA iceberg.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`; -- uses Iceberg manifest for metadata
Mises en garde
Tout fichier non suivi par Delta Lake est invisible et peut être supprimé lorsque vous exécutez VACUUM
. Vous devez éviter de mettre à jour ou d’ajouter des fichiers de données pendant le processus de conversion. Une fois la table convertie, assurez-vous que toutes les écritures transitent par Delta Lake.
Il est possible que plusieurs tables externes partagent le même répertoire Parquet sous-jacent. Dans ce cas, si vous exécutez CONVERT
sur l'une des tables externes, vous ne pourrez pas accéder aux autres tables externes car leur répertoire sous-jacent a été converti de Parquet vers Delta Lake. Pour interroger ou écrire à nouveau dans ces tables externes, vous devez également exécuter CONVERT
sur ces tables.
CONVERT
fournit les informations du catalogue, notamment les propriétés des schémas et des tables, dans le journal des transactions Delta Lake. Si le répertoire sous-jacent a déjà été converti en Delta Lake et que ses métadonnées sont différentes de celles du catalogue, une exception convertMetastoreMetadataMismatchException
est levée.
Si vous souhaitez que Databricks Runtime remplace CONVERT
par les métadonnées existantes dans le journal des transactions Delta Lake, définissez la configuration SQL spark.databricks.delta.convert.metadataCheck.enabled
sur « faux ».