2017-03-10 71 views
2

Amazon S3のデータをAmazon Redshiftのテーブルにプルしています。表にはさまざまな列が含まれています。列データには特殊文字が含まれる場合があります。Amazon Redshift COPYコマンドでデリミタをエスケープする

copyコマンドには、Delimiterというオプションがあります。ここでは、デリミタを指定してデータをテーブルにプルすることができます。私は区切り文字を使用してS3へ(unload command)をエクスポートすると

- - ,を言う - それは正常に動作しますが、私はS3から赤方偏移にインポートしようとすると、問題が特定の列が含まれているためでゾッ

問題が2倍ですコピーコマンドが区切り文字として誤って解釈し、エラーをスローする '、'演算子。

私はさまざまな区切り文字を試しましたが、私のテーブルのデータには、上記の問題の原因となる特殊文字が含まれているようです。

#%または~,のように複数の区切り文字を使用してアンロードしようとしましたが、コピーコマンドを使用してs3からロードすると、デュアル区切り文字はサポートされません。

どのようなソリューションですか?

区切り文字は\を使用してエスケープすることができますが、何らかの理由でそれが動作していないか、コピーコマンドでエスケープするための正しい構文を使用していない可能性があります。

答えて

0

区切り文字はフィールド内に現れるされている場合は、UNLOAD commandADDQUOTESパラメータを使用:Amazonで赤方偏移は、区切り文字自体が含まれているデータの値をアンロードすることができるように、各アンロードされたデータフィールドの周囲

場所引用符。

その後

あなたがADDQUOTESを使用している場合は、データを再ロードする場合は、あなたがCOPYでREMOVEQUOTESを指定する必要があります。

一般的な区切り記号は、テキストファイルではまれなパイプ文字(|)です。

2

次の例は、フィールド値がカンマで区切られたテキストファイルの内容を示しています。あなたはカンマ区切りの入力を指定するには、delimiterパラメータを使用してファイルをロードする場合、いくつかの入力フィールドにカンマが含まれているため

12,Shows,Musicals,Musical theatre 
13,Shows,Plays,All "non-musical" theatre 
14,Shows,Opera,All opera, light, and "rock" opera 
15,Concerts,Classical,All symphony, concerto, and choir concerts 

、COPYコマンドは失敗します。この問題を回避するには、CSVパラメータを使用し、コンマを含むフィールドを引用符で囲みます。引用文字が引用符で囲まれた文字列内に現れる場合は、引用文字を2倍にしてエスケープする必要があります。デフォルトの引用符文字は二重引用符であるため、二重引用符を二重引用符でエスケープする必要があります。新しい入力ファイルは次のようになります。

12,Shows,Musicals,Musical theatre 
13,Shows,Plays,"All ""non-musical"" theatre" 
14,Shows,Opera,"All opera, light, and ""rock"" opera" 
15,Concerts,Classical,"All symphony, concerto, and choir concerts" 


出典: - Load Quote from a CSV File


私が使用してどのような -

COPY tablename FROM 'S3-Path' CREDENTIALS '' MANIFEST CSV QUOTE '\"' DELIMITER ',' TRUNCATECOLUMNS ACCEPTINVCHARS MAXERROR 2 

私が悪いの仮定を行った場合は、コメントと私は私の答えを再フォーカスますしてください。

関連する問題