Time Impala无法从拼花文件中读取无日期时间戳

Time Impala无法从拼花文件中读取无日期时间戳,time,timestamp,parquet,impala,cloudera-cdh,Time,Timestamp,Parquet,Impala,Cloudera Cdh,Impala v2.11.0+(CDH v5.11.1+)无法从拼花文件中读取只有时间值的时间戳 create table TT2(t timestamp) STORED AS PARQUET; insert into TT2 (t) values ("10:00:00"); select * from TT2; +------+ | t | +------+ | NULL | +------+ WARNINGS: Parquet file 'hdfs://localhost:20500/

Impala v2.11.0+(CDH v5.11.1+)无法从拼花文件中读取只有时间值的时间戳

create table TT2(t timestamp) STORED AS PARQUET;
insert into TT2 (t) values ("10:00:00");
select * from TT2;
+------+
| t    |
+------+
| NULL |
+------+
WARNINGS: Parquet file 'hdfs://localhost:20500/test-warehouse/tt2/714d741212df3180-cd4e670800000000_226739479_data.0.parq' column 't' contains an out of range timestamp. The valid date range is 1400-01-01..9999-12-31.`

即使select语句返回null,metastore管理器也会显示该列具有该值

4714-12-30 10:00:00.0

我要寻找的是另一种查询此数据以获取时间值的方法,而不是手动查找所有无日期时间戳列并将其转换为字符串

我试过了

从TT2中选择强制转换(t为字符串)

从TT2中选择日期部分('hour',t)

从TT2的时间戳(tms,“HH:mm:ss”)中选择

从TT2中选择提取(tms,“小时”)


从TT2中选择extract(cast(tms为字符串),“hour”)

我认为,由于您只对时间部分感兴趣,因此我建议简单地用一些可接受的日期替换日期部分,然后impala提供从时间戳中提取时间的函数(您在数据之上的所有进一步查询都可以利用它),所以我认为一个可能的解决办法是

1) 创建时间戳列为字符串的临时表

2) 现在您将获得类似“4714-12-30 10:00:00.0”的值

3) 现在,你必须做一些事情, a) 使用“拆分”提取10:00:00.0 b) 用“2018-11-12”标记提取的部分 现在,您可以获得格式为“2018-11-12 10:00:00.0”的值

4) 现在,可以将上一步的结果转换为时间戳

5) 使用select[列名col1,2,3,…],(cast(concat(“2018-11-12”,split_-spart(col,delim,index))作为时间戳)将数据从临时表插入原始表