我有从JSON文件创建的Hive表。
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
。
我为页面中给出的时间戳格式指定了SERDEPROPERTIES。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-TimestampstimestampTimestamps
创建语句已成功执行但select *
因以下错误而失败。
HIVE_BAD_DATA:解析字段值“2017-06-01T17:51:15.180400”时出错 对于字段1:时间戳格式必须为yyyy-mm-dd hh:mm:ss [.fffffffff]
答案 0 :(得分:1)
在其中引入了return RequestWidgets(key: ValueKey(modal.item[i].id),data: modal.item[i]);
// Or some value unique for each item
的吉拉HIVE-9298在描述中说,它用于LazySimpleSerDe。我没有在文档中找到其他SerDe所做的其他提及。
解决方案是将时间戳定义为STRING并在选择中进行转换。
timestamp.formats
格式的示例:
yyyy-MM-dd'T'HH:mm:ss.SSSSSS
如果数据文件中同时存在两种格式,则这对select timestamp(regexp_replace(start_time, '^(.+?)T(.+?)','$1 $2'))
和yyyy-MM-dd'T'HH:mm:ss.SSSSSS
(正常时间戳记)都适用。
yyyy-MM-dd HH:mm:ss.SSSSSS
Regex功能强大,您可以使用相同的模式解析不同的字符串格式。