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

Export specific query data to CSV file from netezza database

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

数据格式为:

col1,col2,col3

或:

"col1","col2","col3"

我正在使用查询:

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

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

示例table:

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

我也试过了,但我在 csv:

中得到输出
a,b,Germany\, NA

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

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

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

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

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

您可以使用 ESCAPECHAR '@' 来使用“@”而不是反斜杠 仅将反斜杠用作 escape character。问题是 csv 文件需要一种方式来表示 "this comma is data, not a delimiter" - 这就是转义字符的用途。使用您的 csv 文件的代码应配置为期望使用相同的转义字符。

这是您在使用松散定义的数据格式(如 csv)时 运行 遇到的怪癖之一。只要您定义生产者和消费者都期望的定界符和转义字符——并且您使用相同的字符编码——就可以了。

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

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

IBM 参考资料:

可以通过使用 nzsql 命令行实现所需的输出 statement.The 这种方法的唯一限制是最大文件将限制为 2 GB。这里是 link 来自 IBM 知识库 Sending query results to an output file

[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"