2016-12-20 79 views
1

我有一個CSV文件和相同的元數據。此CSV中的列由管道|分隔符號。樣本數據如下:如何在Hive中處理逗號分隔的十進制值?

name|address|age|salary|doj 
xyz | abcdef|29 |567,34|12/02/2001 

這裏salary列型小數的但不是使用period .爲十進制分隔符,用於comma ,

我創建了Hive外部表,如下所示,對於此數據Hive顯示NULLsalary列。

create external table employee as(
     name string, 
     address string, 
     age int, 
     salary decimal(7,3), 
     doj string 
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 
LOCATION 's3://bucket/folder_having_many_csv_files/'; 

如果我改變salary列的數據類型String則不如預期,蜂房工作正常。

我想知道如何告訴Hive這個特定列的類型是DECIMAL,小數點分隔符是comma (,)而不是period (.)符號。

+1

任何你不能用小數點替換文件中的逗號分隔符的原因嗎? – Andrew

+0

這些文件很大,被其他團隊傾倒。我可以編寫一些map-reduce程序或Spark來替換逗號分隔符,但在此之前我想檢查一下Hive中是否有某些我可以使用的東西。 – Shekhar

回答

4

您可以使用字符串輕鬆構建工資表,並在頂部視圖中替換逗號。這可能是最簡單的事情,因爲數據很大,而且可能是其他人擁有的。

create view table employee_decimal as 
select name 
    , address 
    , age 
    , cast(regexp_replace(salary, ',', '.') as decimal(7,3)) as salary 
    , doj 
from employee; 
+0

謝謝。我認爲這是簡單的方法。 – Shekhar