レジストリ¶
テンプレート、データ提供、その他のリソースをコラボレーションに追加するには、そのリソースを レジストリ に登録する必要があります。レジストリは、リソースを格納するアカウントレベルのコンテナです。リソースが登録されると、そのレジストリにアクセスできるアカウントの誰もがコラボレーションにリソースを追加できるようになります。レジストリは特定のコラボレーションにリンクされませんが、レジストリ内のリソースはそのアカウントの0個以上のコラボレーションにリンクできます。
各Snowflakeアカウントは、デフォルトのレジストリをサポートしています。アカウント用に追加のカスタムレジストリを作成できます。カスタムレジストリは、リソースへのアクセスをグループ化および管理するのに優れた方法です。例えば、販売データ用に1つのカスタムレジストリを作成し、支出データ用に別のカスタムレジストリを作成し、 RBAC ロール経由でこれらのレジストリへのアクセスを適切なユーザーに付与することができます。
レジストリに関する主なルールは次のとおりです。
各カスタムレジストリは、単一のリソースタイプ(テンプレート、データ提供など)をサポートしています。データ型はレジストリの作成時に指定されます。デフォルトのレジストリは、すべてのリソースタイプをサポートしています。
アカウントで作成できるカスタムレジストリの数に制限はありません。
リソースを登録するときに、任意のレジストリ名パラメーターを使用してカスタムレジストリを指定できます。カスタムレジストリを指定しない場合、リソースはアカウントのデフォルトレジストリに登録されます。
すべてのユーザーは、アカウントのデフォルトレジストリにアクセスできます。ただし、カスタムレジストリは、最初は作成者にのみ公開されており、追加のユーザーには
GRANT_PRIVILEGE_ON_OBJECT_TO_ROLEを呼び出して明示的にアクセスを付与する必要があります。アカウントは、同じリソースタイプを格納する複数のレジストリを持つことができます。
レジストリに最大リソース数はありません。
リソースは、その種類のリソースについて、そのアカウントのすべてのレジストリで一意の名前を持っている必要があります。例えば、同じアカウントに
salesという名前のテンプレートとsalesという名前のデータ提供を持つことができますが、同じアカウントの同じレジストリ、または異なるレジストリにsalesという名前のテンプレートを2つ持つことはできません。リソース名は仕様で最上位のname値として定義されています。リソースをコラボレーションにリンクすると、そのリソースは仕様に従ってアクセスできるすべての人に表示されます。リソースを含んでいるレジストリへのアクセスは必要ありません。
2つの異なるアカウントが同じ名前とタイプのリソースを登録する場合、それは許可されます。コラボレーション仕様には同じ名前のリソースが表示されますが、システムはどのリソースが意図されているかを知ることができます。その名前のリソースは、コラボレーションにリソースを追加したアカウントから使用されます。
例¶
この例では、カスタムレジストリを作成し、そこにデータ提供を登録し、新しいロールを通じてそのレジストリへの読み取りアクセスを付与します。
-- Create a custom registry that can hold data offerings.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.CREATE_REGISTRY(
'SALES',
'DATA_OFFERING'
);
-- Add a data offering to the custom registry.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_DATA_OFFERING(
'SALES',
$$
api_version: 2.0.0
spec_type: data_offering
version: v1
name: FL_SALES
datasets:
- alias: customers_1
data_object_fqn: SALES_DB.PUBLIC.FL_DATA
allowed_analyses: template_only
schema_and_template_policies:
company_name:
category: passthrough
total_sales:
category: passthrough
$$
);
-- 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',
$collaboration_name,
'MARKETING_USERS'
);
-- Grant access to the registry for a user by assigning the role.
GRANT ROLE MARKETING_USERS to USER willy_loman;