如何使一个不间断的空间空出来' Redshift Copy命令中的字符?

时间:2017-03-23 19:24:15

标签: unicode amazon-redshift

我的Route::post('/', function(Request $request){ dd($request); }); 命令一直收到以下错误:

COPY

我通过以下函数运行它来检查非ASCII字符:

Missing newline: Unexpected character 0x73 found at location 4194303

并且发现我有许多字符返回了def return_non_ascii_codes(input: str): for char in input: if ord(char) > 127: yield ord(char) 代码。在160图表中查看此内容,看起来这是一个Unicode字符:http://www.fileformat.info/info/unicode/char/00a0/index.htm

我想在non-break space命令中NULL这些字符,但不确定我应该使用的字符序列/格式是什么。

COPY命令如下:

COPY

编辑: 我使用Python来查找字符,但Python不会在我的管道中进行任何实际处理。我从COPY xxx FROM 's3://xxx/cleansed.csv' WITH CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx' -- GZIP ESCAPE FILLRECORD TRIMBLANKS TRUNCATECOLUMNS DELIMITER '|' BLANKSASNULL REMOVEQUOTES ACCEPTINVCHARS TIMEFORMAT 'auto' DATEFORMAT 'auto'; 个数据库执行COPY TO STDOUT命令,然后将这些文件直接上传到PostgreSQL,以便复制到S3。所以它需要在这两个地方中的一个处理。

以下是目标表中的两个字段:

Redshift

更新1: 我通过一个函数运行脚本来清理所有非ASCII字符,如下所示:

id                      BIGINT,
quiz_data               VARCHAR(65535)

然后尝试with open(file, 'r') as inf, open(outfile, 'w') as outf: for line in inf: print(return_non_ascii_codes(line)) outf.write(''.join(return_ascii_chars(line))) def return_ascii_chars(input: str): return (char for char in input if ord(char) < 127) 到Redshift。仍然得到以下内容:

COPY

我已经仔细检查过清理过的文件没有任何非ASCII字符...

2 个答案:

答案 0 :(得分:1)

COPY table1 FROM 's3://my_bucket' CREDENTIALS '' ACCEPTINVCHARS 

使用可以在复制命令中使用ACCEPTINVCHARS参数
它非常简单直接。
如果我做了一个错误的假设,请发表评论,我将重新调整我的答案。

答案 1 :(得分:0)

yourvariable.replace(unichr(160),&#34;&#34;)