Actualisation automatique des tables de répertoire pour Amazon S3¶
Cette rubrique fournit des instructions pour la création de tables de répertoire et l’actualisation automatique des métadonnées de la table de répertoire à l’aide des notifications Amazon SQS (service de file d’attente simple) pour un compartiment S3. Cette opération synchronise les métadonnées avec le dernier ensemble de fichiers associés de la zone de préparation et du chemin externes, à savoir :
Les nouveaux fichiers dans le chemin sont ajoutés aux métadonnées de la table.
Les modifications apportées aux fichiers dans le chemin sont mises à jour dans les métadonnées de la table.
Les fichiers qui ne figurent plus dans le chemin sont supprimés des métadonnées de la table.
Note
Cette fonctionnalité est limitée aux comptes Snowflake sur AWS.
Pour effectuer les tâches décrites dans cette rubrique, vous devez utiliser un rôle disposant du privilège CREATE STAGE sur un schéma.
De plus, vous devez avoir un accès administratif à AWS. Si vous n’êtes pas un administrateur AWS, demandez à votre administrateur AWS de suivre les étapes requises pour configurer les notifications d’événements AWS :
Snowflake recommande de n’envoyer que des événements pris en charge pour les tables de répertoire afin de réduire les coûts, le bruit des événements et la latence.
Dans ce chapitre :
Limitations de l’actualisation automatique des tables de répertoire via Amazon SQS¶
Clients Virtual Private Snowflake (VPS) et AWS PrivateLink : Amazon SQS n’est actuellement pas pris en charge par AWS en tant que point de terminaison VPC. Bien que les services AWS au sein d’un VPC (y compris VPS) puissent communiquer avec SQS, ce trafic ne fait pas partie du VPC et n’est donc pas protégé par le VPC.
Les notifications SQS informent Snowflake lorsque de nouveaux fichiers arrivent dans les compartiments S3 surveillés et sont prêts à être chargés. Les notifications SQS contiennent l’événement S3 et une liste des noms de fichiers. Elles n’incluent pas les données réelles dans les fichiers.
Prise en charge de la plateforme Cloud¶
Le déclenchement des actualisations de métadonnées externes automatisées à l’aide de messages d’événements S3 est pris en charge par les comptes Snowflake hébergés sur Amazon Web Services (AWS) uniquement.
Configuration de l’accès sécurisé au stockage Cloud¶
Note
Si vous avez déjà configuré un accès sécurisé au compartiment S3 qui stocke vos fichiers de données, vous pouvez ignorer cette section.
Cette section décrit comment configurer un objet d’intégration de stockage Snowflake pour déléguer la responsabilité de l’authentification pour le stockage dans le Cloud à une entité Gestion des identités et des accès Snowflake (IAM).
Note
Nous vous recommandons vivement cette option, qui vous évite de fournir des informations d’identification IAM lors de l’accès à un stockage dans le Cloud. Voir Configuration de l’accès sécurisé à Amazon S3 pour des options d’accès au stockage supplémentaires.
Cette section explique comment utiliser des intégrations de stockage pour permettre à Snowflake de lire et d’écrire des données dans un compartiment Amazon S3 référencé dans une zone de préparation externe (c’est-à-dire S3). Les intégrations sont des objets Snowflake de première classe nommés, qui évitent de transmettre des informations d’identification explicites de fournisseur Cloud, telles que des clés secrètes ou des jetons d’accès. Les objets d’intégration stockent un ID d’utilisateur de gestion des identités et des accès (IAM) AWS. Un administrateur de votre organisation accorde les autorisations utilisateur IAM de l’intégration dans le compte AWS.
Une intégration peut également répertorier des compartiments (et des chemins facultatifs) qui limitent les emplacements que les utilisateurs peuvent spécifier lors de la création de zones de préparation externes utilisant l’intégration.
Note
Pour terminer les instructions de cette section, des autorisations sont nécessaires dans AWS pour créer et gérer des stratégies et des rôles IAM. Si vous n’êtes pas un administrateur AWS, demandez à votre administrateur AWS d’effectuer ces tâches.
Notez qu’actuellement, l’accès au stockage S3 dans les régions gouvernementales à l’aide d’une intégration de stockage est limité aux comptes Snowflake hébergés sur AWS dans la même région gouvernementale. L’accès à votre stockage S3 à partir d’un compte hébergé en dehors de la région gouvernementale à l’aide d’identifiants directs est pris en charge.
Le diagramme suivant illustre le flux d’intégration d’une zone de préparation S3 :
Une zone de préparation externe (c.-à-d S3) fait référence à un objet d’intégration de stockage dans sa définition.
Snowflake associe automatiquement l’intégration de stockage à un utilisateur IAM S3 créé pour votre compte. Snowflake crée un seul utilisateur IAM référencé par toutes les intégrations de stockage S3 de votre compte Snowflake.
Un administrateur AWS de votre organisation accorde des autorisations à l’utilisateur IAM pour accéder au compartiment référencé dans la définition de la zone de préparation. Notez que de nombreux objets de zones de préparation externes peuvent référencer différents compartiments et chemins et utiliser la même intégration de stockage pour l’authentification.
Lorsqu’un utilisateur charge ou décharge des données depuis ou vers une zone de préparation, Snowflake vérifie les autorisations accordées à l’utilisateur IAM sur le compartiment avant d’autoriser ou de refuser l’accès.
Dans cette section :
Étape 1 : Configurer des autorisations d’accès pour le compartiment S3¶
Conditions de contrôle d’accès AWS¶
Snowflake requiert les autorisations suivantes sur un compartiment S3 et un dossier pour accéder aux fichiers dans le dossier (et tout sous-dossier) :
s3:GetBucketLocation
s3:GetObject
s3:GetObjectVersion
s3:ListBucket
Comme bonne pratique, Snowflake recommande la création d’une politique IAM pour l’accès de Snowflake au compartiment S3. Vous pouvez alors joindre la politique au rôle, et utiliser les identifiants de sécurité générés par AWS pour que le rôle puisse accéder aux fichiers dans le compartiment.
Création d’une politique IAM¶
Les instructions pas-à-pas suivantes décrivent comment configurer les autorisations d’accès pour Snowflake dans votre console de gestion AWS Management Console pour accéder à votre compartiment S3.
Connectez-vous à la console de gestion AWS.
Dans le tableau de bord d’accueil, sélectionnez Identity & Access Management (IAM) :
Cliquez sur Account settings dans le volet de navigation de gauche.
Développez la liste Security Token Service Regions, recherchez la région AWS qui correspond à la région où se trouve votre compte et choisissez Activate si le statut est Inactive.
Cliquez sur Policies dans le volet de navigation de gauche.
Cliquez sur Create Policy :
Cliquez sur l’onglet JSON.
Ajoutez le document de politique qui permettra à Snowflake d’accéder au compartiment et au dossier S3.
La politique suivante (au format JSON) fournit à Snowflake les autorisations requises pour charger ou décharger des données à l’aide d’un seul chemin de dossier et de compartiment.
Copiez et collez le texte dans l’éditeur de politiques :
Note
Assurez-vous de remplacer le
bucket
et leprefix
par votre nom de compartiment actuel et le préfixe du chemin du dossier.Les Amazon Resource Names (ARN) pour les compartiments dans des régions gouvernementales ont un préfixe
arn:aws-us-gov:s3:::
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<bucket>/<prefix>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<bucket>", "Condition": { "StringLike": { "s3:prefix": [ "<prefix>/*" ] } } } ] }
Note
La définition de la condition
"s3:prefix":
sur["*"]
ou["<chemin>/*"]
donne accès à tous les préfixes dans le compartiment spécifié ou le chemin dans le compartiment, respectivement.Notez que les politiques AWS prennent en charge une variété de cas d’utilisation de sécurité différents.
Cliquez sur Review policy.
Entrez le nom de la stratégie (ex. :
snowflake_access
) et une description facultative. Cliquez sur Create policy.
Étape 2 : Créer le rôle IAM dans AWS¶
Pour configurer les autorisations d’accès à Snowflake dans la Console de gestion AWS, procédez comme suit :
Connectez-vous à la console de gestion AWS.
Dans le tableau de bord d’accueil, sélectionnez Identity & Access Management (IAM) :
Dans le volet de navigation de gauche, sélectionnez Roles.
Sélectionnez Create role.
Sélectionnez Another AWS account comme type d’entité de confiance.
Dans le champ Account ID saisissez votre propre ID de compte AWS temporaire. Plus tard, vous modifierez la relation de confiance et accorderez l’accès à Snowflake.
Sélectionnez l’option Require external ID. Un ID externe est utilisé pour accorder l’accès à vos ressources AWS (telles que des compartiments S3) à un tiers comme Snowflake.
Saisissez un ID de type caractère générique tel que
0000
. À une étape ultérieure, vous modifierez la relation de confiance de votre rôle IAM et spécifierez l’ID externe de votre intégration de stockage.Sélectionnez Next.
Sélectionnez la politique que vous avez créée à l”étape 1 : Configuration des autorisations d’accès au compartiment S3 (dans ce chapitre).
Sélectionnez Next.
Saisissez un nom et une description pour le rôle, puis sélectionnez Create role.
Vous avez maintenant créé une stratégie IAM pour un compartiment, créé un rôle IAM et associé la stratégie au rôle.
Sur la page de synthèse du rôle, recherchez et enregistrez la valeur Role ARN. Dans l’étape suivante, vous créerez une intégration Snowflake qui fait référence à ce rôle.
Note
Snowflake met en cache les informations d’identification temporaires pendant une période qui ne peut dépasser le délai d’expiration de 60 minutes. Si vous révoquez l’accès à partir de Snowflake, les utilisateurs pourraient être en mesure de répertorier les fichiers et d’accéder à des données à partir de l’emplacement de stockage dans le Cloud jusqu’à l’expiration du cache.
Étape 3 : Création d’une intégration Cloud Storage dans Snowflake¶
Créez une intégration de stockage à l’aide de la commande CREATE STORAGE INTEGRATION. Une intégration de stockage est un objet Snowflake qui stocke un utilisateur généré pour la gestion d’identité et d’accès (IAM) pour votre stockage Cloud S3, ainsi qu’un ensemble facultatif d’emplacements de stockage autorisés ou bloqués (c.-à-d. des compartiments). Les administrateurs de fournisseur de Cloud de votre entreprise accordent des autorisations sur les emplacements de stockage à l’utilisateur généré. Cette option permet aux utilisateurs d’éviter de fournir des informations d’identification lors de la création de zones de préparation ou du chargement de données.
Une seule intégration de stockage peut prendre en charge plusieurs zones de préparation externes (c’est-à-dire S3). L’URL dans la définition de zone de préparation doit correspondre aux compartiments S3 (et aux chemins facultatifs) spécifiés pour le paramètre STORAGE_ALLOWED_LOCATIONS.
Note
Seuls les administrateurs de compte (utilisateurs dotés du rôle ACCOUNTADMIN) ou un rôle disposant du privilège global CREATE INTEGRATION peuvent exécuter cette commande SQL.
CREATE STORAGE INTEGRATION <integration_name>
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = 'S3'
ENABLED = TRUE
STORAGE_AWS_ROLE_ARN = '<iam_role>'
STORAGE_ALLOWED_LOCATIONS = ('s3://<bucket>/<path>/', 's3://<bucket>/<path>/')
[ STORAGE_BLOCKED_LOCATIONS = ('s3://<bucket>/<path>/', 's3://<bucket>/<path>/') ]
Où :
integration_name
est le nom de la nouvelle intégration.iam_role
est le nom Amazon Resource Name (ARN) du rôle que vous avez créé à l’ étape 2 : Création du rôle IAM AWS (dans ce chapitre).bucket
est le nom d’un compartiment S3 qui stocke vos fichiers de données (par exemple,mybucket
). Les paramètres STORAGE_ALLOWED_LOCATIONS requis et STORAGE_BLOCKED_LOCATIONS facultatif limitent ou bloquent l’accès à ces compartiments, respectivement, lors de la création ou de la modification de zones de préparation faisant référence à cette intégration.path
est un chemin facultatif qui peut être utilisé pour fournir un contrôle granulaire sur les objets du compartiment.
L’exemple suivant crée une intégration qui autorise l’accès à tous les compartiments du compte, mais bloque l’accès aux dossiers sensitivedata
définis.
Les zones de préparation externes supplémentaires qui utilisent également cette intégration peuvent faire référence aux compartiments et aux chemins autorisés :
CREATE STORAGE INTEGRATION s3_int TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'S3' ENABLED = TRUE STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole' STORAGE_ALLOWED_LOCATIONS = ('*') STORAGE_BLOCKED_LOCATIONS = ('s3://mybucket1/mypath1/sensitivedata/', 's3://mybucket2/mypath2/sensitivedata/');
Note
En option, utilisez le paramètre STORAGE_AWS_EXTERNAL_ID pour spécifier votre propre ID externe. Vous pouvez sélectionner cette option pour utiliser le même ID externe sur plusieurs volumes externes et/ou intégrations de stockage.
Étape 4 : Récupération de l’utilisateur AWS IAM de votre compte Snowflake¶
Pour récupérer l’ARN de l’utilisateur IAM automatiquement créé pour votre compte Snowflake, utilisez DESCRIBE INTEGRATION.
DESC INTEGRATION <integration_name>;
Où :
integration_name
est le nom de l’intégration créée à l”étape 3 : Création d’une intégration Cloud Storage dans Snowflake (ce chapitre).
Par exemple :
DESC INTEGRATION s3_int; +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+ | property | property_type | property_value | property_default | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/ | [] | | STORAGE_AWS_IAM_USER_ARN | String | arn:aws:iam::123456789001:user/abc1-b-self1234 | | | STORAGE_AWS_ROLE_ARN | String | arn:aws:iam::001234567890:role/myrole | | | STORAGE_AWS_EXTERNAL_ID | String | MYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq= | | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+
Enregistrez les valeurs des propriétés suivantes :
Propriété
Description
STORAGE_AWS_IAM_USER_ARN
Utilisateur IAM AWS créé pour votre compte Snowflake, par exemple,
arn:aws:iam::123456789001:user/abc1-b-self1234
. Snowflake provisionne un seul utilisateur IAM pour l’intégralité de votre compte Snowflake. Toutes les intégrations de stockage S3 de votre compte utilisent cet utilisateur IAM.STORAGE_AWS_EXTERNAL_ID
ID externe que Snowflake utilise pour établir une relation de confiance avec AWS. Si vous n’avez pas spécifié d’ID externe (
STORAGE_AWS_EXTERNAL_ID
) lorsque vous avez créé l’intégration de stockage, Snowflake génère un ID à utiliser.Vous fournirez ces valeurs à la section suivante.
Étape 5 : Octroi des autorisations utilisateur à IAM pour accéder à des objets de compartiment¶
Les instructions étape par étape suivantes décrivent comment configurer les permissions d’accès IAM pour Snowflake dans votre console de gestion AWS de sorte que vous puissiez utiliser un compartiment S3 pour charger et décharger les données :
Connectez-vous à la console de gestion AWS.
Sélectionnez Identity & Access Management (IAM) :
Dans le volet de navigation de gauche, sélectionnez Roles.
Cliquez sur le rôle que vous avez créé à l”étape 2 : Création du rôle IAM dans AWS (dans ce chapitre).
Sélectionnez l’onglet Trust relationships.
Sélectionnez Edit trust relationship.
Modifiez le document de politique avec les valeurs de sortie DESC STORAGE INTEGRATION que vous avez enregistrées dans l” étape 4 : Récupération de l’utilisateur AWS IAM de votre compte Snowflake (dans ce chapitre) :
Document de politique pour le rôle IAM
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<snowflake_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<snowflake_external_id>" } } } ] }
Où :
snowflake_user_arn
est la valeur STORAGE_AWS_IAM_USER_ARN que vous avez enregistrée.snowflake_external_id
est la valeur STORAGE_AWS_EXTERNAL_ID que vous avez enregistrée.Dans cet exemple, la valeur
snowflake_external_id
estMYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq=
.Note
Pour des raisons de sécurité, si vous créez une nouvelle intégration de stockage (ou si vous recréez une intégration de stockage existante à l’aide de la syntaxe CREATE OR REPLACE STORAGE INTEGRATION) sans spécifier d’ID externe, la nouvelle intégration a un ID externe différent et ne peut donc résoudre la relation de confiance, sauf si vous mettez à jour la politique de confiance.
Sélectionnez le bouton Update Trust Policy. Les modifications sont enregistrées.
Note
Snowflake met en cache les informations d’identification temporaires pendant une période qui ne peut dépasser le délai d’expiration de 60 minutes. Si vous révoquez l’accès à partir de Snowflake, les utilisateurs pourraient être en mesure de répertorier les fichiers et de charger des données à partir de l’emplacement de stockage dans le Cloud jusqu’à l’expiration du cache.
Détermination de l’option correcte¶
Avant de poursuivre, déterminez si une notification d’événement S3 existe pour le chemin cible (ou le « préfixe » dans la terminologie AWS) dans votre compartiment S3 où se trouvent vos fichiers de données. Les règles d’AWS interdisent la création de notifications conflictuelles pour le même chemin.
Les options suivantes sont prises en charge pour automatiser l’actualisation des métadonnées de tables de répertoire à l’aide d’Amazon SQS :
Option 1. Nouvelle notification d’événement S3 : Créez une notification d’événement pour le chemin cible dans votre compartiment S3. La notification d’événement informe Snowflake via une file d’attente SQS lorsque des fichiers nouveaux, supprimés ou modifiés dans le chemin d’accès nécessitent une actualisation des métadonnées de la table de répertoire.
Important
S’il existe une notification d’événement en conflit pour votre compartiment S3, utilisez l’option 2 à la place.
Option 2. Notification d’événement existante : Configurez Amazon Simple Notification Service (SNS) en tant que diffuseur pour partager les notifications d’un chemin donné avec plusieurs points de terminaison (ou « abonnés », par exemple files d’attente SQS ou charges de travail AWS Lambda), y compris la file d’attente SQS de Snowflake pour l’automatisation de l’actualisation de table de répertoire. Une notification d’événement S3 publiée par SNS informe Snowflake des changements de fichiers dans le chemin d’accès via une file SQS.
Note
Nous recommandons cette option si vous prévoyez d’utiliser Réplication des zones de préparation, des canaux et de l’historique des chargements. Vous pouvez également migrer de l’option 1 vers l’option 2 après avoir créé un groupe de réplication ou de basculement. Pour plus d’informations, voir Migration vers Amazon Simple Notification Service (SNS).
Option 1 : Création d’une nouvelle notification d’événement S3¶
Cette section décrit l’option la plus courante pour actualiser automatiquement les métadonnées de table de répertoire à l’aide de notifications Amazon SQS (Simple Queue Service) pour un compartiment S3. Les étapes expliquent comment créer une notification d’événement pour le chemin cible (ou « préfixe » dans la terminologie AWS) dans votre compartiment S3 dans lequel vos fichiers de données sont stockés.
Important
S’il existe une notification d’événement en conflit pour votre compartiment S3, utilisez plutôt Option 2 : Configuration d’Amazon SNS (dans cette rubrique). Les règles AWS interdisent la création de notifications en conflit pour le même chemin cible.
Étape 1 : Création d’une zone de préparation avec une table de répertoire incluse¶
Créez une zone de préparation externe qui fait référence à votre compartiment S3 à l’aide de la commande CREATE STAGE. Snowflake lit vos fichiers de données en zone de préparation dans les métadonnées de la table de répertoire. Vous pouvez aussi utiliser une zone de préparation externe existante.
Note
Pour configurer un accès sécurisé à l’emplacement de stockage Cloud, voir Configuration de l’accès sécurisé au stockage Cloud (dans cette rubrique).
Pour faire référence à une intégration de stockage dans l’instruction CREATE STAGE, le rôle doit avoir le privilège USAGE sur l’objet d’intégration de stockage.
-- External stage
CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] <external_stage_name>
<cloud_storage_access_settings>
[ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ directoryTable ]
[ COPY_OPTIONS = ( copyOptions ) ]
[ COMMENT = '<string_literal>' ]
Note
L’emplacement de stockage dans la valeur d’URL doit se terminer par une barre oblique (/
).
Où :
directoryTable (for Amazon S3) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ AUTO_REFRESH = { TRUE | FALSE } ] ) ]
Paramètres de la table de répertoire (directoryTable
)¶
ENABLE = TRUE | FALSE
Spécifie s’il faut ajouter une table de répertoire à la zone de préparation. Lorsque la valeur est TRUE, une table de répertoire est créée avec la zone de préparation.
Par défaut :
FALSE
AUTO_REFRESH = TRUE | FALSE
Spécifie si Snowflake doit activer le déclenchement des actualisations automatiques des métadonnées de la table de répertoire lorsque de nouveaux fichiers de données ou des fichiers de données mis à jour sont disponibles dans la zone de préparation externe nommée spécifiée dans le paramètre
[ WITH ] LOCATION =
.TRUE
Snowflake permet de déclencher des actualisations automatiques des métadonnées de la table de répertoire.
FALSE
Snowflake n’active pas le déclenchement d’actualisations automatiques des métadonnées de la table de répertoire. Vous devez actualiser manuellement les métadonnées de la table de répertoire de façon périodique avec ALTER STAGE … REFRESH pour synchroniser les métadonnées avec la liste actuelle des fichiers dans le chemin de la zone de préparation.
Par défaut :
FALSE
L’exemple suivant crée une zone de préparation nommée mystage
dans le schéma actif de la session utilisateur. L’URL de stockage Cloud inclut le chemin files
. La zone de préparation fait référence à une intégration de stockage nommée my_storage_int
.
USE SCHEMA mydb.public;
CREATE STAGE mystage
URL='s3://load/files/'
STORAGE_INTEGRATION = my_storage_int
DIRECTORY = (
ENABLE = true
AUTO_REFRESH = true
);
Lorsque des fichiers de données nouveaux ou mis à jour sont ajoutés à l’emplacement de stockage dans le Cloud, la notification d’événement demande à Snowflake de les analyser dans les métadonnées de la table de répertoire.
Étape 2 : Configuration de notifications d’événement¶
Configurez les notifications d’événement pour votre compartiment S3 afin d’avertir Snowflake lorsque des données nouvelles ou mises à jour sont disponibles pour être lues dans les métadonnées de la table de répertoire. La fonctionnalité d’actualisation automatique s’appuie sur les files d’attente SQS pour transmettre les notifications d’événement de S3 à Snowflake.
Pour faciliter l’utilisation, ces files d’attente SQS sont créées et gérées par Snowflake. Le résultat de la commande DESCRIBE STAGE affiche le nom de ressource Amazon (ARN) de votre file d’attente SQS.
Exécutez la commande DESCRIBE STAGE :
DESC STAGE <stage_name>;
Par exemple :
DESC STAGE mystage;
Notez l’ARN de la file d’attente SQS de la table de répertoire dans le champ
directory_notification_channel
. Copiez l’ARN dans un emplacement approprié.Note
Conformément aux consignes d’AWS, Snowflake ne désigne pas plus d’une file d’attente SQS par compartiment S3. Cette file d’attente SQS peut être partagée entre plusieurs compartiments du même compte AWS. La file d’attente SQS coordonne les notifications de toutes les tables de répertoire lisant des fichiers de données à partir du même compartiment S3. Lorsqu’un fichier de données nouveau ou modifié est téléchargé dans le compartiment, toutes les définitions de table de répertoire correspondant au chemin du répertoire de la zone de préparation lisent les détails du fichier dans leurs métadonnées.
Connectez-vous à la console de gestion AWS.
Configurez une notification d’événement pour votre compartiment S3 à l’aide des instructions fournies dans la documentation Amazon S3. Remplissez les champs comme suit :
Name : nom de la notification d’événement (par exemple
Auto-ingest Snowflake
).Events : sélectionnez les options ObjectCreate (All) et ObjectRemoved.
Send to : sélectionnez SQS Queue dans la liste déroulante.
SQS : sélectionnez Add SQS queue ARN dans la liste déroulante.
SQS queue ARN : collez le nom de la file d’attente SQS à partir de la sortie DESC STAGE.
Note
Ces instructions créent une notification d’événement unique qui surveille l’activité de l’ensemble du compartiment S3. C’est l’approche la plus simple. Cette notification traite toutes les tables de répertoire configurées à un niveau plus granulaire dans le répertoire de compartiment S3.
Dans les étapes ci-dessus, vous pouvez également configurer un(e) ou plusieurs chemins et/ou extensions de fichiers (ou préfixes et suffixes, dans la terminologie AWS) pour filtrer l’activité des événements. Pour obtenir des instructions, voir les informations de filtrage du nom de la clé d’objet dans la rubrique concernée de la documentation AWS. Répétez ces étapes pour chaque chemin ou extension de fichier supplémentaire que vous souhaitez que la notification surveille.
Notez que AWS limite le nombre de ces configurations de file d’attente de notification à un maximum de 100 par compartiment S3.
Notez également que AWS n’autorise pas les configurations de file d’attente qui se chevauchent (entre les notifications d’événement) pour le même compartiment S3. Par exemple, si une notification existante est configurée pour s3://mybucket/files/path1
, vous ne pouvez pas en créer une autre à un niveau supérieur, tel que s3://mybucket/files
, ou inversement.
La zone de préparation externe avec actualisation automatique est maintenant configurée !
Lorsque des fichiers de données nouveaux ou mis à jour sont ajoutés au compartiment S3, la notification d’événement demande à Snowflake de les analyser dans les métadonnées de la table de répertoire.
Étape 3 : Actualisation manuelle des métadonnées d’une table de répertoire¶
Actualiser manuellement les métadonnées d’une table de répertoire à l’aide de la commande ALTER STAGE.
ALTER STAGE [ IF EXISTS ] <name> REFRESH [ SUBPATH = '<relative-path>' ]
Où :
REFRESH
Accède aux fichiers de données mis en zone de préparation, et référencés dans la définition de table de répertoire et met à jour les métadonnées de la table :
Les nouveaux fichiers dans le chemin sont ajoutés aux métadonnées de la table.
Les modifications apportées aux fichiers dans le chemin sont mises à jour dans les métadonnées de la table.
Les fichiers qui ne figurent plus dans le chemin sont supprimés des métadonnées de la table.
Actuellement, il est nécessaire d’exécuter cette commande chaque fois que des fichiers sont ajoutés à la zone de préparation, mis à jour ou détruits. Cette étape synchronise les métadonnées avec le dernier ensemble de fichiers associés dans la définition de la zone de préparation pour la table de répertoire.
SUBPATH = '<relative-path>'
Spécifiez éventuellement un chemin relatif pour actualiser les métadonnées pour un sous-ensemble spécifique des fichiers de données.
Par exemple, actualisez manuellement les métadonnées de la table de répertoire dans une zone de préparation nommée mystage
:
ALTER STAGE mystage REFRESH;
Important
Si cette étape n’est pas réalisée avec succès au moins une fois après la création de la table de répertoire, l’interrogation de la table de répertoire ne renvoie aucun résultat jusqu’à ce qu’un événement de notification déclenche l’actualisation automatique des métadonnées de la table de répertoire pour la première fois.
Étape 4 : Configuration de la sécurité¶
Pour chaque rôle supplémentaire qui sera utilisé pour interroger la table de répertoire, accordez des privilèges de contrôle d’accès suffisants sur les différents objets (c.-à-d. la ou les bases de données, le ou les schémas, la zone de préparation et la table) avec GRANT <privilèges> :
Objet |
Privilège |
Remarques |
---|---|---|
Base de données |
USAGE |
|
Schéma |
USAGE |
|
Zone de préparation nommée |
USAGE , READ |
|
Format de fichier nommé |
USAGE |
Option 2 : Configuration d’Amazon SNS¶
Cette section explique comment déclencher automatiquement l’actualisation automatique des métadonnées de table de répertoire à l’aide de notifications Amazon SQS (Simple Queue Service) pour un compartiment S3. Les étapes expliquent comment configurer Amazon Simple Notification Service (SNS) en tant que diffuseur afin de publier des notifications d’événement pour votre compartiment S3 à plusieurs abonnés (par exemple, files d’attente SQS ou charges de travail AWS Lambda), y compris la file d’attente SQS de Snowflake pour l’automatisation de l’actualisation de table de répertoire.
Note
Ces instructions supposent qu’une notification d’événement existe pour le chemin cible dans votre compartiment S3 où se trouvent vos fichiers de données. Si aucune notification d’événement n’existe, vous avez deux possibilités :
Suivez l’option 1 : Création d’une nouvelle notification d’événement S3 (dans cette rubrique) à la place.
Créez une notification d’événement pour votre compartiment S3, puis suivez les instructions de cette rubrique. Pour plus d’informations, voir la documentation Amazon S3.
Conditions préalables : Créer un sujet et un abonnement Amazon SNS¶
Créez un sujet SNS dans votre compte AWS pour gérer tous les messages de l’emplacement de zone de préparation Snowflake sur votre compartiment S3.
Souscrivez vos destinations cibles aux notifications d’événement S3 (par exemple, autres files d’attente SQS ou charges de travail Lambda AWS) à cette rubrique. SNS publie des notifications d’événement pour votre compartiment à tous les abonnés du sujet.
Pour obtenir des instructions, reportez-vous à la documentation SNS.
Étape 1 : S’abonner à la file d’attente SQS de Snowflake dans le sujet SNS¶
Connectez-vous à la console de gestion AWS.
Dans le tableau de bord d’accueil, sélectionnez Simple Notification Service (SNS).
Cliquez sur Topics dans le volet de navigation de gauche.
Recherchez le sujet de votre compartiment S3. Notez le sujet ARN.
À l’aide d’un client Snowflake, interrogez la fonction système SYSTEM$GET_AWS_SNS_IAM_POLICY avec l’ARN de votre sujet SNS :
select system$get_aws_sns_iam_policy('<sns_topic_arn>');
La fonction renvoie une stratégie IAM accordant à la file d’attente SQS de Snowflake l’autorisation de s’abonner au sujet SNS.
Par exemple :
select system$get_aws_sns_iam_policy('arn:aws:sns:us-west-2:001234567890:s3_mybucket'); +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | SYSTEM$GET_AWS_SNS_IAM_POLICY('ARN:AWS:SNS:US-WEST-2:001234567890:S3_MYBUCKET') | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | {"Version":"2012-10-17","Statement":[{"Sid":"1","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::123456789001:user/vj4g-a-abcd1234"},"Action":["sns:Subscribe"],"Resource":["arn:aws:sns:us-west-2:001234567890:s3_mybucket"]}]} | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Revenez à la console de gestion AWS. Cliquez sur Topics dans le volet de navigation de gauche.
Sélectionnez le sujet de votre compartiment S3 et cliquez sur le bouton Edit. La page Edit s’ouvre.
Cliquez sur Access policy - Optional pour développer cette zone de la page.
Fusionnez l’ajout de stratégie IAM des résultats de la fonction SYSTEM$GET_AWS_SNS_IAM_POLICY dans le document JSON.
Par exemple :
Politique IAM originale (abrégée) :
{ "Version":"2008-10-17", "Id":"__default_policy_ID", "Statement":[ { "Sid":"__default_statement_ID", "Effect":"Allow", "Principal":{ "AWS":"*" } .. } ] }
Politique IAM fusionnée :
{ "Version":"2008-10-17", "Id":"__default_policy_ID", "Statement":[ { "Sid":"__default_statement_ID", "Effect":"Allow", "Principal":{ "AWS":"*" } .. }, { "Sid":"1", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::123456789001:user/vj4g-a-abcd1234" }, "Action":[ "sns:Subscribe" ], "Resource":[ "arn:aws:sns:us-west-2:001234567890:s3_mybucket" ] } ] }
Ajoutez une autorisation de politique supplémentaire pour permettre à S3 de publier des notifications d’événement pour le compartiment dans le sujet SNS.
Par exemple (en utilisant le sujet ARN SNS et le compartiment S3 utilisés dans ces instructions) :
{ "Sid":"s3-event-notifier", "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"SNS:Publish", "Resource":"arn:aws:sns:us-west-2:001234567890:s3_mybucket", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:s3:*:*:s3_mybucket" } } }
Politique IAM fusionnée :
{ "Version":"2008-10-17", "Id":"__default_policy_ID", "Statement":[ { "Sid":"__default_statement_ID", "Effect":"Allow", "Principal":{ "AWS":"*" } .. }, { "Sid":"1", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::123456789001:user/vj4g-a-abcd1234" }, "Action":[ "sns:Subscribe" ], "Resource":[ "arn:aws:sns:us-west-2:001234567890:s3_mybucket" ] }, { "Sid":"s3-event-notifier", "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"SNS:Publish", "Resource":"arn:aws:sns:us-west-2:001234567890:s3_mybucket", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:s3:*:*:s3_mybucket" } } } ] }
Cliquez sur le bouton Save changes.
Étape 2 : Création d’une zone de préparation incluant une table de répertoire¶
Créez une zone de préparation externe qui fait référence à votre compartiment S3 à l’aide de la commande CREATE STAGE. Snowflake lit vos fichiers de données en zone de préparation dans les métadonnées de la table de répertoire. Vous pouvez aussi utiliser une zone de préparation externe existante.
Note
Pour configurer un accès sécurisé à l’emplacement de stockage Cloud, voir Configuration de l’accès sécurisé au stockage Cloud (dans cette rubrique).
Pour faire référence à une intégration de stockage dans l’instruction CREATE STAGE, le rôle doit avoir le privilège USAGE sur l’objet d’intégration de stockage.
-- External stage
CREATE [ OR REPLACE ] [ TEMPORARY ] STAGE [ IF NOT EXISTS ] <external_stage_name>
<cloud_storage_access_settings>
[ FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ directoryTable ]
[ COPY_OPTIONS = ( copyOptions ) ]
[ COMMENT = '<string_literal>' ]
Où :
directoryTable (for Amazon S3) ::= [ DIRECTORY = ( ENABLE = { TRUE | FALSE } [ AUTO_REFRESH = { TRUE | FALSE } ] [ AWS_SNS_TOPIC = '<sns_topic_arn>' ] ) ]
Paramètres de la table de répertoire (directoryTable
)¶
ENABLE = TRUE | FALSE
Spécifie s’il faut ajouter une table de répertoire à la zone de préparation. Lorsque la valeur est TRUE, une table de répertoire est créée avec la zone de préparation.
Par défaut :
FALSE
AUTO_REFRESH = TRUE | FALSE
Spécifie si Snowflake doit activer le déclenchement des actualisations automatiques des métadonnées de la table de répertoire lorsque de nouveaux fichiers de données ou des fichiers de données mis à jour sont disponibles dans la zone de préparation externe nommée spécifiée dans le paramètre
[ WITH ] LOCATION =
.TRUE
Snowflake permet de déclencher des actualisations automatiques des métadonnées de la table de répertoire.
FALSE
Snowflake n’active pas le déclenchement d’actualisations automatiques des métadonnées de la table de répertoire. Vous devez actualiser manuellement les métadonnées de la table de répertoire de façon périodique avec ALTER STAGE … REFRESH pour synchroniser les métadonnées avec la liste actuelle des fichiers dans le chemin de la zone de préparation.
Par défaut :
FALSE
Amazon S3
AWS_SNS_TOPIC = '<sns_sujet_arn>'
Spécifie l’ARN du sujet SNS de votre compartiment S3. L’instruction de table de répertoire CREATE souscrit la file d’attente Snowflake SQS au sujet SNS spécifié.
L’exemple suivant crée une zone de préparation nommée mystage
dans le schéma actif de la session utilisateur. L’URL de stockage Cloud inclut le chemin files
. La zone de préparation fait référence à une intégration de stockage nommée my_storage_int
.
USE SCHEMA mydb.public;
CREATE STAGE mystage
URL='s3://load/files/'
STORAGE_INTEGRATION = my_storage_int
DIRECTORY = (
ENABLE = true
AUTO_REFRESH = true
AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'
);
Lorsque des fichiers de données nouveaux ou mis à jour sont ajoutés à l’emplacement de stockage dans le Cloud, la notification d’événement demande à Snowflake de les analyser dans les métadonnées de la table de répertoire.
Étape 3 : Actualisation manuelle des métadonnées d’une table de répertoire¶
Actualiser manuellement les métadonnées d’une table de répertoire à l’aide de la commande ALTER STAGE.
ALTER STAGE [ IF EXISTS ] <name> REFRESH [ SUBPATH = '<relative-path>' ]
Où :
REFRESH
Accède aux fichiers de données mis en zone de préparation, et référencés dans la définition de table de répertoire et met à jour les métadonnées de la table :
Les nouveaux fichiers dans le chemin sont ajoutés aux métadonnées de la table.
Les modifications apportées aux fichiers dans le chemin sont mises à jour dans les métadonnées de la table.
Les fichiers qui ne figurent plus dans le chemin sont supprimés des métadonnées de la table.
Actuellement, il est nécessaire d’exécuter cette commande chaque fois que des fichiers sont ajoutés à la zone de préparation, mis à jour ou détruits. Cette étape synchronise les métadonnées avec le dernier ensemble de fichiers associés dans la définition de la zone de préparation pour la table de répertoire.
SUBPATH = '<relative-path>'
Spécifiez éventuellement un chemin relatif pour actualiser les métadonnées pour un sous-ensemble spécifique des fichiers de données.
Par exemple, actualisez manuellement les métadonnées de la table de répertoire dans une zone de préparation nommée mystage
:
ALTER STAGE mystage REFRESH;
Important
Si cette étape n’est pas réalisée avec succès au moins une fois après la création de la table de répertoire, l’interrogation de la table de répertoire ne renvoie aucun résultat jusqu’à ce qu’un événement de notification déclenche l’actualisation automatique des métadonnées de la table de répertoire pour la première fois.
Étape 4 : Configuration de la sécurité¶
Pour chaque rôle supplémentaire qui sera utilisé pour interroger la table de répertoire, accordez des privilèges de contrôle d’accès suffisants sur les différents objets (c.-à-d. la ou les bases de données, le ou les schémas, la zone de préparation et la table) avec GRANT <privilèges> :
Objet |
Privilège |
Remarques |
---|---|---|
Base de données |
USAGE |
|
Schéma |
USAGE |
|
Zone de préparation nommée |
USAGE , READ |
|
Format de fichier nommé |
USAGE |