

 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 Q 生成 SQL の操作
<a name="query-editor-v2-generative-ai"></a>

**注記**  
現時点で Amazon Q 生成 SQL をサポートしているのは、以下の AWS リージョンのみです。  
米国東部 (バージニア北部) リージョン (us-east-1)
米国東部 (オハイオ) リージョン (us-east-2)
米国西部 (オレゴン) リージョン (us-west-2)
アジアパシフィック (ムンバイ) リージョン (ap-south-1)
アジアパシフィック (ソウル) リージョン (ap-northeast-2)
アジアパシフィック (シンガポール) リージョン (ap-southeast-1)
アジアパシフィック (シドニー) リージョン (ap-southeast-2)
アジアパシフィック (東京) リージョン (ap-northeast-1)
カナダ (中部) リージョン (ca-central-1)
欧州 (フランクフルト) リージョン (eu-central-1)
欧州 (アイルランド) リージョン (eu-west-1)
欧州 (ロンドン) リージョン (eu-west-2)
欧州 (パリ) リージョン (eu-west-3)
南米 (サンパウロ) リージョン (sa-east-1)
データの処理場所の詳細については、*Amazon Q Developer ユーザーガイド*の「[Cross region inference in Amazon Q Developer](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/cross-region-inference.html)」を参照してください。

Amazon Redshift クエリエディタ v2 では、Amazon Q の生成 SQL 機能を利用できます。これは、プロンプトとデータベーススキーマに基づいて SQL ステートメントを生成するコード生成アシスタントです。このコード生成アシスタントは、クエリエディタ v2 でノートブックを作成している際に使用できます。生成された SQL は、ノートブックが接続されているデータベース向けのものです。

Amazon Q 生成 SQL を利用する際の質問は、具体的にします。複雑なリクエストの場合は反復し、返される内容が正確であることを確認します。

分析リクエストを自然言語で提供する場合は、コード生成アシスタントが必要な点を正確に把握できるように、可能な限り具体的に質問します。「最も多くチケットを販売した会場の上位を検索する」と質問する代わりに、「2008 年に最もチケットの売上があったトップ 3 の会場名または ID を検索する」などの詳細情報を提供します。データベース内のオブジェクトの名前がわかっている場合は、一貫した具体的な名前を使用します。同じオブジェクトを参照するのにさまざまな方法を使用すると、アシスタントが混乱する可能性があるため、データベースで定義されているスキーマ名、テーブル名、列名などを使用します。

複雑なリクエストの場合は、アシスタントが解釈しやすい複数のシンプルなステートメントに分割します。フォローアップの質問を繰り返し行うことで、アシスタントからより詳細な分析が得られます。例えば、まず「会場が最も多くある州はどこですか」と質問します。次に、その回答に基づいて、「この州で最も人気のある会場はどれですか」と質問します。

生成された SQL は実行する前に調べて、正確であることを確認します。生成された SQL クエリにエラーがある場合、または意図した内容と違う場合は、リクエスト全体を言い換えるのではなく、アシスタントに修正方法を指示します。例えば、クエリに年に関する述語句が欠落している場合は、「2008 年からの会場を提供する」と伝えます。

生成された SQL の実行により受信したエラーのテキストをプロンプトとして Amazon Q 生成 SQL に送信します。Amazon Q 生成 SQL は、このようなエラーから学習し、生成する SQL を改善します。

SQL 検索パスにスキーマを追加し、そのスキーマを使用する必要があることを示します。例えば、データがパブリックスキーマではなく TICKIT スキーマである場合は、TICKIT スキーマを追加します。

```
set search_path to '$user', tickit;
```

## Amazon Q 生成 SQL を利用する際の考慮事項
<a name="query-editor-v2-generative-ai-considerations"></a>

チャットパネルを使用する際は、次の点を考慮する必要があります。
+ アカウントのクエリエディタ v2 の管理者が **[Generative SQL settings]** ページでチャット機能を有効にしている必要があります。
+ Amazon Q 生成 SQL を使用するには、クエリエディタ v2 の AWS マネージドポリシーで指定されているその他のアクセス許可に加えて、IAM ポリシーでの `sqlworkbench:GetQSqlRecommendations` アクセス許可が必要です。AWS 管理ポリシーの詳細については、「[クエリエディタ v2 へのアクセス](query-editor-v2-getting-started.md#query-editor-v2-configure)」を参照してください。
+ 質問は英語で記述する必要があります。
+ 質問は、クラスターまたはワークグループ内の接続されたデータベースに関連している必要があります。空の状態エラーの発生を避けるため、データベースに少なくとも 1 つのテーブルといくつかのデータが必要です。
+ 質問は、接続されたデータベースに保存されているデータに関連している必要があります。外部スキーマを参照することはできません。サポートされているスキーマの詳細については、「**Amazon Redshift データベースデベロッパーガイド」の「[スキーマを作成する](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)」を参照してください。
+ 接続されたデータベースを変更する SQL を生成する質問の場合、警告が表示されることがあります。
+ 生成 AI は新しいテクノロジーであり、応答にはハルシネーションと呼ばれる誤りがある場合があります。現在の環境やワークロードで使用する前に、すべてのコードをテストしてエラーや脆弱性がないかを確認する必要があります。
+ アカウント内のその他のユーザーが実行した SQL クエリを共有すると、レコメンデーションを改善できます。アカウント管理者は次の SQL コマンドを実行して、アカウントのクエリ履歴へのアクセスを許可できます。

  ```
  GRANT ROLE SYS:MONITOR to "IAMR:role-name";
  GRANT ROLE SYS:MONITOR to "IAM:user-name";
  GRANT ROLE SYS:MONITOR to "database-username";
  ```

  `SYS:MONITOR` の詳細については、「**Amazon Redshift データベースデベロッパーガイド」の「[Amazon Redshift でのシステム定義のロール](https://docs.aws.amazon.com/redshift/latest/dg/r_roles-default.html)」を参照してください。
+ お客様のデータは、安全かつプライベートです。アカウント間でお客様のデータが共有されることはありません。お客様のクエリ、データ、データベーススキーマは、生成 AI の基盤モデル (FM) のトレーニングに使用されることはありません。お客様が入力した内容は FM へのコンテキストプロンプトとして使用され、お客様のクエリのみに回答が提供されます。

# 生成 SQL の使用
<a name="query-editor-v2-generative-ai-interact"></a>

適切なアクセス許可を設定した後、クエリエディタ v2 でノートブックを使用する際に、アイコンをクリックすると、会話を開始できます。

**Amazon Q 生成 SQL チャットを操作して SQL を生成するには**

1. クエリエディタ v2 の **[エディタ]** タブで、ノートブックを開きます。

1. ![\[Generative SQL panel\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/qev2-amazon-q.png) の生成 SQL アイコンをクリックして、指示に従ってチャットパネルで Amazon Redshift クエリエディタ v2 生成 SQL について質問します。

   プロンプトフィールドに質問を入力すると、Amazon Q 生成 SQL が推奨される SQL を返します。エラーが発生すると、チャットパネルで返されます。

1. **[Add to notebook]** をクリックして、プロンプトを使用して Markdown セルと、提案された SQL を含む SQL セルをノートブックに追加します。

1. (オプション) 役に立った ![\[Helpful feedback\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/qev2-thumbs-up.png) フィードバックアイコンまたは役に立たなかった ![\[Not helpful feedback\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/qev2-thumbs-down.png) フィードバックアイコンをクリックして、生成された SQL についてのフィードバックを提供します。役に立たなかったというフィードバックは、`Incorrect tables/columns`、`Incorrect predicates/literals/group bys`、`Incorrect SQL structure`、または `Other` のカテゴリに分類できます。さらに、SQL の精度に関するフィードバックには、自由形式のテキストも追加できます。

1. (オプション) **[Regenerate SQL]** をクリックすると、同じプロンプトに対して別の応答が生成されます。現在のプロンプトに対して **[Regenerate SQL]** をクリックできるのは、1 回です。

1. (オプション) 生成 SQL チャットパネルで ![\[More\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/qev2-vmore.png) **[詳細]** アイコンをクリックしてから、**[データベースの更新]** をクリックすると、接続されたデータベースを説明するメタデータが更新されます。このメタデータには、データベース内のスキーマ、テーブル、列の定義が含まれます。

# 管理者の生成 SQL 設定の更新
<a name="query-editor-v2-generative-ai-settings"></a>

適切な IAM アクセス許可を持つユーザーは、同じ AWS アカウント 内のその他のユーザーの **[Generative SQL settings]** を表示したり変更したりできます。このような管理者は、クエリエディタ v2 の AWS マネージドポリシーで指定されているその他のアクセス許可に加えて、IAM ポリシーでの `sqlworkbench:UpdateAccountQSqlSettings` アクセス許可が必要です。管理ポリシーの詳細については、「[クエリエディタv2 を使用するために必要なアクセス許可](redshift-iam-access-control-identity-based.md#redshift-policy-resources.required-permissions.query-editor-v2)」を参照してください。

**管理者がアカウント内のすべてのユーザーに対して生成 SQL チャットを有効にするには**

1. ![\[Settings\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/qev2-cog.png) **[設定]** アイコンをクリックすると、さまざまな設定画面のメニューが表示されます。

1. 次に、生成 SQL 設定 ![\[Generative SQL settings\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/qev2-amazon-q.png) アイコンをクリックすると、**[Generative SQL settings]** ページが開きます。

1. **[Q generative SQL settings]** をクリックして、アカウント内のユーザーの生成 SQL 機能を有効にします。

   Amazon Q 生成 SQL を有効にした後、割り当てに残っているプロンプトの数を確認できます。クエリエディタ v2 管理者は、アカウントのユーザーの Amazon Q Developer Pro 階層の使用を有効にできます。Pro 階層を使用するには、IAM アイデンティティセンターでユーザーを設定して、各ユーザーを Amazon Q Developer Pro 階層にサブスクライブします。IAM アイデンティティセンターの Amazon Redshift に関する設定については、「[Redshift を AWS IAM アイデンティティセンターに接続してシングルサインオンエクスペリエンスを提供する](redshift-iam-access-control-idp-connect.md)」を参照してください。Amazon Q Developer の料金については、「[Amazon Q Developer の料金](https://aws.amazon.com/q/developer/pricing/)」を参照してください。

   Amazon Q Developer 無料利用枠を使用する場合、AWS アカウント のすべてのユーザーのプロンプトの合計数は、1 か月あたり 1,000 までに制限されます。Amazon Q Developer Pro 階層を使用する場合、個別のユーザーが送信できるプロンプトの合計数は、1 か月あたり 1,000 までに制限されます。利用できるプロンプトの数は、**[設定]** ページで確認できます。Amazon Q Developer の料金については、「[Amazon Q Developer の料金](https://aws.amazon.com/q/developer/pricing/)」を参照してください。

## カスタムコンテキスト
<a name="query-editor-v2-generative-custom-context"></a>

クエリエディタ v2 管理者は、生成された SQL を環境に合わせてカスタマイズするカスタムコンテキストを指定できます。**カスタムコンテキストを使用すると、SQL 生成をきめ細かく制御するためのドメインに関するナレッジと設定を提供できます。カスタムコンテキストは、JSON ファイルで定義され、クエリエディタ v2 管理者はこのファイルを Amazon Q 生成 SQL にアップロードできます。

データウェアハウス向けに生成された SQL をパーソナライズするために使用できる JSON キーは、以下のとおりです。

すべてのテーブルリファレンスは、`database.schema.table` の 3 つの部分からなる表記に従う必要があります。

**リソース**  
リソースは、カスタムコンテキストが適用されるデータアセットの範囲または部分を指定します。

**ResourceId**  
リソースの一意の識別子を指定します。Amazon Redshift クラスターの場合は、`cluster id` を指定します。Redshift Serverless ワークグループの場合は、`workgroup name` を指定します。

**ResourceType**  
有効な値: `REDSHIFT_WAREHOUSE`。

**TablesToInclude**  
SQL 生成向けに使用されるテーブルのセットを指定します。このフィールドは、SQL クエリの範囲を使用可能なテーブルの定義済みのサブセットに制限する場合に重要です。テーブルへの不必要な参照を低減することで、生成プロセスの最適化につながります。このフィールドを `TablesToExclude` とペアリングすると、クエリ生成をより細かく制御できます。

**TablesToExclude**  
SQL 生成から除外するテーブルのセットを指定します。これは、特定のテーブルが無関係である場合や、クエリ生成プロセスで考慮されるべきでない場合に使用します。

**TableAnnotations**  
使用するテーブルに関するメタデータまたは補足情報を提供します。このような注釈には、テーブルの説明、使用上の注意、または Amazon Q 生成 SQL によるテーブルのコンテキストや構造の把握の強化につながるような追加の属性を含めることができます。このように、テーブル定義を明確にすることで SQL 生成の精度の向上につながります。

**ColumnsToInclude**  
SQL クエリの生成時に、指定したテーブルのどの列を含めるかを定義します。このフィールドを使用してデータ取得の範囲を絞り込むことで、Amazon Q 生成 SQL は関連する列に集中することができ、パフォーマンスの向上につながります。これにより、Amazon Q 生成 SQL は、特定のクエリコンテキストに必要なデータのみをプルできます。

**ColumnsToExclude**  
SQL 生成で考慮対象から除外する列を指定します。これは、Amazon Q 生成 SQL で考慮されるべきではない無関係または冗長なデータが特定の列に含まれている場合に使用できます。列の包含と除外を管理することで、結果を絞り込み、取得するデータの制御を維持できます。

**ColumnAnnotations**  
`TableAnnotations` と同様に、このフィールドでは個別の列に固有のメタデータまたは注釈を提供します。このような注釈により、列定義や特別な処理手順に関するインサイトを提供することができます。この情報は、SQL 生成プロセスをガイドし、クエリで列が適切に使用されるようにするのに有益です。

**CuratedQueries**  
事前定義済みの質問と応答の例のセットです。質問は自然言語 (NLQ) で記述され、応答は対応する SQL クエリです。このような例は、生成すべきクエリの種類を Amazon Q 生成 SQL に理解させるのに役立ちます。このような例は、Amazon Q 生成 SQL の出力の精度と関連性を向上させるためのリファレンスポイントとして機能します。

**CustomDocuments**  
定義、ドメイン固有のナレッジ、説明など、Amazon Q 生成 SQL に提供される追加の情報またはヒントです。例えば、部門固有の方法で値を計算している場合に、ここで文書化できます。例えば「製造部門の総売上高は、料金 \$1 収益」などと指定します。このようなドキュメントは、追加のコンテキストを提供し、Amazon Q 生成 SQL の自然言語入力解釈機能の強化につながります。

**AdditionalTables**  
データウェアハウスに保存されているデータの一部ではないが、SQL 生成の考慮対象であるべき追加のテーブルを指定します。これにより、Amazon Q 生成 SQL は外部データソースを SQL 生成ロジックに統合し、複雑なデータ環境への対応能力を拡張できます。

**AppendToPrompt**  
SQL 生成プロセスをガイドするために Amazon Q 生成 SQL に提供する追加の手順またはガイドラインです。これには、クエリを構造化する方法に関する具体的な指示、特定の SQL コンストラクトの設定、または Amazon Q 生成 SQL の出力の品質を向上させるその他の大まかな指示があります。

次のカスタムコンテキストの例は、JSON ファイルの形式を説明しており、以下が定義されています。
+ クラスター `mycluster` の Amazon Redshift データウェアハウスのカスタムコンテキストを定義します。
+ SQL 生成プロセスの最適化に向けて、特定のテーブルと列を含めるか除外するかを定義します。
+ 含めるテーブルと列の注釈を定義します。
+ 使用する Amazon Q 生成 SQL のサンプルキュレーションクエリを定義します。
+ SQL の生成に使用するカスタムドキュメントとガードレールを定義します。
+ SQL の生成時に使用する追加のテーブルの DDL を定義します。

```
{
    "resources": [
        {
            "ResourceId": "mycluster",
            "ResourceType": "REDSHIFT_WAREHOUSE",
            "TablesToInclude": [
                "database.schema.table1",
                "database.schema.table2"
            ],
            "TablesToExclude": [
                "database.schema.table3",
                "database.schema.table4"
            ],
            "ColumnsToInclude": {
                "database.schema.table1": [
                    "col1",
                    "col2"
                ],
                "database.schema.table2": [
                    "col1",
                    "col2"
                ]
            },
            "ColumnsToExclude": {
                "database.schema.table5": [
                    "col1",
                    "col2"
                ],
                "database.schema.table6": [
                    "col1",
                    "col2"
                ]
            },
            "TableAnnotations": {
                "database.schema.table1": "table1 refers to Q3 sales",
                "database.schema.table2": "table2 refers to Q4 sales"
            },
            "ColumnAnnotations": {
                "database.schema.table1": {
                    "col1": "col1 refers to Q3 sale total",
                    "col2": "col2 refers to sale location"
                },
                "database.schema.table2": {
                    "col1": "col2 refers to Q4 sale total",
                    "col2": "col2 refers to sale location"
                }
            },
            "CuratedQueries": [
                {
                    "Question": "what is the sales data for Q3",
                    "Answer": "SELECT * FROM table1"
                },
                {
                    "Question": "what is the sales data for Q4",
                    "Answer": "SELECT * FROM table2"
                }
            ],
            "CustomDocuments": [
                "in manufacturing division total sales is price * revenue",
                "in research division total sales is price * revenue"
            ],
            "AdditionalTables": {
                "database.schema.table8": "create table database.schema.table8(col1 int)",
                "database.schema.table9": "create table database.schema.table9(col1 int)"
            },
            "AppendToPrompt": "Apply these guardrails: Queries should never return the secretId field of a user."
        }
    ]
}
```

# チュートリアル: TICKIT データで Amazon Q 生成 SQL 機能を使用する例
<a name="query-editor-v2-generative-ai-example"></a>

SQL を生成するための効率的なプロンプトを作成するには、データベーススキーマとデータについての知識を持っている必要があります。TICKIT データは、2 つのファクトテーブルと 5 つのディメンションの 7 つのテーブルで構成されています。サンプルデータには、2008 年に開催されたエンターテイメントイベントの参加者の売上に関するレコードが含まれています。TICKIT データスキーマの詳細については、「**Amazon Redshift Database デベロッパーガイド」の「[サンプルデータベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)」を参照してください。TICKIT データは、Amazon Redshift コンソールとクエリエディタ v2 の両方を使用して、さまざまな方法でデータベースにロードできます。クエリエディタ v2 には、TICKIT データを `sample_data_dev` データベースにロードする方法が提供されています。詳細については、「[データベースにデータをロードする](query-editor-v2-loading.md)」を参照してください。クエリエディタ v2 には、TICKIT データのサンプルプロンプトも提供されています。次のシナリオでは、TICKIT サンプルデータに関する SQL を生成するための生成 SQL との会話について説明します。このシナリオでは、TICKIT サンプルデータは Amazon Redshift クラスターの `dev` データベースに既に作成されています。

**注記**  
この例は、会話を説明する目的で提供されています。生成 SQL からの応答は、同じプロンプトを使用した場合の結果と一致するとは限りません。

**Amazon Q 生成 SQL を使用した会話の例**

1. **[エディタ]** で、TICKIT サンプルデータがあるクラスターまたはワークグループに接続します。

1. 空のノートブックを作成して、![\[Generative SQL\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/qev2-amazon-q.png) 生成 SQL アイコンをクリックし、チャットパネルを開きます。

1. 次のプロンプトを入力して SQL を生成し、`VENUE` テーブルのレコード件数を確認します。

   ```
   How many venues are there?
   ```

   ```
   SELECT
     COUNT(*) AS num_venues
   FROM
     tickit.venue
   ```

   **[Add to notebook]** をクリックして、開いているノートブックにセルを 2 つ追加します。Markdown セルの 1 つに「会場はいくつありますか?」と入力します。もう 1 つのセルには生成された SQL が入力されます。

   SQL セルで **[実行する]** をクリックすると、次のとおり結果が表示されます。

   ```
   count
   ------
   202
   ```

1. 別のバージョンの SQL をリクエストするには、**[Regenerate SQL]** をクリックすると、次のとおりの回答が表示されます。

   ```
   SELECT
     venuestate,
     COUNT(*) AS num_venues
   FROM
     tickit.venue
   GROUP BY
     venuestate
   ```

   **[Add to notebook]** をクリックして、開いているノートブックにセルをさらに 2 つ追加します。Markdown セルの 1 つに「会場はいくつありますか?」と入力します。もう 1 つのセルには生成された SQL が入力されます。

   SQL セルで **[実行する]** をクリックすると、次のとおり会場のある州が番号別に一覧表示された結果が返されます。

   ```
   venuestate num_venues
   ----------------------
   MA         4	
   OH         8	
   MI         5	
   ...
   ```

1. 生成 SQL アシスタントは、ユーザーの質問を推測できます。データベースにはウィジェットはないとはいえ、質問することはできます。この場合、SQL を生成できなかったというメッセージが表示されます。

   ```
   How many widgets are there?
   ```

   ```
   I was not able to generate any SQL
   ```

1. データベースについての理解を深めると、SQL 生成に向けてより具体的な質問をすることができます。例えば、データベースには 2008 年の数か月分の売上データが含まれていることはすでに把握しています。次のプロンプトを入力して SQL を生成し、2008 年 11 月の販売数を確認します。

   ```
   How many sales were there in November 2008?
   ```

   ```
   SELECT
     COUNT(*) AS num_sales
   FROM
     tickit.sales s
     JOIN tickit.date d ON s.dateid = d.dateid
   WHERE
     d.month = 'November'
     AND d.year = 2008
   ```

   **[Add to notebook]** をクリックして、開いているノートブックにセルを 2 つ追加します。Markdown セルの 1 つに「2008 年 11 月の売上数は」と入力します。もう 1 つのセルには生成された SQL が入力されます。

   SQL セルで **[実行する]** をクリックすると、次のとおり結果が表示されます。

   ```
   num_sales
   -----
   0
   ```

   これは期待していた結果ではないことが判明します。

1. 述語 `date.month='November'` では、DATE テーブルの月が月名の省略形で表されることを想定していることが分かりました。述語を `d.month='NOV'` に変更して SQL を再実行します。

   ```
   SELECT
     COUNT(*)
   FROM
     sales
     JOIN date ON sales.dateid = date.dateid
   WHERE
     date.month = 'NOV'
     AND date.year = 2008
   ```

   SQL セルで **[実行する]** をクリックして、新しい結果を取得します。

   ```
   count
   -----
   14261
   ```

1. 接続されたデータベースを変更しようとする質問をすると、推奨される SQL とともに警告メッセージが返されます。次のプロンプトを入力して、テーブルにデータを挿入する SQL を生成します。

   ```
   Insert 1 into the venue table.
   ```

   ```
   INSERT
   ,
   UPDATE
     OR delete data
   FROM
     the database AS that could potentially change the data.Please provide a query that ONLY selects data
   ```

   ```
   I was not able to generate the correct SQL code. I generated SQL, but you'll have to edit it to work with your database.
   ```

   **[Add to notebook]** をクリックして開いているノートブックにセルを 2 つ追加して、この SQL を実行すると、SQL は失敗します。

   ```
   ERROR: syntax error at or near "," Position: 132 [ErrorId: 1-6546764a-011df2691778846219ce6ec2]
   ```

このシナリオでは、Amazon Q 生成 SQL を利用する際の基本的な方法の一部のみを説明しています。生成 AI テクノロジーをさらに試して、データベースにクエリを実行する SQL の作成を開始するうえで役に立ちます。