当我在Hive中使用OpenCSVSerde时,为什么所有列都被创建为字符串?

时间:2018-04-24 11:59:51

标签: hadoop hive create-table opencsv hive-serde

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

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

Source Code解释了将数据类型更改为String。

1 个答案:

答案 0 :(得分:5)

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

请参见此处:CSVSerde此汇总是关于CSVSerDe,但它使用的是Open-CSV

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

在这里:Hive "OpenCSVSerde" Changes Your Table Definition