データの登録¶
このトピックでは、 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 権限が必要です。
データベース、スキーマ、およびオブジェクトは、 Clean rooms UI または:ref:Clean rooms API <label-cleanrooms_register_api> を使用して登録できます。Clean rooms UIを使用する方が簡単ですが、ACCOUNTADMINロールが必要です。開発者APIsを使用すると、ACCOUNTADMINロールを使用せずに、OWNERSHIP権限を持つオブジェクトを登録することができます。
重要
データベースやスキーマを登録しても、登録後に追加されたオブジェクトは登録されません。新しいオブジェクトを個別に登録するか、Clean rooms UIを使用して Admin > Snowflake Admin > Database Registration に移動し、 Resync を選択する必要があります。
自分のアカウントで登録したデータ以外はリンクできません。つまり、プロバイダーはコンシューマーが登録したデータをリンクできず、コンシューマーはプロバイダーが登録したデータをリンクできません。データがclean roomにリンクされると、リンク先の設定(結合ポリシーや列ポリシーなど)に従い、clean roomにアクセスできる人なら誰でもアクセスできます。
Clean rooms UIを使用してデータベース、スキーマ、またはオブジェクトを登録するには、以下の手順に従います。
アカウント管理者としてClean rooms UI にサインインし、次のいずれかの手順を実行します。
管理アカウントを使用している場合は、 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 rooms APIを使用して、データベース、スキーマ、およびオブジェクトをプログラムで登録します。オブジェクトを登録するには、MANAGE GRANTS権限が必要であることに注意。
外部テーブル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も更新する必要があります。
削除されたデータに依存するコラボレーターからのクエリは、次回実行されたときに失敗します。
アカウントに登録されているオブジェクトの登録を解除します:
アカウント管理者としてClean rooms UI にサインインし、次のいずれかの手順を実行します。
管理アカウントを使用している場合は、 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テーブルを有効にすると、他のテーブルと同じように登録、リンク、使用できます。
外部テーブルとアイスバーグ テーブルを有効にするプロセスは、Clean rooms UIとClean rooms APIのどちらを使用してクリーンルームを管理しているかによって異なります。
外部テーブルとIcebergの要件¶
プロバイダーアカウントと、コンシューマーアカウントの両方から、外部テーブルとIcebergテーブルを有効にし、外部テーブルまたはIcebergテーブルにリンクするclean roomの使用を完全に許可する必要があります。
clean roomを管理アカウントと共有する場合、プロバイダーは常に外部テーブルとアイスバーグIcebergテーブルを有効にする必要があります。 これは、管理アカウントが常に外部テーブルを使用するためです。
プロバイダーとコンシューマーが異なるリージョンにいる場合、 コンシューマーだけが外部テーブルまたはIcebergテーブルをclean roomにリンクできます。
Clean rooms UIは、アカウントレベルで外部テーブルとアイスバーグテーブルをコントロールします。
警告
コンシューマーアカウントがこの機能を有効にしていなければ、コンシューマーは外部テーブルまたはIcebergテーブルにリンクしているclean roomからブロックされるか、またはいずれかのタイプのテーブルにリンクしている、参加済みのclean roomを編集できなくなります(実行はできます)。
DCR 管理者は、プロバイダーアカウントとコンシューマーアカウントの両方で、以下の手順を踏む必要があります:
アカウント管理者としてClean rooms UI にサインインし、次のいずれかの手順を実行します。
管理アカウントを使用している場合は、 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での使用が可能になります。
コードでは、外部テーブルとアイスバーグテーブルをアカウントレベル と 外部テーブルまたはアイスバーグテーブルにリンクする各クリーンルームの 両方で 有効にする必要があります。Clean rooms UIで外部テーブルとIcebergテーブルを有効にしている場合は、コードで有効にする必要はありません(ここに記載されている手順を踏む必要はありません)。
警告
一方のアカウントだけがこの機能を有効にし、外部テーブルまたは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();
注釈
Clean rooms UIで作成された既存のクリーンルームは、この方法の影響を受けません。Clean rooms UIを使用して作成された既存のクリーンルームを更新するには、次のステップに示すように、個別にコードで有効にするか、Clean rooms UIを使用してクリーンルームを有効にする必要があります。
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テーブルが有効になると、コラボレーターはこれらのテーブルを他のテーブルと同じように登録およびリンクすることができます。