2016-07-25 8 views
-1

バルクロードメソッドCOPYコマンドを使用して、CSVファイルをPostgreSQLテーブルにロードしています。いくつかのフィールドには( "|"、 ""、 ";"などのように)悪い文字がありますので、読み込み中に別のエラーが発生します。タブ区切り、コンマ区切り、他あまりにオプション、が、運。PostgreSQLへのロード中にCSVデータをフィルタリングまたはクリーンアップ

私はCOPYコマンドを使用してのPostgreSQLにそれをロードする前に、CSVデータをきれいにすることができますか何かのデフォルトに不正な文字を置き換えることができます任意のCOPYコマンドの構文がある方法はありますか?

これらは私がしようとしている構文の一部です:事前に

COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER ',' NULL '?'; 
COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER '|' NULL '?'; 
COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER E'\t' NULL '?'; 
COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER '<>' NULL '?'; 

おかげ

+0

あなたのファイルがMAL-形成されている場合、あなたは基本的に2つのオプションがあります。 (a)PostgreSQLに 'COPY 'しようとする前に準備してください。 (b)レコードを1列のテーブルに 'COPY'し、PostgreSQL内のデータを 'クリーンアップ'します。 – Nicarus

+0

@Nicarus別の2つのオプションがあります:(c) 'copy'コマンドの' copy ... 'コマンドを使用します(v 9.3以降)。 (d)ファイルのプロバイダに、CSV標準に対応する形式を修正するよう依頼する。 – Abelisto

+0

@Abelisto - PostgreSQL内またはその外側で "クリーン"されています。 :-) – Nicarus

答えて

1

utf-8を使ってエンコードされていないファイルを取得することがあります。

:あなたは例えばMAL-形成されたファイルを、持っている場合

COPY tblsf FROM '/filelocation/test_clean.csv' WITH CSV HEADER DELIMITER ','; 

iconv -f utf-8 -t utf-8 -c /filelocation/test.csv > /filelocation/test_clean.csv 

そして(コマンドの下のフィールドはカンマで区切られていることを前提として)、PostgreSQLのコピーを試してみてください。これを試してみてください

company,owner 
John's Pizza, LLC,John Smith 
Burger Co,Jones, Mike 

訂正された形式でデータを再保存する必要があります。たとえば:あなたはクリーンなファイルを持っていたら

"company","owner" 
"John's Pizza, LLC","John Smith" 
"Burger Co","Jones, Mike" 

は、あなたはそれを編集することができ、それが(Excelでたとえば、またはPythonでcsvモジュールを使用して)別の区切り文字を使用して再保存します。新しい区切り文字とそれを保存する前に、あなたはパイプ|の場合には、例えば、ファイルのうち、その区切り文字をスクラブすることになるでしょう:

sed -i 's/|//g' test_clean.csv 
関連する問題