Utilisation d’un stockage compatible avec Amazon S3¶
La norme industrielle Amazon Simple Storage Service (S3) REST API permet un accès programmatique aux compartiments et objets de stockage pour effectuer des opérations CRUD et diverses actions administratives. Un nombre croissant d’applications et de dispositifs de stockage possèdent leurs propres APIs compatibles avec S3. Les fonctionnalités de Snowflake qui accèdent au stockage S3 et interagissent avec lui peuvent également fonctionner avec le stockage compatible S3, avec certaines limitations.
Pour accéder au stockage en dehors du Cloud public (c’est-à-dire sur site ou en périphérie), vous pouvez créer des zones de préparation externes dans Snowflake qui stockent le point de terminaison de l’API conforme avec S3, le nom et le chemin d’accès du compartiment et les identifiants de connexion. Accordez des privilèges sur ces zones de préparation aux rôles pour permettre aux utilisateurs de charger et de décharger des données depuis et vers les emplacements de stockage.
Créez des tables externes sur les zones de préparation externes pour étendre votre data lake afin d’inclure ce stockage.
Dans ce chapitre :
Prise en charge de la plate-forme Cloud¶
Cette fonctionnalité est disponible pour les comptes Snowflake hébergés sur n’importe quelle plate-forme de cloud prise en charge :
Amazon Web Services
Google Cloud
Microsoft Azure
Exigences pour un stockage compatible avec S3¶
Un point de terminaison de l’API compatible avec S3 doit être :
Hautement conforme à l’API S3. Si le point de terminaison ne se comporte pas comme S3, il ne peut pas fonctionner avec Snowflake.
Prise en charge par le fournisseur de stockage tiers en tant que service testé et conforme à Snowflake S3.
Accessible depuis le cloud public où est hébergé votre compte Snowflake.
Hautement disponible et performant pour répondre aux besoins d’analyse.
Configuré pour utiliser des identifiants de connexion directs.
Configuré pour utiliser la communication HTTPS avec un certificat TLS valide.
Création de zones de préparation externes¶
Créez les zones de préparation externes nommées en utilisant CREATE STAGE. Un objet de zone de préparation nommé peut être utilisé pour lister des fichiers, charger des données et décharger des fichiers, entre autres actions SQL.
Vous pouvez ajouter une table de répertoire sur n’importe quelle zone de préparation externe que vous créez. Interrogez une table de répertoire pour récupérer des URLs de fichiers afin d’accéder aux fichiers du stockage référencé, ainsi qu’à d’autres métadonnées.
Syntaxe¶
CREATE [ OR REPLACE ] STAGE <external_stage_name>
URL = 's3compat://{bucket}[/{path}/]'
ENDPOINT = '<s3_api_compatible_endpoint>'
CREDENTIALS = ( AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' )
..
Paramètres¶
Cette section décrit les paramètres spécifiques aux zones de préparation externes qui pointent vers des emplacements de stockage via des points de terminaison compatibles avec S3. Pour la description des paramètres communs, voir CREATE STAGE.
URL = 's3compat://bucket[/path/]'
URL pour l’emplacement externe (compartiment existant auquel on accède à l’aide d’un point de terminaison de l’API compatible S3) utilisé pour stocker les fichiers de données, où :
bucket
est le nom du compartiment.path
est un chemin d’accès facultatif sensible à la casse (ou préfixe dans la terminologie S3) pour les fichiers dans l’emplacement de stockage Cloud (c’est-à-dire les fichiers dont le nom commence par une chaîne commune).
ENDPOINT = 's3_api_compatible_endpoint'
Domaine entièrement qualifié qui pointe vers le point de terminaison de l’API compatible avec S3.
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 ainsi :
Privilège |
Objet |
Remarques |
---|---|---|
CREATE STAGE |
Schéma |
Requis si vous créez une nouvelle zone de préparation. |
USAGE |
Format de fichier |
Requis uniquement si vous faites référence à un format de fichier nommé dans la définition de la zone de préparation. |
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¶
L’accès au stockage compatible avec S3 nécessite des identifiants de connexion directs.
Exemples¶
Créez une zone de préparation externe nommée my_s3compat_stage
qui pointe vers le compartiment et le chemin my_bucket/files/
au point de terminaison mystorage.com
:
CREATE STAGE my_s3compat_stage
URL = 's3compat://my_bucket/files/'
ENDPOINT = 'mystorage.com'
CREDENTIALS = (AWS_KEY_ID = '1a2b3c...' AWS_SECRET_KEY = '4x5y6z...')
Notez que les valeurs AWS_KEY_ID et AWS_SECRET_KEY utilisées dans cet exemple ne sont données qu’à titre indicatif.
Chargement et déchargement des données¶
Chargez et déchargez les données à l’aide des zones de préparation externes que vous avez créées dans Création de zones de préparation externes (dans cette rubrique). Les fonctions suivantes fonctionnent avec vos zones de préparation externes :
Chargement de données en lot à l’aide de la commande COPY INTO <table>.
Par exemple, chargez des données dans la table
t1
à partir de tous les fichiers situés dans le sous-cheminload
du compartiment et du chemin définis dans la zone de préparationmy_s3compat_stage
que vous avez créée :COPY INTO t1 FROM @my_s3compat_stage/load/;
Appeler des points de terminaison REST Snowpipe pour charger les données en continu.
Pour des exemples de programmes, voir Option 1 : Chargement des données à l’aide de l’API REST de Snowpipe.
Déchargement de données à l’aide de la commande COPY INTO <emplacement>.
Par exemple, déchargez les données de la table
t2
dans les fichiers du sous-cheminunload
dans le compartiment et le chemin définis dans la zone de préparationmy_s3compat_stage
que vous avez créée :COPY INTO @my_s3compat_stage/unload/ FROM t2;
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour charger ou décharger des données doit avoir les privilèges suivants au minimum :
Privilège |
Objet |
Remarques |
---|---|---|
USAGE |
Zone de préparation |
|
USAGE |
Format de fichier |
Requis uniquement si vous faites référence à un format de fichier nommé dans l’instruction COPY INTO <table> ou COPY INTO <emplacement>. |
INSERT |
Table |
Table source ou cible pour le chargement ou le déchargement des données. |
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.
Extension de votre data lake en utilisant des tables externes¶
Les tables externes permettent d’interroger des données stockées dans un stockage Cloud externe à des fins d’analyse sans avoir à d’abord les charger dans Snowflake.
Création de tables externes¶
Créez des tables externes en utilisant CREATE EXTERNAL TABLE qui font référence aux zones de préparation externes que vous avez créées dans Création de zones de préparation externes (dans cette rubrique).
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 ainsi :
Privilège |
Objet |
Remarques |
---|---|---|
CREATE EXTERNAL TABLE |
Schéma |
|
USAGE |
Zone de préparation |
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.
Notes sur l’utilisation¶
Les métadonnées de ces tables externes ne peuvent pas être actualisées automatiquement. Le paramétrage du paramètre
AUTO_REFRESH = TRUE
n’est pas pris en charge.Vous devez actualiser manuellement les métadonnées de vos tables externes. Pour plus d’informations, voir Actualisation manuelle des métadonnées de la table externe (dans cette rubrique).
Exemples¶
Créez une table externe nommée et
qui fait référence au sous-chemin path1
dans la zone de préparation my_s3compat_stage
que vous avez créée. Le format des fichiers dans ce sous-chemin est Apache Parquet :
CREATE EXTERNAL TABLE et
LOCATION=@my_s3compat_stage/path1/
AUTO_REFRESH = FALSE
REFRESH_ON_CREATE = TRUE
FILE_FORMAT = (TYPE = PARQUET);
Actualiser manuellement les métadonnées de la table externe¶
Exécutez périodiquement une instruction ALTER EXTERNAL TABLE … REFRESH pour enregistrer tout fichier ajouté ou supprimé.
Seul le propriétaire de la table externe (c’est-à-dire le rôle doté du privilège OWNERSHIP sur la table externe) ou d’un niveau supérieur peut exécuter cette commande. 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.
Interrogation de tables externes¶
Une fois que les métadonnées de la table externe ont été actualisées, les utilisateurs peuvent interroger la table externe.
Un rôle utilisé pour interroger une table externe doit disposer du privilège USAGE sur la table externe. 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.
Par exemple, interrogez les colonnes col1
et col2
dans la table externe que vous avez créée :
SELECT col1, col2 FROM et;
Les performances des requêtes varient en fonction des performances du réseau, des applications ou des périphériques.
Prise en charge des fournisseurs pour le stockage compatible avec S3¶
Les appareils ou applications qui ont une API conforme à S3 peuvent être utilisés avec Snowflake. Il incombe au fournisseur de services de stockage de veiller à la conformité.
Les vendeurs suivants ont indiqué à Snowflake qu’ils ont testé au moins certains de leurs produits et qu’ils ont constaté qu’ils fonctionnent avec Snowflake :
Cloudian
Dell
Plate-forme de contenu Hitachi
MinIO
NetApp (StorageGRID)
PureStorage
Possibilité d’évolution
Cette liste n’est fournie que pour des raisons de commodité. Snowflake ne teste pas les produits externes pour valider leur compatibilité et ne peut pas résoudre les problèmes des produits vendus par des vendeurs tiers. Si vous avez des questions sur le fonctionnement de votre matériel ou logiciel ayant une API S3 avec Snowflake, nous vous recommandons de contacter directement le vendeur.
Test de votre API compatible avec S3¶
Si vous êtes un développeur de matériel ou de logiciel qui a une API S3, vous pouvez utiliser notre suite de tests publique (dans GitHub) pour tester votre API S3. Cet ensemble de tests recherche les inadéquations évidentes entre votre implémentation et ce que Snowflake attend de S3. Notez qu’il peut y avoir des cas où les tests n’identifient pas l’incompatibilité.
Si vous êtes un client et que vous souhaitez tester vos propres appareils, nous vous recommandons de contacter votre fournisseur pour qu’il effectue ces tests ; toutefois, vous pouvez également exécuter ces tests publics sur vos appareils pour évaluer la compatibilité.