メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

Amazon Redshift Spectrum のクエリのトラブルシューティング

以下に、Amazon Redshift Spectrum クエリで発生する可能性のある一般的な問題と重大な問題を特定し、それらの問題に対処するためのクイックリファレンスを示します。Redshift Spectrum クエリで生成されたエラーを表示するには、SVL_S3LOG システムテーブルのクエリを実行します。

再試行数の超過

Amazon Redshift Spectrum リクエストがタイムアウトすると、リクエストはキャンセルされ再送信されます。再試行が 5 回失敗するとクエリは失敗し、次のエラーが表示されます。

error: S3Query Exception (Fetch), retries exceeded

次の原因が考えられます。

  • ファイルサイズが大きい (1 GB 超)Amazon S3 のファイルサイズを確認し、サイズの大きなファイルおよびファイルサイズスキューを探します。サイズの大きなファイルは小さなファイル (100 MB~1 GB) に分割します。ほぼ同じファイルサイズになるようにしてください。

  • ネットワークスループットの遅延。後でクエリを試してください。

パーティション化されたテーブルに行が返されない

クエリでパーティション化された外部テーブルから行が返されない場合は、パーティションがこの外部テーブルに追加されているかどうかを確認します。Redshift Spectrum は、ALTER TABLE … ADD PARTITION を使用して明示的に追加されている Amazon S3 のファイルのみをスキャンします。SVV_EXTERNAL_PARTITIONS ビューにクエリを実行し既存のパーティションを検索します。欠落したパーティションごとに ALTER TABLE ADD … PARTITION を実行します。

権限エラー

クラスターの IAM ロールで Amazon S3 ファイルオブジェクトへのアクセスが許可されていることを確認します。外部データベースが Amazon Athena にある場合は、AWS Identity and Access Management (IAM) ロールが Athena リソースにアクセスできるかどうかを確認します。詳細については、「Amazon Redshift Spectrum 用の IAM ポリシー」を参照してください。

データ形式に互換性がない

Parquet などの列ファイル形式では、列タイプはデータとともに埋め込まれます。CREATE EXTERNAL TABLE 定義内の列タイプは、データファイルの列タイプと一致する必要があります。一致しない場合、次のようなエラーが発生します。

Copy
Task failed due to an internal error. File 'https://s3bucket/location/file has an incompatible Parquet schema for column ‘s3://s3bucket/location.col1'. Column type: VARCHAR, Par

エラーメッセージは、メッセージの長さ制限で切り捨てられている場合もあります。列名と列タイプを含む完全なエラーメッセージを取得するには、SVL_S3LOG システムビューのクエリを実行します。

次の例では、最後に実行されたクエリの SVL_S3LOG をクエリします。

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

次に示すのは、完全なエラーメッセージを表示した結果です。

 message –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––- S3 Query Exception (Fetch). 内部エラーのため、タスクに失敗しました。「https://s3bucket/location/file ファイルは「s3bucket/location.col1」行の Parquet スキーマと一致しません。列タイプ: VARCHAR, Parquet schema:\noptional int64 l_orderkey [i:0 d:1 r:0]\n

エラーを修正するには、外部テーブルを変更し、Parquet ファイルの列タイプと一致させます。

Amazon Redshift で DDL Hive を使用する際の構文エラー

Amazon Redshift は、Hive DDL と類似した CREATE EXTERNAL TABLE 用のデータ定義言語 (DDL) をサポートしています。ただし、2 つの DDL タイプは常に代替可能であるとは限りません。Hive DDL をコピーして Amazon Redshift 外部テーブルを作成または変更した場合、構文エラーが発生する可能性があります。以下に Amazon Redshift と Hive DDL の違いの例を示します。

  • Hive DDL がダブルクォーテーションマーク (") をサポートしているのに対して、Amazon Redshift はシングルクォーテーションマーク (') を使用します。

  • Amazon Redshift は STRING データタイプをサポートしていません。代わりに VARCHAR を使用します。