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

68bkxrlz  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(461)

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

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

在这里 salary 列的类型为decimal,但不使用 period . 作为十进制分隔符, comma , 已使用。
我创建了hive external表,如下所示 NULL 为了 salary 列。

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工作正常。
我想知道如何告诉Hive,这个特定的列是类型 DECIMAL 小数点分隔符是 comma (,) 而不是一个 period (.) 符号。

zkure5ic

zkure5ic1#

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

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

相关问题