Vue d’ensemble du chargement des données

Cette rubrique fournit une vue d’ensemble des principales options disponibles pour charger des données dans Snowflake.

Dans ce chapitre :

Emplacements de fichier pris en charge

Snowflake appelle l’emplacement des fichiers de données dans le stockage Cloud une zone de préparation. La commande COPY INTO <table> utilisée à la fois pour les chargements de données en masse et en continu (c’est-à-dire Snowpipe) prend en charge les comptes de stockage Cloud gérés par votre entité commerciale (c’est-à-dire les zones de préparation externes) ainsi que le stockage Cloud contenu dans votre compte Snowflake (c’est-à-dire les zones de préparation internes).

Zones de préparation externes

Le chargement de données à partir de l’un des services de stockage Cloud suivants est pris en charge quelle que soit la plateforme Cloud qui héberge votre compte Snowflake :

  • Amazon S3

  • Google Cloud Storage

  • Microsoft Azure

Chargez (c’est-à-dire placez en zone de préparation) des fichiers sur votre compte de stockage Cloud à l’aide des outils fournis par le service de stockage Cloud.

Une zone de préparation externe nommée est un objet de base de données créé dans un schéma. Cet objet stocke les URL vers les fichiers du stockage Cloud, les paramètres utilisés pour accéder au compte de stockage Cloud et les paramètres de commodité tels que les options qui décrivent le format des fichiers en zone de préparation. Créez des zones de préparation à l’aide de la commande CREATE STAGE.

Note

Certains frais de facturation pour le transfert de données peuvent s’appliquer lors du chargement de données à partir de fichiers dans un service de stockage Cloud dans une région ou une plateforme Cloud différente de votre compte Snowflake. Pour plus d’informations, voir Présentation de la facturation du transfert de données dans Snowflake.

Zones de préparation internes

Snowflake gère les types de zone de préparation suivants dans votre compte :

Utilisateur

Une zone de préparation utilisateur est allouée à chaque utilisateur pour le stockage des fichiers. Ce type de zone de préparation est conçu pour stocker des fichiers qui sont en zone de préparation et gérés par un seul utilisateur, mais qui peuvent être chargés dans plusieurs tables. Les zones de préparation utilisateur ne peuvent être ni modifiées ni détruites.

Table

Une zone de préparation de table est disponible pour chaque table créée dans Snowflake. Ce type de zone de préparation est conçu pour stocker des fichiers qui sont en zone de préparation et gérés par un ou plusieurs utilisateurs, mais uniquement chargés dans une seule table. Les zones de préparation de table ne peuvent être ni modifiées ni détruites.

Notez qu’une zone de préparation de table n’est pas un objet de base de données distinct, mais plutôt une étape implicite liée à la table elle-même. Une zone de préparation de table n’a pas de privilèges qui lui sont propres. Pour préparer des fichiers dans une zone de préparation de table, les répertorier ou les interroger, ou même les détruire, vous devez être le propriétaire de la table (avoir le rôle doté du privilège OWNERSHIP sur la table).

Nommé

Une zone de préparation interne nommée est un objet de base de données créé dans un schéma. Ce type de zone de préparation peut stocker des fichiers qui sont en zone de préparation et gérés par un ou plusieurs utilisateurs et chargés dans une ou plusieurs tables. Les zones de préparation nommées étant des objets de base de données, la possibilité de les créer, de les modifier, de les utiliser ou de les détruire peut être contrôlée à l’aide des privilèges de contrôle d’accès de sécurité. Créez des zones de préparation à l’aide de la commande CREATE STAGE.

Chargez des fichiers vers l’un des types de zone de préparation interne à partir de votre système de fichiers local à l’aide de la commande PUT.

Chargement en lot ou en continu

Snowflake fournit les solutions principales suivantes pour le chargement de données. La meilleure solution peut dépendre du volume de données à charger et de la fréquence de chargement.

Chargement en lot à l’aide de la commande COPY

Cette option permet de charger des lots de données à partir de fichiers déjà disponibles dans le stockage Cloud ou de copier (c.-à-d. mettre en zone de préparation) des fichiers de données d’un ordinateur local vers un emplacement de stockage interne dans le Cloud (c.-à-d. Snowflake) avant de charger les données dans des tables à l’aide de la commande COPY.

Ressources de calcul

Le chargement en lot repose sur des entrepôts virtuels fournis par l’utilisateur, spécifiés dans l’instruction COPY. Les utilisateurs sont tenus de dimensionner l’entrepôt de manière appropriée pour s’adapter aux charges attendues.

Transformations simples pendant un chargement

Snowflake prend en charge la transformation des données tout en les chargeant dans une table à l’aide de la commande COPY. Les options comprennent :

  • Réorganisation des colonnes

  • Omission de colonnes

  • Conversions

  • Tronquer des chaînes de texte qui dépassent la longueur de colonne cible

Il n’est pas nécessaire que vos fichiers de données aient le même nombre et le même ordre de colonnes que votre table cible.

Chargement continu à l’aide de Snowpipe

Cette option est conçue pour charger de petits volumes de données (c.-à-d. des micro-lots) et les rendre progressivement disponibles pour analyse. Snowpipe charge les données dans les minutes qui suivent l’ajout de fichiers dans une zone de préparation et leur soumission en vue de leur intégration. Cela garantit aux utilisateurs les derniers résultats dès que les données brutes sont disponibles.

Ressources de calcul

Snowpipe utilise les ressources de calcul fournies par Snowflake (un modèle de calcul sans serveur). Ces ressources fournies par Snowflake sont automatiquement redimensionnées et mises à l’échelle, si nécessaire, et facturées et détaillées à l’aide d’une facturation à la seconde. L’ingestion de données est facturée en fonction des charges de travail réelles.

Transformations simples pendant un chargement

L’instruction COPY d’une définition de canal prend en charge les mêmes options de transformation COPY que lors du chargement en lot de données.

En outre, les pipelines de données peuvent tirer parti de Snowpipe pour charger en continu des micro-lots de données dans des tables de transfert pour la transformation et l’optimisation à l’aide de tâches automatisées et des informations de capture de données modifiées (CDC) contenues dans des flux.

Pipelines de données pour les transformations complexes

Un pipeline de données permet d’appliquer des transformations complexes aux données chargées. Ce workflow tire généralement parti de Snowpipe pour charger des données « brutes » dans une table mise en zone de préparation, puis utilise une série de flux de tables et de tâches pour transformer et optimiser les nouvelles données à des fins d’analyse.

Chargement de données à partir de sujets Apache Kafka

Le Connecteur Snowflake pour Kafka permet aux utilisateurs de se connecter à un serveur Apache Kafka , de lire les données d’un ou plusieurs sujets et de charger ces données dans des tables Snowflake.

Détection de définitions de colonnes dans les fichiers de données semi-structurées en zone de préparation

Les données semi-structurées peuvent comprendre des milliers de colonnes. Snowflake fournit des solutions robustes pour traiter ces données. Les options comprennent le référencement des données directement dans le stockage dans le Cloud à l’aide de tables externes, le chargement des données dans une colonne unique de type VARIANT ou la transformation et le chargement des données dans des colonnes distinctes d’une table relationnelle standard. Toutes ces options nécessitent une certaine connaissance des définitions de colonnes dans les données.

Une autre solution consiste à détecter automatiquement le schéma d’un ensemble de fichiers de données semi-structurées en zone de préparation et à récupérer les définitions des colonnes. Les définitions de colonnes comprennent les noms, les types de données et l’ordre des colonnes dans les fichiers. Générez la syntaxe dans un format adapté à la création de tables standard Snowflake, de tables externes ou de vues.

Note

Cette fonctionnalité est actuellement limitée à Apache Parquet, Apache Avro et aux fichiers ORC.

Cette prise en charge est mise en œuvre par le biais des fonctions SQL suivantes :

INFER_SCHEMA

Détecte les définitions de colonnes dans un ensemble de fichiers de données en zone de préparation et récupère les métadonnées dans un format adapté à la création d’objets Snowflake.

GENERATE_COLUMN_DESCRIPTION

Génère une liste de colonnes à partir d’un ensemble de fichiers en zone de préparation en utilisant la sortie de la fonction INFER_SCHEMA.

Ces fonctions SQL prennent en charge les zones de préparation internes et externes.

Créez des tables avec les définitions de colonnes dérivées d’un ensemble de fichiers en zone de préparation en utilisant la syntaxe CREATE TABLE …. USING TEMPLATE. La clause USING TEMPLATE accepte une expression qui appelle la fonction INFER_SCHEMA SQL pour détecter les définitions de colonnes dans les fichiers. Une fois la table créée, vous pouvez alors utiliser une instruction COPY avec l’option MATCH_BY_COLUMN_NAME pour charger des fichiers directement dans la table structurée.

Alternatives au chargement de données

Il n’est pas toujours nécessaire de charger des données dans Snowflake avant d’exécuter des requêtes.

Tables externes (lac de données)

Les tables externes permettent d’interroger des données existantes stockées dans un stockage Cloud externe à des fins d’analyse sans avoir à d’abord les charger dans Snowflake. La source de vérité pour les données demeure dans le stockage Cloud externe. Les ensembles de données matérialisés dans Snowflake via des vues matérialisées sont en lecture seule.

Cette solution est particulièrement avantageuse pour les comptes qui ont une grande quantité de données stockées dans un stockage Cloud externe et qui ne souhaitent interroger qu’une partie des données, par exemple, les données les plus récentes. Les utilisateurs peuvent créer des vues matérialisées sur des sous-ensembles de ces données pour améliorer les performances des requêtes.