如何在 Hive 中处理逗号分隔的十进制值?
How to handle comma separated decimal values in Hive?
我有一个 CSV 文件和相同的元数据。此 CSV 中的列由竖线 | 分隔象征。样本数据如下:
name|address|age|salary|doj
xyz | abcdef|29 |567,34|12/02/2001
这里的 salary
列是小数类型,但没有使用 period .
作为小数点分隔符,而是使用 comma ,
。
我如下创建了 Hive 外部 table,对于此数据,Hive 显示 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 (.)
符号。
您可以轻松构建 table 并将薪水作为字符串并替换顶部视图中的逗号。这可能是最简单的事情,因为数据很大而且很可能其他人拥有它。
create view table employee_decimal as
select name
, address
, age
, cast(regexp_replace(salary, ',', '.') as decimal(7,3)) as salary
, doj
from employee;
我有一个 CSV 文件和相同的元数据。此 CSV 中的列由竖线 | 分隔象征。样本数据如下:
name|address|age|salary|doj
xyz | abcdef|29 |567,34|12/02/2001
这里的 salary
列是小数类型,但没有使用 period .
作为小数点分隔符,而是使用 comma ,
。
我如下创建了 Hive 外部 table,对于此数据,Hive 显示 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 (.)
符号。
您可以轻松构建 table 并将薪水作为字符串并替换顶部视图中的逗号。这可能是最简单的事情,因为数据很大而且很可能其他人拥有它。
create view table employee_decimal as
select name
, address
, age
, cast(regexp_replace(salary, ',', '.') as decimal(7,3)) as salary
, doj
from employee;