はじめに
データロード(COPYコマンド)のエラー内容はエラーログファイルやエラーレコードファイルに記録されます。ただし、上記ファイルの出力有無や出力先は、COPYコマンドのパラメータの指定内容によって異なるため、注意する必要があります。
本記事では、COPYコマンドのエラー内容を出力するパラメータをご紹介します。
エラーログファイルの指定方法
エラー内容を出力するログファイルを指定するためには、EXCEPTIONSパラメータを使用します。構文
1 2 3 |
SQL=> COPY スキーマ名.テーブル名 SQL-> FROM 'CSVファイル名' SQL-> EXCEPTIONS 'エラーログファイル名'; |
実行方式毎のデフォルト値
Verticaサーバ上でCOPYコマンドを実行する場合と、ETLサーバなどリモートからCOPY LOCALを実行する場合でエラーログファイルのデフォルト値が異なります。コマンド | デフォルト値 |
---|---|
COPY | <カタログディレクトリ>/CopyErrorLogs/<テーブル名>-<CSVファイル名>-copy-from-exceptions (例:/home/dbadmin/catalog/vdb/v_vdb_node0001_catalog/CopyErrorLogs/t1-t1.csv-copy-from-exceptions) |
COPY LOCAL | なし (ログファイルなし) |
※COPY LOCALを使用する場合、クライアント側で出力するログファイル名を指定します。
実行例
Windowsマシン上に置いているCSVデータを、リモートでVerticaにデータロードする場合を想定した実行例です。EXCEPTIONSパラメータで指定したエラーログファイルは、Windowsマシン上の指定した箇所に作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/*** CSVデータを確認(3レコード目のみ、3カラム目のデータが存在 ***/ DOS> type C:\work\csv\test.csv 1,TEST1 2,TEST2 3,TEST3,2020 /*** テーブル定義を確認(2カラムのテーブル) ***/ dbadmin=> \d test List of Fields by Tables Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key --------+-------+--------+-------------+------+---------+----------+-------------+------------- public | test | col1 | int | 8 | | f | f | public | test | col2 | varchar(30) | 30 | | f | f | (2 rows) /*** データロード ***/ SQL=> COPY test SQL-> FROM LOCAL 'C:\work\csv\test.csv' SQL-> EXCEPTIONS 'C:\work\log\test.log' SQL-> DELIMITER ','; /*** エラーログファイルを確認(3レコード目のエラー内容) ***/ DOS> >type C:\work\log\test.log COPY: Input record 3 has been rejected (Too many columns found). Please see , record 1 for the rejected record. This record was record 3 from C:\work\csv\test.csv |
エラーレコードファイルの指定方法
エラーとなったレコードデータを出力するファイルを指定するためには、REJECTED DATAパラメータを使用します。構文
1 2 3 4 |
SQL=> COPY スキーマ名.テーブル名 SQL-> FROM 'CSVファイル名' SQL-> EXCEPTIONS 'エラーログファイル名' SQL-> REJECTED DATA 'エラーレコードファイル名'; |
実行方式毎のデフォルト値
Verticaサーバ上でCOPYコマンドを実行する場合と、ETLサーバなどリモートからCOPY LOCALを実行する場合でエラーレコードファイルのデフォルト値が異なります。コマンド | デフォルト値 |
---|---|
COPY | <カタログディレクトリ>/CopyErrorLogs/<テーブル名>-<CSVファイル名>-copy-from-rejected-data (例:/home/dbadmin/catalog/vdb/v_vdb_node0001_catalog/CopyErrorLogs/t1-t1.csv-copy-from-rejected-data) |
COPY LOCAL | なし (エラーレコード出力ファイルなし) |
※COPY LOCALを使用する場合、クライアント側で出力するエラーレコードファイル名を指定します。
実行例
Windowsマシン上に置いているCSVデータを、リモートでVerticaにデータロードする場合を想定した実行例です。REJECTED DATAパラメータで指定したエラーレコードファイルは、Windowsマシン上の指定した箇所に作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/*** CSVデータを確認(3レコード目のみ、3カラム目のデータが存在 ***/ DOS> type C:\work\csv\test.csv 1,TEST1 2,TEST2 3,TEST3,2020 /*** テーブル定義を確認(2カラムのテーブル) ***/ dbadmin=> \d test List of Fields by Tables Schema | Table | Column | Type | Size | Default | Not Null | Primary Key | Foreign Key --------+-------+--------+-------------+------+---------+----------+-------------+------------- public | test | col1 | int | 8 | | f | f | public | test | col2 | varchar(30) | 30 | | f | f | (2 rows) /*** データロード ***/ SQL=> COPY test SQL-> FROM LOCAL 'C:\work\csv\test.csv' SQL-> EXCEPTIONS 'C:\work\log\test.log' SQL-> REJECTED DATA 'C:\work\bad\err.csv' SQL-> DELIMITER ','; /*** エラーレコードファイルを確認(3レコード目のエラーレコード内容) ***/ DOS> type C:\work\bad\err.csv 3,TEST3,2020 |