什么';从Amazon Redshift卸载创建RFC-4180友好CSV文件的最佳方法是什么?
使用什么';从Amazon Redshift卸载创建RFC-4180友好CSV文件的最佳方法是什么?,csv,amazon-redshift,Csv,Amazon Redshift,使用UNLOAD时,Amazon Redshift实际上没有CSV选项(例如,类似于PostgreSQL的COPY命令中提供的WITH CSV) 如果使用转义选项,则红移将用\转义双引号。例如,Excel不知道如何处理斜杠。根据RFC-4180,它应该使用双引号 如果使用双引号括起字段,则使用双引号 出现在字段中时,必须在其前面加上 另一个双引号。例如: “aaa”、“b”、“bb”、“ccc” 所以。。。除非我们能找到一种方法让红移正确地避开它们,否则报价将破坏导出 鉴于以下数据: # sel
UNLOAD
时,Amazon Redshift实际上没有CSV选项(例如,类似于PostgreSQL的COPY
命令中提供的WITH CSV
)
如果使用转义
选项,则红移将用\
转义双引号。例如,Excel不知道如何处理斜杠。根据RFC-4180,它应该使用双引号
如果使用双引号括起字段,则使用双引号
出现在字段中时,必须在其前面加上
另一个双引号。例如:
“aaa”、“b”、“bb”、“ccc”
所以。。。除非我们能找到一种方法让红移正确地避开它们,否则报价将破坏导出
鉴于以下数据:
# 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
,Excel等会继续在所有逗号上断开列,包括“转义”的(ADDQUOTES
)李>\,
- 如果我们同时使用
和ESCAPE
,您将得到您在初始问题示例中看到的结果ADDQUOTES
- 如果我们使用
,但不使用ADDQUOTES
,那么它将在数据中使用双引号中断李>ESCAPE
- 当然,如果我们不使用任何一个,那么我们也会在逗号和可能的引号上中断
是否有一种可以同时容纳数据中的引号和逗号的解决方法?缩放解决方案是使用perl/sed处理内容并将其转换为正确的CSV 这些标志是必需的:
分隔符“,”ADDQUOTES ESCAPE
aws s3 cp s3://mybucket/non_csv/part_0000-|\
#仅当向后找到奇数个反斜杠时,才将“”取消为“”
perl-pe的/((?”)| perl-pe的/((?)从文档中看,它似乎还不够聪明,无法仅在需要引号时添加引号。在一个完美的世界中,您需要添加一个RFC4180
子句,它就可以开始遵守标准。
$ echo '"","\"\"Hi\\\\\"","\\\\","\<tab>"' | perl -pe 's/((?<![\\])(\\\\)*)\\"/\1""/g' | perl -pe 's/((?<![\\])(\\\\)*)\\/\1/g' | sed -e 's/\\\\/\\/g'
"","""""Hi\\""","\\","<tab>"