

 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="t_Troubleshooting_load_errors"></a>

當您將資料載入 Amazon Redshift 資料表時，您可能會遇到來自 Amazon S3 的錯誤、無效的輸入資料和 COPY 命令錯誤。以下各節提供識別和解決資料載入錯誤的相關資訊。

**Topics**
+ [故障診斷 S3 事件整合和 COPY JOB 錯誤](s3-integration-troubleshooting.md)
+ [S3ServiceException 錯誤](s3serviceexception-error.md)
+ [用於對資料載入進行故障診斷的系統資料表](system-tables-for-troubleshooting-data-loads.md)
+ [多位元組字元載入錯誤](multi-byte-character-load-errors.md)
+ [載入錯誤參考](r_Load_Error_Reference.md)

# 故障診斷 S3 事件整合和 COPY JOB 錯誤
<a name="s3-integration-troubleshooting"></a>

使用下列資訊，對 Amazon Redshift 的 Amazon S3 事件整合和 COPY JOB 常見問題進行故障診斷。

## 建立 S3 事件整合失敗
<a name="s3-integration-troubleshooting-creation"></a>

如果建立 S3 事件整合失敗，則整合的狀態為 `Inactive`。請確定您的 Amazon Redshift 資料倉儲符合下列敘述。
+ 您已為 Amazon Redshift 中的目標命名空間新增正確的授權主體和整合來源。請參閱 [建立 S3 事件整合的先決條件](loading-data-copy-job.md#loading-data-copy-job-prerequisites)。
+ 您已將正確的資源型政策新增至來源 Amazon S3 儲存貯體。請參閱 [建立 S3 事件整合的先決條件](loading-data-copy-job.md#loading-data-copy-job-prerequisites)。

## 您的 Amazon S3 資料未顯示在目標資料庫中
<a name="s3-integration-troubleshooting-missing-data"></a>

如果未顯示來自 COPY JOB 的資料，請檢查下列項目。
+ 查詢 SYS\$1COPY\$1JOB\$1DETAIL，以查看 Amazon S3 檔案是否已載入、是否處於待擷取狀態，或者是否有錯誤。如需詳細資訊，請參閱[SYS\$1COPY\$1JOB\$1DETAIL](SYS_COPY_JOB_DETAIL.md)。
+ 如果 Amazon S3 檔案不存在或有非預期的等待時間，請參考 STL\$1ERROR 或 SYS\$1COPY\$1JOB\$1INFO。尋找憑證錯誤或任何表示整合非作用中的內容。如需詳細資訊，請參閱[STL\$1ERROR](r_STL_ERROR.md)及[SYS\$1COPY\$1JOB\$1INFO](SYS_COPY_JOB_INFO.md)。

# S3ServiceException 錯誤
<a name="s3serviceexception-error"></a>

常見的 s3ServiceException 錯誤是由不正確的格式或不正確的登入資料字串、您的叢集和您的儲存貯體位在不同的 AWS 區域，以及 Amazon S3 權限不足所造成。

本節提供每個類型的錯誤的故障診斷資訊。

## 無效的登入資料字串
<a name="invalid-credentials-string-error"></a>

如果您的登入資料字串的格式不正確，您會收到下列錯誤訊息：

```
ERROR: Invalid credentials. Must be of the format: credentials 
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>
[;token=<temporary-session-token>]'
```

驗證登入資料字串不包含任何空格或換行符號，並且以單引號括住。

## 無效的存取金鑰 ID
<a name="invalid-access-key-id-error"></a>

如果您的存取金鑰 ID 不存在，您會收到下列錯誤訊息：

```
[Amazon](500310) Invalid operation: S3ServiceException:The AWS Access Key Id you provided does not exist in our records.
```

這通常是複製和貼上錯誤。驗證已正確輸入存取金鑰 ID。另外，如果您使用的是暫時工作階段金鑰，請檢查 `token` 的值是否已經設定。

## 無效的私密存取金鑰
<a name="invalid-secret-access-key-error"></a>

如果您的私密存取金鑰不正確，您會收到下列錯誤訊息：

```
[Amazon](500310) Invalid operation: S3ServiceException:The request signature we calculated does not match the signature you provided. 
Check your key and signing method.,Status 403,Error SignatureDoesNotMatch
```

這通常是複製和貼上錯誤。驗證已正確輸入私密存取金鑰，並且它是存取金鑰 ID 的正確金鑰。

## 儲存貯體位於不同區域
<a name="bucket-in-different-region"></a>

COPY 命令中指定的 Amazon S3 儲存貯體必須與叢集位於相同的 AWS 區域。如果您的 Amazon S3 儲存貯體和您的叢集位於不同的區域，您會收到類似以下的錯誤：

```
ERROR: S3ServiceException:The bucket you are attempting to access must be addressed using the specified endpoint.
```

透過在建立儲存貯體時使用 Amazon S3 管理主控台選取區域，或是在建立儲存貯體時使用 Amazon S3 API 或 CLI 來指定端點，即可以在特定區域中建立 Amazon S3 儲存貯體。如需詳細資訊，請參閱[將檔案上傳至 Amazon S3 以搭配 COPY 使用](t_uploading-data-to-S3.md)。

如需 Amazon S3 區域的相關資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[存取儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html#access-bucket-intro)。

或者，您可以使用 [REGION](copy-parameters-data-source-s3.md#copy-region) 選項搭配 COPY 命令來指定區域。

## 存取遭拒
<a name="s3-access-denied-error"></a>

如果使用者沒有足夠的許可，您會收到下列錯誤訊息：

```
ERROR: S3ServiceException:Access Denied,Status 403,Error AccessDenied
```

其中一個可能的原因是憑證所識別的使用者沒有 Amazon S3 儲存貯體的 LIST 和 GET 存取權。如需其他原因的資訊，請參閱《Amazon S imple Storage Service 使用者指南》**中的[針對 Amazon S3 中的拒絕存取 (403 禁止) 錯誤進行疑難排解](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshoot-403-errors.html)。

若要了解如何管理儲存貯體的使用者存取權，請參閱《Amazon Simple Storage Service 使用者指南》**中的 [Amazon S3 中的 Identity and Access Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。

# 用於對資料載入進行故障診斷的系統資料表
<a name="system-tables-for-troubleshooting-data-loads"></a>

下列 Amazon Redshift 系統資料表在對資料載入問題進行故障診斷時很實用：
+ 查詢 [STL\$1LOAD\$1ERRORS](r_STL_LOAD_ERRORS.md) 以探索特定載入期間發生的錯誤。
+ 查詢 [STL\$1FILE\$1SCAN](r_STL_FILE_SCAN.md) 以檢視特定檔案的載入時間或查看是否甚至讀取特定檔案。
+ 查詢 [STL\$1S3CLIENT\$1ERROR](r_STL_S3CLIENT_ERROR.md) 來尋找從 Amazon S3 傳輸資料時所遇到錯誤的詳細資訊。

**尋找和診斷載入錯誤**

1. 建立檢視或定義可傳回載入錯誤詳細資訊的查詢。下列範例會將 STL\$1LOAD\$1ERRORS 資料表聯結至 STV\$1TBL\$1PERM 資料表，以將資料表 ID 與實際資料表名稱比對。

   ```
   create view loadview as
   (select distinct tbl, trim(name) as table_name, query, starttime,
   trim(filename) as input, line_number, colname, err_code,
   trim(err_reason) as reason
   from stl_load_errors sl, stv_tbl_perm sp
   where sl.tbl = sp.id);
   ```

1. 將您的 COPY 命令中的 MAXERRORS 選項設定為足夠大的值，讓 COPY 傳回關於您的資料的實用資訊。如果 COPY 遇到錯誤，錯誤訊息會引導您查詢 STL\$1LOAD\$1ERRORS 資料表以取得詳細資訊。

1. 查詢 LOADVIEW 檢視來查看錯誤詳細資訊。例如：

   ```
   select * from loadview where table_name='venue';
   ```

   ```
     tbl   | table_name | query |         starttime          
   --------+------------+-------+----------------------------
    100551 | venue      | 20974 | 2013-01-29 19:05:58.365391 
   
   |     input      | line_number | colname | err_code |       reason
   +----------------+-------------+---------+----------+--------------------
   | venue_pipe.txt |           1 |       0 |     1214 | Delimiter not found
   ```

1. 在輸入檔案或載入指令碼中修正問題，根據檢視傳回的資訊。要監看的一些一般載入錯誤包括：
   + 資料表中的資料類型和輸入資料欄位中的值不符。
   + 資料表中資料欄的數量與輸入資料中的欄位數量不符。
   + 引號不符。Amazon Redshift 同時支援單引號和雙引號；不過，這些引號必須正確成對。
   + 輸入檔案中日期/時間資料的格式不正確。
   + 輸入檔案中超出範圍的值 (針對數值資料欄)。
   + 超出其壓縮編碼限制的資料欄的獨特值數量。

# 多位元組字元載入錯誤
<a name="multi-byte-character-load-errors"></a>

具有 CHAR 資料類型的資料欄僅接受單位元組 UTF-8 字元，最高為位元組值 127，或 7F hex，它也是 ASCII 字元集。VARCHAR 資料欄接受多位元組 UTF-8 字元，最長四個位元組。如需詳細資訊，請參閱[字元類型](r_Character_types.md)。

如果您的載入資料中的資料行包含對資料欄資料類型無效的字元，COPY 會傳回錯誤並將資料列記錄在 STL\$1LOAD\$1ERRORS 系統日誌資料表，錯誤碼 1220。ERR\$1REASON 欄位包括無效字元的位元組序列 (十六進位)。

修正您的載入資料中無效字元的一個替代方式是在載入程序期間取代無效的字元。若要取代無效的 UTF-8 字元，請指定 ACCEPTINVCHARS 選項搭配 COPY 命令。如果設定了 ACCEPTINVCHARS 選項，則您指定的字元會取代字碼指標。如果沒有設定 ACCEPTINVCHARS 選項，Amazon Redshift 會接受這些字元作為有效的 UTF-8。如需詳細資訊，請參閱[ACCEPTINVCHARS](copy-parameters-data-conversion.md#acceptinvchars)。

下面的字碼指標清單是有效的 UTF-8，如果沒有設定 ACCEPTINVCHARS，COPY 操作不會傳回錯誤。但是，這些字碼指標不是有效的字元。您可以使用 [ACCEPTINVCHARS](copy-parameters-data-conversion.md#acceptinvchars) 選項，以您指定的字元取代字碼指標。這些字碼指標包括範圍從 `0xFDD0` 到 `0xFDEF` 的值和最多到 `0x10FFFF` 的值，並且以 `FFFE` 或 `FFFF` 結尾：
+ `0xFFFE`, `0x1FFFE`, `0x2FFFE`, …, `0xFFFFE`, `0x10FFFE`
+ `0xFFFF`, `0x1FFFF`, `0x2FFFF`, …, `0xFFFFF`, `0x10FFFF`

下列範例顯示 COPY 嘗試將 UTF-8 字元 `e0 a1 c7a4` 載入 CHAR 資料欄時的錯誤原因。

```
Multibyte character not supported for CHAR 
(Hint: Try using  VARCHAR). Invalid char: e0 a1 c7a4
```

如果錯誤與 VARCHAR 資料類型相關，錯誤原因將包括錯誤代碼以及無效的 UTF-8 十六進位序列。下列範例顯示 COPY 嘗試將 UTF-8 `a4` 載入 VARCHAR 欄位時的錯誤原因。

```
String contains invalid or unsupported UTF-8 codepoints. 
Bad UTF-8 hex sequence: a4 (error 3)
```

下表列出 VARCHAR 載入錯誤的描述和建議的解決方法。如果發生這些錯誤中的一個，請以有效的 UTF-8 程式碼序列取代該字元或移除該字元。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/multi-byte-character-load-errors.html)

# 載入錯誤參考
<a name="r_Load_Error_Reference"></a>

如果從檔案載入資料時發生任何錯誤，請查詢 [STL\$1LOAD\$1ERRORS](r_STL_LOAD_ERRORS.md) 資料表來識別錯誤，並判斷可能的說明。下表列出資料載入期間可能發生的所有錯誤代碼：

## 載入錯誤代碼
<a name="r_Load_Error_Reference-load-error-codes"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/redshift/latest/dg/r_Load_Error_Reference.html)