微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vertica 客户端驱动程序将数据加载到临时表

如何解决Vertica 客户端驱动程序将数据加载到临时表

我使用 Vertica 客户端驱动程序 8.1 版使用以下查询将数据保存到临时表:

copY TempTableName FROM STDIN DIRECT DELIMITER '|' RECORD TERMINATOR '\r\n' NO ESCAPE NO COMMIT;

在使用此语句将数据添加到临时表时,如果我使用了“|”,则会出现错误在要保存的数据中。

解决此问题的方法之一是使用 ENCLOSED BY 参数,例如:

copY TempTableName FROM STDIN DIRECT DELIMITER '|' RECORD TERMINATOR '\r\n' ENCLOSED BY '"' NO ESCAPE NO COMMIT;

但是在这种情况下,如果我在要保存的数据中使用 " 会导致错误。这是处理此问题的通用方法并插入所有可能的字符 ('",.;/:?~!@# $%^&*|/) 保存时在键盘上。

解决方法

经典的 csv 问题。

Vertica COPY 的默认解析器接受栏作为列分隔符,如果字符串被引用,则字符串中的栏作为非分隔符。如果引号本身在字符串中,默认解析器希望它被反斜杠转义。

所以如果你的桌子是:

CREATE TABLE bar (
  id       INT,fullname VARCHAR(64),dob      DATE
);

然后,您的数据文件:bar.csv,可能如下所示:

42|"The Bar \" | \" at the End of the Street"|"1952-02-15"

你加载它,例如:

marvin ~/1/Vertica/supp $ vsql
Welcome to vsql,the Vertica Analytic Database interactive terminal.

Type:  \h or \? for help with vsql commands
       \g or terminate with semicolon to execute query
       \q to quit

sbx=> COPY bar FROM LOCAL 'bar.csv' DELIMITER '|' ENCLOSED BY '"' EXCEPTIONS '/dev/tty' REJECTMAX 2;
 Rows Loaded 
-------------
           1
(1 row)

sbx=> -- show the loaded data ...
sbx=> SELECT * FROM bar;
 id |                fullname                |    dob     
----+----------------------------------------+------------
 42 | The Bar " | " at the End of the Street | 1952-02-15
(1 row)

sbx=> 

这是您要寻找的行为吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。