从netezza数据库将特定查询数据导出到CSV文件

时间:2018-03-12 17:01:50

标签: python shell csv netezza nzsql

我想将数据从 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”

2 个答案:

答案 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参考资料: