こんにちは!中の人です。
今回も前回のレシピに引き続き、Amazon Redshift編です!
今まで4回にわたってAmazon Redshiftでのデータのインポート方法について紹介させてもらいましたが、実際に操作を行なっていると様々なエラーが返ってきます。
記事を書く中でも数々のエラーが出ました。今回のレシピでは、エラーメッセージとその対処方法について紹介します。
※ 『SQL Workbench』での操作をベースとして記述しております。
今までのAmazon Redshiftでのデータのインポートに関するレシピは下記を参照してください。
■ Amazon Redshift編~CSVファイルのデータをインポートしてみよう!~
■ Amazon Redshift編~MySQLのデータをインポートしてみよう!~
■ Amazon Redshift編~複数ファイルを一括インポートしてみよう!~
■ Amazon Redshift編~圧縮ファイルをインポートしてみよう!~
それでは、データインポートの際のエラーについて記述していきます。
エラーの表示ですが、主に以下の場所に表示されます。
上側で実行された結果が下側に表示されます。
エラーが起きたクエリが赤く強調されているので複数実行した場合もエラーを特定することが容易です。
では順番にメッセージについての説明していきましょう!
SELECT executed successfully
SELECTが成功している事と、実行時間が表示されます。
SELECT以外にINSERT/UPDATE/DELETE/COPYなどがあります。
An I/O error occured while sending to the backend.
クエリを送っている間にエラーが発生した時に表示されます。
長時間操作を行わなかった場合によく発生します。再度実行すると問題なく実行できる場合もありますが、新たにconnectすることでも解消されます。
An error occurred when executing the SQL command: [SQL文]
SQL文にエラーがあった特の表示です。
この場合、より詳細なエラーが表示されます。
ERROR: column “***” does not exist in [テーブル名]
他のSQLにもあるエラーは一通りあります。上記は参照しているカラムが無い場合のエラーです。
ERROR: The specified S3 prefix ‘***’ does not exist
S3からコピーを行う場合に参照先のバケットやファイルが無い場合のエラーです。
ERROR: Load into table ‘***’ failed. Check ‘stl_load_errors’ system table for details.
このエラーが表示されることがよくあると思います。その時は以下のクエリを実行してviewを作成します。
1 2 3 4 5 6 |
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); |
作成したloadviewに対して、「stl_load_errors」が収納されていることが確認できます。
確認方法はSQL文で以下の様に参照する事も可能です。
1 |
select * from loadview where table_name='[テーブル名]'; |
また、SQL Workbenchの「Database explorer」にタブを切り返して、参照することも可能です。
以下に、エラーコードについて簡単にまとめておきます。
Error code | 説明 | 対処方法 |
---|---|---|
1200 | 未知のエラー! | サポートにお問い合わせだそうです。見たことないですが。 |
1201 | delimiter が見つかりません。 | SQL文のdelimiterの指定が間違えているか、データのフォーマットに間違い無いか確認しましょう。 |
1202 | 入力データのカラム数が構造より多いです。 | カラム数が間違えていないか、特定行だけカラム内にdelimiterが入っていないか確認しましょう。 |
1203 | 入力データのカラム数が構造より少ないです。 | カラム数が間違えていないか確認しましょう。 |
1204 | 指定したカラムサイズより大きなデータがあります。 | 入力するデータのサイズ(文字数)を見なおすか、テーブル側のカラムサイズを大きくしましょう。 |
1205 | データフォーマットが正しくありません。 | 該当カラムに正しくないデータフォーマットが含まれます。該当カラムのデータを見直しましょう。 |
1206 | タイムスタンプフォーマットが正しくありません。 | Redshiftで許可しているタイムスタンプのフォーマットに変更しましょう。 |
1207 | データが予期している範囲外です。 | 該当部分のデータを見直しましょう。 |
1208 | FLOATフォーマットエラー | FLOATのフォーマットのデータを入力するか、型を見直しましょう。 |
1209 | DECIMALフォーマットエラー | DECIMALのフォーマットのデータを入力するか、型を見直しましょう。 |
1210 | BOOLEANフォーマットエラー | BOOLEANのフォーマットのデータを入力するか、型を見直しましょう。 |
1211 | 入力行にデータがありません。 | . |
1212 | 読み込むファイルがありません。 | 指定しているバケットやファイル名を見直しましょう。 |
1213 | NOT NULLなのにデータがありません。 | NULLを許可するか、データを入れましょう。 |
1214 | VARCHARフィールドエラー | . |
1215 | CHARフィールドエラー | CHARに日本語を入れていませんか? |
いかがでしたでしょうか?
エラーメッセージの見方と対処方法がわかることで、よりスムーズにRedshiftを使うことができます。
他にもエラーが見つかりましたらアップデートしていきたいと思います!
次回は『Amazon Redshift編~S3ホスティングのログを取り込んでみよう!~』として、S3に溜まったアクセスログを取り込む方法を紹介します。
お楽しみに!