Modèles courants de chargement de données utilisant COPY INTO
Découvrez les modèles courants d’utilisation de COPY INTO
pour charger des données à partir de sources de fichiers dans Delta Lake.
Il existe de nombreuses options d’utilisation de COPY INTO
. Vous pouvez également utiliser des informations d’identification temporaires avec COPY INTO en combinaison avec ces modèles.
Consultez COPY INTO pour obtenir une référence complète de toutes les options.
Créer des tables cibles pour COPY INTO
COPY INTO
doit cibler une table Delta existante.
CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];
Dans Databricks Runtime 11.3 LTS et versions ultérieures, la définition du schéma pour ces tables est facultative pour les formats qui prennent en charge l’évolution du schéma. Pour plus d’informations, consultez Inférence et évolution de schéma utilisant COPY INTO.
Charger des données JSON utilisant COPY INTO
L’exemple suivant charge les données JSON à partir de cinq fichiers dans Azure Data Lake Storage Gen2 (ADLS Gen2) dans la table Delta appelée my_json_data
. Cette table doit être créée avant de pouvoir exécuter COPY INTO
. Si des données ont déjà été chargées à partir de l’un des fichiers, les données ne sont pas rechargées pour ce fichier.
COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
-- The second execution will not copy any data since the first command already loaded the data
COPY INTO my_json_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
Charger des données Avro utilisant COPY INTO
L'exemple suivant charge des données Avro sur ADLS Gen2 en utilisant d’autres expressions SQL dans le cadre de l'instruction SELECT
.
COPY INTO my_delta_table
FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = AVRO
Charger des fichiers CSV utilisant COPY INTO
L’exemple suivant charge des fichiers CSV depuis Azure Data Lake Storage Gen2 sous abfss://container@storageAccount.dfs.core.windows.net/base/path/folder1
dans une table Delta.
COPY INTO target_table
FROM (SELECT key, index, textData, 'constant_value'
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
FORMAT_OPTIONS('header' = 'true')
-- The example below loads CSV files without headers in ADLS Gen2 using COPY INTO.
-- By casting the data and renaming the columns, you can put the data in the schema you want
COPY INTO target_table
FROM (SELECT _c0::bigint key, _c1::int index, _c2 textData
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
Inférence et évolution de schéma utilisant COPY INTO
Cette section fournit des exemples d’inférence de schéma et de configurations d’évolution courantes utilisant COPY INTO
.
Syntaxe
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');
Les éléments FORMAT_OPTIONS
suivants sont disponibles pour déduire automatiquement le schéma d’entrée avec COPY INTO
:
inferSchema
: indique s’il faut déduire les types de données des enregistrements analysés ou supposer que toutes les colonnes sont de typeStringType
.mergeSchema
: indique s’il faut déduire le schéma entre plusieurs fichiers sources et fusionner le schéma de chaque fichier source.Si les fichiers sources ont le même schéma, Databricks recommande d’utiliser le paramètre par défaut pour
mergeSchema
dansFORMAT_OPTIONS
(false
).
Les éléments COPY_OPTIONS
suivants sont disponibles pour faire évoluer le schéma cible avec COPY INTO
:
mergeSchema
: indique s’il faut faire évoluer le schéma de la table Delta cible en fonction du schéma d’entrée.Si le schéma d’entrée et le schéma cible sont identiques,
mergeSchema
peut êtrefalse
dansCOPY_OPTIONS
.
Déduire et faire évoluer le schéma CSV
L’exemple suivant crée une table Delta sans schéma appelée my_pipe_data
et charge un fichier CSV délimité par un canal avec un en-tête.
mergeSchema
est true
dans FORMAT_OPTIONS
, car les fichiers d’entrée peuvent avoir des différences d’en-tête ou de délimiteur.
CREATE TABLE IF NOT EXISTS my_pipe_data;
COPY INTO my_pipe_data
FROM 'abfss://container@storageAccount.dfs.core.windows.net/base/path'
FILEFORMAT = CSV
FORMAT_OPTIONS ('mergeSchema' = 'true',
'delimiter' = '|',
'header' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');
Ignorer les fichiers endommagés lors du chargement des données
Si les données que vous chargez ne peuvent pas être lues en raison d’un problème d’altération, ces fichiers peuvent être ignorés en définissant ignoreCorruptFiles
sur true
dans FORMAT_OPTIONS
.
Le résultat de la commande COPY INTO
retourne le nombre de fichiers ignorés en raison d’une altération dans la colonne num_skipped_corrupt_files
. Cette métrique s’affiche également dans la colonne operationMetrics
sous numSkippedCorruptFiles
après l’exécution de DESCRIBE HISTORY
sur la table Delta.
Les fichiers endommagés ne sont pas suivis par COPY INTO
. Ils peuvent donc être rechargés dans une exécution ultérieure si l’altération est corrigée. Vous pouvez voir quels fichiers sont endommagés en exécutant COPY INTO
en mode VALIDATE
.
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')
Remarque
ignoreCorruptFiles
est disponible dans Databricks Runtime 11.3 LTS et versions ultérieures.