

 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/)を参照してください。

# Amazon Redshift の新しいデータ共有に対するコンシューマーのアクション
<a name="writes-consumer-new"></a>

Amazon Redshift では、他の AWS アカウントからのデータ共有を消費し、クロスアカウントデータ共有とコラボレーションが可能です。データ共有は、異なる AWS アカウントにある場合でも Amazon Redshift クラスター間でライブデータを共有する安全な方法です。以降のセクションでは、アクセスの設定、データ共有からのデータベースの作成、オブジェクトレベルのアクセス許可の付与、共有データのクエリについて、詳しい手順を説明します。

**Topics**
+ [Amazon Redshift で他の AWS アカウントからのデータ共有を関連付ける](writes-associating.md)
+ [Amazon Redshift のデータ共有からデータベースを作成する](writes-creating-database.md)
+ [Amazon Redshift でコンシューマーのユーザーとロールにオブジェクトレベルのアクセス許可を付与する](writes-granting.md)
+ [Amazon Redshift でデータ共有のデータをクエリする](writes-querying.md)

# Amazon Redshift で他の AWS アカウントからのデータ共有を関連付ける
<a name="writes-associating"></a>

Amazon Redshift では、他の AWS アカウント アカウントから共有されたデータ共有を関連付けて、組織の垣根を越えてシームレスかつ安全にデータを共有できます。データ共有は、1 つ以上の Amazon Redshift データベースからのデータをカプセル化する共有可能なデータベースオブジェクトです。以下のセクションでは、データ共有を関連付ける手順を説明します。

------
#### [ Console ]

コンシューマー管理者は、他のアカウントから共有された 1 つまたは複数のデータ共有を、AWSアカウント全体、またはアカウント内の特定の名前空間に関連付けることができます。

1. AWS マネジメントコンソール にサインインして、[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) で Amazon Redshift コンソールを開きます。

1. ナビゲーションメニューで **[Datashares]** (データ共有) を選択します。データ共有リストページが表示されます。[**From other accounts (その他のアカウント)**] を選択します。

1. **[Datashares from other accounts]** (他のアカウントからのデータ共有) セクションで、関連付けを行うデータ共有を選択し、**[Associate]** (関連付け) をクリックします。データ共有の [**関連付け**] ページが表示されたら、以下の関連付けタイプのいずれかを選択します。
   + AWS アカウント内の異なる AWS リージョンをまたいで、既存および将来のすべての名前空間をデータ共有に関連付けるには、**[AWS アカウント全体]** を選択します。
   + データ共有が AWS Glue Data Catalog に公開されている場合、データ共有を AWS アカウント全体に関連付けることしかできません。

1. ここから **[許可されているアクセス許可]** を選択できます。選択肢として、次のものがあります。
   + **読み取り専用** — 読み取り専用を選択した場合、UPDATE や INSERT などの書き込みアクセス許可は、プロデューサー側で付与および承認されていたとしても、コンシューマーでは使用できません。
   + **読み取りと書き込み** — コンシューマーデータ共有ユーザーは、プロデューサーによって付与および承認されたすべてのアクセス許可 (読み取りと書き込みの両方) を持ちます。

1. または、1 つまたは複数の AWS リージョンと特定の名前空間をデータ共有と関連付ける場合は、**[特定の AWS リージョンと名前空間]** を選択します。**[リージョンを追加]** を選択して、特定の AWS リージョンと名前空間をデータ共有に追加します。**[Add AWS Region]** (Amazon リージョンの追加) ページが表示されます。

1. **[AWS Region]** (Amazon リージョン) をクリックします。

1. 次のいずれかを行います。
   + このリージョン内の既存および将来のすべての名前空間をデータ共有に追加するには、**[すべての名前空間を追加]** を選択します。
   + このリージョンにある 1 つ以上の特定の名前空間をデータ共有に追加するには、**[特定の名前空間を追加]** を選択します。
   + 1 つまたは複数の名前空間を選択し、**[AWS リージョンを追加]** を選択します。

1. **関連付ける** を選択してください。

プロデューサーが戻って承認の設定を変更することができますが、この場合、コンシューマーの関連付け設定に影響する可能性があります。

 データ共有を Lake Formation アカウントに関連付ける場合は、Lake Formation コンソールに移動してデータベースを作成し、データベースに対するアクセス許可を定義します。詳細については、AWS Lake Formation デベロッパーガイドの「[Amazon Redshift データ共有に対するアクセス許可の設定](https://docs.aws.amazon.com/lake-formation/latest/dg/setup-ds-perms.html)」を参照してください。AWS Glue データベースまたはフェデレーションデータベースを作成したら、クエリエディタ v2 または任意の優先 SQL クライアントをコンシューマークラスターで使用して、データをクエリできます。

データ共有の関連付けが完了すると、データを共有することが可能になります。

**注記**  
データ共有の関連付けはいつでも変更できます。関連付け先を AWS リージョンや名前空間から AWS アカウント全体に変更すると、Amazon Redshift が特定のリージョンおよび名前空間に関する情報を AWS アカウントの情報で上書きします。AWS アカウント にあるすべての AWS リージョンと名前空間が、データ共有にアクセスできるようになります。

------
#### [ API ]

**注記**  
このセクションの手順は、プロデューサー管理者が共有データベースオブジェクトに対して特定のアクションを許可した後、およびデータ共有が別のアカウントと共有されている場合は、プロデューサーのセキュリティ管理者がアクセスを承認した後で実行されます。

コンシューマーセキュリティ管理者は以下を決定します。
+ アカウント内のすべての名前空間、アカウント内の特定の地域の名前空間、または特定の名前空間がデータ共有にアクセスできるかどうか。
+ 名前空間にデータ共有へのアクセス権がある場合、それらの名前空間に書き込みのアクセス許可があるかどうか。

コンシューマーのセキュリティ管理者は、データ共有を次のコマンドに関連付けることができます。

```
associate-data-share-consumer
--data-share-arn <value>
--consumer-identifier <value>
[--allow-writes | --no-allow-writes]
```

コマンドの詳細については、「[associate-data-share-consumer](https://docs.aws.amazon.com/cli/latest/reference/redshift/associate-data-share-consumer.html)」を参照してください。

コンシューマーセキュリティ管理者は、データ共有を名前空間に関連付けるときに明示的に `allow-writes` を true に設定して、INSERT コマンドと UPDATE コマンドを使用可能にする必要があります。設定しない場合、ユーザーは SELECT、USAGE、EXECUTE などの読み取り操作しか実行できません。

データ共有の名前空間の関連付けを変更するには、別の値を指定して再度 `associate-data-share-consumer` を呼び出します。以前の関連付けは新しい関連付けで上書きされるため、最初に `allow-writes` の関連付けと設定したものの、`no-allow-writes` の関連付けと指定を行っていた場合や、単に値を指定しなかった場合は、コンシューマーの書き込みのアクセス許可は取り消されます。

------

# Amazon Redshift のデータ共有からデータベースを作成する
<a name="writes-creating-database"></a>

Amazon Redshift では、データ共有を使用してデータベースを作成し、プロデューサークラスターからのデータ共有をまたいでデータのクエリを実行して、ライブデータに安全にアクセスすることができ、データをコピーまたは転送する必要はありません。以下の手順では、Amazon Redshift 環境でのデータベースの設定について詳しく説明します。

------
#### [ Console ]

データ共有内のデータをクエリするには、事前にデータ共有からデータベースを作成しておく必要があります。指定したデータ共有から作成できるデータベースは 1 つだけです。

1. AWS マネジメントコンソール にサインインして、[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/) で Amazon Redshift コンソールを開きます。

1. ナビゲーションメニューで **[Clusters]** (クラスター) を選択してから、ご使用のクラスターを選択します。クラスターの詳細ページが表示されます。

1. [**Datashares (データ共有)**] を選択します。データ共有リストが表示されます。

1. [**Datashares from other clusters (他のクラスターからのデータ共有)**] セクションで、[**Connect to database (データベースに接続)**] を選択します。詳細については、「[データベースへの接続](connect-database-console.md)」を参照してください。

1. データベースを作成するデータ共有を選択してから、[**Create database from datashare (データ共有からデータベースを作成)**] を選択します。[Create database from datashare (データ共有からデータベースを作成)] ページが表示されます。

1. [**Database name (データベース名)**] にデータベース名を指定します データベース名は 1～64 文字の英数字 (小文字のみ) にする必要があり、予約語は使用できません。

1. **[作成]** を選択します。

データベースを作成した後は、コンシューマー管理者によって許可、承認、関連付けがなされている場合は、データベース内のデータのクエリや、書き込み操作の実行ができます。

------
#### [ API ]

コンシューマー管理者として読み取り目的でデータを共有するには、次の手順を実行してください。

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)」を参照してください。

------

# Amazon Redshift でコンシューマーのユーザーとロールにオブジェクトレベルのアクセス許可を付与する
<a name="writes-granting"></a>

コンシューマー管理者は、以下の手順を実行して、コンシューマーのユーザーとロールにオブジェクトレベルでアクセス許可を付与できます。

------
#### [ SQL ]

WITH PERMISSIONS を使用することなくデータベースを作成している場合は、データ共有から作成されたデータベース全体に対するアクセス許可のみをユーザーおよびロールに割り当てることができます。

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

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

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

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

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

------

マルチウェアハウス書き込みのアクセス許可の付与については、「[Amazon Redshift でデータ共有に対するアクセス許可を管理する](writes-managing-permissions.md)」を参照してください。

# Amazon Redshift でデータ共有のデータをクエリする
<a name="writes-querying"></a>

Amazon Redshift では、データ共有間のデータクエリプロデューサークラスターから実行して、ライブデータをコピーまたは転送することなく安全にデータにアクセスできます。以下のセクションでは、Amazon Redshift 環境でのデータ共有のクエリについて説明します。

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

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

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

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

------
#### [ SQL ]

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

------