クエリエディタ v2 の生成 SQL の使用 (プレビュー) - Amazon Redshift

クエリエディタ v2 の生成 SQL の使用 (プレビュー)

これは、プレビューリリースバージョンのクエリエディタ v2 の生成 SQL に関するプレリリースドキュメントです。ドキュメントと機能はどちらも変更されることがあります。この機能については、テスト環境のみで使用し、本番環境では使用しないことをお勧めします。プレビューの契約条件については、AWSのサービス条件の「ベータサービスへの参加」を参照してください。
注記

現時点で生成 SQL をサポートしているのは、次の AWS リージョン のみです。

  • 米国東部 (バージニア北部) リージョン (us-east-1)

  • 米国西部 (オレゴン) リージョン (us-west-2)

  • 欧州 (フランクフルト) リージョン (eu-central-1)

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

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

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

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

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

生成 SQL を利用する際の考慮事項

チャットパネルを使用する際は、次の点を考慮する必要があります。

  • アカウントのクエリエディタ v2 の管理者が [Generative SQL settings] ページでチャット機能を有効にしている必要があります。

  • クエリエディタ v2 の生成 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 へのコンテキストプロンプトとして使用され、お客様のクエリのみに回答が提供されます。

生成 SQL の使用

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

クエリエディタ v2 の生成 SQL チャットと対話して SQL を生成するには
  1. クエリエディタ v2 の [エディタ] タブで、ノートブックを開きます。

  2. Generative SQL panel の生成 SQL アイコンをクリックして、指示に従ってチャットパネルで Amazon Redshift クエリエディタ v2 生成 SQL について質問します。

    プロンプトフィールドに質問を入力すると、クエリエディタ v2 が提供する SQL で応答します。エラーが発生すると、チャットパネルで返されます。

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

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

  5. (オプション) 生成 SQL チャットパネルで More [詳細] アイコンをクリックしてから、[データベースの更新] をクリックすると、接続されたデータベースを説明するメタデータが更新されます。このメタデータには、データベース内のスキーマ、テーブル、列の定義が含まれます。

管理者の生成 SQL 設定の更新

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

管理者がアカウント内のすべてのユーザーに対して生成 SQL チャットを有効にするには
  1. Settings [設定] アイコンをクリックすると、さまざまな設定画面のメニューが表示されます。

  2. 次に、 Generative SQL settings 生成 SQL 設定アイコンをクリックすると、[Generative SQL settings] ページが開きます。

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

TICKIT データで Amazon Q 生成 SQL 機能を使用する例

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

注記

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

クエリエディタ v2 の生成 SQL を使用した会話の例
  1. [エディタ] で、TICKIT サンプルデータがあるクラスターまたはワークグループに接続します。

  2. 空のノートブックを作成して、 Generative SQL 生成 SQL アイコンをクリックし、チャットパネルを開きます。

  3. 次のプロンプトを入力して 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
  4. 別のバージョンの 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 ...
  5. 生成 SQL アシスタントは、ユーザーの質問を推測できます。データベースにはウィジェットはないとはいえ、質問することはできます。この場合、SQL を生成できなかったというメッセージが表示されます。

    How many widgets are there?
    I was not able to generate any SQL
  6. データベースについての理解を深めると、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

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

  7. 述語 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
  8. 接続されたデータベースを変更しようとする質問をすると、推奨される 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]

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