

 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/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 取消查詢
<a name="cancel_query"></a>

如果您執行的查詢執行時間過長或耗用過多資源，請取消該查詢。例如，建立售票員清單，其中包括售票員的名稱和賣出的門票數量。下列查詢從 `SALES` 資料表和 `USERS` 資料表中選取資料，並比對 WHERE 子句中的 SELLERID 和 USERID，來聯結這兩個資料表。

```
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
WHERE sales.sellerid = users.userid
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
```

結果類似如下所示。

```
 sellerid | firstname | lastname | sum
----------+-----------+----------+------
  48950   |   Nayda   |   Hood   | 184
  19123   |   Scott   | Simmons  | 164
  20029   |    Drew   | Mcguire  | 164
  36791   |  Emerson  | Delacruz | 160
  13567   |   Imani   |   Adams  | 156
  9697    |  Dorian   |    Ray   | 156
  41579   | Harrison  | Durham   | 156
  15591   |  Phyllis  |  Clay    | 152
  3008    |  Lucas    | Stanley  | 148
  44956   |  Rachel   |Villarreal| 148
```

**注意**  
這是一個複雜查詢。對於本教學課程，您無需擔心此查詢的建構方式。

前一個查詢僅幾秒便完成執行，並傳回 2,102 個資料列。

假設您忘了放入 WHERE 子句。

```
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
```

結果集會包含 `SALES` 資料表中的所有列乘以 `USERS` 資料表中的所有列 (49989\*3766)。這稱為笛卡兒聯結，但不建議使用它。結果超過 1 億 8 千 8 百萬個資料列，而且需要很長時間來執行。

若要取消執行中查詢，請使用 CANCEL 命令搭配查詢的工作階段 ID。您可以使用 Amazon Redshift 查詢編輯器 v2，在查詢執行時選擇取消按鈕來取消查詢。

若要尋找工作階段 ID，請啟動一個新工作階段並查詢 STV\_RECENTS 資料表，如前一個步驟所示。以下範例說明如何使結果更具可讀性。若要這麼做，請使用 TRIM 函數修剪結尾空格，並僅顯示查詢字串的前 20 個字元。

若要判斷執行中查詢的工作階段 ID，請執行下列 SELECT 陳述式。

```
SELECT user_id, session_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
```

結果類似如下所示。

```
 user_id |   session_id  |   start_time               |   query_text
---------+---------------+----------------------------+----------------------------------------------------------------
 100     |    1073791534 | 2024-03-19 22:26:21.205739 | SELECT user_id, session_id, start_time, query_text FROM  ...
```

若要取消工作階段 ID 為 `1073791534` 的查詢，請執行下列命令。

```
CANCEL 1073791534;
```

**注意**  
CANCEL 命令不會停止交易。若要停止或還原交易，請使用 ABORT 或 ROLLBACK 命令。若要取消與交易相關聯的查詢，首先取消查詢，然後停止交易。

如果您已取消的查詢與交易相關聯，請使用 ABORT 或 ROLLBACK 命令來取消交易，並捨棄對資料所做的任何變更：

```
ABORT;
```

除非您是以超級使用者身分登入，否則只能取消自己的查詢。超級使用者可以取消所有查詢。

如果您的查詢工具不支援同時執行查詢，請啟動另一個工作階段來取消查詢。

如需取消查詢的詳細資訊，請參閱《Amazon Redshift 資料庫開發人員指南》**中的 [CANCEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CANCEL.html)。

## 使用超級使用者佇列來取消查詢
<a name="cancel_query-cancel-a-query-using-the-superuser-queue"></a>

如果您的目前工作階段有太多查詢同時執行中，則您可能無法執行 CANCEL 命令，直到另一個查詢完成為止。在此情況下，請使用不同的工作負載管理查詢佇列來執行 CANCEL 命令。

使用工作負載管理，您可執行不同查詢佇列中的查詢，讓您無需等待另一個查詢完成。工作負載管理員會建立個別佇列 (稱為超級使用者佇列)，您可以將其用於故障診斷。若要使用超級使用者佇列，請以超級使用者身分登入，並使用 SET 命令將查詢群組設為 'superuser'。在執行您的命令之後，請使用 RESET 命令來重設查詢群組。

若要使用超級使用者佇列來取消查詢，請執行這些命令。

```
SET query_group TO 'superuser';
CANCEL 1073791534;
RESET query_group;
```