半角の「¥」をデータとして扱いたいというケースがあるかと思います。(※説明のために「¥」を全角で表記しています)
Verticaではデータロード時のデフォルトのエスケープ文字が半角「¥」のため、何もオプションを指定をしないと「¥」が欠落した状態でロードされてしまいます。そこで、「¥」もデータとしてロードする方法をご紹介します。
エスケープ文字を指定せずにロードした場合
以下は「¥1,000」のデータを含むCSVファイルをロードした場合の実行例です。「¥」が欠落した状態でロードされていることが分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ 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) |
エスケープ文字を指定してロードした場合
以下は任意のエスケープ文字を指定してロードをした場合の実行例です。以下のようにエスケープ文字を「¥」以外の文字を指定することで「¥」もデータとしてロードすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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で確認しています。- 投稿タグ
- エスケープ文字