はじめに
データロード(COPYコマンド)のエラー内容はエラーログファイルやエラーレコードファイルに記録されます。
ただし、上記ファイルの出力有無や出力先は、COPYコマンドのパラメータの指定内容によって異なるため、注意する必要があります。
本記事では、COPYコマンドのエラー内容を出力するパラメータをご紹介します。
エラーログファイルの指定方法
エラー内容を出力するログファイルを指定するためには、EXCEPTIONSパラメータを使用します。
構文
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マシン上の指定した箇所に作成されます。
/*** 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パラメータを使用します。
構文
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マシン上の指定した箇所に作成されます。
/*** 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検証バージョンについて
この記事の内容はVertica 9.3で確認しています。
更新履歴
2020/07/21 本記事を公開