Fermer

mars 19, 2023

Meilleures pratiques et hacks pour le chargement de données dans Snowflake à partir de Stages

Meilleures pratiques et hacks pour le chargement de données dans Snowflake à partir de Stages


Poursuivant notre série de blogs Snowflake, après avoir appris comment créer un Compte Snowflake utilisant des rôles définis par le systèmenous explorerons les meilleures pratiques pour charger les données d’un fichier dans Snowflake.

Commençons..

Snowflake prend en charge l’ingestion de données basée sur des fichiers via des étapes internes et externes.

Cependant, divers facteurs doivent être pris en compte lors de l’ingestion de données, notamment la fréquence d’arrivée des données, la taille des fichiers et les techniques de chargement des données utilisées telles que la commande Copier, les tables externes et Snowpipe, entre autres. De plus, le format de fichier utilisé, tel que CSV, Parquet, JSON, etc., joue également un rôle essentiel dans le choix de la bonne approche.

Faire le mauvais choix peut entraîner une augmentation des coûts et un ralentissement des performances.

Ce blog fournit des informations sur ces approches pour vous aider à sélectionner la meilleure lors du chargement des données dans Snowflake.

Chargement plus rapide des fichiers Parquet depuis S3

Si vous souhaitez charger plus rapidement des fichiers Parquet de S3 dans Snowflake, vous ne devez pas utiliser la commande COPY, qui convient aux fichiers au format CSV placés dans des étapes externes.

Au lieu de cela, il est recommandé d’utiliser des tables externes au-dessus du fichier Parquet et d’activer la propriété d’analyse « Vector scan performance flag ».

Cependant, pour activer cette propriété, vous devez contacter le support Snowflake et l’activer au niveau du compte.

Opérations parallèles

Pour améliorer l’efficacité du chargement des données des étapes dans Snowflake, il est recommandé de créer des fichiers dans la plage de 100 à 250 Mo avec compression.

Par défaut, chaque nœud peut gérer 8 threads en parallèle. Par conséquent, si vous avez 32 fichiers, un entrepôt moyen avec 4 nœuds peut tous les traiter simultanément, en exécutant 32 threads en parallèle.

Il est important de garder à l’esprit que les performances des opérations parallèles dans Snowflake peuvent également être affectées par la complexité des opérations en cours d’exécution. De plus, Snowflake peut ne pas toujours exécuter les threads tels que définis en parallèle en raison de divers facteurs tels que la disponibilité des ressources et l’équilibrage de charge. Par conséquent, il est important de surveiller et d’ajuster le parallélisme en conséquence pour garantir des performances optimales.

Il est important de s’assurer que l’entrepôt utilisé pour le chargement des données s’exécute pendant au moins une minute pour utiliser pleinement le coût du temps actif.

Purger les fichiers de Stage

Pour optimiser les performances, il est recommandé de supprimer les fichiers de la scène après un chargement réussi à l’aide de la commande COPY avec l’option PURGE=True.

Cela garantit que les fichiers préparés sont supprimés une fois chargés, ce qui non seulement améliore les performances, mais élimine également le besoin de commandes COPY pour analyser l’intégralité du chemin du compartiment pour vérifier les fichiers à charger.

Chargement de fichiers volumineux dans Snowflake

Supposons que vous ayez besoin de charger un seul gros fichier en gigaoctets, qui peut ou non contenir de mauvaises données dans certaines de ses lignes. Dans de tels cas, il est conseillé de charger les données en ignorant les erreurs. Ne pas le faire peut entraîner un gaspillage de crédits. Par exemple, si les données sont traitées à l’aide d’un entrepôt et qu’une ligne d’erreur est identifiée après une heure, l’ensemble de l’opération sera abandonné, ce qui entraînera un gaspillage de crédit.

L’utilisation de « ON_ERROR » comme « CONTINUE » chargera les bonnes données et ignorera les mauvaises lignes. Cependant, il est toujours recommandé de charger des fichiers volumineux en les divisant en plus petits morceaux afin que le traitement parallèle puisse être utilisé à l’aide d’un entrepôt. Si ce n’est pas possible et que vous souhaitez toujours charger un fichier volumineux, il est recommandé de vérifier si vous pouvez continuer à charger en ignorant les mauvaises données.

Meilleure pratique lors du chargement de données JSON

Lors du chargement de données JSON dans Snowflake, il est important de noter que la sortie de certaines applications peut être un seul grand tableau composé de plusieurs lignes combinées. Cependant, en raison des limitations du type de données VARIANT (qui a une taille maximale de 16 Mo), une sortie JSON aussi énorme ne peut pas être chargée dans son intégralité.

De plus, il n’est pas approprié de charger un seul grand tableau en une seule ligne. Au lieu de cela, le tableau doit être divisé en plusieurs lignes. Pour ce faire, utilisez l’option STRIP_OUTER_ARRAY=TRUE dans le paramètre FILE_FORMAT de la commande COPY. Cette option exclut le tableau externe et identifie les lignes individuelles, permettant un chargement efficace des données JSON dans Snowflake.

Meilleures stratégies de chargement de fichiers Snowpipe

Le chargement de données à l’aide de Snowpipe peut entraîner des frais pour le temps nécessaire au chargement du fichier placé sur la scène et les frais généraux liés au maintien de la file d’attente pour les fichiers en attente de chargement. Cela signifie que si un grand nombre de fichiers de tailles différentes sont chargés en continu dans l’emplacement de l’étape, cela peut entraîner un chargement plus lent des données et une augmentation des dépenses.

Pour assurer un chargement efficace, il est préférable de s’assurer que la taille des fichiers se situe dans les limites de 100 à 250 Mo et qu’il n’y a pas d’afflux soudain de fichiers dans l’emplacement de l’étape, ce qui pourrait augmenter la file d’attente.

Vous pouvez optimiser le processus de chargement en plaçant les fichiers dans la scène à une certaine fréquence, qui est proche du temps nécessaire pour charger un seul fichier à l’aide de Snowpipe. Cela contribuera à assurer une utilisation efficace des ressources et à réduire les coûts.

Utilisez l’étape interne le cas échéant

Pour optimiser le chargement des données dans Snowflake, il est recommandé d’utiliser l’étape interne au lieu des étapes externes telles que S3, car cela accélère le chargement de la table Snowflake.

Il est également important de comparer les coûts de stockage des données dans l’emplacement Stage de Snowflake avec ceux du stockage d’objets des fournisseurs de cloud. Pour réduire les coûts, il est conseillé de purger les données de l’étape lorsqu’elles ne sont plus nécessaires.

Merci d’avoir lu cet article.

Dans le prochain épisode de cette série, nous explorerons les meilleures pratiques pour optimiser l’utilisation des entrepôts et des tables de flocons de neige.

TROUVÉ CELA UTILE ? PARTAGEZ-LE




Source link