这是我正在 Athena 中处理的盗版表配置。数据以 json gzip 文件形式存储在存储桶中。 该列是时间戳,格式为
yyyyMMddTHH:mm:ss
CREATE external TABLE json_tab(
`timestamp` timestamp
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'ignore.malformed.json' = 'true'
)
LOCATION 's3://bucket/'
TBLPROPERTIES (
'json.max.read.errors' = '100',
'compression.type' = 'GZIP' ,
'timestamp.formats' = 'yyyyMMdd\'T\'HH:mm:ss,yyyyMMdd\'T\'HH:mm:ss.SSS,yyyyMMdd HH:mm:ss'
);
查询表格,我得到
HIVE_BAD_DATA: Error Parsing a column in the table: Cannot create timestamp, parsing error
。
如果我将列设置为字符串,然后使用 parse_datetime("timestamp",'yyyyMMdd''T''HH:mm:ss')
选择它就可以了。但这意味着我正在转换选择,这会消耗更多的资源和时间。
尝试了不同的表配置,但没有成功。
解决方案是改为
ROW FORMAT SERDE "org.apache.hive.hcatalog.data.JsonSerDe"