我已经从json文件创建了配置单元表。
CREATE external TABLE logan_test.t1 (
name string,
start_time timestamp
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
WITH SERDEPROPERTIES (
"timestamp.formats" = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
)
LOCATION 's3://t1/';
我的时间戳数据的格式是 yyyy-MM-dd'T'HH:mm:ss.SSSSSS
.
我为页面中给出的时间戳格式指定了serdeproperty。https://cwiki.apache.org/confluence/display/hive/languagemanual+types#languagemanualtypes-时间戳时间戳
create语句已成功执行,但 select *
失败,出现以下错误。
配置单元错误数据:分析字段1的字段值“2017-06-01t17:51:15.180400”时出错:时间戳格式必须为yyyy-mm-dd hh:mm:ss[.fffffff]
1条答案
按热度按时间l7wslrjt1#
jira hive-9298其中
timestamp.formats
是介绍的,在描述中说是为懒虫。我在文档中没有发现任何其他提到它是为其他serde所做的。解决方案是将时间戳定义为字符串,并在select中进行转换。
例如
yyyy-MM-dd'T'HH:mm:ss.SSSSSS
格式:这对双方都有效
yyyy-MM-dd'T'HH:mm:ss.SSSSSS
以及yyyy-MM-dd HH:mm:ss.SSSSSS
(正常时间戳)如果数据文件中同时存在这两种格式。regex功能强大,可以使用相同的模式解析不同的字符串格式。