Load Data Enclosed By and Embedded With Double Quotes

Jim_KnicelyJim_Knicely - Select Field - Administrator

Loading string data that is enclosed in double quotes where the string also contains double quotes can be problematic. We could alter the data so that it includes an escape character prior to each embedded double quote, but maybe that’s not possible. Another solution would be to use a FILLER to load the data then TRIM off the double quotes from the ends of the string.

Example:

dbadmin=> \! cat /home/dbadmin/test.txt
"1"|"Vertica just keeps getting "BETTER" and "BETTER"!"|9.3

dbadmin=> CREATE TABLE test (index INT, client_quote VARCHAR(100), version VARCHAR(5));
CREATE TABLE

dbadmin=> COPY TEST FROM '/home/dbadmin/test.txt' ENCLOSED BY '"' REJECTED DATA TABLE test_bad;
Rows Loaded
-------------
           0
(1 row)

dbadmin=> SELECT rejected_reason FROM test_bad;
    rejected_reason
------------------------
Too many columns found
(1 row)

dbadmin=> COPY TEST FROM '/home/dbadmin/test.txt' ENCLOSED BY '"' ESCAPE '"' REJECTED DATA TABLE test_bad;
ERROR 3169:  ENCLOSED BY and ESCAPE AS can not be the same value

dbadmin=> COPY test(index, client_quote_f FILLER VARCHAR, client_quote AS TRIM(BOTH '"' FROM client_quote_f), version) FROM '/home/dbadmin/test.txt' REJECTED DATA TABLE test_bad;
Rows Loaded
-------------
           1
(1 row)

dbadmin=> SELECT * FROM test;
index |                   client_quote                    | version
-------+---------------------------------------------------+---------
     1 | Vertica just keeps getting "BETTER" and "BETTER"! | 9.3
(1 row)

Helpful Links:
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Statements/COPY/COPYParameters.htm
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/AdministratorsGuide/BulkLoadCOPY/IgnoringColumnsAndFieldsInTheLoadFile.htm
https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/String/TRIM.htm

Sign In or Register to comment.