如何在RedShift中安全地卸载/复制表?

cip*_*hor 10 amazon-redshift

在RedShift中,使用卸载/复制将数据移动到S3并加载回红移是很方便的,但我觉得每次都很难选择分隔符.正确的分隔符与表的内容相关!每次遇到加载错误时我都必须更改分隔符.

例如,当我使用以下命令卸载/复制表时:

unload ('select * from tbl_example') to 's3://s3bucket/tbl_example' CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx' delimiter '|' addquotes allowoverwrite;

copy tbl_example2 from 's3://s3bucket/tbl_example' CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx' delimiter '|' removequotes;
Run Code Online (Sandbox Code Playgroud)

如果表恰好有一个内容为其的字段,我将收到加载错误"||".然后我必须更改分隔符'|' 另一个像','再试一次,如果我不走运,也许需要多次尝试才能获得成功.

我想知道是否有办法卸载/复制一个与表内容无关的redshift表,这将永远不会成功地表示表中存储了奇怪的字符串.

cip*_*hor 30

最后,我想出了正确的方法,在卸载和复制命令中添加转义:

unload ('select * from tbl_example') to 's3://s3bucket/tbl_example' CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx' delimiter '|' addquotes escape allowoverwrite;

copy tbl_example2 from 's3://s3bucket/tbl_example' CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx' delimiter '|' removequotes escape;
Run Code Online (Sandbox Code Playgroud)

逃生卸载命令,用于分隔卸载文件CHAR和VARCHAR列,转义字符(\)被放置在以下字符的每一次出现之前:

  • 换行:\n
  • 回车:\ r
  • 为卸载的数据指定的分隔符.
  • 逃脱性格:
  • 引号字符:"或"(如果在UNLOAD命令中指定了ESCAPE和ADDQUOTES).

并用转义复制命令,反斜线字符()中输入的数据将被视为转义字符.紧跟在反斜杠字符后面的字符作为当前列值的一部分加载到表中,即使它是通常用于特殊用途的字符.例如,当任何这些字符是列值的合法部分时,您可以使用此选项来转义分隔符,引号,嵌入换行符或转义字符本身.