OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

データロード処理のエラー内容をファイル出力する方法

公開日:
技術情報
データロード
#COPY

はじめに

データロード(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 本記事を公開