2017-09-10 63 views
1

我的CSV文件缺少項表示爲缺失值 -如何導入PostgreSQL表

1.2E+09 8.59E+09 In 3 480 5697277130 822277190 OK 1 0 1.23E+09 34295 
4.89E+09 9.59E+09 Out 3 480 1677272449 6747272509 OK 1 -100 8.87E+09 21 
2.33E+09 4.49E+09 In 4 640 4347277310 4567277370 OK 1 - 3.23E+09 123 
2.33E+09 4.49E+09  4 640 4347277310 4567277370 OK 1 - 3.23E+09  

我定義我的表架構如下

create table zip_codes(
    Source numeric, 
    manual numeric, 
    TTYPE varchar, 
    feature1 numeric, 
    feature2 numeric, 
    LBP1 numeric, 
    RLBP numeric, 
    STATUS varchar, 
    NUMBER_OF_TRASVERSE numeric, 
    rank numeric, 
    image_number numeric, 
    parent_class numeric); 

,並從csv文件我進口腳本

test_db=# COPY zip_codes FROM 'C:/tmp/dd_1.csv' delimiter ',' csv; 

我的錯誤:

ERROR: invalid input syntax for type numeric: "-"

CONTEXT: COPY zip_codes, line 7, column rank: "-"

我是否應該將等級的數字模式更改爲其他值以導入 - 值?有關如何獲得這些值導入的任何建議。

這是一個很大的csv,有沒有辦法導入所有( - )值? 有什麼建議嗎?

有什麼建議嗎?

謝謝!

+0

你可以很容易地[刪除](https://stackoverflow.com/questions/5876296/regex-remove-lines-containing)使用記事本++ – JGH

回答

0

您可以指定用於表示空值的字符串。默認情況下,它是\ N,但您可以使用任何字符串,根據doc,使用選項NULL 'null_string'。這將是類似於

test_db=# COPY zip_codes FROM 'C:/tmp/dd_1.csv' delimiter ',' NULL '-' csv; 

如果您有有效的負值,你可能有串玩(有選項卡,逗號或其他),或完全地改變你表示空值的方式。

+0

特定行感謝!但如果我說有多個缺少的條目。說一個表示爲「」,其他表示爲「無效」。有沒有辦法可以合併多個缺失的條目? test_db =#COPY zip_codes FROM'C:/tmp/dd_1.csv'delimiter','NULL' - ',NULL'',NULL'無效'csv;這是正確的嗎? –

+0

@samvenu我懷疑..你可以編輯文件來標準化Null值。 – JGH