AWS Data Exchange でのライセンス付き Amazon Redshift データの共有 - Amazon Redshift

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 からデータセットにアクセスして分析できます。

AWS Data Exchange データ共有が使用可能なデータ製品の検出と、Amazon Redshift データへのクエリを行うコンシューマーは、以下のステップに従います。

  1. AWS Data Exchange コンソール上で、AWS Data Exchangeデータ共有が含まれるデータ製品を検出しサブスクライブします。

    サブスクリプションが開始されると、AWS Data Exchange データ共有が含まれるデータセットにアセットとしてインポートされたライセンス付き Amazon Redshift データにアクセスできます。

    AWS Data Exchange データ共有が含まれるデータ製品の使用開始方法に関する詳細については、「AWS Data Exchange でのデータ製品のサブスクライブ」を参照してください。

  2. 必要に応じて、Amazon Redshift コンソールで Amazon Redshift クラスターを作成します。

    クラスターの作成方法については、「クラスターの作成」を参照してください。

  3. 利用可能なデータ共有を一覧表示し、各データ共有のコンテンツを表示します。詳細については、「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
  4. データ共有を参照するローカルデータベースを作成します。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 コンソールを使用して、データ共有からデータベースを作成することもできます。詳細については、「データ共有からのデータベースの作成」を参照してください。

  5. (オプション) 外部スキーマを作成して、コンシューマークラスターにインポートされたコンシューマデータベース内の特定のスキーマを参照し、詳細なアクセス許可を割り当てます。詳細については、「CREATE EXTERNAL SCHEMA」を参照してください。

    CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
  6. 必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスター内のユーザーまたはロールに付与します。詳細については、「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;
  7. データ共有内の共有オブジェクト内のデータをクエリします。

    コンシューマークラスター上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスター内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、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;