Snowpipe¶
Snowpipe permet de charger les données des fichiers dès qu’elles sont disponibles dans une zone de préparation. Cela signifie que vous pouvez charger des données à partir de fichiers dans des micro-lots, les rendant disponibles aux utilisateurs en quelques minutes, plutôt que d’exécuter manuellement des instructions COPY sur un calendrier pour charger de plus gros lots.
Dans ce chapitre :
Comment fonctionne Snowpipe ?¶
Snowpipe charge les données des fichiers dès qu’elles sont disponibles dans une zone de préparation. Les données sont chargées conformément à l’instruction COPY définie dans un canal référencé.
Un canal est un objet Snowflake nommé, de première classe, qui contient une instruction COPY utilisée par Snowpipe. L’instruction COPY identifie l’emplacement source des fichiers de données (c.-à-d. une zone de préparation nommée) et une table cible. Tous les types de données sont pris en charge, y compris les types de données semi-structurées tels que JSON et Avro.
Différents mécanismes de détection des fichiers mis en zone de préparation sont disponibles :
Automatisation de Snowpipe à l’aide de la messagerie Cloud
Les chargements de données automatisés exploitent les notifications d’événement pour le stockage dans le Cloud pour informer Snowpipe de l’arrivée de nouveaux fichiers de données à charger. Snowpipe interroge les notifications d’événements à partir d’une file d’attente. En utilisant les métadonnées de la file d’attente, Snowpipe charge les nouveaux fichiers de données dans la table cible de manière continue et sans serveur, en fonction des paramètres définis dans un objet canal spécifié.
Appel des points de terminaison REST de Snowpipe
Votre application cliente appelle un point de terminaison public REST avec une liste de noms de fichiers de données et un nom de canal. Si de nouveaux fichiers de données correspondant à la liste sont découverts dans la zone de préparation et référencés par l’objet de canal, ils sont mis en file d’attente pour le chargement. Les ressources de calcul fournies par Snowflake chargent les données de la file d’attente dans une table Snowflake en fonction des paramètres définis dans le canal.
Services de stockage Cloud pris en charge¶
Le tableau suivant indique le service de stockage Cloud pris en charge pour les appels API REST Snowpipe et Snowpipe automatisés à partir de comptes Snowflake hébergés sur chaque plateforme Cloud :
Hôte de compte Snowflake |
Amazon S3 |
Google Cloud Storage |
Stockage Microsoft Azure Blob |
Microsoft Data Lake Storage Gen2 |
Microsoft Azure à usage général v2 |
---|---|---|---|---|---|
Amazon Web Services |
✔ |
✔ |
✔ |
✔ |
✔ |
Google Cloud Platform |
✔ |
✔ |
✔ |
✔ |
✔ |
Microsoft Azure |
✔ |
✔ |
✔ |
✔ |
✔ |
Pour plus d’informations, voir Automatisation du chargement continu des données à l’aide de la messagerie Cloud et Présentation des points de terminaison REST Snowpipe pour charger les données.
Notez que les régions gouvernementales des fournisseurs Cloud n’autorisent pas l’envoi de notifications d’événements vers ou depuis d’autres régions commerciales. Pour plus d’informations, voir AWS GovCloud (US) et Azure Government.
Important
Snowflake recommande d’activer le filtrage des événements dans le Cloud pour Snowpipe afin de réduire les coûts, le bruit des événements et la latence. Pour plus d’informations sur la configuration du filtrage des événements pour chaque fournisseur de Cloud, consultez les pages suivantes :
En quoi Snowpipe se distingue du chargement de données en masse ?¶
Cette section décrit brièvement les principales différences entre Snowpipe et un workflow de chargement des données en masse à l’aide de la commande COPY. Des détails supplémentaires sont fournis tout au long de la documentation de Snowpipe.
Authentification¶
- Chargement de données en masse:
Repose sur les options de sécurité prises en charge par le client pour l’authentification et le lancement d’une session utilisateur.
- Snowpipe:
Lorsque vous appelez les points de terminaison REST : Nécessite l’authentification par paire de clés avec jeton Web JSON (JWT). Les JWTs sont signés à l’aide d’une paire de clés publiques/privées avec chiffrement RSA.
Historique de chargement¶
- Chargement de données en masse:
Stocké dans les métadonnées de la table cible pour 64 jours. Disponible à la fin de l’instruction COPY en tant que sortie de l’instruction.
- Snowpipe:
Stocké dans les métadonnées du canal pendant 14 jours. Doit être demandé à Snowflake via un point de terminaison REST, une fonction de table SQL ou une vue ACCOUNT_USAGE.
Important
Pour éviter de recharger des fichiers (et de dupliquer des données), nous vous recommandons de charger des données à partir d’un ensemble spécifique de fichiers en utilisant soit le chargement de données en masse soit Snowpipe mais pas les deux.
Transactions¶
- Chargement de données en masse:
Les chargements sont toujours effectués en une seule transaction. Les données sont insérées dans la table à côté de toute autre instruction SQL soumise manuellement par les utilisateurs.
- Snowpipe:
Les charges sont combinées ou divisées en une ou plusieurs transactions en fonction du nombre et de la taille des lignes de chaque fichier de données. Les lignes de fichiers partiellement chargés (basées sur le paramètre de l’option de copie ON_ERROR) peuvent également être combinées ou divisées en une ou plusieurs transactions.
Ressources de calcul¶
- Chargement de données en masse:
Nécessite un entrepôt spécifié par l’utilisateur pour exécuter les instructions COPY.
- Snowpipe:
Utilise les ressources de calcul fournies par Snowflake.
Coût¶
- Chargement de données en masse:
Facturé pour la durée d’activité de chaque entrepôt virtuel.
- Snowpipe:
Facturé selon les ressources de calcul utilisées dans l’entrepôt de Snowpipe lors du chargement des fichiers.
Taille de fichier de chargement recommandée¶
Pour optimiser l’expérience de chargement avec Snowpipe, nous vous recommandons de suivre les recommandations de dimensionnement des fichiers de Meilleures pratiques et limitations en matière de dimensionnement de fichiers et de stocker les fichiers de stockage une fois par minute. Cette approche conduit généralement à un bon équilibre entre le coût (c’est-à-dire les ressources consacrées à la gestion des files d’attente et la charge réelle) et la performance (c’est-à-dire la latence de la charge). Pour plus d’informations, voir Chargements de données en continu (c.-à-d., Snowpipe) et dimensionnement de fichiers.
Ordre de chargement des fichiers de données¶
Snowflake établit une file d’attente unique pour séquencer les fichiers de données en attente de chargement pour chaque objet de canal. Lorsque de nouveaux fichiers de données sont découverts dans une zone de préparation, Snowpipe les ajoute à la file d’attente. Cependant, plusieurs processus extraient des fichiers de la file d’attente. Par conséquent, bien que Snowpipe charge généralement les fichiers les plus anciens en premier, il n’y a aucune garantie que les fichiers sont chargés dans le même ordre de classement.
Duplication de données¶
Snowflake utilise des métadonnées de chargement de fichiers associés à chaque objet de canal pour éviter de recharger les mêmes fichiers (et de dupliquer les données) dans une table. Ces métadonnées stockent le chemin (préfixe) et le nom de chaque fichier chargé, et empêchent le chargement de fichiers portant le même nom même s’ils ont été modifiés ultérieurement (c.-à-d. qu’ils portent un eTag différent).
Estimation de la latence de Snowpipe¶
Étant donné le nombre de facteurs permettant de différencier les charges Snowpipe, il est très difficile pour Snowflake d’estimer la latence. Les formats et les tailles de fichier, ainsi que la complexité des instructions COPY (y compris l’instruction SELECT utilisée pour les transformations), ont tous une incidence sur le temps requis pour le chargement de Snowpipe.
Nous vous suggérons d’effectuer des tests en effectuant un ensemble typique de chargements pour estimer la latence moyenne.
Sécurité des canaux¶
Privilèges de contrôle d’accès¶
Création de canaux¶
La création et la gestion de canaux requièrent un rôle avec au minimum les privilèges suivants :
Objet |
Privilège |
Remarques |
---|---|---|
Base de données |
USAGE |
|
Schéma |
USAGE, CREATE PIPE |
|
Définition de la zone de préparation d’un canal |
USAGE |
Zones de préparation externes uniquement. |
Définition de la zone de préparation d’un canal |
READ |
Zones de préparation internes uniquement. |
Table dans la définition du canal |
SELECT, INSERT |
Possession de canaux¶
Après la création d’un canal, le propriétaire du canal (c’est-à-dire le rôle qui a le privilège OWNERSHIP sur le canal) doit avoir les privilèges suivants :
Objet |
Privilège |
Remarques |
---|---|---|
Base de données |
USAGE |
|
Schéma |
USAGE |
|
Canal |
OWNERSHIP |
|
Définition de la zone de préparation d’un canal |
USAGE |
Zones de préparation externes uniquement. |
Définition de la zone de préparation d’un canal |
READ |
Zones de préparation internes uniquement. |
Table dans la définition du canal |
SELECT, INSERT |
Mise en pause ou reprise de canaux¶
En plus du propriétaire du tuyau, un rôle qui possède les autorisations minimales suivantes peut suspendre ou reprendre le canal :
Objet |
Privilège |
Remarques |
---|---|---|
Base de données |
USAGE |
|
Schéma |
USAGE |
|
Canal |
OPERATE |
|
Définition de la zone de préparation d’un canal |
USAGE |
Zones de préparation externes uniquement. |
Définition de la zone de préparation d’un canal |
READ |
Zones de préparation internes uniquement. |
Table dans la définition du canal |
SELECT, INSERT |
DDL Snowpipe¶
Pour faciliter la création et la gestion des canaux, Snowflake fournit l’ensemble suivant de commandes DDL spéciales :
De plus, les fournisseurs peuvent afficher, accorder ou révoquer l’accès aux objets de base de données nécessaires pour Snowpipe en utilisant le DDL de contrôle d’accès standard suivant :