2016-12-20 5 views
1

私は同じCSVファイルとメタデータを持っています。このCSVの列は、パイプで区切られています。シンボル。次のようにサンプルデータがある:Hiveでコンマ区切りの10進値を処理する方法は?

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

ここsalary列が型小数のものではなく、小数点セパレータとしてperiod .を使用する、comma ,が使用されます。

以下のようにHive外部テーブルを作成しました。このデータでは、HiveはsalaryカラムのNULLを表示しています。

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/'; 

私は予想通り、その後Stringsalary列のデータ型を変更した場合、ハイブが正常に動作します。

この特定の列のタイプがDECIMALで、小数点の区切りがcomma (,)で、period (.)の記号ではないことをHiveに伝える方法を知りたいと思います。

+1

ファイル内のカンマ区切り記号を小数点記号に置き換えることはできません。 – Andrew

+0

これらのファイルは他のチームによってダンプされています。カンマ区切りを置き換えるためにmap-reduceプログラムやSparkを書くこともできますが、それを行う前に、私が使うことができるHiveに何かがあるかどうかをチェックしたいと思っていました。 – Shekhar

答えて

4

salaryを文字列として簡単に作成し、コンマを上のビューに置き換えることができます。これはおそらく、データが大きく、他の誰かがそれを所有している可能性が高いため、最も簡単なことです。

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

関連する問題