- Connexion à Snowflake
- Chargement de données dans Snowflake
- Déchargement des données depuis Snowflake
- Utilisation de Snowflake
- Partage des données sécurisé dans Snowflake
- Présentation de Secure Data Sharing
- Présentation des offres de produits pour Secure Data Sharing
- Attribution de privilèges à d’autres rôles
- Utilisation des données partagées
- Partage de données direct sécurisé
- Fournisseurs de données
- Consommateurs de données
- Snowflake Marketplace
- Data Exchange
- Gestion de votre organisation Snowflake
- Gestion de votre compte Snowflake
- Gestion de la sécurité dans Snowflake
- Gestion de la gouvernance dans Snowflake
- Gestion des coûts dans Snowflake
- Documents »
- Partage des données sécurisé dans Snowflake »
- Partage de données direct sécurisé »
- Consommateurs de données
Consommateurs de données¶
Ce chapitre décrit les tâches associées à la création de bases de données à partir de partages mis à disposition par les fournisseurs de données, puis à l’utilisation des bases de données pour les requêtes et autres opérations.
Vous devez utiliser le rôle ACCOUNTADMIN (ou un rôle ayant le privilège global IMPORT SHARES) pour effectuer ces tâches. Pour plus de détails sur le privilège IMPORT SHARES , voir Capacité des rôles non ACCOUNTADMIN à effectuer des tâches de partage de données.
Note
Les tâches décrites dans ce chapitre ne s’appliquent pas aux comptes de lecteur. Si vous utilisez un compte de lecteur pour consommer des données partagées, vous n’avez pas besoin d’effectuer ces tâches car elles ont déjà été effectuées par un administrateur du compte fournisseur.
Dans ce chapitre :
Limites générales des bases de données partagées¶
Les bases de données partagées ont les limites suivantes pour les consommateurs :
Les bases de données partagées sont en lecture seule. Les utilisateurs d’un compte consommateur peuvent consulter/interroger des données, mais ne peuvent pas insérer ou mettre à jour des données, ni créer d’objets dans la base de données.
Les actions suivantes ne sont pas prises en charge :
Création d’un clone d’une base de données partagée ou d’un schéma/d’une table dans la base de données.
« Time Travel » pour une base de données partagée ou d’un schéma/d’une table dans la base de données.
Modification des commentaires d’une base de données partagée.
Les bases de données partagées et tous les objets de la base de données ne peuvent pas être transférés (c’est-à-dire partagés de nouveau avec d’autres comptes).
Affichage des partages disponibles¶
Vous pouvez visualiser les partages qui sont disponibles à la consommation dans votre compte en utilisant l’interface Web ou SQL :
- Classic Web Interface
Cliquez sur Shares
, et ensuite sur le bouton Inbound.
La page affiche tous les partages disponibles sur votre compte. La colonne Database affiche le nom de la base de données créée à partir du partage. Si la colonne est vide, une base de données n’a pas encore été créée (dans votre compte) à partir du partage.
- SQL
Exécutez une instruction SHOW SHARES ou DESCRIBE SHARE.
Par exemple, en utilisant SQL :
SHOW SHARES; +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+ | created_on | kind | name | database_name | to | owner | comment | |---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------| | Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | XY12345.SALES_S | | | | | | Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | XY12345.SALES_S2 | | | | | | Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA | | | Sample data sets provided by Snowflake | +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+La sortie s’affiche :
Deux partages,
sales_s
etsales_s2
sont disponibles.INBOUND
dans la colonnekind
indique qu’un fournisseur de données a mis le partage à la disposition de votre compte en vue d’une consommation.La colonne
name
affiche le nom complet de chaque partage, sous la formeprovider_account.share_name
(p. ex.xy12345.sales_s
).Si la colonne
database_name
est vide, une base de données n’a pas encore été créée (dans votre compte) à partir du partage.
L’exemple suivant utilise la commande DESCRIBE SHARE pour afficher les objets (base de données, schémas et tables) qui sont dans le partage sales_s
:
DESC SHARE xy12345.sales_s; +----------+------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------+---------------------------------| | DATABASE | <DB> | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | <DB>.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | <DB>.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | <DB>.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------+---------------------------------+Le partage est constitué d’un schéma,
aggregates_eula
, avec une table,aggregate_1
. Notez que chaque nom d’objet, y compris la base de données elle-même, est doté du préfixe<DB>
. Ceci indique qu’une base de données n’a pas encore été créée (dans votre compte) à partir du partage.
Création d’une base de données à partir d’un partage¶
Vous pouvez créer une base de données à partir d’un partage en utilisant l’interface Web ou SQL :
- Classic Web Interface
Sélectionnez un partage à partir duquel une base de données n’a pas encore été créée (c’est-à-dire que la colonne Database est vide).
Cliquez sur Create Database from Share.
Suivez les invites fournies dans la boîte de dialogue.
Notez qu’au moment de la création, vous pouvez choisir d’accorder le privilège IMPORTED PRIVILEGES à un ou plusieurs rôles dans le système, ou vous pouvez accorder ce privilège ultérieurement.
- SQL
Exécutez une instruction CREATE DATABASE avec la syntaxe spécifique au partage de données suivante :
CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>Où
provider_account
est le nom du compte qui a fourni le partage etshare_name
est le nom du partage à partir duquel créer la base de données.
Note
Un partage ne peut être consommé qu’une seule fois par compte.
Pour voir les objets qui sont partagés avant de créer une base de données, utilisez la commande DESCRIBE SHARE.
Après avoir créé une base de données à partir d’un partage, utilisez soit la page Databases
de l’interface, soit la commande GRANT <privileges> … TO ROLE pour donner accès à la base de données à d’autres rôles.
Pour plus de détails, voir Attribution de privilèges sur une base de données partagée dans ce chapitre.
Exemples SQL¶
L’exemple suivant crée une nouvelle base de données nommée snow_sales
dans votre compte à partir du partage sales_s
:
CREATE DATABASE snow_sales FROM SHARE xy12345.sales_s;
Listez la nouvelle base de données snow_sales
:
SHOW DATABASES LIKE 'snow%'; +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+ | created_on | name | is_default | is_current | origin | owner | comment | options | retention_time | |---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------| | Sun, 10 Jul 2016 23:28:50 -0700 | SNOWFLAKE_SAMPLE_DATA | N | N | SFC_SAMPLES.SAMPLE_DATA | ACCOUNTADMIN | | | 1 | | Thu, 15 Jun 2017 18:30:08 -0700 | SNOW_SALES | N | Y | xy12345.SALES_S | ACCOUNTADMIN | | | 1 | +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+Dans cet exemple, la colonne
origin
indique le nom complet du partage à partir duquel la base de données a été créée.
De même, la sortie de SHOW SHARES et DESC SHARE inclut maintenant le nom de la base de données qui a été créée à partir du partage :
SHOW SHARES; +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+ | created_on | kind | name | database_name | to | owner | comment | |---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------| | Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | xy12345.SALES_S | SNOW_SALES | | | | | Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | xy12345.SALES_S2 | | | | | | Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA | | | Sample data sets provided by Snowflake | +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+ DESC SHARE xy12345.sales_s; +----------+------------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------------+---------------------------------| | DATABASE | SNOW_SALES | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | SNOW_SALES.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------------+---------------------------------+
Création de flux sur des vues ou des tables partagées¶
La création de flux sur des objets partagés (vues et tables sécurisées) vous permet de suivre les modifications du langage de manipulation de données (DML) apportées dans ces objets. Cette fonctionnalité est similaire à la création et à l’utilisation de flux sur des objets « locaux » (c’est-à-dire dans le même compte que le flux).
Pour créer des flux sur des vues partagées :
En utilisant un rôle qui a le privilège IMPORTED PRIVILEGES, exécutez l’instruction SQL suivante :
CREATE STREAM <name> ON VIEW <shared_db>.<schema>.<view>;
Par exemple, créez un flux sur la vue
aggregate_1_v
partagée dans la base de donnéessnow_sales.aggregates_eula
et le schéma :CREATE STREAM aggregate_1_v_stream ON VIEW snow_sales.aggregates_eula.aggregate_1_v;
Pour créer des flux sur des tables partagées :
En utilisant un rôle qui a le privilège IMPORTED PRIVILEGES, exécutez l’instruction SQL suivante :
CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
Par exemple, créez un flux de table sur la table
aggregate_1
partagée dans la base de données et le schémasnow_sales.aggregates_eula
:CREATE STREAM aggregate_1_stream ON TABLE snow_sales.aggregates_eula.aggregate_1;
Pour plus d’informations sur la création de flux, consultez CREATE STREAM.
Note
La définition de CREATE STREAM … SHOW_INITIAL_ROWS = TRUE n’est pas pris en charge pour les flux sur les tables partagées. Un tel flux ne renvoie que les enregistrements de modifications pour les mises à jour de la table source effectuées après la création du flux.
Le fournisseur de données doit activer le suivi des modifications sur les vues ou les tables avant que vous puissiez créer des flux sur ces objets. Si vous ne pouvez pas créer de flux sur un objet partagé souhaité, contactez le fournisseur de données pour envisager d’activer le suivi des modifications sur cet objet.
Pour empêcher un flux de devenir périmé, consommez les enregistrements de flux dans une transaction pendant la période de conservation de la table. Contactez le fournisseur de données pour déterminer la période de conservation des données pour la table.
Pour déterminer si un flux est devenu obsolète, exécutez la commande DESCRIBE STREAM ou SHOW STREAMS. Dans la sortie de la commande, lorsque la valeur de la colonne STALE est TRUE, le flux peut être périmé. En pratique, la lecture du flux peut réussir pendant un certain temps après le STALE_AFTER attendu. Toutefois, le flux peut devenir obsolète à tout moment pendant cette période.
Attribution de privilèges sur une base de données partagée¶
Seuls les rôles utilisés pour créer une base de données à partir d’un partage peuvent l’utiliser initialement. Cependant, l’accès peut être accordé à d’autres rôles par le biais d’un privilège spécial spécifique au partage de données nommé IMPORTED PRIVILEGES.
Un rôle peut accorder IMPORTED PRIVILEGES sur une base de données importée dans les cas suivants :
Possède la base de données importée (c’est-à-dire a le privilège OWNERSHIP sur la base de données).
A obtenu le privilège global MANAGE GRANTS.
Affectation de IMPORTED PRIVILEGES à d’autres rôles¶
Vous pouvez affecter ce rôle à d’autres rôles à l’aide de l’interface Web ou de SQL :
- Classic Web Interface
Cliquez sur Databases
» <nom_bd_partagée>.
Dans le panneau latéral, cliquez sur Grant Privileges et attribuez le privilège à un ou plusieurs rôles.
- SQL
Exécuter une instruction GRANT <privileges> … TO ROLE.
Pour voir les rôles ayant des privilèges USAGE sur une base de données partagée, utilisez l’interface Web ou la commande SHOW GRANTS .
Exemples SQL¶
Le rôle
r1
crée la base de donnéessnow_sales
à partir du partagexy12345.sales_s
:use role r1; create database snow_sales from share xy12345.sales_s;
Le rôle
r1
accorde IMPORTED PRIVILEGES sur la base de donnéessnow_sales
au rôler2
:grant imported privileges on database snow_sales to role r2;
Étant donné que
r2
n’a pas le privilège OWNERSHIP sur la base de données, pour pouvoir effectuer l’une des opérations d’octroi ou de révocation suivantes, le rôler2
doit détenir le privilège MANAGE GRANTS sur le compte :use role r2; grant imported privileges on database snow_sales to role r3; revoke imported privileges on database snow_sales from role r3;
Interrogation d’une base de données partagée¶
L’interrogation d’une base de données partagée est la même que celle de toute autre base de données de votre compte.
Par exemple :
USE ROLE r1; USE DATABASE snow_sales; SELECT * FROM aggregates_1;