OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

データロードで不正データがある場合にロールバックする方法

公開日:
更新日:
データロード
#COPY
#エラー

データロードで不正データがある場合にロールバックする方法

COPYコマンドでオプションを付けずにデータロードを行うと、不正データ(桁溢れなどのデータ)以外は、ロードが正常に実行されます。

※不正データは、Rejected Dataファイルに出力されます。

不正データがあった場合、ロード処理全体をロールバックするようにしたいときは、COPYコマンドに”ABORT ON ERROR”オプションをつけて実行してください。

例 : INT型のカラムに有効桁数以上の数値をロードした場合

▼ファイルの7レコード目に19桁以上の数値を設定

$ more test.csv
1
2
3
4
5
6
9999999999999999999999999


▼COPYコマンドを使用しDIRECTのみでロードすると不正データによるエラーは表示されず、不正データ以外はロードされます。

dbadmin=> copy test from '/home/dbadmin/test.csv' direct;
 Rows Loaded
-------------
           6
(1 row)

dbadmin=> select * from test;
 a
---
 1
 2
 3
 4
 5
 6
(6 rows)


▼COPYコマンドに"ABORT ON ERROR"を付けることで、有効桁数を超える数値のロードで不正データによるエラーが発生しロードデータはロールバックされます。

dbadmin=> copy test from '/home/dbadmin/test.csv' abort on error direct;
ERROR 2035:  COPY: Input record 7 has been rejected (int8 out of range '9999999999999999999999999' for column 1 (a))
dbadmin=> select * from test;
 a
---
(0 rows)

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。