OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

「¥」を文字データとしてロードする方法

公開日:
更新日:
データロード
#エスケープ文字

半角の「¥」をデータとして扱いたいというケースがあるかと思います。(※説明のために「¥」を全角で表記しています)
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で確認しています。