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

She*_*har 4 hive decimal-point hortonworks-data-platform

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

name|address|age|salary|doj
xyz | abcdef|29 |567,34|12/02/2001
Run Code Online (Sandbox Code Playgroud)

这里的salary列是十进制类型,但不是period .用作十进制分隔符,comma ,而是使用。

我创建蜂巢外部表如下以及用于该数据配置单元显示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/';
Run Code Online (Sandbox Code Playgroud)

如果我按预期将salary列的数据类型更改为Stringthen,则 Hive 工作正常。

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

inv*_*ell 6

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

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