在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列,转义字符(\)被放置在以下字符的每一次出现之前:
并用转义在复制命令,反斜线字符()中输入的数据将被视为转义字符.紧跟在反斜杠字符后面的字符作为当前列值的一部分加载到表中,即使它是通常用于特殊用途的字符.例如,当任何这些字符是列值的合法部分时,您可以使用此选项来转义分隔符,引号,嵌入换行符或转义字符本身.
| 归档时间: |
|
| 查看次数: |
12057 次 |
| 最近记录: |