Modèles courants de chargement de données utilisant COPY INTO
Découvrez les modèles courants pour l'utilisation de COPY INTO afin de charger des données à partir de sources de fichiers dans Delta Lake.
Il existe de nombreuses options pour l'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 une référence complète de toutes les options.
Créez 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 des schémas. Consulter l'inférence et l'évolution du schéma à l'aide de COPY INTO pour plus de détails.
Charger des données JSON à l’aide de COPY INTO
L'exemple suivant charge des données JSON à partir de cinq fichiers dans Amazon S3 (S3) dans la table Delta appelée my_json_data. Cette table doit être créée avant que COPY INTO puisse être exécuté. 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 's3://my-bucket/jsonData'
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 's3://my-bucket/jsonData'
FILEFORMAT = JSON
FILES = ('f1.json', 'f2.json', 'f3.json', 'f4.json', 'f5.json')
Charger les données Avro à l'aide de COPY INTO
L’exemple suivant charge des données Avro dans S3 en utilisant des expressions SQL supplémentaires dans le cadre de l’instruction SELECT.
COPY INTO my_delta_table
FROM (SELECT to_date(dt) dt, event as measurement, quantity::double
FROM 's3://my-bucket/avroData')
FILEFORMAT = AVRO
Charger les fichiers CSV à l'aide de COPY INTO
L'exemple suivant charge des fichiers CSV depuis S3 sous s3://bucket/base/path/folder1 dans une table Delta.
COPY INTO target_table
FROM (SELECT key, index, textData, 'constant_value'
FROM 's3://bucket/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
FORMAT_OPTIONS('header' = 'true')
-- The example below loads CSV files without headers in S3 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 's3://bucket/base/path')
FILEFORMAT = CSV
PATTERN = 'folder1/file_[a-g].csv'
L'inférence et l'évolution du schéma en utilisant COPY INTO
Cette section fournit des exemples pour les configurations courantes d'inférence et d'évolution de schéma à l'aide de COPY INTO.
Syntaxe
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
FORMAT_OPTIONS ('inferSchema' = 'true', `mergeSchema` = `true`)
COPY_OPTIONS ('mergeSchema' = 'true');
Les FORMAT_OPTIONS suivants sont disponibles pour inférer le schéma d'entrée automatiquement 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: S'il faut inférer le schéma sur plusieurs fichiers source et Merge 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 default pour
mergeSchemadansFORMAT_OPTIONS(false).
Les 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 les mêmes,
mergeSchemapeut êtrefalsedansCOPY_OPTIONS.
Inférez et faites é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 des pipes avec un en-tête.
mergeSchema se trouve true dans FORMAT_OPTIONS car les fichiers d'entrée peuvent présenter 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 's3://my-bucket/pipeData'
FILEFORMAT = CSV
FORMAT_OPTIONS ('mergeSchema' = 'true',
'delimiter' = '|',
'header' = 'true')
COPY_OPTIONS ('mergeSchema' = 'true');
Ignorer les fichiers corrompus lors du chargement des données
Si les données que vous chargez ne peuvent pas être lues en raison d'un problème de corruption, ces fichiers peuvent être ignorés en définissant ignoreCorruptFiles sur true dans le FORMAT_OPTIONS.
Le résultat de la commande COPY INTO indique le nombre de fichiers ignorés en raison d'une corruption dans la colonne num_skipped_corrupt_files. Cette métrique apparaît également dans la colonne operationMetrics sous numSkippedCorruptFiles après l'exécution de DESCRIBE HISTORY sur la table Delta.
Les fichiers corrompus ne sont pas suivis par COPY INTO, ils peuvent donc être rechargés lors d'une exécution ultérieure si la corruption est corrigée. Vous pouvez voir quels fichiers sont corrompus en exécutant COPY INTO en mode VALIDATE.
COPY INTO my_table
FROM '/path/to/files'
FILEFORMAT = <format>
[VALIDATE ALL]
FORMAT_OPTIONS ('ignoreCorruptFiles' = 'true')
ignoreCorruptFiles est disponible dans Databricks Runtime 11.3 LTS et versions ultérieures.