我在生产环境(cloudera 5.5)中的hive面临一个非常奇怪的问题,它在我的本地服务器中基本上是不可重现的(不知道为什么),即对于某些记录,我从插入时有错误的时间戳值临时表到主表为String" 2017-10-21 23"转换为时间戳" 2017-10-21 23:00:00"插入时的数据类型。
示例:
2017-10-21 23 -> 2017-10-21 22:00:00
2017-10-22 15 -> 2017-10-22 14:00:00
这种情况非常罕见。意味着delta值约为数据的1%。
Flow :::临时表(外部表)中的数据每小时使用oozie填充。下面插入语句每小时执行一次,使用Oozie工作流从临时表插入到主表(ORC中的内部表)中。
流程摘要::: Linux日志>>复制日志在临时表(外部蜂巢表)>>插入主蜂巢表。
从临时表插入主表:::
FROM
temp
INSERT INTO TABLE
main
PARTITION(event_date,service_id)
SELECT
from_unixtime(unix_timestamp(event_timestamp ,'yyyy-MM-dd HH'), 'yyyy-MM-dd HH:00:00.0'),
col3,
col4,
"" as partner_nw_name,
col5,
"" as country_name,
col6,
col7,
col8,
col9,
col10,
col11,
col12,
col13,
col14,
col15,
kpi_id,
col18,
col19,
col20,
col21,
col23,
col24,
col25,
from_unixtime(unix_timestamp(event_timestamp ,'yyyy-MM-dd HH'), 'yyyy-MM-dd') as event_date,
service_id;
Temp Table :::
hive> desc temp;
OK
event_timestamp string
col2 int
col3 int
col4 int
col5 int
col6 string
col7 string
col8 string
col9 string
col10 string
col11 int
col12 int
col13 string
col14 string
col15 string
service_id int
kpi_id int
col18 bigint
col19 bigint
col20 bigint
col21 bigint
col22 double
col23 string
col24 int
col25 int
Time taken: 0.165 seconds, Fetched: 25 row(s)
主表:::
hive> desc main;
OK
event_timestamp timestamp
col3 int
col4 int
partner_nw_name string
col5 int
country_name string
col6 string
col7 string
col8 string
col9 string
col10 int
col11 int
col12 int
col13 string
col14 string
col15 string
kpi_id int
col18 bigint
col19 bigint
col20 bigint
col21 bigint
col23 double
col24 int
col25 int
event_date date
service_id int
# Partition Information
# col_name data_type comment
event_date date
service_id int
Time taken: 0.175 seconds, Fetched: 32 row(s)
答案 0 :(得分:0)
好像你正在为小时地点添加额外的00 ..
试试这个:
select from_unixtime(unix_timestamp('2017-08-29 05','yyyy-MM-dd HH'),'yyyy-MM-dd HH:00:0');
以上查询给出:
2017-10-21 23:00:0
这是你期待的吗? 你可以添加&y; yyyy-MM-dd HH:00:00.0'如果需要的话。
答案 1 :(得分:0)
如果您使用Hive以镶木地板格式编写数据,则hive会按当地时区偏移量调整时间戳。有关更多信息,请浏览以下链接。