Consommation de données partagé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 SHARE) pour effectuer ces tâches. Pour plus de détails sur le privilège IMPORT SHARE, voir Autoriser les 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 repartagées (c’est-à-dire partagés de nouveau avec d’autres comptes).
Les bases de données partagées ne peuvent pas être répliquées.
Affichage des partages disponibles¶
Vous pouvez visualiser les partages qui sont disponibles à la consommation dans votre compte en utilisant l’interface Web ou SQL :
- Snowsight:
Sélectionnez Data Products » Private Sharing, puis sélectionnez Shared With You. Vous pouvez voir les éléments suivants :
Les annonces partagées en privé qui ont été partagées avec vous. Vous pouvez également voir des annonces Data Exchange auxquelles vous avez accès.
Partages directs qui ont été partagés avec vous. Selon le statut du partage, les partages sont regroupés en deux sections :
Les partages directs qui sont prêts à recevoir (c’est-à-dire qu’une base de données n’a pas été créée à partir du partage).
Les partages directs qui ont été importés dans une base de données et qui sont prêts à être interrogés.
Pour voir les annonces Snowflake Marketplace qui ont été importées dans une base de données et qui sont prêtes à faire l’objet d’une requête, dans le menu de navigation, sélectionnez Data Products » Marketplace. Pour plus d’informations, voir Découverte des annonces.
- Classic Console:
Sélectionnez Shares , puis sélectionnez la bascule 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;
CopyLa 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 de chaque partage, sous la formeshare_name
(par exemple,SALE_S
).La colonne
owner_account
affiche le nom du compte qui a fourni chaque partage, sous la formeorgname.account_name
.Si la colonne
database_name
est vide, une base de données n’a pas encore été créée depuis le partage dans votre compte.
+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+ | created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name | | |-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------| | 2017-07-09 19:18:09.821 -0700 | INBOUND | SNOW.XY12345 | SALES_S2 | UPDATED_SALES_DB | | | Transformed and updated sales data | | | 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | | +-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+
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 | +----------+------------------------------------+---------------------------------+CopyLe partage est constitué d’un schéma,
aggregates_eula
, avec une table,aggregate_1
. 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 :
- Snowsight:
Connectez-vous à Snowsight.
Sélectionnez Data Products » Private Sharing.
Sélectionnez l’onglet Shared with You.
Dans la section Ready to Get, sélectionnez le partage pour lequel vous souhaitez créer une base de données.
Définissez un nom de base de données et les rôles qui sont autorisés à accéder à la base de données.
Sélectionnez Get Data.
- Classic Console:
- 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>
CopyOù
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.
Lorsqu’une base de données est créée à partir d’un partage, seul le rôle utilisé pour créer la base de données peut accéder aux objets de la base de données par défaut. Pour des instructions sur l’octroi de l’accès à d’autres rôles, voir Attribution de privilèges sur une base de données partagée (dans cette rubrique).
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;Copy
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 | +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+CopyDans 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 le nom de la base de données qui a été créée à partir du partage :
SHOW SHARES;Copy+-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+ | created_on | kind | owner_account | name | database_name | to | owner | comment | listing_global_name | |-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------|---------------------| | 2017-07-09 19:18:09.821 -0700 | INBOUND | SNOW.XY12345 | SALES_S2 | UPDATED_SALES_DB | | | Transformed and updated sales data | | | 2017-06-15 17:02:29.625 -0700 | OUTBOUND | SNOW.MY_TEST_ACCOUNT | SALES_S | SALES_DB | XY12345, YZ23456 | ACCOUNTADMIN | | | +-------------------------------+----------+----------------------+---------------+-----------------------+------------------+--------------+----------------------------------------+---------------------+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 | +----------+------------------------------------------+---------------------------------+Copy
Attribution de privilèges sur une base de données partagée¶
Les instructions pour accorder l’accès aux objets d’un partage diffèrent selon que le fournisseur a segmenté les objets d’un partage en utilisant des rôles de base de données. Cette option associe différents objets du partage à différents rôles de base de données.
Notez qu’un seul partage peut inclure à la fois des objets accessibles via des rôles de base de données et des objets qui ne sont pas associés à un rôle de base de données.
Option 1 : Objets dans un partage non associés à un rôle de base de données¶
Autorisez les utilisateurs à accéder aux objets d’un partage en accordant le privilège IMPORTED PRIVILEGES sur une base de données partagée à un ou plusieurs rôles de votre compte.
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 Console:
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 <privilèges>.
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;
CopyLe 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;
CopyÉ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;
Copy
Option 2 : Objets dans un partage associé à un rôle de base de données¶
Autorisez les utilisateurs à accéder aux objets d’un partage en accordant le rôle de base de données approprié dans la base de données partagée à un ou plusieurs rôles de votre compte.
Étape 1 : Créer une base de données à partir du partage¶
Créez une base de données à partir du partage à l’aide de CREATE DATABASE … FROM SHARE.
L’exécution de cette commande nécessite un rôle avec les privilèges globaux CREATE DATABASE et IMPORT SHARE.
Par exemple, créez des bases de données c1
à partir du fournisseur provider1
et du partage share1
:
CREATE DATABASE c1 FROM SHARE provider1.share1;
Étape 2 : Accorder des rôles de base de données partagée à vos rôles de niveau compte¶
Accordez des rôles de base de données partagée aux rôles de votre compte pour permettre aux utilisateurs disposant de ces rôles d’accéder aux objets de la base de données dans le partage.
Utilisez le rôle que vous avez utilisé pour créer la base de données à partir du partage.
Par exemple, consultez les rôles de base de données disponibles, puis accordez le rôle de base de données c1.r1
au rôle analyst
de votre compte :
SHOW DATABASE ROLES in DATABASE c1;
GRANT DATABASE ROLE c1.r1 TO ROLE analyst;
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).
Le rôle utilisé pour exécuter les instructions SQL dans cette section doit avoir les autorisations requises sur la table partagée ou la vue sécurisée. Pour plus d’informations, voir Attribution de privilèges sur une base de données partagée (dans cette rubrique).
Pour créer des flux sur des vues partagées :
CREATE STREAM <name> ON VIEW <shared_db>.<schema>.<view>;
CopyPar 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;
CopyPour créer des flux sur des tables partagées :
CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
CopyPar 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;
Copy
Pour plus d’informations sur la création de flux, consultez CREATE STREAM.
Note
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.
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;Copy