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 SHARE) pour effectuer ces tâches. Pour plus de détails sur le privilège IMPORT SHARE, 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 Shares tab, 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 et sales_s2 sont disponibles. INBOUND dans la colonne kind 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 forme provider_account.share_name (par exemple 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
  1. Cliquez sur Shares Shares tab, et ensuite sur le bouton Inbound.

  2. 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).

  3. Cliquez sur Create Database from Share.

  4. Suivez les invites fournies dans la boîte de dialogue.

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>

provider_account est le nom du compte qui a fourni le partage et share_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;

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 |
+----------+------------------------------------------+---------------------------------+

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 Web Interface

Cliquez sur Databases Databases tab » <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

  1. Le rôle r1 crée la base de données snow_sales à partir du partage xy12345.sales_s :

    use role r1;
    create database snow_sales from share xy12345.sales_s;
    
  2. Le rôle r1 accorde IMPORTED PRIVILEGES sur la base de données snow_sales au rôle r2 :

    grant imported privileges on database snow_sales to role r2;
    
  3. É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ôle r2 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;
    

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, accordez le rôle de base de données c1.r1 au rôle analyst de votre compte.

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>;
    

    Par exemple, créez un flux sur la vue aggregate_1_v partagée dans la base de données snow_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 :

    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éma snow_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

  • 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;