2017-03-23 22 views
0

COPYコマンドは次のエラーを受信し続ける:Redshift Copyコマンドで 'no-break space'文字をNULLにする方法は?

Missing newline: Unexpected character 0x73 found at location 4194303

私は非ASCII文字を確認するには、次の関数を使用して、それを実行しました:

def return_non_ascii_codes(input: str): 
    for char in input: 
     if ord(char) > 127: 
      yield ord(char) 

そして、私は数を持っていたことが判明します160コードを返した文字のUnicodeチャートにこれを見ると、これはnon-break space文字であるように見えます:http://www.fileformat.info/info/unicode/char/00a0/index.htm

私はNULLにこれらの文字の私COPYコマンドで実行したいが、私は使用すべきか、正しい文字列/形式が不明です。次のように

COPYコマンドは次のとおりです。

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'; 

EDIT: 私は文字を見つけるためにはPythonを使用しますが、Pythonは私のパイプラインで実際の処理のいずれかを実行しません。私たちのPostgreSQLデータベースからCOPY TO STDOUTコマンドを実行してから、へのコピーのためにそれらのファイルを直接S3にアップロードします。したがって、これらの2つの場所のいずれかで処理する必要があります。私はそうのように、すべての非ASCII文字を浄化する機能を通じてスクリプトを実行した :1

id      BIGINT, 
quiz_data    VARCHAR(65535) 

UPDATE:

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) 

ここで

は、2つの宛先テーブルのフィールドですRedshiftに COPYを試みました。 ( ""、unichr(160))

私はクレンジングファイルは非ASCII文字を持っていないことをダブルチェックしました
Missing newline: Unexpected character 0x20 found at location 4194303 

...

答えて

0

yourvariable.replace:それでも次を取得

+0

これは決してPythonを実行することはありません。 PostgreSQLの 'COPY TO STDOUT'コマンドからS3ファイルにまっすぐ進み、Redshiftにロードされます。だから私はRedshiftまたはPostgreSQL側でそれを処理する必要があります。 – flybonzai

+0

次に、このタグ付きのpythonはなぜですか? – Artagel

+0

OPに 'python'があるだけです。 – flybonzai

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

コピーコマンドでACCEPTINVCHARSパラメータを使用できます。

非常に簡単で簡単です。
私が悪い仮定をした場合は、コメントしてください、私は私の答えに焦点を合わせます。

+0

'ACCEPTINVCHARS'は機能しません。私はすでに私のコマンドにそれを含めています。 – flybonzai

+0

@flybonzai - コピーコマンドで "null as '\ 0'"パラメータを試しましたか? –

+0

はい、私もそれをしました – flybonzai

関連する問題