Hive 如何在配置单元中处理逗号分隔的十进制值?

Hive 如何在配置单元中处理逗号分隔的十进制值?,hive,hortonworks-data-platform,decimal-point,Hive,Hortonworks Data Platform,Decimal Point,我有一个CSV文件和相同的元数据。此CSV中的列由管道|符号分隔。样本数据如下: name|address|age|salary|doj xyz | abcdef|29 |567,34|12/02/2001 此处的salary列为decimal类型,但不使用period。作为十进制分隔符,使用了逗号 我创建了配置单元外部表,如下所示,对于此数据,配置单元显示了工资列的NULL create external table employee as( name string,

我有一个CSV文件和相同的元数据。此CSV中的列由管道|符号分隔。样本数据如下:

name|address|age|salary|doj
xyz | abcdef|29 |567,34|12/02/2001
此处的
salary
列为decimal类型,但不使用
period。
作为十进制分隔符,使用了
逗号

我创建了配置单元外部表,如下所示,对于此数据,配置单元显示了
工资
列的
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/';
如果我将
salary
列的数据类型更改为
String
,那么正如预期的那样,配置单元工作正常


我想知道如何告诉Hive,这个特定的列是
DECIMAL
类型,十进制分隔符是
comma(,)
,而不是
句点(.)
符号。

您可以轻松地将salary作为字符串构建表,并在顶部的视图中替换逗号。这可能是最容易做到的事情,因为数据很大,可能是别人拥有的

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

为什么不能用小数替换文件中的逗号分隔符?这些文件很大,被其他团队转储。我可以编写一些map reduce程序或Spark来替换逗号分隔符,但在此之前,我想检查一下Hive中是否有我可以使用的东西。谢谢。我认为这是一个简单的方法。