2017-11-16 14 views
-1

copyコマンドを使用して、大容量のcsvファイルを約1GBのサイズにインポートします。 しかし、条件は、列A1のデータ型が数値で、csvファイルのデータも数値型ですが、値の一部が英数字であることを確認する場合です。そのため、インポートできません。 私が望むのは、列番号A1の数値以外の値をNULLに設定し、データをインポートすることです。 コピーコマンドで必要なすべての条件。 csvファイルのサンプル。CSVファイルをpostgresqlにインポート

<table border=true> 
 
<tr> 
 
<th >A1</th> 
 
<th>A2</th> 
 
<th>A3</th> 
 
</tr> 
 
<tr> 
 
<td>90</td> 
 
<td>91</td> 
 
<td>92</td> 
 
</tr><tr> 
 
<td>A21</td> 
 
<td>B23</td> 
 
<td>C43</td> 
 
</tr><tr> 
 
<td>12</td> 
 
<td>13</td> 
 
<td>14</td> 
 
</tr> 
 
<tr> 
 
<td>12ddwd3</td> 
 
<td>1yhh53</td> 
 
<td>1dfsf754</td> 
 
</tr> 
 
<tr> 
 
<td>12</td> 
 
<td>13</td> 
 
<td>14</td> 
 
</tr> 
 
</table>

表のメタデータは、私がテーブルにCSVファイルをインポートすると、数値以外の値がNullに設定されますA1の数値、A2の数値、A3が数値 になります。

+1

1.インポートし、英数字、3 ALTER TABLEがcolumntype int型を変える2.アップデートセットのnullは –

+3

これは、CSVファイルではありません。 – lexicore

+0

あなたが表示する入力はCSVではなくXMLです。 –

答えて

0

あなたcan not条件naly COPYファイルから。あなたの代わりに何ができるか:テキストとして

create table t (a1 text, a2 text, a3 text); 
COPY t from file; 
update t set a1 = null where a1 !~ '^\d{1,}$'; 
alter table t alter column a1 type int using a1::int; 
+0

私は100万レコードの100列のためにこのアプローチに従っている場合は、20~30分を取る.Updateと変更に時間を要する。クエリを最適化するソリューションが必要 – user6097055

関連する問題