PUT

Charge des fichiers de données (c.-à-d. des zones de préparation) à partir d’un répertoire/dossier local sur une machine cliente vers l’une des zones de préparation suivantes de Snowflake :

  • Zone de préparation interne nommée.

  • Zone de préparation pour une table spécifiée.

  • Zone de préparation interne pour l’utilisateur actuel.

Une fois les fichiers mis en zone de préparation, les données contenues dans les fichiers peuvent être chargées dans une table à l’aide de la commande COPY INTO <table>.

Note

  • PUT ne prend pas en charge le chargement de fichiers vers des zones de préparation externes. Pour charger des fichiers vers des zones de préparation externes, utilisez les utilitaires fournis par le service Cloud.

  • Le pilote ODBC prend en charge PUT avec les comptes Snowflake hébergés sur les plateformes suivantes :

    • Amazon Web Services (en utilisant le pilote ODBC version 2.17.5 et supérieure).

    • Google Cloud Platform (en utilisant le pilote ODBC version 2.21.5 et supérieure).

    • Microsoft Azure (en utilisant le pilote ODBC version 2.20.2 et supérieure).

Voir aussi :

GET , LIST , REMOVE

Syntaxe

PUT file://<path_to_file>/<filename> internalStage
    [ PARALLEL = <integer> ]
    [ AUTO_COMPRESS = TRUE | FALSE ]
    [ SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE ]
    [ OVERWRITE = TRUE | FALSE ]
Copy

Où :

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>]
  | @[<namespace>.]%<table_name>[/<path>]
  | @~[/<path>]
Copy

Paramètres requis

file://path_to_file/filename

Spécifie l’URI pour le(s) fichier(s) de données sur la machine cliente, où :

  • path_to_file est le chemin du répertoire local vers le(s) fichier(s) à charger.

  • filename est le nom du ou des fichiers à charger. Les caractères génériques (*, ?) sont pris en charge pour permettre le chargement de plusieurs fichiers dans un répertoire.

Le formatage de l’URI diffère selon le système d’exploitation de votre client :

Linux/macOS

Vous devez inclure la barre oblique initiale dans le chemin (par ex. file:///tmp/load).

Si le chemin d’accès au répertoire et/ou le nom du fichier contiennent des caractères spéciaux, l’URI du fichier entier doit être placé entre guillemets simples.

Windows

Vous devez inclure le lecteur et la barre oblique inverse dans le chemin (par ex. file://C:\temp\load).

Si le chemin d’accès au répertoire et/ou le nom du fichier contiennent des caractères spéciaux, l’URI du fichier entier doit être placé entre guillemets simples. Notez que le caractère séparateur est une barre oblique (/) dans des URIs délimités (par exemple, 'file://C:/temp/load data' pour un chemin d’accès sous Windows qui comprend un répertoire nommé load data).

internalStage

Spécifie l’emplacement dans Snowflake où charger les fichiers :

@[namespace.]int_stage_name[/path]

Les fichiers sont chargés dans la zone de préparation interne nommée spécifiée.

@[namespace.]%table_name[/path]

Les fichiers sont chargés dans la zone de préparation de la table spécifiée.

@~[/path]

Les fichiers sont chargés dans la zone de préparation de l’utilisateur actuel.

Où :

  • namespace est la base de données et/ou le schéma dans lequel réside l’échelon ou la table interne nommé(e). Il est facultatif si une base de données et un schéma sont actuellement utilisés dans la session. Dans le cas contraire, il est nécessaire.

  • path est un chemin facultatif sensible à la casse pour les fichiers de l’emplacement de stockage Cloud (c’est-à-dire que les fichiers ont des noms qui commencent par une chaîne commune) qui limite l’accès à un ensemble de fichiers. Les chemins sont appelés préfixes ou dossiers selon les services de stockage Cloud.

Note

Si le nom ou le chemin de la zone de préparation comprend des espaces ou des caractères spéciaux, il doit être placé entre guillemets simples (par exemple, '@"my stage"' pour une zone de préparation nommée "my stage").

Paramètres facultatifs

PARALLEL = integer

Spécifie le nombre de threads à utiliser pour charger les fichiers. Le processus de chargement sépare les lots de fichiers de données par taille :

  • Les petits fichiers (< 64 MB compressés ou non compressés) sont mis en zone de préparation en parallèle sous forme de fichiers individuels.

  • Les fichiers plus volumineux sont automatiquement divisés en plusieurs parties, stockés en même temps et réunis dans la zone de préparation cible. Un seul thread peut charger plusieurs parties.

Augmenter le nombre de threads peut améliorer les performances lors du chargement de fichiers volumineux.

Valeurs prises en charge : toute valeur entière de 1 (pas de parallélisme) à 99 (utilisez 99 threads pour charger des fichiers).

Par défaut : 4

Note

Une limite 16 MB (plutôt que 64 MB) s’applique aux anciennes versions des pilotes Snowflake, notamment :

  • Les versions de pilotes JDBC antérieures à la version 3.12.1.

  • Les versions de pilotes ODBC antérieures à la version 2.20.5.

  • Versions du connecteur Python antérieures à la version 2.2.0.

AUTO_COMPRESS = TRUE | FALSE

Indique si Snowflake utilise gzip pour compresser les fichiers pendant le chargement :

  • TRUE : les fichiers sont compressés (s’ils ne le sont pas déjà).

  • FALSE : les fichiers ne sont pas compressés (les fichiers sont chargés tels quels).

Cette option ne prend pas en charge les autres types de compression. Pour utiliser un type de compression différent, compressez le fichier séparément avant d’exécuter la commande PUT. Ensuite, identifiez le type de compression à l’aide de l’option SOURCE_COMPRESSION.

Assurez-vous que votre dossier local dispose de suffisamment d’espace pour permettre à Snowflake de compresser les fichiers de données avant de les mettre en zone de préparation. Si nécessaire, définissez la variable d’environnement TEMP, TMPDIR ou TMP de votre système d’exploitation pour qu’elle pointe vers un dossier local contenant davantage d’espace disponible.

Par défaut : TRUE

SOURCE_COMPRESSION = AUTO_DETECT | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE

Spécifie la méthode de compression utilisée sur les fichiers déjà compressés qui sont stockés actuellement :

Valeurs prises en charge

Remarques

AUTO_DETECT

Algorithme de compression détecté automatiquement, sauf pour les fichiers compressés par Brotli, qui ne peuvent actuellement pas être détectés automatiquement. Si vous chargez des fichiers compressés via Brotli, utilisez explicitement BROTLI au lieu de AUTO_DETECT.

GZIP

BZ2

BROTLI

Doit être utilisé si vous chargez des fichiers compressés Brotli.

ZSTD

Zstandard v0.8 (et supérieur) est pris en charge.

DEFLATE

Fichiers compressés Deflate (avec en-tête zlib, RFC1950).

RAW_DEFLATE

Fichiers bruts compressés Deflate (sans en-tête, RFC1951).

NONE

Les fichiers de données à charger n’ont pas été compressés.

Par défaut : AUTO_DETECT

Note

Snowflake utilise cette option pour détecter comment les fichiers de données ont été compressés afin qu’ils puissent être décompressés et les données extraites pour le chargement ; cette option n’est pas utilisée pour compresser des fichiers.

Le chargement de fichiers qui ont été compressés avec d’autres utilitaires (par ex. lzip, lzma, lzop, et xz) n’est pas pris en charge actuellement.

OVERWRITE = TRUE | FALSE

Spécifie si Snowflake écrase un fichier existant portant le même nom lors du chargement :

  • TRUE : un fichier existant portant le même nom est écrasé.

  • FALSE : un fichier existant portant le même nom n’est pas écrasé.

    Notez qu’une opération LIST sur la zone de préparation est effectuée en arrière-plan, ce qui peut affecter les performances de l’opération PUT.

    Si les tentatives de PUT sur un fichier échouent parce qu’un fichier portant le même nom existe dans la zone de préparation cible, les options suivantes sont disponibles :

    • Chargez les données du fichier existant dans une ou plusieurs tables, et supprimez le fichier de la zone de préparation. Puis effectuez un PUT sur un fichier avec des données nouvelles ou mises à jour dans la zone de préparation.

    • Renommez le fichier local, puis tentez à nouveau l’opération PUT.

    • Définissez OVERWRITE = TRUE dans l’instruction PUT. Ne le faites que s’il est vraiment sûr d’écraser un fichier avec des données qui n’ont peut-être pas encore été chargées dans Snowflake.

Notez que si votre compte Snowflake est hébergé sur Google Cloud Platform, les instructions PUT ne sont pas reconnues lorsque le paramètre OVERWRITE est défini sur TRUE. Une opération PUT écrase toujours tous les fichiers existants dans la zone de préparation cible avec les fichiers locaux que vous chargez.

Les clients suivants prennent en charge l’option OVERWRITE pour les comptes Snowflake hébergés sur Amazon Web Services ou Microsoft Azure :

  • SnowSQL

  • Pilote ODBC de Snowflake

  • Pilote JDBC de Snowflake

  • Connecteur Snowflake pour Python

Valeurs prises en charge : TRUE, FALSE.

Par défaut : FALSE.

Notes sur l’utilisation

  • La commande ne peut pas être exécutée à partir de la page Worksheets Worksheet tab dans aucune des interfaces Web de Snowflake ; utilisez plutôt le client SnowSQL ou Pilotes pour charger les fichiers de données, ou consultez la documentation d’un client Snowflake spécifique pour vérifier si cette commande est prise en charge.

  • Les motifs d’utilisation de caractères génériques ne sont pas pris en charge.

  • La commande ne crée pas et ne renomme pas de fichiers.

  • Tous les fichiers stockés sur des zones de préparation internes pour les opérations de chargement et de déchargement de données sont automatiquement chiffrés à l’aide d’un chiffrement fort AES-256 côté serveur. Par défaut, Snowflake fournit un chiffrement supplémentaire côté client avec une clé de 128 bits (avec la possibilité de configurer une clé de 256 bits). Pour plus d’informations, consultez Types de chiffrement pour les zones de préparation internes.

  • La commande ignore tous les fichiers en double que vous tentez de charger dans la même zone de préparation. Dans ce contexte, un fichier dupliqué est un fichier non modifié portant le même nom qu’un fichier déjà en zone de préparation.

    Pour écraser un fichier déjà mis en zone de préparation, vous devez modifier le fichier que vous chargez pour qu’il soit différent du fichier en zone de préparation, ce qui se traduit par une nouvelle somme de contrôle pour le fichier que vous venez de mettre en zone de préparation.

Astuce

Pour des raisons de sécurité, la commande expire après une période de temps définie. Cela peut se produire lors du chargement de gros fichiers de données non compressés. Pour éviter tout problème de délai d’attente, nous vous recommandons de compresser les fichiers de données volumineux en utilisant l’un des types de compression pris en charge avant de charger les fichiers. Ensuite, spécifiez le type de compression pour les fichiers en utilisant l’option SOURCE_COMPRESSION.

Vous pouvez également envisager d’augmenter la valeur de l’option PARALLEL, ce qui peut améliorer les performances lors du chargement de fichiers de données volumineux.

De plus, pour profiter des opérations parallèles lors du chargement des données dans des tables (en utilisant la commande COPY INTO <table>), nous recommandons d’utiliser des fichiers de données dont la taille varie d’environ 100 à 250 MB compressés. Si vos fichiers de données sont plus volumineux, pensez à utiliser un outil tiers pour les diviser en fichiers plus petits avant de les compresser et de les charger.

Exemples

Chargez un fichier nommé mydata.csv dans le répertoire /tmp/data (dans un environnement Linux ou macOS) vers une zone de préparation interne nommée my_int_stage :

PUT file:///tmp/data/mydata.csv @my_int_stage;
Copy

Chargez un fichier nommé orders_001.csv dans le répertoire /tmp/data (dans un environnement Linux ou macOS) dans la zone de préparation de la table orderstiny_ext, avec la compression automatique des données désactivée :

PUT file:///tmp/data/orders_001.csv @%orderstiny_ext AUTO_COMPRESS=FALSE;
Copy

Même exemple que ci-dessus, mais en utilisant des caractères génériques dans le nom du fichier pour charger plusieurs fichiers :

PUT file:///tmp/data/orders_*01.csv @%orderstiny_ext AUTO_COMPRESS=FALSE;
Copy

Chargez un fichier nommé mydata.csv dans le répertoire C:\temp\data (dans un environnement Windows) dans la zone de préparation de l’utilisateur actuel, avec la compression automatique des données activée :

PUT file://C:\temp\data\mydata.csv @~ AUTO_COMPRESS=TRUE;
Copy

Comme dans l’exemple précédent, mais chargez le fichier à partir du répertoire C:\temp\load data (dans un environnement Windows) :

PUT 'file://C:\temp\load data\mydata.csv' @~ AUTO_COMPRESS=TRUE;
Copy