

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# SQL インターフェイスでの読み取り専用のデータ共有の開始方法
<a name="getting-started-datashare-sql"></a>

Amazon Redshift では、Amazon Redshift クラスター間でデータを安全に共有できるため、データコンシューマーは、ライブデータへのクエリやアクセスをコピーまたは複製することなく行えます。データ共有を使用すると、共有するデータベースオブジェクトを参照するプロデューサー側のオブジェクトであるデータ共有を作成および設定できます。

AWS アカウントの内部またはその間で、あるいは AWS リージョン間で、異なる Amazon Redshift クラスターに置かれたデータを、読み取り目的で共有することができます。

**Topics**
+ [AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)
+ [Amazon Redshift データ共有でのビューの使用](datashare-views.md)
+ [データ共有へのデータレイクテーブルの追加](create-datashare-external-views.md)
+ [AWS アカウント間のデータの共有](across-account.md)
+ [AWS リージョン間のデータの共有](across-region.md)
+ [AWS Data Exchange でのライセンス付き Amazon Redshift データの共有](adx-getting-started.md)
+ [AWS Lake Formation マネージドデータ共有の開始方法](lf-getting-started.md)

# AWS アカウント 内のデータへの読み取りアクセスの共有
<a name="within-account"></a>

Amazon Redshift では、同じ AWS アカウント内の異なるデータベースユーザーまたはグループ間でデータへの読み取りアクセスを共有できます。この機能を使用すると、データへのアクセス許可をきめ細かなレベルで制御し、許可されたユーザーまたはグループのみが特定のデータセットを読み取ることができます。

## プロデューサー管理者またはデータベース所有者として読み取り目的でデータを共有する
<a name="share-producer"></a>

1. クラスターにデータ共有を作成します。詳細については、「[CREATE DATASHARE](r_CREATE_DATASHARE.md)」を参照してください。

   ```
   CREATE DATASHARE salesshare;
   ```

   クラスターのスーパーユーザーとデータベースの所有者は、データ共有を作成できます。各データ共有は、作成時にデータベースに関連付けられます。そのデータベースのオブジェクトのみがそのデータ共有で共有できます。同じデータベース上に、同じ粒度または異なる粒度のオブジェクトを使用して、複数のデータ共有を作成できます。クラスターが作成できるデータ共有の数に制限はありません。

   Amazon Redshift コンソールを使用してデータ共有を作成することもできます。詳細については、「[データ共有を作成する](datashare-creation.md#create-datashare-console)」を参照してください。

1. データ共有を操作するための権限を委任します。詳細については、「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   次の例では、`salesshare`上の `dbuser` にアクセス許可を付与しています。

   ```
   GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;
   ```

   クラスターのスーパーユーザーとデータ共有の所有者は、追加のユーザーに対してデータ共有の変更許可の付与または取り消しを実行できます。

1. データ共有にオブジェクトを追加したり、データ共有からオブジェクトを削除したりします。データ共有にオブジェクトを追加するには、オブジェクトを追加する前にスキーマを追加します。スキーマを追加する場合、Amazon Redshift はその下にすべてのオブジェクトを追加するわけではありません。これらは明示的に追加してください。詳細については、「[ALTER DATASHARE](r_ALTER_DATASHARE.md)」を参照してください。

   ```
   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 VIEW public.sales_data_summary_view;
   ```

   ALTER DATASHARE を使用して、特定のスキーマ内のスキーマ、テーブル、ビュー、および関数を共有します。スーパーユーザー、データ共有の所有者、またはデータ共有に対する ALTER または ALL 許可を持つユーザーは、データ共有を変更して、それに対するオブジェクトの追加または削除を実行できます。ユーザーは、データ共有に対してオブジェクトの追加または削除を行う許可を持っている必要があります。ユーザーは、オブジェクトの所有者である、またはオブジェクトに対する SELECT、USAGE、もしくは ALL 許可を持っている必要もあります。

   また、GRANT を使用してデータ共有にオブジェクトを追加することもできます。次の例では、以下の方法を示します。

   ```
   GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;
   ```

   この構文は機能的には `ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;` と同等です。

   スキーマを指定して作成された新しいテーブル、ビュー、または SQL ユーザー定義関数 (UDF) をデータ共有に追加するには、INCLUDENEW 句を使用します。データ共有とスキーマの各ペアについて、このプロパティを変更できるのはスーパーユーザーのみです。

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
   ```

   Amazon Redshift コンソールを使用して、データ共有でオブジェクトを追加または削除することもできます。詳細については、「[データ共有にデータ共有オブジェクトを追加する](datashare-creation.md#add-datashare-object-console)」、「[データ共有からのデータ共有オブジェクトの削除](manage-datashare-existing-console.md#remove-datashare-object-console)」、および「[アカウントで作成されたデータ共有の編集](manage-datashare-existing-console.md#edit-datashare-console)」を参照してください。

1. コンシューマーをデータ共有に追加するか、データ共有からコンシューマーを削除します。次の例では、コンシューマー名前空間を `salesshare` に追加しています。この名前空間は、アカウント内にあるコンシューマークラスターの名前空間ための、グローバルにユニークな識別子 (GUID) です。詳細については「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   ```
   GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   GRANT ステートメントでは、1 つのデータ共有コンシューマーにしか許可を付与できません。

   クラスターのスーパーユーザーおよびデータ共有オブジェクトの所有者、またはデータ共有に対する SHARE アクセス許可を持つユーザーは、コンシューマーをデータ共有に追加したり、データ共有からコンシューマーを削除したりできます。そのために、GRANT USAGE または REVOKE USAGE を使用します。

   現在表示されているクラスターの名前空間を検索するには、SELECT CURRENT\$1NAMESPACE コマンドを使用できます。同じ AWS アカウント内の異なるクラスターの名前空間を検索するには、Amazon Redshift コンソールのクラスター詳細ページにアクセスします。そのページで、新しく追加された名前空間フィールドを見つけます。

   また、Amazon Redshift コンソールを使用して、データ共有に対しデータコンシューマーを追加したり削除したりできます。詳細については、「[データ共有にデータコンシューマーを追加する](datashare-creation.md#add-data-consumer-console)」および「[データ共有からのデータコンシューマーの削除](manage-datashare-existing-console.md#remove-data-consumer-console)」を参照してください。

1. (オプション) データ共有にセキュリティ制限を追加します。次の例は、パブリック IP アクセスを持つコンシューマークラスターがデータ共有の読み取りを許可されていることを示しています。詳細については、「[ALTER DATASHARE](r_ALTER_DATASHARE.md)」を参照してください。

   ```
   ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;
   ```

   データ共有の作成後に、コンシューマーのタイプに関するプロパティを変更できます。例えば、特定のデータ共有からデータを使用するクラスターは、公開でアクセスできないように定義できます。データ共有で指定されたセキュリティ制限を満たさないコンシューマークラスターからのクエリは、クエリランタイムで拒否されます。

   Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「[アカウントで作成されたデータ共有の編集](manage-datashare-existing-console.md#edit-datashare-console)」を参照してください。

1. クラスターで作成されたデータ共有を一覧表示し、データ共有の内容を調べます。

   次の例は、`salesshare`という名前のデータ共有の情報を表示します。

   ```
   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](r_DESC_DATASHARE.md)」および「[SHOW DATASHARES](r_SHOW_DATASHARES.md)」を参照してください。

   [SVV\$1DATASHARES](r_SVV_DATASHARES.md)、[SVV\$1DATASHARE\$1CONSUMERS](r_SVV_DATASHARE_CONSUMERS.md)、および [SVV\$1DATASHARE\$1OBJECTS](r_SVV_DATASHARE_OBJECTS.md) を使用して、データ共有、そのデータ共有内のオブジェクト、およびデータ共有のコンシューマーを表示することもできます。

1. データ共有を削除します。詳細については、「[DROP DATASHARE](r_DROP_DATASHARE.md)」を参照してください。

   [DROP DATASHARE](r_DROP_DATASHARE.md) を使用して、いつでもデータ共有オブジェクトを削除できます。クラスターのスーパーユーザーとデータ共有の所有者は、データ共有を削除できます。

   次の例では、`salesshare`という名前のデータ共有を削除します。

   ```
   DROP DATASHARE salesshare;
   ```

   Amazon Redshift コンソールを使用してデータ共有を削除することもできます。詳細については、「[アカウント内で作成されたデータ共有の削除](manage-datashare-existing-console.md#delete-datashare-console)」を参照してください。

1. ALTER DATASHARE コマンドを使用すると、データ共有から任意の時点でオブジェクトを削除できます。REVOKE USAGE ON を使用すると、特定のコンシューマーについて、データ共有への許可を取り消すことができます。このコマンドは、データ共有内にあるオブジェクトの USAGE 許可を取り消し、すべてのコンシューマークラスターへのアクセスを即座に停止します。アクセス許可が取り消されたあとは、データベースやテーブルに関するものを含め、データ共有およびメタデータを一覧表示するためのクエリは、共有されたオブジェクトを返さなくなります。

   ```
   ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
   ```

   Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「[アカウントで作成されたデータ共有の編集](manage-datashare-existing-console.md#edit-datashare-console)」を参照してください。

1. コンシューマーとデータを共有する必要がなくなった場合は、名前空間からデータ共有へのアクセスを取り消します。

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「[アカウントで作成されたデータ共有の編集](manage-datashare-existing-console.md#edit-datashare-console)」を参照してください。

## コンシューマークラスターの管理者として読み取り目的でデータを共有する
<a name="share-consumer"></a>

1. 利用可能なデータ共有を一覧表示し、各データ共有のコンテンツを表示します。詳細については、「[DESC DATASHARE](r_DESC_DATASHARE.md)」および「[SHOW DATASHARES](r_SHOW_DATASHARES.md)」を参照してください。

   次の例では、指定されたプロデューサー名前空間のインバウンドデータ共有の情報を表示します。DESC DATASHARE をコンシューマー管理者として実行する場合、インバウンドデータ共有を表示するには、NAMESPACE オプションを指定する必要があります。

   ```
   DESC DATASHARE salesshare OF 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\$1DATASHARES を使用してデータ共有を表示し、SVV\$1DATASHARE\$1OBJECTS を使用してデータ共有内のオブジェクトを表示することもできます。

   次の例では、コンシューマークラスター内のインバウンドデータ共有を表示します。

   ```
   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
   ```

1. データベーススーパーユーザーとして、データ共有を参照するローカルデータベースを作成できます。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

   ```
   CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   ローカルデータベース内のオブジェクトへのアクセスをより細かく制御する場合は、データベースの作成時に WITH PERMISSIONS 句を使用します。これにより、ステップ 4 でデータベース内のオブジェクトにオブジェクトレベルのアクセス許可を付与できます。

   ```
   CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) ビューにクエリを実行すると、データ共有から作成したデータベースを確認できます。これらのデータベースに直接接続したり、コンシューマークラスターのローカルデータベースに接続し、データベース間クエリを実行して、データ共有データベースのデータをクエリしたりすることができます。既存のデータ共有から作成されたデータベースオブジェクトの上にデータ共有を作成することはできません。ただし、コンシューマークラスター上の別のテーブルにデータをコピーし、必要な処理を実行してから、作成された新しいオブジェクトを共有できます。

   Amazon Redshift コンソールを使用して、データ共有からデータベースを作成することもできます。詳細については、「[データ共有からのデータベースの作成](query-datashare-console.md#create-database-from-datashare-console)」を参照してください。

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

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスター内のユーザーおよびロールに付与します。詳細については「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   ```
   GRANT USAGE ON DATABASE sales_db TO Bob;
   ```

   ```
   GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
   ```

   WITH PERMISSIONS を使用することなくデータベースを作成している場合は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。場合によっては、データ共有から作成されたデータベースオブジェクトのサブセットに対して、詳細なコントロールが必要になります。その場合は、データ共有内の特定のスキーマを指す外部スキーマ参照を作成し (前出のステップを参照)、スキーマレベルの詳細なアクセス許可を提供できます。

   また、共有オブジェクトの上に遅延バインディングビューを作成し、これらを使用して詳細なアクセス許可を割り当てることもできます。また、プロデューサークラスターで必要な粒度で追加のデータ共有を作成するよう検討することもできます。

   ステップ 2 で WITH PERMISSIONS を使用してデータベースを作成した場合は、共有データベース内のオブジェクトにオブジェクトレベルのアクセス許可を割り当てる必要があります。USAGE アクセス許可のみを持つユーザーは、追加のオブジェクトレベルのアクセス許可が付与されるまで、WITH PERMISSIONS を使用して作成されたデータベース内のオブジェクトにはアクセスできません。

   ```
   GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
   ```

1. データ共有内の共有オブジェクト内のデータをクエリします。

   コンシューマークラスター上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスター内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、または SVV\$1ALL および SVV\$1REDSHIFT ビューを使用します。

   プロデューサークラスターには、各スキーマ内のデータベース、テーブル、およびビューに多数のスキーマが含まれる場合があります。コンシューマー側のユーザーは、データ共有を通じて利用可能になったオブジェクトのサブセットのみを表示できます。これらのユーザーは、プロデューサークラスターからのメタデータ全体を表示することはできません。このアプローチは、データ共有による詳細なメタデータセキュリティの制御を提供します。

   引き続きローカルクラスターのデータベースに接続します。ただし、3 つの部分からなる database.schema.table 表記を使用して、データ共有から作成されたデータベースとスキーマから読み込むこともできるようになりました。表示されているすべてのデータベースにまたがるクエリを実行できます。これらは、クラスター上のローカルデータベースでも、データ共有から作成されたデータベースでもかまいません。コンシューマークラスターは、データ共有から作成されたデータベースに接続できません。

   完全な資格を使用してデータにアクセスできます。詳細については、「[クロスデータベースクエリの例](cross-database_example.md)」を参照してください。

   ```
   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](r_CREATE_VIEW.md)」を参照してください。

   ```
   // 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;
   ```

# Amazon Redshift データ共有でのビューの使用
<a name="datashare-views"></a>

プロデューサークラスターは、通常ビュー、遅延バインディングビュー、マテリアライズドビューを共有できます。通常ビュー、遅延バインディングビュー、マテリアライズドビューを共有する場合、ベーステーブルを共有する必要はありません。以下のテーブルは、データ共有でビューがどのようにサポートされるかを示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/datashare-views.html)

次のクエリは、データ共有でサポートされている通常のビューの出力を示しています。定期的なビューの定義については、「[CREATE VIEW](r_CREATE_VIEW.md)」を参照してください。

```
SELECT * FROM tickit_db.public.myevent_regular_vw 
ORDER BY eventid LIMIT 5;

   eventid  |  eventname
  ----------+-------------
     3835   | LeAnn Rimes
     3967   | LeAnn Rimes
     4856   | LeAnn Rimes
     4948   | LeAnn Rimes     
     5131   | LeAnn Rimes
```

次のクエリは、データ共有でサポートされている遅延バインディングビューの出力を示しています。遅延バインドビューの定義については、「[CREATE VIEW](r_CREATE_VIEW.md)」 を参照してください。

```
SELECT * FROM tickit_db.public.event_lbv 
ORDER BY eventid LIMIT 5;
         
 eventid | venueid | catid | dateid |          eventname           |      starttime
 --------+---------+-------+--------+------------------------------+---------------------
     1   |   305   |   8   |  1851  |        Gotterdammerung       | 2008-01-25 14:30:00
     2   |   306   |   8   |  2114  |           Boris Godunov      | 2008-10-15 20:00:00
     3   |   302   |   8   |  1935  |              Salome          | 2008-04-19 14:30:00
     4   |   309   |   8   |  2090  |  La Cenerentola (Cinderella) | 2008-09-21 14:30:00
     5   |   302   |   8   |  1982  |          Il Trovatore        | 2008-06-05 19:00:00
```

次のクエリは、データ共有でサポートされているマテリアライズドビューの出力を示しています。マテリアライズドビューの定義については、「[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)」を参照してください。

```
SELECT * FROM tickit_db.public.tickets_mv;

  catgroup | qtysold
 ----------+---------
  Concerts | 195444
    Shows  | 149905
```

プロデューサークラスター内のすべてのテナントで共通テーブルを維持できます。`tenant_id` (`account_id` または `namespace_id`) などのディメンション列でフィルタリングされたデータのサブセットをコンシューマークラスターと共有することもできます。これを行うには、これらの ID 列 (`current_aws_account = tenant_id` など) にフィルターを使用して、ベーステーブルにビューを定義できます。コンシューマー側では、ビューをクエリすると、アカウントに適格な行のみが表示されます。これを行うには、Amazon Redshift コンテキスト関数 `current_aws_account` および `current_namespace` を使用できます。

次のクエリは、現在の Amazon Redshift クラスターが存在するアカウントの ID を返します。Amazon Redshift に接続している場合は、このクエリを実行できます。

```
select current_user, current_aws_account;

current_user | current_aws_account
-------------+--------------------
dwuser       |    111111111111
(1row)
```

次のクエリは、現在の Amazon Redshift クラスターの名前空間を返します。データベースに接続している場合は、このクエリを実行できます。

```
select current_user, current_namespace; 

current_user | current_namespace
-------------+--------------------------------------
dwuser       | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8
(1 row)
```

## データ共有内のマテリアライズドビューの増分更新
<a name="mv_incremental_datashare"></a>

 Amazon Redshift は、ベーステーブルまたはマテリアライズドビューが共有されている場合、コンシューマーデータ共有におけるマテリアライズドビューの増分更新をサポートします。増分更新は、Amazon Redshift が前回の更新後に発生したベーステーブルの変更を特定し、マテリアライズドビューの対応するレコードのみを更新する操作です。この動作の詳細については、「[CREATE MATERIALIZED VIEW](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html#mv_CREATE_MARTERIALIZED_VIEW_datashare)」を参照してください。

# データ共有へのデータレイクテーブルの追加
<a name="create-datashare-external-views"></a>

データ共有では、データ**プロデューサーは、スキーマやテーブルなどのきめ細かなデータベースオブジェクトを、同じまたは異なる AWS アカウントの**コンシューマーと安全に共有できます。プロデューサーは、リージョン間でオブジェクトを共有することもできます。このトピックでは、データレイク、特に AWS Glue データカタログから、データ共有にオブジェクトを追加する方法について説明します。ここでは、次の 2 つのユースケースを対象としています。
+ *データレイクからテーブルを参照するデータ共有に遅延バインディングビューを追加する* – Lake Formation などの外部ソースデータに対するアクセス許可の定義などの事前設定がすでに完了している可能性があるため、これはコンシューマーにとって便利です。さらに、データ共有に追加されたビューは、データレイクのテーブルを Redshift ネイティブテーブルと結合できるという利点もあります。
+ *外部スキーマからデータ共有にテーブルを直接追加する* – これにより、コンシューマーは、追加のレイヤーやロジックなしでデータレイクからのオブジェクトを利用できます。コンシューマーは、テーブルをクエリするか、コンシューマーのテーブルに結合できます。

これらのケースは、[CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) を使用して Redshift の AWS データカタログからテーブルを参照した後に適用されます。AWS データカタログのすべてのテーブルをソースとすることができます。

**注記**  
データ共有に追加するデータレイクテーブルには、Lake Formation に登録されたテーブルと AWS Glue データカタログテーブルを含めることができます。

## 外部スキーマと外部テーブルの作成
<a name="create-datashare-console-external-prelim"></a>

以下のセクションのデータ共有に追加する外部スキーマと外部テーブルを作成します。これらは事前ステップです。すでにこれらのステップを完了している場合、スキップすることができます。

1. プロデューサーで、Amazon S3 に保存されているデータレイクデータを参照する外部スキーマを作成します。外部スキーマは AWS Glue データカタログを参照します。サンプル内のロールとリージョンの例は次のとおりです。

   ```
   CREATE EXTERNAL SCHEMA external_schema_name FROM DATA CATALOG
   DATABASE 'glue_database_name'
   IAM_ROLE 'arn:aws:iam::123456789012:role/sample-role'
   REGION 'us-east-1';
   ```

1. 外部スキーマにデータレイクテーブルを作成します。

   ```
   CREATE EXTERNAL TABLE external_schema_name.sales(
   salesid INTEGER,
   sellerid INTEGER,
   buyerid INTEGER,
   saledate DATE,
   pricepaid DECIMAL(8,2))
   ROW FORMAT delimited
   FIELDS TERMINATED BY '\t'
   STORED AS textfile
   LOCATION 's3://redshift-downloads/tickit/spectrum/sales/';
   ```

   サンプルは `LOCATION` を含みます。`s3://{bucket_name}/{folder}/` の形式でフォルダを指定する必要があります。フォルダの長さは 1 文字以上である必要があります。オプションで、サブフォルダを含めることができます。データレイクにテーブルを作成する他の例については、CREATE EXTERNAL TABLE の「[例](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_TABLE_examples.html)」を参照してください。
**注記**  
共有は、プロデューサーの IAM ロールが SELECT アクセスを持つテーブルでのみサポートされます。

## データレイクテーブルを参照する遅延バインディングビューをデータ共有に追加する
<a name="create-datashare-console-external-views-how-to"></a>

AWS データカタログから外部スキーマに基づいてテーブルを作成し、データ共有に追加する最も一般的な方法は、作成したテーブルを参照する Redshift 遅延バインディングビューを追加することです。これには、データレイクからのデータが含まれます。以下にそのステップを示します。

1. 作成済みの外部テーブルを参照する遅延バインディングビューを作成します。

   ```
   CREATE VIEW lbv AS 
   select * from external_schema_name.sales, other_schema.t1
   WITH NO SCHEMA BINDING;
   ```

1. データ共有にビュースキーマを追加します。これは、遅延バインディングビューを含むローカルスキーマです。

   ```
   ALTER DATASHARE dsx_datashare ADD SCHEMA public;
   ```

1. 遅延バインディングビューによって参照されるテーブルを含むスキーマをデータ共有に追加します。スキーマの追加は、スキーマにローカルデータベースオブジェクトまたはデータレイクからのオブジェクトが含まれているかどうかにかかわらず、データ共有に追加されるビューで参照されるすべてのベーステーブルに必要です。遅延バインディングビューを追加する前に、このスキーマを追加する必要があることに注意してください。

   ```
   ALTER DATASHARE dsx_datashare ADD SCHEMA external_schema_name;
   ALTER DATASHARE dsx_datashare ADD SCHEMA other_schema;
   ```

1. SQL コマンドを使用して、データ共有にビューを追加します。テーブル名にはスキーマプレフィックスが含まれていることに注意してください。

   ```
   ALTER DATASHARE my_datashare ADD TABLE public.lbv;
   ```

1. ビューとスキーマがデータ共有に正常に追加されていることを確認します。

   ```
   SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';
   ```

1. コンシューマー管理者は、データ共有からデータベースを作成し、コンシューマーユーザーに使用許可を付与します。

これらのステップを完了すると、データ共有ビューにアクセスできるデータベースコンシューマーユーザーはデータをクエリできます。

## データレイクテーブルをデータ共有に直接追加する
<a name="create-datashare-console-external-views-add-spectrum"></a>

外部スキーマテーブルのデータ共有への追加は、ビューの追加と似ています。これは、コンシューマーがデータレイクテーブルを元の状態でクエリする場合や、テーブルをコンシューマーがコンシューマーデータウェアハウスのテーブルに結合する場合に適しています。以下の手順では、SQL を使用してデータ共有にデータレイクテーブルを追加する方法を示します。

1. このトピックの最初のセクションの説明に従って、外部スキーマと外部テーブルを作成します。

1. 

   外部スキーマ内の既存のテーブルを検出して、作成したテーブルが使用可能であることを確認します。

   ```
   SELECT * FROM svv_external_tables WHERE schemaname = 'external_schema_name';
   ```

1. データ共有に外部スキーマを追加します。

   ```
   ALTER DATASHARE my_datashare ADD SCHEMA external_schema_name;
   ```

1. データ共有に外部テーブルを追加します。テーブル名にはスキーマプレフィックスが含まれていることに注意してください。

   ```
   ALTER DATASHARE my_datashare ADD TABLE external_schema_name.sales;
   ```

1. テーブルがデータ共有に正常に追加されていることを確認します。

   ```
   SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';
   ```

   詳細については、「[AWS アカウント内のデータへの読み取りアクセスの共有](https://docs.aws.amazon.com/redshift/latest/dg/within-account.html)」を参照してください。

1. 共有データを受信するデータベースであるコンシューマーでは、管理者はデータ共有を関連付けて、ユーザーがクエリできるようにします。このステップの実行方法の詳細については、「[他のアカウントからのコンシューマーとしてのデータ共有の管理](manage-datashare-other-console.html)」を参照してください。

管理者がこれらのステップを完了すると、コンシューマーのデータベースユーザーは、共有テーブルからデータを取得するためのクエリを書き込み、コンシューマーの他のテーブルに結合できるようになります。

## データ共有にデータレイクオブジェクトを追加する際の注意事項
<a name="create-datashare-console-external-views-considerations"></a>

データ共有でデータレイクからのテーブルとビューを使用する場合、注意すべき項目がいくつかあります。
+ **AWS CloudTrail でのログ記録** — データプロデューサーアカウントは、AWS CloudTrail ログを使用して、データ共有を介して共有されたデータレイクテーブルがいつアクセスされたかを監査できます。
  + **ログデータを使用してデータアクセスを制御する** — CloudTrail ログには、Redshift データ共有プロデューサーとコンシューマーの両方を含む、共有テーブルにアクセスするユーザーに関する詳細が記録されます。識別子は、`AssumeRole` CloudTrail ログの `ExternalId` フィールドで確認できます。データ所有者は、アクションを使用して IAM ポリシーのデータアクセスに対する追加の制限を設定できます。ポリシーによるデータアクセスの定義の詳細については、「[第三者が所有する AWS アカウントへのアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)」を参照してください。
+ **セキュリティとコンシューマーのアクセス許可** – Lake Formation に登録されたテーブルの場合、Amazon S3 リソースは Lake Formation によって保護され、Lake Formation が提供する認証情報によって利用可能になります。

## データ共有にデータレイクオブジェクトを追加する際の請求に関する考慮事項
<a name="create-datashare-console-external-views-billing"></a>

以下は、データ共有内のデータレイクオブジェクトの保存とスキャンにかかるコストの詳細です。
+ コンシューマーがデータレイクから共有オブジェクトをクエリすると、スキャンのコストがコンシューマーに請求されます。
  + コンシューマーがプロビジョニングされたクラスターの場合、Redshift は Redshift Spectrum を使用して Amazon S3 データをスキャンします。そのため、Spectrum のコストはコンシューマーアカウントに請求されます。
  + コンシューマーが Amazon Redshift Serverless ワークグループの場合、Spectrum に追加の料金はかかりません。
+ バケットの一覧表示などのストレージとオペレーションの Amazon S3 コストは、各 Amazon S3 バケットを所有するアカウントに請求されます。

Amazon Redshift Serverless の請求の詳細については、「[Amazon Redshift Serverless での請求](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-billing.html)」を参照してください。請求と料金の詳細な情報については、「[Amazon Redshift の料金](https://aws.amazon.com/redshift/pricing/)」を参照してください。

# AWS アカウント間のデータの共有
<a name="across-account"></a>

AWS アカウント間で、読み取りのためにデータを共有することができます。AWS アカウント間でのデータの共有は、アカウント内でのデータの共有と同じような仕組みになっていますが、AWS アカウント間でのデータの共有では双方向ハンドシェイクが必要となる点が異なります。プロデューサアカウント管理者は、コンシューマーアカウントにデータ共有へのアクセスを許可するか、アクセスを許可しないかのいずれかを選択できます。承認されたデータ共有を使用するために、コンシューマーアカウントの管理者はデータ共有を関連付けることができます。この管理者は、データ共有を AWS アカウント全体またはコンシューマーアカウント内の特定のクラスターに関連付けることや、データ共有を拒否することができます。アカウント内でのデータ共有の詳細については、[AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)を参照してください。

データ共有では、同じアカウント内または異なる AWS アカウントの名前空間がデータコンシューマーとなる場合があります。アカウント内での共有やクロスアカウントの共有用に別々のデータ共有を作成する必要はありません。

クロスアカウントデータ共有の場合、プロデューサクラスターとコンシューマクラスターの両方を暗号化する必要があります。

AWS アカウントとデータを共有する場合、プロデューサー管理者は、エンティティとして AWS アカウントと共有します。コンシューマー管理者は、コンシューマーアカウントのどの名前空間がデータ共有にアクセスできるかを決定できます。

**Topics**
+ [プロデューサー管理者のアクション](producer-cluster-admin.md)
+ [コンシューマーアカウント管理者のアクション](consumer-account-admin.md)
+ [コンシューマー管理者のアクション](consumer-cluster-admin.md)

# プロデューサー管理者のアクション
<a name="producer-cluster-admin"></a>

Amazon Redshift では、プロデューサークラスターで管理タスクを実行して、データの取り込みとロード処理を管理できます。

**プロデューサー管理者またはデータベース所有者である場合** – 以下の手順に従ってください。

1. クラスターにデータ共有を作成し、データ共有オブジェクトをデータ共有に追加します。データ共有を作成し、データ共有オブジェクトをデータ共有に追加する方法についての詳細なステップについては、「[AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)」を参照してください。CREATE DATASHARE および ALTER DATASHARE については、「[CREATE DATASHARE](r_CREATE_DATASHARE.md)」および「[ALTER DATASHARE](r_ALTER_DATASHARE.md)」を参照してください。

   次の例では、異なるデータ共有オブジェクトをデータ共有 `salesshare` に追加しています。

   ```
   -- Add schema to datashare
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   
   -- Add table under schema to datashare
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   
   -- Add view to datashare 
   ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;
   
   -- Add all existing tables and views under schema to datashare (does not include future table)
   ALTER DATASHARE salesshare ADD ALL TABLES in schema public;
   ```

   Amazon Redshift コンソールを使用して、データ共有を作成または編集することもできます。詳細については、「[データ共有を作成する](datashare-creation.md#create-datashare-console)」および「[アカウントで作成されたデータ共有の編集](manage-datashare-existing-console.md#edit-datashare-console)」を参照してください。

1. データ共有を操作するための権限を委任します。詳細については、「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   次の例では、`salesshare`上の `dbuser` にアクセス許可を付与しています。

   ```
   GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;
   ```

   クラスターのスーパーユーザーとデータ共有の所有者は、追加のユーザーに対してデータ共有の変更許可の付与または取り消しを実行できます。

1. コンシューマーをデータ共有に追加するか、データ共有からコンシューマーを削除します。次の例は、AWS アカウントID を `salesshare` に追加します。詳細については「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012';
   ```

   GRANT ステートメントでは、1 つのデータコンシューマーにしか許可を付与できません。

   クラスターのスーパーユーザーおよびデータ共有オブジェクトの所有者、またはデータ共有に対する SHARE 許可を持つユーザーは、コンシューマーをデータ共有に追加したり、データ共有からコンシューマーを削除したりできます。そのために、GRANT USAGE または REVOKE USAGE を使用します。

   また、Amazon Redshift コンソールを使用して、データ共有に対しデータコンシューマーを追加したり削除したりできます。詳細については、「[データ共有にデータコンシューマーを追加する](datashare-creation.md#add-data-consumer-console)」および「[データ共有からのデータコンシューマーの削除](manage-datashare-existing-console.md#remove-data-consumer-console)」を参照してください。

1. (オプション) コンシューマーとデータを共有する必要がなくなった場合は、AWS アカウントからデータ共有へのアクセス権を取り消します。

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012';
   ```

**プロデューサーアカウントの管理者である場合** – 以下のステップに従います。

AWS アカウントに使用を許可すると、データ共有のステータスが `pending_authorization` になります。プロデューサーアカウントの管理者は、Amazon Redshift コンソールを使用してデータ共有を認可し、データコンシューマーを選択する必要があります。

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) にサインインします。次に、データ共有へのアクセスを許可する、またはその許可を削除するデータコンシューマーを選択します。認可されたデータコンシューマーは、データ共有でアクションを実行するための通知を受け取ります。名前空間をデータコンシューマーとして追加する場合は、承認を行う必要はありません。データコンシューマーが認可されると、データ共有オブジェクトにアクセスし、データをクエリするコンシューマデータベースを作成できます。詳細については、「[データ共有の承認と承認の取り消し](authorize-datashare-console.md)」を参照してください。

## 複数のアカウントでデータへの書き込みアクセス許可を共有する
<a name="within-account-multi-warehouse-consumer-associate"></a>

Amazon Redshift では、AWS アカウント間でデータを共有し、書き込み許可を付与して、チームまたは組織間のコラボレーションとデータ共有を行うことができます。クロスアカウントデータ共有を使用すると、データベース、スキーマ、テーブルを作成および管理するデータプロバイダーアカウントを作成し、データコンシューマーアカウントと安全に共有できます。以下のセクションでは、クロスアカウントデータ共有を設定し、Amazon Redshift で書き込み許可を付与するプロセスについて説明します。

# コンシューマーアカウント管理者のアクション
<a name="consumer-account-admin"></a>

Amazon Redshift では、コンシューマーアカウントの管理、およびデータウェアハウスリソースへのアクセス制御を行えます。

**コンシューマーアカウントの管理者である場合** – 以下のステップに従います。

他のアカウントから共有されている 1 つまたは複数のデータ共有を、AWS アカウント全体、またはアカウント内の特定の名前空間に関連付けるには、Amazon Redshift コンソールを使用します。

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) にサインインします。次に、他のアカウントから共有されている 1 つまたは複数のデータ共有を、AWS アカウント全体、またはアカウント内の特定の名前空間と関連付けます。詳細については、「[Amazon Redshift で他の AWS アカウントからのデータ共有を関連付ける](writes-associating.md)」を参照してください。

AWS アカウント または特定の名前空間が関連付けられたら、データ共有を利用できるようになります。データ共有の関連付けはいつでも変更できます。関連付け先を個々の名前空間から AWS アカウントに変更すると、Amazon Redshift が名前空間を AWS アカウントの情報で上書きします。関連付け先を AWS アカウントから特定の名前空間に変更すると、Amazon Redshift が AWS アカウントの情報を名前空間の情報で上書きします。アカウント内のすべての名前空間が、データにアクセスします。

# コンシューマー管理者のアクション
<a name="consumer-cluster-admin"></a>

Amazon Redshift では、コンシューマークラスターで管理タスクを実行して、データの取り込みとロード処理を管理できます。

**コンシューマー管理者である場合** – 以下の手順に従ってください。

1. 利用可能なデータ共有を一覧表示し、データ共有のコンテンツを表示します。データ共有のコンテンツは、プロデューサー管理者がデータ共有を承認し、コンシューマー管理者がデータ共有を受け入れて関連付けた場合にのみ使用できます。詳細については、「[DESC DATASHARE](r_DESC_DATASHARE.md)」および「[SHOW DATASHARES](r_SHOW_DATASHARES.md)」を参照してください。

   次の例では、指定されたプロデューサー名前空間のインバウンドデータ共有の情報を表示します。コンシューマー管理者として DESC DATAHSARE を実行する場合、インバウンドのデータ共有を表示するためには、NAMESPACE とアカウント ID を指定する必要があります。アウトバウンドのデータ共有の場合は、データ共有名を指定します。

   ```
   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    | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
   ```

   ```
   DESC DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   
   
    producer_account |          producer_namespace          | share_type | share_name | object_type |           object_name
   ------------------+--------------------------------------+------------+------------+-------------+---------------------------------
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_users_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_venue_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_category_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_date_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_event_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_listing_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_sales_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | schema      | public
   (8 rows)
   ```

   クラスターのスーパーユーザーのみがこれを行うことができます。SVV\$1DATASHARES を使用してデータ共有を表示し、SVV\$1DATASHARE\$1OBJECTS を使用してデータ共有内のオブジェクトを表示することもできます。

   次の例では、コンシューマークラスター内のインバウンドデータ共有を表示します。

   ```
   SELECT * FROM SVV_DATASHARES WHERE share_name 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      | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
   ```

   ```
   SELECT * FROM SVV_DATASHARE_OBJECTS WHERE share_name LIKE 'sales%';
    share_type | share_name | object_type |           object_name           | producer_account |          producer_namespace
   ------------+------------+-------------+---------------------------------+------------------+--------------------------------------
    INBOUND    | salesshare | table       | public.tickit_users_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_venue_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_category_redshift | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_date_redshift     | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_event_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_listing_redshift  | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_sales_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | schema      | public                          | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
   (8 rows)
   ```

1. データ共有を参照するローカルデータベースを作成します。データ共有からデータベースを作成する際に、NAMESPACE とアカウント ID を指定します。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

   ```
   CREATE DATABASE sales_db FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   ```

   ローカルデータベース内のオブジェクトへのアクセスをより細かく制御する場合は、データベースの作成時に WITH PERMISSIONS 句を使用します。これにより、ステップ 4 でデータベース内のオブジェクトにオブジェクトレベルのアクセス許可を付与できます。

   ```
   CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   ```

   [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) ビューにクエリを実行すると、データ共有から作成したデータベースを確認できます。これらのデータベースに直接接続したり、コンシューマークラスターのローカルデータベースに接続し、データベース間クエリを実行して、データ共有データベースのデータをクエリしたりすることができます。既存のデータ共有から作成されたデータベースオブジェクトの上にデータ共有を作成することはできません。ただし、コンシューマークラスター上の個別のテーブルにデータをコピーし、必要な処理を実行してから、作成された新しいオブジェクトを共有することは可能です。

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

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスター内のユーザーまたはロールに付与します。詳細については「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   ```
   GRANT USAGE ON DATABASE sales_db TO Bob;
   ```

   ```
   GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
   ```

   WITH PERMISSIONS を使用することなくデータベースを作成している場合は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。場合によっては、データ共有から作成されたデータベースオブジェクトのサブセットに対して、詳細なコントロールが必要になります。その場合は、前のステップでの説明にあるように、データ共有内の特定のスキーマを指す外部スキーマ参照を作成できます。その後、スキーマレベルで詳細なアクセス許可を指定します。また、共有オブジェクトの上に遅延バインディングビューを作成し、これらを使用して詳細なアクセス許可を割り当てることもできます。また、プロデューサークラスターで必要な粒度で追加のデータ共有を作成するよう検討することもできます。データ共有から作成されたデータベースへのスキーマ参照は、必要な数を作成できます。

   ステップ 2 で WITH PERMISSIONS を使用してデータベースを作成した場合は、共有データベース内のオブジェクトにオブジェクトレベルのアクセス許可を割り当てる必要があります。USAGE アクセス許可のみを持つユーザーは、追加のオブジェクトレベルのアクセス許可が付与されるまで、WITH PERMISSIONS を使用して作成されたデータベース内のオブジェクトにはアクセスできません。

   ```
   GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
   ```

1. データ共有内の共有オブジェクト内のデータをクエリします。

   コンシューマークラスター上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスター内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、または SVV\$1ALL および SVV\$1REDSHIFT ビューを使用します。

   プロデューサークラスターには、各スキーマ内のデータベース、テーブル、およびビューに多数のスキーマが含まれる場合があります。コンシューマー側のユーザーは、データ共有を通じて利用可能になったオブジェクトのサブセットのみを表示できます。これらのユーザーは、プロデューサークラスターからのメタデータ全体を表示することはできません。このアプローチは、データ共有による詳細なメタデータセキュリティの制御を提供します。

   引き続きローカルクラスターのデータベースに接続します。ただし、3 つの部分からなる database.schema.table 表記を使用して、データ共有から作成されたデータベースとスキーマから読み込むこともできるようになりました。表示されているすべてのデータベースにまたがるクエリを実行できます。これらは、クラスター上のローカルデータベースでも、データ共有から作成されたデータベースでもかまいません。コンシューマークラスターは、データ共有から作成されたデータベースに接続できません。

   完全な資格を使用してデータにアクセスできます。詳細については、「[クロスデータベースクエリの例](cross-database_example.md)」を参照してください。

   ```
   SELECT * FROM sales_db.public.tickit_sales_redshift;
   ```

   SELECT ステートメントは、共有オブジェクトに対してのみ使用できます。ただし、別のローカルデータベース内の共有オブジェクトからデータをクエリすることで、コンシューマークラスターにテーブルを作成できます。

   クエリの実行に加えて、コンシューマーは共有オブジェクトのビューを作成することができます。遅延バインディングビューおよびマテリアライズドビューのみがサポートされます。Amazon Redshift は、共有データの通常のビューをサポートしていません。コンシューマーが作成するビューは、複数のローカルデータベースまたはデータ共有から作成されたデータベースにまたがることができます。詳細については、「[CREATE VIEW](r_CREATE_VIEW.md)」を参照してください。

   ```
   // 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;
   ```

# AWS リージョン間のデータの共有
<a name="across-region"></a>

AWS リージョン 内の Amazon Redshift クラスター間で、読み取りのためにデータを共有することができます。クロスリージョンのデータ共有を使用すると AWS リージョン 間でデータを共有できます。データを手動でコピーする必要はありません。データを Amazon S3 にアンロードし、新しい Amazon Redshift クラスターにデータをコピーしたり、クロスリージョンでスナップショットのコピーを実行したりする必要はありません。

クロスリージョンのデータ共有を使用すると、クラスターが異なるリージョンにある場合でも、同じ AWS アカウント内、または異なる AWS アカウント内のクラスター全体でデータを共有できます。同じ AWS アカウント 内の異なる AWS リージョン にある Amazon Redshift クラスターでデータを共有する際も、従うワークフローは AWS アカウント 内でデータを共有する場合と同じです。詳細については、「[AWS アカウント 内のデータへの読み取りアクセスの共有](within-account.md)」を参照してください。

データを共有するクラスターが、異なる AWS アカウント や AWS リージョン にある場合には、AWS アカウントの間でデータを共有する場合と同様のワークフローに従います。加えて、コンシューマークラスターにリージョンレベルの関連付けを含めます。クロスリージョンのデータ共有では、AWS アカウントおよび AWS リージョン全体、または AWS リージョン内の特定の名前空間にデータ共有を関連付けることができます。AWS アカウント 間でのデータ共有の詳細については、「[AWS アカウント間のデータの共有](across-account.md)」を参照してください。

別のリージョンのデータを使用する場合、コンシューマーはプロデューサーリージョンからコンシューマーリージョンへのクロスリージョンのデータ転送料を負担します。

データ共有を使用するコンシューマーアカウントの管理者は、下記の 3 つの方法のいずれかでデータ共有を関連付けます。
+ AWS リージョン のすべてにまたがった、AWS アカウント全体に対する関連付け
+ AWS アカウント 内の特定の AWS リージョン に対する関連付け
+ AWS リージョン内の特定の名前空間との関連付け

管理者が AWS アカウント全体を選択した場合は、そのアカウント内の異なる AWS リージョンをまたいで、既存または将来のすべての名前空間がデータ共有にアクセスできるようになります。コンシューマーアカウントの管理者は、特定の AWS リージョンやリージョン内の名前空間を選択して、データ共有へのアクセス権を付与することも可能です。

**プロデューサー管理者またはデータベース所有者である場合**は、データ共有を作成した上でデータベースオブジェクトとデータコンシューマーを追加し、それらのデータコンシューマーにアクセス許可を付与します。詳細については、「[プロデューサー管理者のアクション](producer-cluster-admin.md)」を参照してください。

**プロデューサーアカウントの管理者の場合は**、AWS Command Line Interface(AWS CLI) もしくは Amazon Redshift コンソールを使用してデータ共有を認可し、データコンシューマーを選択します。

**コンシューマーアカウントの管理者である場合** – 以下のステップに従います。

他のアカウントから共有されている 1 つまたは複数のデータ共有を、AWS アカウント全体、特定の AWS リージョン、または AWS リージョン内の名前空間に関連付けるには、Amazon Redshift コンソールを使用します。

クロスリージョンのデータ共有では、AWS Command Line Interface (AWS CLI) または Amazon Redshift コンソールを使用して、クラスターを特定の AWS リージョンに追加できます。

1 つ以上の AWS リージョンを指定する場合は、`consumer-region`オプションを指定しながら CLI コマンドの `associate-data-share-consumer` を使用します。

次の CLI による例では、`associate-entire-account` オプションを使用して、AWS アカウント全体に `Salesshare` を関連付けています。一度に関連付けることができるリージョンは 1 つだけです。

```
aws redshift associate-data-share-consumer
--region {PRODUCER_REGION}
--data-share-arn arn:aws:redshift:{PRODUCER_REGION}:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/Salesshare
--associate-entire-account
```

次の例では、`Salesshare`を米国東部 (オハイオ) リージョン (`us-east-2`) に関連付けています。

```
aws redshift associate-data-share-consumer
--region {PRODUCER_REGION}
--data-share-arn arn:aws:redshift:{PRODUCER_REGION}:0123456789012:datashare:{PRODUCER_CLUSTER_NAMESPACE}/Salesshare
--consumer-region 'us-east-2'
```

次の例では、アジアパシフィック (シドニー) リージョン (`ap-southeast-2`) にある、別の AWS アカウントの特定のコンシューマー名前空間に、`Salesshare` を関連付けています。

```
aws redshift associate-data-share-consumer
--data-share-arn arn:aws:redshift:{PRODUCER_REGION}:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/Salesshare
--consumer-arn 'arn:aws:redshift:ap-southeast-2:{CONSUMER_ACCOUNT}:namespace:{ConsumerImmutableClusterId}'
```

Amazon Redshift コンソールを使用すると、AWS アカウント全体または特定の AWS リージョン、あるいは AWS リージョン内の名前空間にデータ共有を関連付けることができます。これを行うには、「[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)」にサインインします。その後、他のアカウントから共有されている 1 つ以上のデータ共有を、AWS アカウントや AWS リージョン 全体、または AWS リージョン内の特定の名前空間に関連付けます。詳細については、「[Amazon Redshift で他の AWS アカウントからのデータ共有を関連付ける](writes-associating.md)」を参照してください。

AWS アカウント または特定の名前空間が関連付けられたら、データ共有を利用できるようになります。データ共有の関連付けはいつでも変更できます。関連付け先を個々の名前空間から AWS アカウントに変更すると、Amazon Redshift が名前空間を AWS アカウントの情報で上書きします。関連付け先を AWS アカウントから特定の名前空間に変更すると、Amazon Redshift が AWS アカウントの情報を名前空間の情報で上書きします。関連付け先を AWS アカウント 全体から特定の AWS リージョンや名前空間に変更すると、Amazon Redshift が AWS アカウント の情報を特定のリージョンまたは名前空間の情報で上書きします。

**コンシューマー管理者の場合**は、データ共有を参照するローカルデータベースを作成できます。また、データ共有から作成したデータベースに対するアクセス許可を、必要に応じてコンシューマークラスター内のユーザーまたはロールに付与できます。さらに、共有オブジェクトに関するビューや参照するための外部スキーマを作成できます。また、コンシューマークラスターにインポートされたコンシューマデータベース内の特定のスキーマに対しては、詳細なアクセス許可を割り当てることができます。詳細については、「[コンシューマー管理者のアクション](consumer-cluster-admin.md)」を参照してください。

# クロスリージョンでのデータ共有でコスト管理を行う
<a name="cross-region-billing"></a>

Amazon Redshift では、リージョン間で転送されるデータの量を制限するようにデータ共有を設定することで、AWS リージョン間のデータ共有のコスト制御を管理できます。リージョン間のデータ共有のコストコントロールを管理することで、データ転送制限の設定、データ転送使用状況のモニタリング、および制限に近づいたときまたは超えたときの通知の受信を行うことができます。

別のリージョンのデータを使用する場合、コンシューマーはプロデューサーリージョンからコンシューマーリージョンへのクロスリージョンのデータ転送料を負担します。データ転送の料金は、リージョンによって異なります。この料金は、正常に実行されたクエリごとに、スキャンされたデータのバイト数に基づき決定します。Amazon Redshift 料金の詳細については、[Amazon Redshift の料金](https://aws.amazon.com/redshift/pricing/)を参照してください。

このバイト数は、次のメガバイトに切り上げられて課金され、各クエリにつき 10MB の最小数が適用されます。クエリの使用量に関するコストコントロールを設定すると、クラスター上で転送されるデータ量をクエリごとに表示できます。

クロスリージョンでのデータ共有の使用状況と、それに関連するコストをモニタリングし制御するには、日単位、週単位、月単位の使用制限を作成します。使用量がそれらの制限に達した場合に Amazon Redshift が自動的に実行するアクションを定義することで、予算の予測性を維持できます。

Amazon Redshift が実行するアクションは、設定した使用制限に応じて、システムテーブル対するイベントのログ記録、Amazon SNS を使用しての管理者に対する CloudWatch アラームと通知の送信、そして、他の用途のためのクロスリージョンデータ共有の無効化が行えます。

Amazon Redshift コンソールで使用制限を作成するには、ご使用のクラスターの [**Actions]** (アクション) から **[Configure usage limit]** (使用制限の設定) を選択します。**[Cluster performance]** (クラスターのパフォーマンス) タブ、または **[Monitoring]** (モニタリング) タブから CloudWatch メトリクスを自動生成すると、使用状況の傾向をモニタリングしたり、定義された制限を使用状況が超える場合にアラートを送信させたりできます。また、AWS CLIまたは Amazon Redshift API オペレーションにより、プログラム的に使用制限の作成、変更、および削除が実行できます。

# AWS Data Exchange でのライセンス付き Amazon Redshift データの共有
<a name="adx-getting-started"></a>

作成した AWS Data Exchange データ共有を AWS Data Exchange 製品に追加する際、プロバイダーは Amazon Redshift のデータにライセンスを付与できます。これにより、AWS Data Exchangeへの有効なサブスクリプションを持つコンシューマーが、Amazon Redshift 内の最新データの検出や、サブスクライブ、およびクエリを行えるようになります。

AWS Data Exchange 製品に追加された AWS Data Exchange データ共有を使用すると、コンシューマーはサブスクリプションの開始時に、自動的に製品のデータ共有にアクセスできるようになり、サブスクリプションが有効である限り、そのアクセス権を保持します。

**Topics**
+ [プロデューサーとしての AWS Data Exchange データ共有の使用](adx-getting-started-producer.md)
+ [コンシューマーとしての AWS Data Exchange データ共有の使用](#adx-getting-started-consumer)

# プロデューサーとしての AWS Data Exchange データ共有の使用
<a name="adx-getting-started-producer"></a>

Amazon Redshift では、プロデューサーは、データ共有を作成および管理することで、ライブデータ製品を AWS Data Exchange と共有できます。

**プロデューサー管理者は、以下の手順に従って、Amazon Redshift コンソールで AWS Data Exchange データ共有を管理します。**

1. AWS Data Exchange 上で同じデータを参照するためのデータ共有をクラスター内で作成し、AWS Data Exchangeに対するアクセス権を、作成したデータ共有に付与します。

   クラスターのスーパーユーザーとデータベースの所有者は、データ共有を作成できます。各データ共有は、作成時にデータベースに関連付けられます。そのデータベースのオブジェクトのみがそのデータ共有で共有できます。同じデータベース上に、同じ粒度または異なる粒度のオブジェクトを使用して、複数のデータ共有を作成できます。クラスター上に作成できるデータ共有の数に制限はありません。

   Amazon Redshift コンソールを使用してデータ共有を作成することもできます。詳細については、「[データ共有を作成する](datashare-creation.md#create-datashare-console)」を参照してください。

   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} ];
   ```

1. データ共有にオブジェクトを追加します。プロデューサー管理者は、AWS Data Exchangeデータ共有内で使用可能なデータ共有オブジェクトの管理を継続します。

   データ共有にオブジェクトを追加するには、オブジェクトを追加する前にスキーマを追加します。スキーマを追加する場合、Amazon Redshift はその下にすべてのオブジェクトを追加するわけではありません。それらを明示的に追加する必要があります。詳細については、「[ALTER DATASHARE](r_ALTER_DATASHARE.md)」を参照してください。

   ```
   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 コンソールを使用して、データ共有でオブジェクトを追加または削除することもできます。詳細については、「[データ共有にデータ共有オブジェクトを追加する](datashare-creation.md#add-datashare-object-console)」、「[データ共有からのデータ共有オブジェクトの削除](manage-datashare-existing-console.md#remove-datashare-object-console)」、および「[AWS Data Exchange データ共有の編集](manage-adx-datashare-console.md#edit-adx-datashare-console)」を参照してください。

1. データ共有へのアクセスを 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 への呼び出しを、明示的に許可または拒否できます。

------
#### [ JSON ]

****  

     ```
     {
         "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 データ共有に関する認可を許可または削除します。詳細については、「[データ共有の承認と承認の取り消し](authorize-datashare-console.md)」を参照してください。
   + オプションで、データ共有を 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
   ```

1. クラスターで作成されたデータ共有を一覧表示し、データ共有の内容を調べます。

   次の例は、SalesShare という名前のデータ共有の情報を表示します。詳細については、「[DESC DATASHARE](r_DESC_DATASHARE.md)」および「[SHOW DATASHARES](r_SHOW_DATASHARES.md)」を参照してください。

   ```
   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](r_DESC_DATASHARE.md)」および「[SHOW DATASHARES](r_SHOW_DATASHARES.md)」を参照してください。

   [SVV\$1DATASHARES](r_SVV_DATASHARES.md)、[SVV\$1DATASHARE\$1CONSUMERS](r_SVV_DATASHARE_CONSUMERS.md)、および [SVV\$1DATASHARE\$1OBJECTS](r_SVV_DATASHARE_OBJECTS.md) を使用して、データ共有、そのデータ共有内のオブジェクト、およびデータ共有のコンシューマーを表示することもできます。

1. データ共有を削除します。他の AWS アカウント と共有している AWS Data Exchange データ共有は、DROP DATASHARE ステートメントを使用して削除しないことをお勧めします。これらのアカウントはデータ共有へのアクセス権を失います。このアクションを元に戻すことはできません。これは、AWS Data Exchangeにおけるデータ製品の提供規約に違反する可能性があります。AWS Data Exchange のデータ共有を削除する場合は、「[DROP DATASHARE の使用に関する注意事項](r_DROP_DATASHARE.md#r_DROP_DATASHARE_usage)」を参照してください。

   次の例では、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\$1break\$1glass\$1session\$1var 変数を設定した上で、DROP DATASHARE ステートメントを再度実行します。AWS Data Exchange のデータ共有を削除する場合は、「[DROP DATASHARE の使用に関する注意事項](r_DROP_DATASHARE.md#r_DROP_DATASHARE_usage)」を参照してください。

   Amazon Redshift コンソールを使用してデータ共有を削除することもできます。詳細については、「[アカウント内で作成された AWS Data Exchange データ共有の削除](manage-adx-datashare-console.md#delete-adx-datashare-console)」を参照してください。

1. ALTER DATASHARE コマンドを使用すると、データ共有から任意の時点でオブジェクトを削除できます。REVOKE USAGE ON を使用すると、特定のコンシューマーについて、データ共有への許可を取り消すことができます。このコマンドは、データ共有内にあるオブジェクトの USAGE 許可を取り消し、すべてのコンシューマークラスターへのアクセスを即座に停止します。アクセス許可が取り消されたあとは、データベースやテーブルに関するものを含め、データ共有およびメタデータを一覧表示するためのクエリは、共有されたオブジェクトを返さなくなります。

   ```
   ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
   ```

   Amazon Redshift コンソールを使用して、データ共有を編集することもできます。詳細については、「[AWS Data Exchange データ共有の編集](manage-adx-datashare-console.md#edit-adx-datashare-console)」を参照してください。

1. 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.
   ```

   詳細については「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

**プロデューサー管理者は、以下の手順に従って、AWS Data Exchange コンソールでデータ共有製品を作成および公開します。**
+ AWS Data Exchange データ共有が作成されると、プロデューサーが新しいデータセットを作成し、アセットのインポートとリビジョンの作成を行って、新しい製品を作成して公開します。

  データセットの作成には、Amazon Redshift コンソールを使用します。詳細については、「[AWS Data Exchange でのデータセットの作成](manage-adx-datashare-console.md#create-dataset-console)」を参照してください。

  詳細については、「[Providing data products on AWS Data Exchange](https://docs.aws.amazon.com/data-exchange/latest/userguide/providing-data-sets.html)」を参照してください。

## コンシューマーとしての AWS Data Exchange データ共有の使用
<a name="adx-getting-started-consumer"></a>

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 でのデータ製品のサブスクライブ](https://docs.aws.amazon.com/data-exchange/latest/userguide/subscribe-to-data-sets.html)」を参照してください。

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

   クラスターの作成方法については、「[クラスターの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#create-cluster)」を参照してください。

1. 利用可能なデータ共有を一覧表示し、各データ共有のコンテンツを表示します。詳細については、「[DESC DATASHARE](r_DESC_DATASHARE.md)」および「[SHOW DATASHARES](r_SHOW_DATASHARES.md)」を参照してください。

   次の例では、指定されたプロデューサー名前空間のインバウンドデータ共有の情報を表示します。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\$1DATASHARES を使用してデータ共有を表示し、SVV\$1DATASHARE\$1OBJECTS を使用してデータ共有内のオブジェクトを表示することもできます。

   次の例では、コンシューマークラスター内のインバウンドデータ共有を表示します。

   ```
   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
   ```

1. データ共有を参照するローカルデータベースを作成します。AWS Data Exchange データ共有のためにローカルデータベースを作成するには、ACCOUNT および NAMESPACE オプションを指定する必要があります。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

   ```
   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\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) ビューにクエリを実行すると、データ共有から作成したデータベースを確認できます。これらのデータベースに直接接続したり、コンシューマークラスターのローカルデータベースに接続し、データベース間クエリを実行して、データ共有データベースのデータをクエリしたりすることができます。既存のデータ共有から作成されたデータベースオブジェクトの上にデータ共有を作成することはできません。ただし、コンシューマークラスター上の別のテーブルにデータをコピーし、必要な処理を実行してから、作成された新しいオブジェクトを共有できます。

   Amazon Redshift コンソールを使用して、データ共有からデータベースを作成することもできます。詳細については、「[データ共有からのデータベースの作成](query-datashare-console.md#create-database-from-datashare-console)」を参照してください。

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

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスター内のユーザーまたはロールに付与します。詳細については「[GRANT](r_GRANT.md)」または「[REVOKE](r_REVOKE.md)」を参照してください。

   ```
   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;
   ```

1. データ共有内の共有オブジェクト内のデータをクエリします。

   コンシューマークラスター上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスター内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、SHOW コマンド、または SVV\$1ALL および SVV\$1REDSHIFT ビューを使用します。

   プロデューサークラスターには、各スキーマ内のデータベース、テーブル、およびビューに多数のスキーマが含まれる場合があります。コンシューマー側のユーザーは、データ共有を通じて利用可能になったオブジェクトのサブセットのみを表示できます。これらのユーザーは、プロデューサークラスターからのメタデータ全体を表示することはできません。このアプローチは、データ共有による詳細なメタデータセキュリティの制御を提供します。

   引き続きローカルクラスターのデータベースに接続します。ただし、3 つの部分からなる database.schema.table 表記を使用して、データ共有から作成されたデータベースとスキーマから読み込むこともできるようになりました。表示されているすべてのデータベースにまたがるクエリを実行できます。これらは、クラスター上のローカルデータベースでも、データ共有から作成されたデータベースでもかまいません。または、これらのコンシューマーデータベースに直接接続し、部分表記で共有オブジェクトに対してクエリを実行できます。

   完全な資格を使用してデータにアクセスできます。詳細については、「[クロスデータベースクエリの例](cross-database_example.md)」を参照してください。

   ```
   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](r_CREATE_VIEW.md)」を参照してください。

   ```
   // 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;
   ```

# AWS Lake Formation マネージドデータ共有の開始方法
<a name="lf-getting-started"></a>

Amazon Redshift では、AWS Lake Formation マネージドデータ共有を通じて、AWS アカウントと Amazon Redshift クラスター間でライブデータへのアクセスと共有が可能です。AWS Lake Formation データ共有を使用すると、データプロバイダーは Amazon S3 データレイクのライブデータを、他の AWS アカウントや Amazon Redshift クラスターを含む任意のコンシューマーと安全に共有できます。

# プロデューサーとして Lake Formation 管理のデータ共有を使用する
<a name="lake-formation-getting-started-producer"></a>

Amazon Redshift では、AWS Lake Formation データ共有を介して共有されるデータにアクセスして分析できます。AWS Lake Formation データ共有を使用すると、基盤データをコピーまたは移動することなく、AWS アカウントと Amazon Redshift クラスター間で安全なデータ共有が可能になります。

AWS Lake Formation でデータを共有すると、Amazon Redshift データ共有の AWS Lake Formation アクセス許可を一元的に定義し、データ共有内のオブジェクトへのユーザーアクセスを制限できます。

Amazon Redshift では、 AWS Lake Formation マネージドデータ共有をプロデューサーとして使用して、AWS アカウントと Amazon Redshift クラスター間でライブデータを安全に共有できます。Lake Formation マネージドデータ共有は、Amazon Redshift クラスターのライブデータを他の AWS アカウントやサービスと共有できるオブジェクトです。

プロデューサークラスターまたはワークグループの管理者は、以下のステップに従って、Lake Formation とデータ共有を行います。

1. クラスター内にデータ共有を作成し、AWS Lake Formation にデータ共有に対するアクセス権を付与します。

   クラスターのスーパーユーザーとデータベースの所有者は、データ共有を作成できます。各データ共有は、作成時にデータベースに関連付けられます。そのデータベースのオブジェクトのみがそのデータ共有で共有できます。同じデータベース上に、同じ粒度または異なる粒度のオブジェクトを使用して、複数のデータ共有を作成できます。クラスター上に作成できるデータ共有の数に制限はありません。

   ```
   CREATE DATASHARE salesshare;
   ```

1. データ共有にオブジェクトを追加します。プロデューサークラスターまたはワークグループの管理者は、使用可能なデータ共有オブジェクトの管理を継続します。データ共有にオブジェクトを追加するには、オブジェクトを追加する前にスキーマを追加します。スキーマを追加する場合、Amazon Redshift はその下にすべてのオブジェクトを追加するわけではありません。それらを明示的に追加する必要があります。詳細については、「[データ共有の変更](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATASHARE.html)」を参照してください。

   ```
   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.tickit_sales_redshift;
   ```

   ALTER DATASHARE を使用して、特定のスキーマ内のスキーマ、テーブル、ビューを共有します。スーパーユーザー、データ共有の所有者、またはデータ共有に対する ALTER または ALL 許可を持つユーザーは、データ共有を変更して、それに対するオブジェクトの追加または削除を実行できます。データベースユーザーは、オブジェクトの所有者であるか、またはオブジェクトに対する SELECT、USAGE、もしくは ALL 許可を持っている必要があります。

   スキーマを指定して作成された新しいテーブル、ビューをデータ共有に追加するには、INCLUDENEW 句を使用します。データ共有とスキーマの各ペアについて、このプロパティを変更できるのはスーパーユーザーのみです。

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
   ```

1. Lake Formation 管理者アカウントにデータ共有へのアクセスを許可します。

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '012345678910' VIA DATA CATALOG;
   ```

   使用を取り消すには、次のコマンドを使用します。

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '012345678910' VIA DATA CATALOG;
   ```

1. `aws redshift authorize-data-share` API オペレーションを使用して Lake Formation のデータ共有へのアクセスを許可します。これにより、Lake Formation はサービスアカウント内のデータ共有を認識して、コンシューマーのデータ共有への関連付けを管理できます。

   ```
   aws redshift authorize-data-share 
   --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
   --consumer-identifier {"DataCatalog/<consumer-account-id>"}
   ```

    Lake Formation 管理のデータ共有から認可を削除するには、`aws redshift deauthorize-data-share` API オペレーションを使用します。これにより、AWS Lake Formation がサービスアカウント内のデータ共有を認識できるようになり、認可を削除することができます。

   ```
   aws redshift deauthorize-data-share 
   --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
   --consumer-identifier {"DataCatalog/<consumer-account-id>"}
   ```

    プロデューサークラスターまたはワークグループの管理者がコンシューマークラスターまたはワークグループとデータを共有する必要がなくなったと判断した場合は、いつでも、DROP DATASHARE を使用してデータ共有を削除し、データ共有の承認を解除し、またはデータ共有アクセス許可を取り消すことができます。Lake Formation 内に関連付けられたアクセス許可とオブジェクトは自動的には削除されません。

   ```
   DROP DATASHARE salesshare;
   ```

    Lake Formation アカウントにデータ共有の管理を許可すると、Lake Formation 管理者はデータ共有を見つけ、データカタログの ARN にデータ共有を関連付け、データ共有にリンクする AWS Glue Data Catalog 内にデータベースを作成できます。AWS CLI を使用してデータ共有を関連付けるには、[associate-data-share-consumer](https://docs.aws.amazon.com/cli/latest/reference/redshift/associate-data-share-consumer.html) コマンドを使用します。AWS リージョン 全体でデータ共有を共有するには、`associate-data-share-consumer` コマンドで `--region` パラメータを指定するか、AWS コンソールを使用してデータコンシューマーを選択します。次の例は、Lake Formation 管理のデータ共有をリージョン間で共有する方法を示します。

   ```
   aws redshift associate-data-share-consumer --region <region-1>
   --data-share-arn 'arn:aws:redshift:us-east-1:12345678912:datashare:035c45ea-61ce-86f0-8b75-19ac6102c3b7/sample_share' 
   --consumer-arn 'arn:aws:glue:<region-1>:111912345678:catalog'
   ```

   Lake Formation 管理者は、データ共有内のオブジェクトが Lake Formation 内のオブジェクトにどのようにマッピングされるかを定義するローカルリソースを作成する必要もあります。データ共有の検出とローカルリソースの作成の詳細については、「[Amazon Redshift データ共有でのデータに対するアクセス許可の管理](https://docs.aws.amazon.com/lake-formation/latest/dg/data-sharing-redshift.html)」を参照してください。

# コンシューマーとしての Lake Formation 管理のデータ共有を使用する
<a name="lake-formation-getting-started-consumer"></a>

Amazon Redshift では、AWS Lake Formation データ共有を通じて共有されたデータにアクセスして分析できます。データ共有は、さまざまなデータソースからのテーブルやデータベースなどのデータオブジェクトのコレクションを含むデータ製品です。

 AWS Lake Formation 管理者がデータ共有への招待を発見して、そのデータ共有にリンクする AWS Glue Data Catalog にデータベースを作成した後、コンシューマークラスターまたはワークグループの管理者は、クラスターをデータ共有と AWS Glue Data Catalog 内のデータベースに関連付け、コンシューマークラスターまたはワークグループのローカルデータベースを作成し、Amazon Redshift コンシューマークラスターまたはワークグループ内のユーザーおよびロールにクエリを開始するアクセス許可を付与できます。以下のステップに従って、クエリのアクセス許可を設定します。

1. 必要に応じて、Amazon Redshift コンソールで、コンシューマークラスターまたはワークグループとして機能する Redshift クラスターを作成します。クラスターの作成方法については、「[クラスターの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#create-cluster)」を参照してください。

1. AWS Glue Data Catalog コンシューマークラスターまたはワークグループ内のどのデータベースにユーザーがアクセスできるかを一覧表示するには、[SHOW DATABASES](https://docs.aws.amazon.com/redshift/latest/dg/r_SHOW_DATABASES.html) コマンドを実行します。

   ```
   SHOW DATABASES FROM DATA CATALOG [ACCOUNT <account-id>,<account-id2>] [LIKE <expression>]
   ```

   これにより、AWS Glue データベースの ARN、データベース名、データ共有に関する情報など、データカタログから利用できるリソースが一覧表示されます。

1. SHOW DATABASES から得られた AWS Glue データベース ARN を使用して、コンシューマークラスターまたはワークグループにローカルデータベースを作成します。詳細については、「[データベースの作成](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html)」を参照してください。

   ```
   CREATE DATABASE lf_db FROM ARN <lake-formation-database-ARN> WITH [NO] DATA CATALOG SCHEMA [<schema>];
   ```

1. 必要に応じて、データ共有から作成されたデータベースおよびスキーマ参照に対するアクセス許可を、コンシューマークラスターまたはワークグループ内のユーザーおよびロールに付与します。詳細については、「[許可](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)」または「[取り消し](https://docs.aws.amazon.com//redshift/latest/dg/r_REVOKE.html)」を参照してください。[CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html) コマンドで作成されたユーザーは、Lake Formation と共有されているデータ共有内のオブジェクトにはアクセスできないことに注意してください。Redshift と Lake Formation の両方にアクセスできる IAM ユーザーのみが、Lake Formation と共有されているデータ共有にアクセスできます。

   ```
   GRANT USAGE ON DATABASE sales_db TO IAM:Bob;
   ```

    コンシューマークラスターまたはワークグループの管理者は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。場合によっては、データ共有から作成されたデータベースオブジェクトのサブセットに対して、詳細なコントロールが必要になります。

    また、共有オブジェクトの上に遅延バインディングビューを作成し、これらを使用して詳細なアクセス許可を割り当てることもできます。また、プロデューサークラスターまたはワークグループで必要な詳細度で追加のデータ共有を作成するよう検討することもできます。データ共有から作成されたデータベースへのスキーマ参照は、いくつでも作成できます。

1. データベースユーザーは、SVV\$1EXTERNAL\$1TABLES ビューと SVV\$1EXTERNAL\$1COLUMNS ビューを使用して、AWS Glue データベース内のすべての共有テーブルまたは列を検索できます。

   ```
   SELECT * from svv_external_tables WHERE redshift_database_name = 'lf_db';
                           
   SELECT * from svv_external_columns WHERE redshift_database_name = 'lf_db';
   ```

1. データ共有内の共有オブジェクト内のデータをクエリします。

   コンシューマークラスターまたはワークグループ上のコンシューマデータベースおよびスキーマに対するアクセス許可を持つユーザーおよびロールは、任意の共有オブジェクトのメタデータを探索およびナビゲートできます。また、コンシューマークラスターまたはワークグループ内のローカルオブジェクトを探索およびナビゲートすることもできます。これを行うには、JDBC または ODBC ドライバー、または SV\$1ALL および SV\$1EXTERNAL ビューを使用します。

   ```
   SELECT * FROM lf_db.schema.table;
   ```

   SELECT ステートメントは、共有オブジェクトに対してのみ使用できます。ただし、別のローカルデータベース内の共有オブジェクトからデータをクエリすることで、コンシューマークラスターにテーブルを作成できます。

   ```
   // 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;
   ```