Amazon Q 生成 SQL の操作
注記
現時点で Amazon Q 生成 SQL をサポートしているのは、以下の AWS リージョンのみです。
米国東部 (バージニア北部) リージョン (us-east-1)
米国西部 (オレゴン) リージョン (us-west-2)
アジアパシフィック (ムンバイ) リージョン (ap-south-1)
アジアパシフィック (シンガポール) リージョン (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 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 を利用する際の考慮事項
チャットパネルを使用する際は、次の点を考慮する必要があります。
アカウントのクエリエディタ v2 の管理者が [Generative SQL settings] ページでチャット機能を有効にしている必要があります。
Amazon Q 生成 SQL を使用するには、クエリエディタ v2 の AWS マネージドポリシーで指定されているその他のアクセス許可に加えて、IAM ポリシーでの
sqlworkbench:GetQSqlRecommendations
アクセス許可が必要です。AWS 管理ポリシーの詳細については、「クエリエディタ v2 へのアクセス」を参照してください。質問は英語で記述する必要があります。
質問は、クラスターまたはワークグループ内の接続されたデータベースに関連している必要があります。空の状態エラーの発生を避けるため、データベースに少なくとも 1 つのテーブルといくつかのデータが必要です。
質問は、接続されたデータベースに保存されているデータに関連している必要があります。外部スキーマを参照することはできません。サポートされているスキーマの詳細については、「Amazon Redshift データベースデベロッパーガイド」の「スキーマを作成する」を参照してください。
接続されたデータベースを変更する 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 でのシステム定義のロール」を参照してください。お客様のデータは、安全かつプライベートです。アカウント間でお客様のデータが共有されることはありません。お客様のクエリ、データ、データベーススキーマは、生成 AI の基盤モデル (FM) のトレーニングに使用されることはありません。お客様が入力した内容は FM へのコンテキストプロンプトとして使用され、お客様のクエリのみに回答が提供されます。
カスタムコンテキスト
クエリエディタ 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 に提供される追加の情報またはヒントです。例えば、部門固有の方法で値を計算している場合に、ここで文書化できます。例えば「製造部門の総売上高は、料金 * 収益」などと指定します。このようなドキュメントは、追加のコンテキストを提供し、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."
}
]
}