我試圖將一些數據加載到Vertica中。其中一列的是在0.0的範圍內的浮點數至10.0,實施例:將嚴重格式的數字加載到Vertica中
5.9,3.7,1.0,3.2等等
但不是:5.93,3.71214,1 ...
所以它總是四捨五入到小數點後一位,即使它爲零也不會被忽略。
問題是,小數點分隔符幾乎可以是任何東西。主要是它的「。」或「,」但我看過「/」甚至「:」。經過無數次嘗試,我決定完全擺脫它(想想「乘以10」)以獲得:59,37,10,32等。
這是我寫的COPY命令:
number_source FILLER VARCHAR(4),
number as (REGEXP_REPLACE(number_source, '[^0-9]', '', 1, 0, 'b'))::NUMERIC,
問題是,它不起作用。加載數據的幾分鐘後,Vertica的吐出了這一點:
vsql:load.sql:83: ERROR 3682: Invalid input syntax for numeric: ""
如果我嘗試使用:: INTEGER而不是::數字的,我得到這個:
vsql:load.sql:83: ERROR 2827: Could not convert "" to an int8
這可能是因爲有一個錯誤的值(根本不是數字),並且REGEXP_REPLACE刪除了所有內容,所以我留下了一個空字符串導致這個問題。或者這是我不知道的其他事情。我必須使用'b'修飾符,因爲存在非UTF8字符的亂碼行,並且在這些行上也會失敗。
我完全可以丟失這些損壞的行,但Vertica總是在這種情況下回滾,即使我沒有指定「ABORT ON ERROR」,也沒有任何結果。除了在加載到Vertica之前預處理數據集,有什麼方法可以解決這個問題嗎?
你可以加載到臨時登臺表,執行清理,然後加載到你的數據表? – Kermit
我可以做任何我想做的事,但我不確定我會如何完成你的建議。 – PeterK
所以你的問題是你的分隔符是不一樣的?(你的數據是由多於一種類型的分隔符分隔的)?這是 ! –