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

标签 hadoop hive create-table opencsv hive-serde

我正在尝试使用 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

Source Code这解释了将数据类型更改为字符串。

最佳答案

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

参见此处:CSVSerde这个 confluence 是关于 CSVSerDe 的,但是它使用了 Open-CSV

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

这里:Hive "OpenCSVSerde" Changes Your Table Definition

关于hadoop - 当我在 Hive 中使用 OpenCSVSerde 时,为什么所有列都创建为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50001124/

相关文章:

sql-server - 在删除配置单元内部表时保留数据

mysql - 使用 Create view X as - MySql 表 X 已经存在

apache-spark - SparkSQL - 一些分区出现在 HiveServer2 但不是 SparkSQL

hbase - 加入映射到 HBase 的 Hive 表

hadoop - 将 hive 表的一列中的所有值替换为给定值

hive - 如何停止 Hive Metastore 服务?

mysql - 这个mysql创建表查询有什么问题?

excel - VBA - 用于创建 Access 数据库和更新字段属性(日期/时间格式)的 Excel 宏

hadoop - LXC上的Cloudera安装dfs.datanode.max.locked.memory问题

hadoop - HBase 单行事务支持中的行锁定