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. 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 :

CREATE TABLE IF NOT EXISTS my_table
[(col_1 col_1_type, col_2 col_2_type, ...)]
[COMMENT <table-description>]
[TBLPROPERTIES (<table-properties>)];

Remarquez que, pour déduire le schéma avec COPY INTO, vous devez fournir des options supplémentaires :

COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');

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 :

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');

Charger des données JSON avec 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 avec 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 avec 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'

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.