選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

Amazon Redshift Spectrum 中的查詢疑難排解 - Amazon Redshift

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

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

Amazon Redshift Spectrum 中的查詢疑難排解

本主題是 Amazon Redshift Spectrum 查詢可能遇到的常見問題參考。

查詢 SVL_S3LOG 系統資料表以檢視由 Redshift Spectrum 查詢產生的錯誤。

超過重試次數

如果 Amazon Redshift Spectrum 請求逾時,則該請求會被取消並重新提交。在五次重試失敗後,該查詢即失敗並顯示以下錯誤。

error:  Spectrum Scan Error: Retries exceeded

可能的子句包括:

  • 大型檔案 (大於 1 GB)。檢查 Amazon S3 中的檔案大小,尋找大型檔案和檔案大小扭曲。將大型檔案分成許多介於 100 MB 與 1 GB 的較小檔案。試著將檔案維持相同大小。

  • 慢速網路傳輸量。請稍後嘗試您的查詢。

存取已限流

Amazon Redshift Spectrum 受其他服務的服務配額約束 AWS 。在高使用量下,Redshift Spectrum 請求可能需要減慢速度,因而導致以下錯誤。

error:  Spectrum Scan Error: Access throttled

可能發生兩種類型的限流:

  • 存取受到 Amazon S3 限流。

  • 由 調節的存取 AWS KMS。

錯誤內容提供有關限流類型的詳細資料。您可以在下面找到此限流的原因和可能的解決方案。

存取受到 Amazon S3 限流

如果字首上的讀取請求率太高,Amazon S3 可能會限流 Redshift Spectrum 請求。如需可在 Amazon S3 中實現的 GET/HEAD 請求率的相關資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的最佳化 Amazon S3 效能。Amazon S3 GET/HEAD 請求率會將字首上的所有 GET/HEAD 請求列入考慮,因此存取相同字首的不同應用程式共用總請求率。

如果您的 Redshift Spectrum 請求經常受到 Amazon S3 的限流,請減少 Redshift Spectrum 對 Amazon S3 發出的 Amazon S3 GET/HEAD 請求數量。若要執行此動作,請嘗試將小型檔案合併成大型檔案。我們建議使用大於 64 MB 的檔案。

另外,請考慮分割 Redshift Spectrum 資料表,以從早期篩選中獲益,並減少 Amazon S3 中存取的檔案數量。如需詳細資訊,請參閱分割 Redshift Spectrum 外部資料表

存取由 AWS KMS限流

如果您使用伺服器端加密 (SSE-S3 或 SSE-KMS) 將資料存放在 Amazon S3 中,Amazon S3 AWS KMS 會針對 Redshift Spectrum 存取的每個檔案呼叫 API 操作。這些請求會計入您的密碼編譯操作配額;如需詳細資訊,請參閱 AWS KMS 請求配額。如需 SSE-S3 和 SSE-KMS 的相關資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的使用伺服器端加密保護資料搭配使用伺服器端加密與儲存在 AWS KMS中的金鑰來保護資料

減少 Redshift Spectrum 對 提出的請求數量的第一步 AWS KMS 是減少存取的檔案數量。若要執行此動作,請嘗試將小型檔案合併成大型檔案。我們建議使用大於 64 MB 的檔案。

如果您的 Redshift Spectrum 請求經常受到調節 AWS KMS,請考慮請求提高密碼編譯操作 AWS KMS 請求率的配額。若要申請提高限制,請參閱Amazon Web Services 一般參考中的 AWS 服務限制

超過資源限制

Redshift Spectrum 會對請求可以使用的記憶體數量強加上限。需要更多記憶體的 Redshift Spectrum 請求失敗,導致下列錯誤。

error:  Spectrum Scan Error: Resource limit exceeded

有兩個常見的原因可能會造成 Redshift Spectrum 請求超出其記憶體限額:

  • Redshift Spectrum 會處理大塊資料,這些資料不能以較小的區塊分割。

  • 大型彙總步驟是由 Redshift Spectrum 處理。

建議您使用支援平行讀取的檔案格式,分割大小為 128 MB 或更少。如需支援的檔案格式和建立資料檔的一般指導方針,請參閱Amazon Redshift Spectrum 中查詢的資料檔案。使用不支援平行讀取的檔案格式或壓縮演算法時,建議您將檔案大小保持在 64 MB 與 128 MB 之間。

分割的資料表沒有傳回資料列

如果您的查詢沒有從分割的外部資料表傳回任何資料列,請檢查是否已為此外部資料表新增分割區。Redshift Spectrum 僅會掃描使用 ALTER TABLE … ADD PARTITION 明確新增之 Amazon S3 位置中的檔案。請查詢 SVV_EXTERNAL_PARTITIONS 畫面以尋找現有分割區。針對每個缺少的分割區執行 ALTER TABLE … ADD PARTITION

未授權的錯誤

請確認叢集的 IAM 角色是否允許存取 Amazon S3 檔案物件。如果您的外部資料庫位於 Amazon Athena 上,請確認 IAM 角色是否允許存取 Athena 資源。如需詳細資訊,請參閱Amazon Redshift Spectrum 的 IAM 政策

不相容的資料格式

對於單欄檔案格式 (如 Apache Parquet),該欄位類型已嵌入了資料。CREATE EXTERNAL TABLE 定義中的欄位類型必須與資料檔案的欄位類型相符。如果有不相符的部分,您將收到類似以下的錯誤訊息:

File 'https://s3bucket/location/file has an incompatible Parquet schema for column ‘s3://s3bucket/location.col1'. Column type: VARCHAR, Par

由於訊息長度限制,錯誤訊息可能會被截斷。若要獲取包含欄位名稱與欄位類型的完整錯誤訊息,請查詢 SVL_S3LOG 系統畫面。

以下範例會查詢 SVL_S3LOG 以取得最後完成的查詢。

select message from svl_s3log where query = pg_last_query_id() order by query,segment,slice;

以下是顯示完整錯誤訊息的結果範例。

                            message
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––-
Spectrum Scan Error. File 'https://s3bucket/location/file has an incompatible
Parquet schema for column ' s3bucket/location.col1'. 
Column type: VARCHAR, Parquet schema:\noptional int64 l_orderkey [i:0 d:1 r:0]\n

若要更正此錯誤,請修改外部資料表以符合 Parquet 檔案的欄位類型。

在 Amazon Redshift 使用 Hive DDL 時的語法錯誤

Amazon Redshift 支援 CREATE EXTERNAL TABLE 的資料定義語言 (DDL) (類似於 Hive DDL)。但是,這兩種類型的 DDL 有時並不完全相同。如果您複製了 Hive DDL 以建立或更改 Amazon Redshift 外部資料表,則可能會遇到語法錯誤。以下是 Amazon Redshift 與 Hive DDL 之間的差異範例:

  • Amazon Redshift 需要單引號 ('),而 Hive DDL 支援雙引號 (")。

  • Amazon Redshift 不支援 STRING 資料類型。請改用 VARCHAR。

建立暫存資料表的許可

要執行 Redshift Spectrum 查詢,資料庫使用者必須具有在資料庫中建立臨時資料表的許可。下列範例可在資料庫 spectrumdb 上授予臨時許可至 spectrumusers 使用者群組。

grant temp on database spectrumdb to group spectrumusers;

如需詳細資訊,請參閱GRANT

無效的範圍

Redshift Spectrum 預期 Amazon S3 中屬於外部資料表的檔案在查詢期間不會被覆寫。如果發生這種情況,可能會導致以下錯誤。

Error: HTTP response error code: 416 Message: InvalidRange The requested range is not satisfiable

為避免發生錯誤,請確定 Amazon S3 檔案在使用 Redshift Spectrum 查詢時不會覆寫這些檔案。

無效的 Parquet 版本編號

Redshift Spectrum 會檢查它存取的每個 Apache Parquet 檔案的中繼資料。若檢查失敗,可能會導致類似下列內容的錯誤:

File 'https://s3.region.amazonaws.com/s3bucket/location/file has an invalid version number

導致檢查失敗的常見原因有兩個:

  • Parquet 檔案在查詢期間已被覆寫 (請參閱無效的範圍 )。

  • Parquet 檔案已損毀。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。