COPY FILES¶
Copie les fichiers d’une zone de préparation à l’autre.
Cette commande prend en charge les opérations de copie de fichiers depuis et vers des zones de préparation nommées, comme l’illustre le tableau suivant :
Emplacement source |
Emplacement cible |
---|---|
Zone de préparation interne nommée |
Zone de préparation interne nommée |
Zone de préparation externe |
Zone de préparation interne nommée |
Zone de préparation interne nommée |
Zone de préparation externe |
Zone de préparation externe |
Zone de préparation externe |
Une zone de préparation externe cible ou source peut référencer des fichiers dans l’un des services de stockage Cloud ou des emplacements on-premises suivants.
Amazon S3
Google Cloud Storage
Stockage Microsoft Azure Blob
Microsoft Data Lake Storage Gen2
Microsoft Azure à usage général v2
- Voir aussi :
Zones de préparation externes , Zones de préparation internes
Syntaxe¶
COPY FILES INTO @[<namespace>.]<stage_name>[/<path>/]
FROM @[<namespace>.]<stage_name>[/<path>/]
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ DETAILED_OUTPUT = { TRUE | FALSE } ]
Paramètres requis¶
INTO @[namespace.]stage_name[/path/]
Spécifie l’emplacement cible des fichiers copiés.
FROM @[namespace.]stage_name[/path/]
Spécifie l’emplacement source où les fichiers à copier sont mis en zone de préparation.
Pour les paramètres INTO
et FROM
:
namespace
est la base de données ou le schéma dans lequel réside la zone de préparation interne ou externe, sous la formedatabase_name.schema_name
ouschema_name
. L’espace de noms est facultatif si une base de données et un schéma sont actuellement utilisés dans la session utilisateur ; sinon, il est obligatoire.path
est un chemin facultatif, sensible à la casse, dans l’emplacement de stockage Cloud, qui spécifie un ensemble de fichiers à copier à partir de la zone de préparation source ou d’un emplacement spécifique sur la zone de préparation cible. Votre service de stockage dans le Cloud peut appeler le chemin d’accès un préfixe ou un dossier.Note
Si un nom de chemin cible ou source comprend des caractères spéciaux ou des espaces, vous devez placer la valeur
INTO ...
ouFROM ...
entre guillemets simples.Les valeurs de
INTO ...
etFROM ...
doivent être des constantes littérales. Les valeurs ne peuvent pas être des variables SQL.
Paramètres facultatifs¶
FILES = ( 'file_name' [ , 'file_name' ... ] )
Spécifie une liste d’un ou plusieurs noms de fichiers séparés par des virgules à copier. Les fichiers doivent déjà être mis en zone de préparation dans l’emplacement source que vous spécifiez dans la commande. Snowflake ignore tous les fichiers spécifiés qui ne peuvent pas être trouvés.
Vous pouvez spécifier un maximum de 1 000 noms de fichiers.
Note
Pour définir le chemin d’accès au fichier pour les zones de préparation externes, Snowflake ajoute l’URL de la définition de la zone de préparation à chaque nom de fichier de la liste.
Cependant, Snowflake n’insère pas de séparateur entre le chemin d’accès et le nom du fichier. Vous devez explicitement inclure un séparateur (
/
) soit à la fin de l’URL dans la définition de la zone de préparation, soit au début de chaque nom de fichier dans la listeFILES
.PATTERN = 'regex_pattern'
Spécifie un modèle d’expression régulière pour filtrer la liste des fichiers à copier. Cette commande applique l’expression régulière à l’ensemble de l’emplacement de stockage dans la clause
FROM
.Astuce
Pour de meilleures performances, évitez les modèles qui filtrent un grand nombre de fichiers.
DETAILED_OUTPUT = { TRUE | FALSE }
Indique si la sortie de la commande doit résumer les résultats de l’opération de copie ou énumérer chaque fichier copié.
- Valeurs:
Si
TRUE
, la sortie comprend une ligne pour chaque fichier copié à l’emplacement cible. Une seule colonne nomméefile
contient le chemin cible (le cas échéant) et le nom de fichier pour chaque fichier copié.Si
FALSE
, la sortie est une seule ligne avec le nombre de fichiers qui ont été copiés.
- Par défaut:
TRUE
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum (en fonction des emplacements source et cible) ainsi :
Privilège |
Objet |
Remarques |
---|---|---|
USAGE |
Zone de préparation externe |
Requis sur une zone de préparation externe source ou cible. |
READ |
Zone de préparation interne nommée |
Requis sur une zone de préparation interne à la source. |
WRITE |
Zone de préparation interne nommée |
Requis sur une zone de préparation interne cible. |
Notez que l’exploitation d’un objet dans un schéma requiert également le privilège USAGE sur la base de données et le schéma parents.
Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.
Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.
Notes sur l’utilisation¶
Cette commande ne prend pas en charge les actions suivantes :
Copie de fichiers depuis ou vers des zones de préparation d’utilisateurs ou de tables.
Copie de données conservées dans les classes de stockage dans le Cloud d’archives qui doivent être restaurées avant de pouvoir être récupérées. Ces classes de stockage d’archives comprennent la classe de stockage Amazon S3 Glacier Flexible Retrieval, Glacier Deep Archive, ou Microsoft Azure Archive Storage.
Copie de fichiers dont la taille est supérieure à 5GB.
Considérations relatives à l’exécution de cette commande :
Les instructions COPY FILES écrasent tous les fichiers existants dont les noms correspondent à l’emplacement cible. La commande ne supprime pas les fichiers existants qui ne correspondent pas aux noms des fichiers copiés.
Si une opération de copie de fichier échoue, Snowflake n’effectue pas de nettoyage automatique.
Copie de fichiers à partir de Google Cloud Storage : une instruction COPY FILES peut échouer si la liste d’objets d’une zone de préparation externe comprend un ou plusieurs blobs de répertoire. Un blob de répertoire est un chemin d’accès qui se termine par une barre oblique (
/
). Dans l’exemple suivant,LIST @<stage>
,my_gcs_stage/load/
est un blob de répertoire.+---------------------------------------+------+----------------------------------+-------------------------------+ | name | size | md5 | last_modified | |---------------------------------------+------+----------------------------------+-------------------------------| | my_gcs_stage/load/ | 12 | 12348f18bcb35e7b6b628ca12345678c | Mon, 11 Aug 2022 16:57:43 GMT | | my_gcs_stage/load/data_0_0_0.csv.gz | 147 | 9765daba007a643bdff4eae10d43218y | Mon, 11 Aug 2022 18:13:07 GMT | +---------------------------------------+------+----------------------------------+-------------------------------+
Google crée des blobs de répertoire lorsque vous utilisez la console Google Cloud Platform pour créer un répertoire.
Pour éviter ce problème, utilisez l’option
PATTERN
pour spécifier les fichiers à copier. Pour un exemple, voir Copier des fichiers à l’aide de modèles spéciaux.
La commande COPY FILES entraîne des coûts de transfert de données et de calcul.
Transfert de données : les fournisseurs cloud peuvent facturer les données transférées à partir de leur propre réseau. Pour couvrir ces dépenses, Snowflake facture des frais par octet lorsque vous copiez des fichiers d’une zone de préparation interne de Snowflake vers une zone de préparation externe dans une autre région ou avec un autre fournisseur cloud. Snowflake ne facture pas l’entrée des données (par exemple, lors de la copie de fichiers d’une zone de préparation externe vers une zone de préparation interne).
Pour plus d’informations sur la facturation par transfert de données, voir Comprendre le coût de transfert de données.
Calcul : la copie de fichiers s’appuie sur des ressources de calcul gérées par Snowflake. La ligne correspondant à la commande COPY FILES sur votre facture Snowflake n’inclut pas les frais liés aux services Cloud. Cependant, l’appel de la commande peut entraîner des frais de services Cloud, décrits plus en détail dans le tableau de consommation Snowflake.
Pour plus d’informations sur la facturation des ressources de calcul, voir Comprendre le coût du calcul.
Note
Certaines fonctionnalités de Snowflake, telles que les Native apps et les feuilles de calcul, entraînent des frais de COPY FILES. Par conséquent, vous pouvez voir des frais de COPY FILES, même si vous n’avez pas exécuté la commande COPY FILES. Pour plus d’informations sur ces frais, contactez le support Snowflake.
Snowflake ne conserve pas d’historique des copies de fichiers pour cette commande.
Exemples¶
Copier des fichiers¶
Copier tous les fichiers d’une zone de préparation existante (src_stage
) vers une zone de préparation différente (trg_stage
) :
COPY FILES
INTO @trg_stage
FROM @src_stage;
Note
Pour copier des fichiers depuis ou vers une zone de préparation externe dotée d’un emplacement de stockage protégé, assurez-vous que la définition de la zone de préparation inclut les identifiants de connexion permettant d’accéder à l’emplacement de stockage dans le Cloud.
Spécifier les noms des fichiers à copier d’une zone de préparation existante (src_stage
) vers une zone de préparation différente (trg_stage
) :
COPY FILES
INTO @trg_stage
FROM @src_stage
FILES = ('file1.csv', 'file2.csv');
Copier des fichiers d’un chemin spécifique d’une zone de préparation existante (src_stage/src_path/
) vers un chemin spécifique d’une autre zone de préparation (trg_stage/trg_path/
) :
COPY FILES
INTO @trg_stage/trg_path/
FROM @src_stage/src_path/;
Copier des fichiers à l’aide de modèles spéciaux¶
Utiliser les modèles spéciaux pour charger uniquement les fichiers compressés CSV dans n’importe quel chemin d’accès d’une zone de préparation existante (src_stage
) vers une zone de préparation différente (trg_stage
) :
COPY FILES
INTO @trg_stage
FROM @src_stage
PATTERN='.*/.*/.*[.]csv[.]gz';
La composante .*
représente zéro ou plusieurs occurrences d’un caractère. Les crochets isolent le caractère point (.
) qui précède une extension de fichier.
Copier uniquement les fichiers CSV non compressés dont le nom contient la chaîne sales
:
COPY FILES
INTO @trg_stage
FROM @src_stage
PATTERN='.*sales.*[.]csv';