配置单元1.1中的时间戳问题

t9aqgxwy  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(257)

我在生产环境(cloudera 5.5)的hive中遇到了一个非常奇怪的问题,它在我的本地服务器中基本上是不可复制的(不知道为什么),即对于一些记录,我在从临时表插入主表时时间戳值错误,因为字符串“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

这种情况很少发生。表示增量值约为数据的1%。
流::使用oozie每小时填充temp表(外部表)中的数据。下面的insert语句每小时执行一次,以便使用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;

临时表:::

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)
omtl5h9j

omtl5h9j1#

如果您正在使用配置单元以Parquet格式写入数据,那么配置单元将按本地时区偏移量调整时间戳。欲了解更多信息,请通过以下链接。
有一张与 Impala 有关的吉拉票#2716
cloudera impala时间戳文档在这里

qybjjes1

qybjjes12#

好像你也在为人事部加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

这就是你所期待的吗?如果需要,可以添加“yyyy-mm-dd hh:00:00.0”。

相关问题