7

我正在尝试使用 OpenCSVSerde 以及一些整数和日期列创建一个表。但是这些列被转换为字符串。这是预期的结果吗?作为一种解决方法,我在这一步之后进行了显式类型转换(这使得整个运行速度变慢)

hive> create external table if not exists response(response_id int,lead_id int,creat_date date ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ('quoteChar' = '"', 'separatorChar' = '\,', 'serialization.encoding'='UTF-8', 'escapeChar' = '~')   location '/prod/hive/db/response' TBLPROPERTIES ("serialization.null.format"="");
OK
Time taken: 0.396 seconds
hive> describe formatted response;
OK
# col_name              data_type               comment

response_id             string                  from deserializer
lead_id                 string                  from deserializer
creat_date              string                  from deserializer

解释将数据类型更改为字符串的源代码。

4

1 回答 1

7

这是 CSVSerDe serde 的已知限制。CSVSerDe 将所有列都视为字符串类型。即使您使用此 SerDe 创建具有非字符串列类型的表,DESCRIBE TABLE 输出也会显示字符串列类型。从 SerDe 检索类型信息。要将表中的列转换为所需的类型,您可以在表上创建一个视图,将 CAST 转换为所需的类型。

见这里:CSVSerde这个融合是关于 CSVSerDe,但它使用 Open-CSV

另见此处:https ://docs.aws.amazon.com/athena/latest/ug/csv.html

在这里:Hive“OpenCSVSerde”改变了你的表定义

于 2018-04-24T12:32:58.563 回答