【发布时间】:2016-01-28 18:37:38
【问题描述】:
在使用 UNLOAD 时,Amazon Redshift 并没有真正的 CSV 选项(例如,类似于 PostgreSQL 的 COPY 命令中的 WITH CSV)。
如果您使用ESCAPE 选项,Redshift 会使用\ 转义双引号。例如,Excel 不知道如何处理该斜线。根据 RFC-4180,它确实应该使用双引号
如果使用双引号将字段括起来,则使用双引号 出现在字段内必须通过在它前面加上 另一个双引号。例如:
"aaa","b""bb","ccc"
Sooo... 引号会破坏导出,除非我们能想办法让 Redshift 正确地转义它们。
给定以下数据:
# select * from unload_test;
test_field | test_field_number
--------------------------------------------+-------------------
"No," she said, "that's not how we do it." | 5
Hi! This is a test, yo. | 5
- 如果我们使用
ESCAPE但不使用ADDQUOTES,Excel 等人将继续拆分所有逗号上的列,包括“转义”的逗号 (\,)。 Example - 如果我们同时使用
ESCAPE和ADDQUOTES,您会得到您在初始问题示例中看到的结果。 - 如果我们使用
ADDQUOTES但我们不使用ESCAPE,那么它将在数据中的双引号中中断。 Example - 当然,如果我们不使用其中任何一个,我们也会使用逗号和可能的引号来换行。
是否有可用的解决方法来同时容纳数据中的引号和逗号?
【问题讨论】:
-
从文档来看,它似乎也不够聪明,只能在需要引号时添加引号。
-
在一个完美的世界里,你会添加一个
RFC4180子句,它就会开始遵守标准。
标签: csv amazon-redshift