

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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 使用者指南》**中的 [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 年售出最多門票的前三個會場的名稱/ID」。在資料庫中使用一致且特定的物件名稱 (如果您知道的話)。例如資料庫中定義的結構描述、資料表和欄名稱，而不要以不同的方式參考相同的物件，這樣可能造成助理混淆。

將複雜的請求分解為多個簡單的陳述式，這些陳述式更容易讓助理解譯。反覆提出後續問題，以從助理那裡獲得更詳細的分析。例如，首先要問「哪個州的場地最多？」 然後根據回應，詢問「哪個是這個州最受歡迎的會場？」。

執行產生的 SQL 之前，請先檢閱產生的 SQL 以確保準確性 如果產生的 SQL 查詢有錯誤或不符合您的意圖，請提供指示給助理，說明如何更正，而不是改寫整個請求。例如，如果查詢缺少年份的述詞子句，請詢問「從 2008 年提供會場」。

將您執行生成式 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 管理員必須已在**生成式 SQL 設定**頁面中開啟聊天功能。
+ 若要使用 Amazon Q 生成式 SQL，除了查詢編輯器 v2 的 AWS 受管政策中指定的其他許可之外，還需要 IAM 政策`sqlworkbench:GetQSqlRecommendations`中的許可。如需 AWS 受管政策的詳細資訊，請參閱 [存取查詢編輯器 v2](query-editor-v2-getting-started.md#query-editor-v2-configure)。
+ 您的問題必須以英文撰寫。
+ 您的問題必須參考叢集或工作群組中已連接的資料庫。為了避免空白狀態錯誤，應該有至少一個資料表和資料庫中的一些資料。
+ 您的問題必須參照儲存在連線資料庫中的資料。但無法參考外部結構描述。如需受支援之結構描述的詳細資訊，請參閱 *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 的上下文提示詞，僅做為對您的查詢的回答。

## 自訂內容
<a name="query-editor-v2-generative-custom-context"></a>

查詢編輯器 v2 管理員可以指定*自訂內容*，以根據您的環境量身打造生成式 SQL。自訂內容提供領域知識和偏好設定，可精細控制 SQL 產生。自訂內容是在 JSON 檔案中定義，查詢編輯器 v2 管理員可將其上傳到 Amazon Q 生成式 SQL。

以下是用來將資料倉儲的生成式 SQL 個人化的 JSON 金鑰。

所有資料表參考都需要遵循三部分標記法 `database.schema.table`。

**Resources**  
資源會指定套用自訂內容的資料資產範圍或部分。

**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**  
提供給 Amazon Q 生成式 SQL 的額外指示或指南，以引導 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."
        }
    ]
}
```