0
点赞
收藏
分享

微信扫一扫

Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)

桑二小姐 2022-09-21 阅读 229

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。


1.问题描述



Hive表中存储的Timestamp类型的字段日期显示与Impala中查询出来的日期不一致。关于这个问题前面Fayson也讲过《​​Hive中的Timestamp类型日期与Impala中显示不一致分析​​》,在SQL中需要添加from_utc_timestamp函数进行转换,在编写SQL时增加了一定的工作量。本篇文章主要讲述通过设置Impala Daemon参数来实现,不需要增加from_utc_timestamp函数进行转换。


2.测试准备



1.创建一个简单的测试表


create table date_test4(
 
id INT,
 
create_date INT,
 
create_date_str STRING
);


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_unix


2.向表中插入一条数据


将当前时间的时间戳和字符串插入到date_test4表中


select unix_timestamp() tt,cast(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as string) dates;


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_unix_02


insert into date_test4 values(1, 1511507041, '2017-11-24 02:04:01');


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_unix_03


3.通过Hive查询时间显示如下


select id,create_date_str,from_unixtime(create_date) from date_test4;


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_hive_04


4.通过Impala查询时间显示如下


select id,create_date_str,cast(create_date as timestamp) from date_test4;


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_cloudera_05


可以看到通过Hive查询看到的时间与通过Impala查询看到的时间不一致;


3.解决方法



1.登录CM,进入Impala服务,进入配置项


Cloudera Manager -> Impala -> Configuration-> Impala Daemon (Scope) -> Impala Daemon Command Line Argument AdvancedConfiguration Snippet (Safety Valve),增加参数:-use_local_tz_for_unix_timestamp_conversions



Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_hive_06


2.保存配置并重启Impala服务


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_hive_07


根据引导进行重启Impala服务。


3.重启成功后,执行SQL进行查询



可以看到再次执行查询的时候,不需要将时间戳转换到指定的时区,时间戳转换后的时间与原始时间一致。


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_hive_08


参考文档:​​http://www.cloudera.com/documentation/enterprise/5-11-x/topics/impala_datetime_functions.html​​


4.其他问题



在我们上述测试中,时间戳使用的是int类型存储,需要使用cast函数来将字段转为TimeStamp类型,parquet格式的表进行转换时区也是正常的。如果表的字段类型默认为TimeStamp类型,则不需要使用cast函数转换,需要注意的是parquet格式的表,在查询的时候任然存在时区的问题,需要在impala daemon命令行高级配置代码段(安全阀)增加如下参数:


-use_local_tz_for_unix_timestamp_conversions
-convert_legacy_hive_parquet_utc_timestamps


Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_unix_09


保存重启Impala。



为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。





推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)_hive_10

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操


举报

相关推荐

0 条评论