我想将数据从 netezza数据库导出到 CSV 文件。
数据的格式为:
col1,col2,col3
OR:
"col1","col2","col3"
我正在使用查询:
CREATE EXTERNAL TABLE 'H:\\test.csv' USING ( DELIMITER ',' REMOTESOURCE 'ODBC' ) AS
SELECT * FROM TEST_TABLE
当 col3 包含逗号的字段时,上面的查询无法正常工作,因为它说使用escape char将其导出为'\'。
示例表:
A | B | C
a | b | Germany, NA
我也试过了,但我在 csv 中得到了输出:
a,b,Germany\, NA
或通过在每个列中添加引号我得到输出:
"a","b","Germany\, NA"
在这里,我在字段中获得额外的'\'字符。 我正在寻找解决方案,使用 nzsql 或外部表查询方法或仅编写自己的脚本方法来解决它。
我的预期输出而不更改字段数据:
“a”,“b”,“德国,NA”
答案 0 :(得分:2)
使用nzsql命令行语句可以实现所需的输出。此方法的唯一限制是max file将限制为 2 GB 。这是IBM KB Sending query results to an output file <的链接/ p>
[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"
答案 1 :(得分:1)
您可以使用 {{1}}来使用&#39; @&#39;而不是反斜杠仅作为escape character的反弹。问题是csv文件需要一种说法&#34;这个逗号是数据,而不是分隔符&#34; - 这是escape char用于的内容。消耗csv文件的代码应该配置为期望相同的转义字符。
这是使用像csv这样松散定义的数据格式时遇到的一个怪癖。只要您定义生产者和消费者都期望的分隔符和转义字符 - 并且您使用相同的字符编码 - 您就可以了。
这不会改变您的数据,只是使交换格式更具体。如果您提供有关使用数据的详细信息,我可以更新此答案,以提供有关通知消费者反斜杠用作转义字符的详细信息。
- 编辑 - 显然,netezza 的某些实现仅支持反斜杠作为分隔符。
IBM参考资料: