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

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

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

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

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

  1. create external table employee as(
  2. name string,
  3. address string,
  4. age int,
  5. salary decimal(7,3),
  6. doj string
  7. ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
  8. LOCATION 's3://bucket/folder_having_many_csv_files/';

如果我更改的数据类型 salary 列到 String 然后正如预期的那样,Hive工作正常。
我想知道如何告诉Hive,这个特定的列是类型 DECIMAL 小数点分隔符是 comma (,) 而不是一个 period (.) 符号。

zkure5ic

zkure5ic1#

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

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

相关问题