Hive中的Timestamp类型日期与Impala中显示不一致分析(补充)
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
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
);
2.向表中插入一条数据
将当前时间的时间戳和字符串插入到date_test4表中
select unix_timestamp() tt,cast(from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as string) dates;
insert into date_test4 values(1, 1511507041, '2017-11-24 02:04:01');
3.通过Hive查询时间显示如下
select id,create_date_str,from_unixtime(create_date) from date_test4;
4.通过Impala查询时间显示如下
select id,create_date_str,cast(create_date as timestamp) from date_test4;
可以看到通过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
2.保存配置并重启Impala服务
根据引导进行重启Impala服务。
3.重启成功后,执行SQL进行查询
可以看到再次执行查询的时候,不需要将时间戳转换到指定的时区,时间戳转换后的时间与原始时间一致。
参考文档: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
保存重启Impala。
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看
- 国内外电商平台反爬虫机制报告
- Spring框架(一)
- MyBatis框架(三)动态SQL,分页,二进制存入数据库图片
- Spring框架(二)反射机制, 注入, 单例模式, 自动装载, 延迟加载
- Spring框架(三) JDBCTemplate,声明式事务,自动装载(注解)
- SpringMVC 常用注解
- Spring3:AOP
- js中三目运算符和&& || 符的个人浅见
- 原生js怎么为动态生成的标签添加各种事件
- 实现图片懒加载
- SpringMVC框架(四)文件的上传下载,上下文路径
- SpringMVC框架(一)
- HTML link标签media参数
- Mybatis,Spring,SpringMVC框架面试题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- docker上部署MySQL实例
- Tomcat 高并发之道原理拆解与性能调优
- Redis运维之swap空间
- MySQL组复制(MGR)全解析 Part 4 MGR单主模式部署前准备
- Spring 中的自动装配
- antlr4入门篇
- 定位生产问题时,异常堆栈莫名丢了,何解?
- 一个爬取用户所有微博的爬虫,还能断网续爬那种
- MySQL组复制(MGR)全解析 Part 8 多主模式部署指南
- MySQL组复制(MGR)全解析 Part 9 MGR的要求和限制
- MySQL Galera Cluster全解析 Part 3 状态快照传输(SST)
- 一口气搞懂「文件系统」,就靠这 25 张图了
- Oracle ASM 环境增加控制文件
- 利用注解进行 Spring 开发
- 40张图揭秘,「键入网址发生了什么」