OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

データロードで不正データがある場合にスキップする方法

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

データロードで不正データがある場合に、不正データの行だけスキップする方法

COPYコマンドでデータロードを行うと、カラム幅よりも大きなデータは溢れた分を切り捨てた状態でロードします。
このような挙動をするデータ型としては、varchar型、char型、binary型、varbinary型があります。
※int型はデータを切り捨てずに、エラーになります。

このように切り捨てられるデータはスキップし(ロードしない)、正しいデータの行だけをロードしたいときはCOPYコマンドに”ENFORCELENGTH”オプションをつけて実行してください。

例 : varchar型、char型のカラムに有効桁数以上のデータをロードした場合

$ cat t1.csv

1,abc,abc
2,abcd,abcd
3,abcde,abcde
4,あ,あ
5,あい,あい
6,あいう,あいう
12345678901234567890,test,test


▼COPYコマンドを使用しDIRECTのみでロードすると不正データによるエラーは表示されず、不正データ以外はロードされます。
 
 dbadmin=> truncate table t1;
TRUNCATE TABLE
dbadmin=> copy t1 from '/home/dbadmin/t1.csv' delimiter ','  direct ;
 Rows Loaded
-------------
           6
(1 row)

dbadmin=> select * from t1;
 col1 | col2 | col3
------+------+------
    1 | abc  | abc
    2 | abcd | abcd
    3 | abcd | abcd
    4 | あ   | あ
    5 | あ   | あ
    6 | あ   | あ
(6 rows)


▼COPYコマンドに"ENFORCELENGTH "を付けることで、有効桁数のデータのみがロードされます。

dbadmin=> truncate table t1;
TRUNCATE TABLE
dbadmin=> copy t1 from '/home/dbadmin/t1.csv' delimiter ','  ENFORCELENGTH direct ;
 Rows Loaded
-------------
           3
(1 row)

dbadmin=> select * from t1;
 col1 | col2 | col3
------+------+------
    1 | abc  | abc
    2 | abcd | abcd
    4 | あ   | あ
(3 rows)

関連情報

データロードで不正データがある場合にロールバックする方法
https://www.ashisuto.co.jp/cm/analytics-database/load_error_rollback.html

検証バージョンについて

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