AWS Data Exchange でのライセンス付き Amazon Redshift データの共有
作成した AWS Data Exchange データ共有を AWS Data Exchange 製品に追加する際、プロバイダーは Amazon Redshift のデータにライセンスを付与できます。これにより、AWS Data Exchangeへの有効なサブスクリプションを持つコンシューマーが、Amazon Redshift 内の最新データの検出や、サブスクライブ、およびクエリを行えるようになります。
AWS Data Exchange 製品に追加された AWS Data Exchange データ共有を使用すると、コンシューマーはサブスクリプションの開始時に、自動的に製品のデータ共有にアクセスできるようになり、サブスクリプションが有効である限り、そのアクセス権を保持します。
プロデューサーとしての AWS Data Exchange データ共有の使用
Amazon Redshift では、プロデューサーは、データ共有を作成および管理することで、ライブデータ製品を AWS Data Exchange と共有できます。
プロデューサクラスターの管理者が、Amazon Redshift コンソールで AWS Data Exchange データ共有を管理する場合は、以下のステップに従います。
AWS Data Exchange 上で同じデータを参照するためのデータ共有をクラスター内で作成し、AWS Data Exchangeに対するアクセス権を、作成したデータ共有に付与します。
クラスターのスーパーユーザーとデータベースの所有者は、データ共有を作成できます。各データ共有は、作成時にデータベースに関連付けられます。そのデータベースのオブジェクトのみがそのデータ共有で共有できます。同じデータベース上に、同じ粒度または異なる粒度のオブジェクトを使用して、複数のデータ共有を作成できます。クラスター上に作成できるデータ共有の数に制限はありません。
Amazon Redshift コンソールを使用してデータ共有を作成することもできます。詳細については、「データ共有の作成」を参照してください。
CREATE DATASHARE ステートメントを実行する際、MANAGEDBY ADX オプションを使用して、データ共有へのアクセスを AWS Data Exchange に暗黙的に付与します。これにより、対象のデータ共有を AWS Data Exchange が管理することを指示します。MANAGEDBY ADX オプションは、新しいデータ共有を作成する場合にのみ使用できます。ALTER DATASHARE ステートメントを使用して、既存のデータ共有を変更しながら MANAGEDBY ADX オプションを追加することはできません。MANAGEDBY ADX オプションを使用して作成したデータ共有に対しては、AWS Data Exchangeのみがアクセスおよび管理できます。
CREATE DATASHARE salesshare [[SET] MANAGEDBY [=] {ADX} ];
データ共有にオブジェクトを追加します。プロデューサー管理者は、AWS Data Exchangeデータ共有内で使用可能なデータ共有オブジェクトの管理を継続します。
データ共有にオブジェクトを追加するには、オブジェクトを追加する前にスキーマを追加します。スキーマを追加する場合、Amazon Redshift はその下にすべてのオブジェクトを追加するわけではありません。それらを明示的に追加する必要があります。詳細については、「ALTER DATASHARE」を参照してください。
ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
データ共有にビューを追加することもできます。
CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;
ALTER DATASHARE を使用して、特定のスキーマ内のスキーマ、テーブル、ビュー、および関数を共有します。スーパーユーザー、データ共有の所有者、またはデータ共有に対する ALTER または ALL 許可を持つユーザーは、データ共有を変更して、それに対するオブジェクトの追加または削除を実行できます。ユーザーは、データ共有に対してオブジェクトの追加または削除を行う許可を持っている必要があります。ユーザーは、オブジェクトの所有者である、またはオブジェクトに対する SELECT、USAGE、もしくは ALL 許可を持っている必要もあります。
スキーマを指定して作成された新しいテーブル、ビュー、または SQL ユーザー定義関数 (UDF) をデータ共有に追加するには、INCLUDENEW 句を使用します。データ共有とスキーマの各ペアについて、このプロパティを変更できるのはスーパーユーザーのみです。
ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
Amazon Redshift コンソールを使用して、データ共有でオブジェクトを追加または削除することもできます。詳細については、「データ共有へのデータ共有オブジェクトの追加」、「データ共有からのデータ共有オブジェクトの削除」、および「AWS Data Exchange データ共有の編集」を参照してください。
データ共有へのアクセスを AWS Data Exchange に対し承認するには、以下のいずれかを実行します。
aws redshift authorize-data-share
API でADX
キーワードを使用して、データ共有へのアクセスを AWS Data Exchange に対し明示的に許可します。これにより、AWS Data Exchangeはサービスアカウント内のデータ共有を認識できるようになり、コンシューマーのデータ共有への関連付けを管理することが可能になります。aws redshift authorize-data-share --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare --consumer-identifier ADX
API の
AuthorizeDataShare
およびDeauthorizeDataShare
で条件付きキーConsumerIdentifier
を使用すると、AWS Data Exchangeによる (IAM ポリシー内の) これら 2 つの API への呼び出しを、明示的に許可または拒否できます。{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "*", "Condition": { "StringEqualsIgnoreCase": { "redshift:ConsumerIdentifier": "ADX" } } } ] }
Amazon Redshift コンソールを使用して、AWS Data Exchange データ共有に関する認可を許可または削除します。詳細については、「データ共有の承認と承認の取り消し」を参照してください。
オプションで、データ共有を AWS Data Exchange データセットにインポートするときの AWS Data Exchange データ共有へのアクセスを暗黙的に認可することもできます。
AWS Data Exchange データ共有へのアクセス権限を削除するには、
aws redshift deauthorize-data-share
(API) のオペレーションにおいてキーワードADX
を指定します。これにより、サービスアカウント内のデータ共有を認識することと、データ共有からの関連付け削除の管理を行うことを AWS Data Exchange に許可します。aws redshift deauthorize-data-share --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare --consumer-identifier ADX
クラスターで作成されたデータ共有を一覧表示し、データ共有の内容を調べます。
次の例は、SalesShare という名前のデータ共有の情報を表示します。詳細については、DESC DATASHAREおよびSHOW DATASHARESを参照してください。
DESC DATASHARE salesshare; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+------------------- 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_category_redshift| 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | schema | public | t 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | view | public.sales_data_summary_view |
次の例は、プロデューサークラスター内のアウトバウンドデータ共有を表示します。
SHOW DATASHARES LIKE 'sales%';
出力は次の例のようになります。
share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+--------------------------------------- salesshare | 100 | dev | | OUTBOUND | 2020-12-09 02:27:08 | True | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
詳細については、「DESC DATASHARE」および「SHOW DATASHARES」を参照してください。
SVV_DATASHARES、SVV_DATASHARE_CONSUMERS、および SVV_DATASHARE_OBJECTS を使用して、データ共有、そのデータ共有内のオブジェクト、およびデータ共有のコンシューマーを表示することもできます。
データ共有を削除します。他の AWS アカウント と共有している AWS Data Exchange データ共有は、DROP DATASHARE ステートメントを使用して削除しないことをお勧めします。これらのアカウントはデータ共有へのアクセス権を失います。このアクションを元に戻すことはできません。これは、AWS Data Exchangeにおけるデータ製品の提供規約に違反する可能性があります。AWS Data Exchange のデータ共有を削除する場合は、「DROP DATASHARE の使用に関する注意事項」を参照してください。
次の例では、SalesShare という名前のデータ共有を削除します。
DROP DATASHARE salesshare; ERROR: Drop of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value '620c871f890c49'
AWS Data Exchange データ共有の削除を許可するには、datashare_break_glass_session_var 変数を設定した上で、DROP DATASHARE ステートメントを再度実行します。AWS Data Exchange のデータ共有を削除する場合は、「DROP DATASHARE の使用に関する注意事項」を参照してください。
Amazon Redshift コンソールを使用してデータ共有を削除することもできます。詳細については、「アカウント内で作成された AWS Data Exchange データ共有の削除」を参照してください。
ALTER DATASHARE コマンドを使用すると、データ共有から任意の時点でオブジェクトを削除できます。REVOKE USAGE ON を使用すると、特定のコンシューマーについて、データ共有への許可を取り消すことができます。このコマンドは、データ共有内にあるオブジェクトの USAGE 許可を取り消し、すべてのコンシューマークラスターへのアクセスを即座に停止します。アクセス許可が取り消されたあとは、データベースやテーブルに関するものを含め、データ共有およびメタデータを一覧表示するためのクエリは、共有されたオブジェクトを返さなくなります。
ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「AWS Data Exchange データ共有の編集」を参照してください。
AWS Data Exchangeデータ共有で、GRANT USAGE を付与または取り消す。AWS Data Exchangeデータ共有では、GRANT USAGE を付与または取り消すことはできません。次に、AWS Data Exchange が管理するデータ共有への GRANT USAGE 許可が AWS アカウント に付与された場合に発生する、エラーの例を示します。
CREATE DATASHARE salesshare MANAGEDBY ADX;
GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '012345678910'; ERROR: Permission denied to add/remove consumer to/from datashare salesshare. Datashare consumers are managed by ADX.
AWS Data Exchange コンソールでデータ共有製品を作成および公開するプロデューサクラスターの管理者は、以下のステップに従います。
AWS Data Exchange データ共有が作成されると、プロデューサーが新しいデータセットを作成し、アセットのインポートとリビジョンの作成を行って、新しい製品を作成して公開します。
データセットの作成には、Amazon Redshift コンソールを使用します。詳細については、「AWS Data Exchange でのデータセットの作成」を参照してください。
詳細については、「Providing data products on AWS Data Exchange」を参照してください。
コンシューマーとしての AWS Data Exchange データ共有の使用
Amazon Redshift では、データのコピーを保存または管理することなく、AWS Data Exchange からデータセットにアクセスして分析できます。
AWS Data Exchange データ共有が使用可能なデータ製品の検出と、Amazon Redshift データへのクエリを行うコンシューマーは、以下のステップに従います。
AWS Data Exchange コンソール上で、AWS Data Exchangeデータ共有が含まれるデータ製品を検出しサブスクライブします。
サブスクリプションが開始されると、AWS Data Exchange データ共有が含まれるデータセットにアセットとしてインポートされたライセンス付き Amazon Redshift データにアクセスできます。
AWS Data Exchange データ共有が含まれるデータ製品の使用開始方法に関する詳細については、「AWS Data Exchange でのデータ製品のサブスクライブ」を参照してください。
必要に応じて、Amazon Redshift コンソールで Amazon Redshift クラスターを作成します。
クラスターの作成方法については、「クラスターの作成」を参照してください。
利用可能なデータ共有を一覧表示し、各データ共有のコンテンツを表示します。詳細については、「DESC DATASHARE」および「SHOW DATASHARES」を参照してください。
次の例では、指定されたプロデューサー名前空間のインバウンドデータ共有の情報を表示します。DESC DATASHARE をコンシューマークラスターの管理者として実行する際に、インバウンドデータ共有を表示するには、ACCOUNT および NAMESPACE のオプションを指定する必要があります。
DESC DATASHARE salesshare of ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------ 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | schema | public | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | view | public.sales_data_summary_view |
クラスターのスーパーユーザーのみがこれを行うことができます。SVV_DATASHARES を使用してデータ共有を表示し、SVV_DATASHARE_OBJECTS を使用してデータ共有内のオブジェクトを表示することもできます。
次の例では、コンシューマークラスター内のインバウンドデータ共有を表示します。
SHOW DATASHARES LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+-------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
データ共有を参照するローカルデータベースを作成します。AWS Data Exchange データ共有のためにローカルデータベースを作成するには、ACCOUNT および NAMESPACE オプションを指定する必要があります。詳細については、「CREATE DATABASE」を参照してください。
CREATE DATABASE sales_db FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
ローカルデータベース内のオブジェクトへのアクセスをより細かく制御する場合は、データベースの作成時に WITH PERMISSIONS 句を使用します。これにより、ステップ 6 でデータベース内のオブジェクトにオブジェクトレベルのアクセス許可を付与できます。
CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
SVV_REDSHIFT_DATABASES ビューにクエリを実行すると、データ共有から作成したデータベースを確認できます。これらのデータベースに直接接続したり、コンシューマークラスターのローカルデータベースに接続し、データベース間クエリを実行して、データ共有データベースのデータをクエリしたりすることができます。既存のデータ共有から作成されたデータベースオブジェクトの上にデータ共有を作成することはできません。ただし、コンシューマークラスター上の別のテーブルにデータをコピーし、必要な処理を実行してから、作成された新しいオブジェクトを共有できます。
Amazon Redshift コンソールを使用して、データ共有からデータベースを作成することもできます。詳細については、「データ共有からのデータベースの作成」を参照してください。
(オプション) 外部スキーマを作成して、コンシューマークラスターにインポートされたコンシューマデータベース内の特定のスキーマを参照し、詳細なアクセス許可を割り当てます。詳細については、「CREATE EXTERNAL SCHEMA」を参照してください。
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスター内のユーザーまたはロールに付与します。詳細については、「GRANT」または「REVOKE」を参照してください。
GRANT USAGE ON DATABASE sales_db TO Bob;
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
WITH PERMISSIONS を使用することなくデータベースを作成している場合は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。場合によっては、データ共有から作成されたデータベースオブジェクトのサブセットに対して、詳細なコントロールが必要になります。その場合は、データ共有内の特定のスキーマを指す外部スキーマ参照を作成し (前出のステップを参照)、スキーマレベルの詳細なアクセス許可を提供できます。
また、共有オブジェクトの上に遅延バインディングビューを作成し、これらを使用して詳細なアクセス許可を割り当てることもできます。また、プロデューサークラスターで必要な粒度で追加のデータ共有を作成するよう検討することもできます。データ共有から作成されたデータベースへのスキーマ参照は、必要な数を作成できます。
ステップ 4 で WITH PERMISSIONS を使用してデータベースを作成した場合は、共有データベース内のオブジェクトにオブジェクトレベルのアクセス許可を割り当てる必要があります。USAGE アクセス許可のみを持つユーザーは、追加のオブジェクトレベルのアクセス許可が付与されるまで、WITH PERMISSIONS を使用して作成されたデータベース内のオブジェクトにはアクセスできません。
GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
データ共有内の共有オブジェクト内のデータをクエリします。
コンシューマークラスター上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスター内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、SHOW コマンド、または SVV_ALL および SVV_REDSHIFT ビューを使用します。
プロデューサークラスターには、各スキーマ内のデータベース、テーブル、およびビューに多数のスキーマが含まれる場合があります。コンシューマー側のユーザーは、データ共有を通じて利用可能になったオブジェクトのサブセットのみを表示できます。これらのユーザーは、プロデューサークラスターからのメタデータ全体を表示することはできません。このアプローチは、データ共有による詳細なメタデータセキュリティの制御を提供します。
引き続きローカルクラスターのデータベースに接続します。ただし、3 つの部分からなる database.schema.table 表記を使用して、データ共有から作成されたデータベースとスキーマから読み込むこともできるようになりました。表示されているすべてのデータベースにまたがるクエリを実行できます。これらは、クラスター上のローカルデータベースでも、データ共有から作成されたデータベースでもかまいません。または、これらのコンシューマーデータベースに直接接続し、部分表記で共有オブジェクトに対してクエリを実行できます。
完全な資格を使用してデータにアクセスできます。詳細については、「クロスデータベースクエリの例」を参照してください。
SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5; salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime ---------+--------+----------+---------+---------+--------+---------+-----------+------------+--------------------- 1 | 1 | 36861 | 21191 | 7872 | 1875 | 4 | 728.00 | 109.20 | 2008-02-18 02:36:48 2 | 4 | 8117 | 11498 | 4337 | 1983 | 2 | 76.00 | 11.40 | 2008-06-06 05:00:16 3 | 5 | 1616 | 17433 | 8647 | 1983 | 2 | 350.00 | 52.50 | 2008-06-06 08:26:17 4 | 5 | 1616 | 19715 | 8647 | 1986 | 1 | 175.00 | 26.25 | 2008-06-09 08:38:52 5 | 6 | 47402 | 14115 | 8240 | 2069 | 2 | 154.00 | 23.10 | 2008-08-31 09:17:02
SELECT ステートメントは、共有オブジェクトに対してのみ使用できます。ただし、別のローカルデータベース内の共有オブジェクトからデータをクエリすることで、コンシューマークラスターにテーブルを作成できます。
クエリに加えて、コンシューマーは共有オブジェクトのビューを作成できます。遅延バインディングビューまたはマテリアライズドビューのみがサポートされます。Amazon Redshift は、共有データの通常のビューをサポートしていません。コンシューマーが作成するビューは、複数のローカルデータベースまたはデータ共有から作成されたデータベースにまたがることができます。詳細については、「CREATE VIEW」を参照してください。
// Connect to a local cluster database // Create a view on shared objects and access it. CREATE VIEW sales_data AS SELECT * FROM sales_db.public.tickit_sales_redshift WITH NO SCHEMA BINDING; SELECT * FROM sales_data;