半角の「¥」をデータとして扱いたいというケースがあるかと思います。(※説明のために「¥」を全角で表記しています)
Verticaではデータロード時のデフォルトのエスケープ文字が半角「¥」のため、何もオプションを指定をしないと「¥」が欠落した状態でロードされてしまいます。そこで、「¥」もデータとしてロードする方法をご紹介します。
エスケープ文字を指定せずにロードした場合
以下は「¥1,000」のデータを含むCSVファイルをロードした場合の実行例です。
「¥」が欠落した状態でロードされていることが分かります。
$ cat //test.csv
2018|\1,000 ★データに「¥」が含まれている
$ vsql -w testdb
dbadmin=> create table tab1 (col1 varchar(30),col2 varchar(30));
CREATE TABLE
dbadmin=> copy tab1 from '//test.csv' delimiter '|' direct;
Rows Loaded
-------------
1 ★1件のデータがロードされた
(1 row)
dbadmin=> select * from tab1;
col1 | col2
--------+----------
2018 | 1,000 ★しかし、「¥」が欠落した状態でロードされている
(1 rows)エスケープ文字を指定してロードした場合
以下は任意のエスケープ文字を指定してロードをした場合の実行例です。以下のようにエスケープ文字を「¥」以外の文字を指定することで「¥」もデータとしてロードすることができます。
dbadmin=> copy from 'PATH' delimiter '|' escape E'\001' direct;
^^^^^^^^^^^^^^
★エスケープ文字を指定
dbadmin=> copy tab1 from '//test.csv' delimiter '|' escape E'\001' direct;
Rows Loaded
-------------
1 ★1件のデータがロードされた
(1 row)
dbadmin=> select * from tab1;
col1 | col2
--------+----------
2018 | \1,000 ★「¥」も含まれた状態でロードされた
(1 rows)参考情報
エスケープ文字には「E’\001’」から「E’\177’」までの範囲のASCIIコードを指定できます。
ASCIIコードの対応表も合わせてご確認ください。
【参照】Loading Delimited Data
https://my.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AdministratorsGuide/BulkLoadCOPY/LoadingUTF-8FormatData.htm
【参照】ASCII文字コード対応表
http://digital.ni.com/public.nsf/allkb/4AC046450185922B86256F18004A03CF
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。