Registres

Vue d’ensemble

Pour utiliser une ressource telle qu’un modèle ou une offre de données dans une collaboration, vous devez d’abord l’enregistrer dans un registre. Un registre est un conteneur au niveau du compte conçu pour stocker ces ressources. Une fois enregistrée, toute ressource du registre peut être liée à une collaboration par tout utilisateur de votre compte qui dispose à la fois de l’accès au registre et des autorisations de liaison nécessaires pour cette collaboration spécifique. Les registres sont notamment indépendants des collaborations spécifiques ; une ressource enregistrée peut être liée à un nombre quelconque de collaborations, ou à aucune, au sein de ce compte.

Chaque compte Snowflake prend en charge un registre par défaut. Vous pouvez créer d’autres registres personnalisés pour votre compte. Les registres personnalisés sont un bon moyen de regrouper et de gérer l’accès à vos ressources. Par exemple, vous pouvez créer un registre personnalisé pour les données de ventes et un autre pour les données de dépenses, puis accorder l’accès à ces registres aux utilisateurs concernés via des privilèges DCR et des rôles RBAC personnalisés.

Règles du registre

Voici les principales règles relatives aux registres :

  • Les registres sont des objets de niveau compte. Les utilisateurs ne peuvent voir et accéder qu’aux registres de leur propre compte. Toutefois, lorsqu’une ressource dans un registre est liée à une collaboration, la ressource est visible pour tous ceux qui peuvent y accéder selon la spécification. L’accès au registre de contenu n’est pas nécessaire.

  • Chaque registre personnalisé prend en charge un seul type de ressource (modèle, offre de données, etc.). Le type de ressources est spécifié lorsque vous créez le registre. Le registre par défaut prend en charge tous les types de ressources.

  • Il n’existe pas de limite au nombre de registres personnalisés que vous pouvez créer dans un compte.

  • Lorsque vous enregistrez une ressource, vous pouvez utiliser le paramètre de nom de registre facultatif pour spécifier un registre personnalisé. Si vous ne spécifiez pas de registre personnalisé, la ressource sera enregistrée dans le registre par défaut du compte.

  • Tous les utilisateurs ont accès au registre par défaut dans un compte. Cependant, les registres personnalisés sont initialement privés pour le créateur et les utilisateurs supplémentaires doivent se voir accorder l’accès explicitement en appelant GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE.

  • Un compte peut avoir plusieurs registres qui stockent le même type de ressource.

  • Les registres n’ont pas un nombre maximum de ressources.

  • Une ressource doit avoir un nom unique dans tous les registres de ce compte pour les ressources de ce type. Par exemple, vous pouvez avoir un modèle nommé sales et une offre de données nommée sales dans le même compte, mais pas deux modèles nommés sales dans le même registre ou dans des registres différents du même compte. Le nom de la ressource est défini comme la valeur name ayant le plus niveau dans la spécification.

  • Si deux comptes différents lient des ressources portant le même nom et le même type à une collaboration, cela est autorisé. La spécification de la collaboration affichera des ressources nommées de la même manière, mais le système saura quelle ressource est destinée. La ressource portant ce nom est utilisée à partir du compte qui a associé la ressource à la collaboration.

Exemple

Cet exemple crée un registre personnalisé, y enregistre un modèle et accorde un accès en lecture à ce registre par le biais d’un nouveau rôle. Les utilisateurs ayant ce rôle peuvent lier des modèles de ce registre à une collaboration.

-- Create a custom registry that can hold templates.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.CREATE_REGISTRY(
  'SALES',
  'TEMPLATE'
);

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_TEMPLATE(
'SALES',
$$
api_version: 2.0.0
spec_type: template
name: alice_only_template
version: v1
type: sql_analysis
description: Joins two tables on hashed email and counts matches grouped by status.
template:
  SELECT t1.status, COUNT(*)
    FROM IDENTIFIER( {{ source_table[0] }} ) AS t1
    JOIN IDENTIFIER( {{ source_table[1] }} ) AS t2
    ON t1.hashed_email_b64_encoded = t2.hashed_email_b64_encoded
    GROUP BY t1.status;
$$
);

-- Create a role and grant it access to the registry.
CREATE ROLE MARKETING_USERS;
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.ADMIN.GRANT_PRIVILEGE_ON_OBJECT_TO_ROLE(
  'READ',
  'REGISTRY',
  'SALES',
  'MARKETING_USERS'
);

-- Grant access to the registry for a user by assigning the role.
GRANT ROLE MARKETING_USERS to USER willy_loman;