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 :

Interface Web

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 compte_fournisseur.nom_partage (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 |
+----------+----------------------------------+---------------------------------+

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 :

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

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>

compte_fournisseur est le nom du compte qui a fourni le partage et nom_partage est le nom du partage à partir duquel créer la base de données.

Note

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

Création de flux de table sur des tables partagées

Note

La prise en charge des flux de table sur les tables partagées est fournie sous la forme d’une fonctionnalité en avant-première.

La création de flux de table sur des tables partagées vous permet de suivre les modifications du langage de manipulation de données (DML) effectuées dans ces tables. Cette fonctionnalité est similaire à la création et à l’utilisation de flux sur des tables « locales » (c’est-à-dire dans le même compte que le flux).

Pour créer des flux de table sur des tables partagées :

  1. À l’aide d’un rôle disposant du privilège IMPORTED PRIVILEGES, créez un flux de table sur une table partagée :

    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

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 pour le flux est TRUE, le flux est périmé.

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 :

Interface Web

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

  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;
    

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;