0

我想将数据从netezza 数据库导出到CSV文件。

数据格式为:

col1,col2,col3

或者:

"col1","col2","col3"

我正在使用查询:

CREATE EXTERNAL TABLE 'H:\\test.csv' USING ( DELIMITER ',' REMOTESOURCE 'ODBC' ) AS
SELECT * FROM TEST_TABLE

当col3具有包含逗号的字段时,上面的查询不起作用,因为它说使用转义字符将其导出为“\”。

示例表:

A | B | C
a | b | Germany, NA

我也试过了,但我在csv中得到了输出:

a,b,Germany\, NA

或者通过在每一列中添加引号,我得到输出:

"a","b","Germany\, NA"  

在这里,我在字段中得到了额外的 '\' 字符。我正在寻找使用nzsql或外部表查询方法或仅编写自己的脚本方法来解决它的解决方案。

在不更改字段数据的情况下我的预期输出:

"a","b","德国, NA"

4

2 回答 2

2

可以使用 nzsql 命令行语句实现所需的输出。这种方法的唯一限制是最大文件将限制为2 GB 。这是来自 IBM KB 的链接将查询结果发送到输出文件

[nz@netezza ~]$ nzsql -d test -A -t -c  "select quote_ident(col1),quote_ident(col2), quote_ident(col3) from test" -o '/nzscratch/test.csv'

输出 :

[nz@netezza ~]$ cat /nzscratch/test.csv
"A"|"B"|"C"
a|b|"Germany, NA"
于 2018-03-13T16:17:17.560 回答
1

您可以使用ESCAPECHAR '@''@' 而不是反斜杠 ,只使用反斜杠作为转义字符。问题是 csv 文件需要一种方式来表示“这个逗号是数据,而不是分隔符”——这就是转义字符的用途。使用您的 csv 文件的代码应配置为使用相同的转义字符。

这是您在使用 csv 等松散定义的数据格式时遇到的怪癖之一。只要您定义生产者和消费者都期望的定界符和转义字符 - 并且您使用相同的字符编码 - 你会没事的。

这不会改变您的数据,它只是使交换格式更加具体。如果您提供有关使用数据的内容的一些详细信息,我可以更新此答案以提供有关通知消费者反斜杠用作转义字符的详细信息。

-- 编辑 -- 显然 netezza 的一些实现只支持反斜杠作为分隔符。

IBM 参考资料:

于 2018-03-12T17:33:14.080 回答