データの登録¶
このトピックでは、 Snowflake Data Clean Room にリンクできるようにデータを登録する方法について説明します。
サポートされているオブジェクト¶
以下のオブジェクトタイプでclean roomへのリンクが可能です:
テーブル
動的テーブル
ビュー
マテリアライズドビュー
セキュアビュー。さらに、セキュアビューの所有者は SAMOOHA_APP_ROLE ロールでなければなりません。
注釈
†外部テーブルとIceberg テーブルを、clean roomで使用する前に 有効にする必要があります 。
データオブジェクトの登録¶
ユーザーがデータを Snowflake Data Clean Room にリンクする前に、まずデータが 登録されている 必要があります。データを登録すると、オブジェクトに対する USAGE と SELECT の権限が SAMOOHA_APP_ROLE に付与されます。これは、clean room環境からデータにアクセスするために使用されます。データベースやスキーマを登録すると、そのすべての子オブジェクトも登録されます。オブジェクトにリンクするには、そのオブジェクトに対する MANAGE GRANTS 権限が必要です。
You can register databases, schemas, and objects using the Clean rooms UI or the Clean rooms API. Using the Clean rooms UI is simpler, but requires that you have the ACCOUNTADMIN role. Using the developer APIs, you can register any object on which you have OWNERSHIP privilege without using the ACCOUNTADMIN role.
重要
Registering a database or schema does not register objects added after the registration. You must either register the new object individually or use the Clean rooms UI to navigate to Admin > Snowflake Admin > Database Registration and select Resync.
自分のアカウントで登録したデータ以外はリンクできません。つまり、プロバイダーはコンシューマーが登録したデータをリンクできず、コンシューマーはプロバイダーが登録したデータをリンクできません。データがclean roomにリンクされると、リンク先の設定(結合ポリシーや列ポリシーなど)に従い、clean roomにアクセスできる人なら誰でもアクセスできます。
Follow the steps below to register a database, schema, or object using the Clean rooms UI:
Sign in to the Clean rooms UI as an account administrator and then take one of the following steps:
管理アカウントを使用している場合は、 Admin > My Account を選択します。
Snowflakeアカウントを使用している場合は、 Admin > Snowflake Admin を選択し、 ACCOUNTADMIN ロールを持つユーザーとしてSnowflakeにサインインします。
Admin > Snowflake Admin を選択します。
Log in to Snowflake を選択し、 ACCOUNTADMIN ロールを持つユーザーとして認証します。
アカウントで外部テーブルまたはIcebergテーブルを有効にするには、 External & Iceberg Tables トグルを有効にします。
Access management for Snowflake objects セクションで、 Edit を選択し、データベース、スキーマ、またはオブジェクトを選択して、このアカウントのユーザーがデータをリンクすることを可能にします。
Save を選択します。
Use the Clean rooms API to register databases, schemas, and objects programmatically. Note that you need MANAGE GRANTS privilege on an object to register it.
外部テーブルIcebergテーブルは、 、他のオブジェクトタイプとは異なる方法で登録されます。
オブジェクトの登録や登録解除に、以下のプロシージャを使用できます:
オブジェクト型 |
登録 |
登録解除 |
|---|---|---|
データベース |
|
|
スキーマ |
|
|
管理アクセススキーマ |
|
|
その他のサポートされているオブジェクトタイプ |
|
|
例:
USE ROLE <ROLE-WITH-MANAGE-GRANTS-PRIVILEGE>
CALL samooha_by_snowflake_local_db.library.register_schema(['MY_DB.MY_SCHEMA']);
Snowflakeポリシーが適用されたテーブルまたはビューの登録¶
Snowflakeポリシーが適用されたデータをリンクしたい場合、Snowflakeポリシーがソースデータとは異なるデータベースに格納されている場合は、クリーンルームにポリシーデータベースの参照使用を許可する必要があります。これは、1アカウントにつき1回、または1クリーンルームにつき1回行うことができます。
アカウントごとに1回、参照使用を許可する¶
データベースへの参照使用をアカウントごとに一度だけ許可し、クリーンルームごとに自動的に許可するには、次の SQLコマンドを実行して、 SAMOOHA_APP_ROLEに参照使用を許可します。データベースのプレースホルダーをデータベース名に置き換えてください。
GRANT REFERENCE_USAGE ON DATABASE <database_name>
TO ROLE SAMOOHA_APP_ROLE
WITH GRANT OPTION;
クリーンルームごとに1回の参照利用を認める¶
もし、アカウント内の全てのクリーンルームにではなく、クリーンルーム毎にデータベースへの参照使用を許可したい場合は、以下の SQLコマンドを実行してください。データベース名と クリーンルーム ID のプレースホルダーを適切な値に置き換えます。
GRANT REFERENCE_USAGE ON DATABASE <database_name>
TO SHARE IN APPLICATION PACKAGE SAMOOHA_CLEANROOM_<clean_room_ID>;
データオブジェクトの登録解除¶
テーブルを一度clean roomにリンクすると、削除できなくなります。ただし、アカウントでオブジェクトの登録を解除することで、そのアカウント内のclean roomからのアクセス許可を削除できます。
clean roomやアカウントからデータを削除したい場合、基になるオブジェクトを削除することは、clean roomのエラーの原因となるので 避けてください。以下のいずれかの方法で、オブジェクトの登録を解除してください。
アカウントからオブジェクトの登録を解除するときは、このデータを使用して作成したclean roomも更新する必要があります。
削除されたデータに依存するコラボレーターからのクエリは、次回実行されたときに失敗します。
アカウントに登録されているオブジェクトの登録を解除します:
Sign in to the Clean rooms UI as an account administrator and then take one of the following steps:
管理アカウントを使用している場合は、 Admin > My Account を選択します。
Snowflakeアカウントを使用している場合は、 Admin > Snowflake Admin を選択し、 ACCOUNTADMIN ロールを持つユーザーとしてSnowflakeにサインインします。
Admin > Snowflake Admin を選択します。
Log in to Snowflake を選択し、 ACCOUNTADMIN ロールを持つユーザーとして認証します。
アカウントで外部テーブルまたはIcebergテーブルを有効にするには、 External & Iceberg Tables トグルを有効にします。
Access management for Snowflake objects セクションで、 Edit を選択し、データベース、スキーマ、またはオブジェクトの選択を解除して、このアカウントのユーザーがそのデータを利用できないようにします。
Save を選択します。
このデータを基に作成されたclean roomを更新してください。
API で、適切なプロシージャを呼び出して、アカウントからオブジェクトの登録を解除します:
library.unregister_dblibrary.unregister_schemalibrary.unregister_managed_access_schemalibrary.unregister_objects
外部テーブルと Apache Iceberg™ テーブルの有効化¶
外部テーブルとIcebergテーブルをclean roomにリンクするには、まず外部テーブルとIceberg テーブルを使用できるようにアカウントを構成する必要があります。外部テーブルとIcebergテーブルを有効にすると、他のテーブルと同じように登録、リンク、使用できます。
The process for enabling external and Iceberg tables varies, depending on whether you are managing the clean room using the Clean rooms UI or the Clean rooms API.
外部テーブルとIcebergの要件¶
プロバイダーアカウントと、コンシューマーアカウントの両方から、外部テーブルとIcebergテーブルを有効にし、外部テーブルまたはIcebergテーブルにリンクするclean roomの使用を完全に許可する必要があります。
clean roomを管理アカウントと共有する場合、プロバイダーは常に外部テーブルとアイスバーグIcebergテーブルを有効にする必要があります。 これは、管理アカウントが常に外部テーブルを使用するためです。
プロバイダーとコンシューマーが異なるリージョンにいる場合、 コンシューマーだけが外部テーブルまたはIcebergテーブルをclean roomにリンクできます。
The Clean rooms UI controls external and Iceberg tables at the account level.
警告
コンシューマーアカウントがこの機能を有効にしていなければ、コンシューマーは外部テーブルまたはIcebergテーブルにリンクしているclean roomからブロックされるか、またはいずれかのタイプのテーブルにリンクしている、参加済みのclean roomを編集できなくなります(実行はできます)。
DCR 管理者は、プロバイダーアカウントとコンシューマーアカウントの両方で、以下の手順を踏む必要があります:
Sign in to the Clean rooms UI as an account administrator and then take one of the following steps:
管理アカウントを使用している場合は、 Admin > My Account を選択します。
Snowflakeアカウントを使用している場合は、 Admin > Snowflake Admin を選択し、 ACCOUNTADMIN ロールを持つユーザーとしてSnowflakeにサインインします。
External & Iceberg Tables トグルを有効にします。これにより、 UIで作成されたclean roomと、 APIで作成されたclean roomの両方で、この機能が有効になります。
外部テーブルとIcebergテーブルを、管理者の Access management for Snowflake objects パネルから選択できるようになり、他のオブジェクトと同じように、clean roomでの使用が可能になります。
In code, you must enable external and Iceberg tables at both the account level and also for each clean room that links in external or Iceberg tables. If you have enabled external and Iceberg tables in the Clean rooms UI, you do not need to enable them in code (you don't need to take the steps listed here).
警告
一方のアカウントだけがこの機能を有効にし、外部テーブルまたはIcebergテーブルにリンクしている場合、もう一方のアカウントから既存のテンプレートを実行することはできますが、外部テーブルとIcebergテーブルが、そのアカウントとclean roomの両方で許可されるまで、clean roomを変更することはできません。
新しいclean roomで外部テーブルまたはIcebergテーブルを有効にし、使用するには以下の手順に従います:
まず、 ACCOUNTADMIN ロールを持つユーザーが、プロバイダーアカウントとコンシューマーアカウントの両方で、外部テーブルとIcebergテーブルをclean room環境全体で有効にします:
USE ROLE ACCOUNTADMIN; CALL samooha_by_snowflake_local_db.library.enable_external_tables_on_account();
注釈
Existing clean rooms created with the Clean rooms UI are not affected by this method. To update existing clean rooms created using the Clean rooms UI you must either enable them in code individually, as shown in the next steps, or else enable clean rooms using the Clean rooms UI, which enables the feature for all existing clean rooms.
A provider enables external and Iceberg tables for their clean room. Note that this triggers a security scan which, if successful, generates a new clean room version, so you will need to update the default release directive.
USE ROLE SAMOOHA_APP_ROLE; CALL samooha_by_snowflake_local_db.provider.enable_external_tables_for_cleanroom( $cleanroom_name); -- Call until scan is complete. CALL samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name); -- When scan is successful, update with patch version mentioned in return value from enable_external_tables_for_cleanroom. CALL samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '<PATCH_VERSION>');
コンシューマー も、同じclean room内で外部テーブルとIcebergテーブルの使用を可能にする必要があります:
USE ROLE SAMOOHA_APP_ROLE; CALL samooha_by_snowflake_local_db.consumer.enable_external_tables_for_cleanroom( $cleanroom_name);
clean roomで外部テーブルとIcebergテーブルが有効になると、コラボレーターはこれらのテーブルを他のテーブルと同じように登録およびリンクすることができます。