0014-Hive中的Timestamp类型日期与Impala中显示不一致分析

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

1.问题描述

Hive表中存储的Timestamp类型的字段显示日期与Impala中查询出来的日期不一致。

2.问题复现

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

2.向表中插入一条测试数据

insert into date_test4 values(1,‘1503751615‘,‘2017-08-26 08:46:55‘);

获取当前系统时间存入表中:

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.问题分析

3.1Hive的from_unixtime

Hive官网from_unixtime函数说明:

Return Type Name(Signature) Description
string from_unixtime(bigint unixtime, string format) Converts the number of seconds from unix epoch (1970-01-01 00:00:00 UTC) to a string representing the timestamp of that moment in the current system time zone in the format of "1970-01-01 00:00:00".

在Hive中通过from_unixtime函数将TIMESTAMP时间戳转换成当前时区的日期格式的字符串,默认格式为“yyyy-MM-dd HH:mm:ss”,所以Hive在查询的时候能正确的将存入的时间戳转成当前时区的时间;

3.2Impala的TIMESTAMP

默认情况下,Impala不会使用本地时区存储时间戳,以避免意外的时区问题造成不必要的问题,时间戳均是使用UTC进行存储和解释。具体说明请参考官方文档:

http://impala.apache.org/docs/build/html/topics/impala\_timestamp.html#timestamp

4.解决方法

使用Impala的from_utc_timestamp函数指定时区进行时间转换,事例如下:

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

指定时区后时间与原始Hive中显示时间一致,时区查看参考如下地址:

http://zh.thetimenow.com/time-zones-abbreviations.php

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花!
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

原文地址:http://blog.51cto.com/14049791/2318338

时间: 2024-11-07 06:21:04

0014-Hive中的Timestamp类型日期与Impala中显示不一致分析的相关文章

Oracle中的TIMESTAMP类型[转]

原文:http://wangyaobeijing.blog.163.com/blog/static/158330320113276114762/ 1 SQL> create table test_time (col_time timestamp); 2 3 表已创建. 4 5 SQL> insert into test_time values (to_timestamp('0001-1-1 0:0:0.0', 'syyyy-mm-dd hh24:mi:ss.ff')); 6 7 已创建 1 行

MYSQL表中设置字段类型为TIMESTAMP时的注意事项

在MYSQL中,TIMESTAMP类型是用来表示日期的,但是和DATETIME不同,不同点就不再这里说明了. 当我们在使用TIMESTAMP类型设置表中的字段时,我们应该要注意一点,首先我们在表中新增一个类型为TIMESTAMP的字段: 如上图所示,系统为类型为TIMESTAMP的tm字段自动创建了默认值CURRENT_TIMESTAMP(系统日期),下面我们看表中的数据,新增的列自动填充了系统日期的值: 下面我们在表中继续新增一个类型为TIMESTAMP类型的字段tm1,然后查看表结构: 如上

(12)Powershell中变量的类型

Window Powershell中变量的类型与Java,C#等高级语言中变量的类型不一样,可以不用显示指定Powershell中变量的类型,即Powershell中的变量具有更大的灵活性.Powershell中的变量采用 .Net Framework类型. 默认情况下,当变量只有一个值时,变量的数据类型由赋予变量的值决定.例如,下面的语句创建一个整数 (System.Int32) 类型的变量: PS C:\> $a=3 如果需要确定变量的 .NET Framework 类型,可以使用 GetT

【C#学习路途之一】数据类型中的值类型

刚刚学习了C#的数据类型中的值类型,在C#中,数据类型分为三中,一种是值类型,另一种是引用类型,最后一种不常用,是指针类型,这个在C语言中经常使用,到现在我都没搞明白! 整数类型: 数据类型 含义 取值范围 sbyte 有符号8位整数 -128到127 byte 无符号8位整数 0到255 short 有符号16位整数 -32768到32767 ushort 无符号16位整数 0到65535 int常用 有符号32位整数 2三十一次方 到 2三十一次方-1 uint 无符号32位整数 0到429

es中的date类型

JSON中没有date类型,所以es中的date可以是: ①包含格式化的date的字符串,例如"2018-01-01"或者"2018/01/01 12:00:00" ②一个long型的数字,代表从1970年1月1号0点到现在的毫秒数 ③一个integer型的数字,代表从1970年1月1号0点到现在的秒数 在es内部,date被转为UTC,并被存储为一个长整型数字,代表从1970年1月1号0点到现在的毫秒数 date类型字段上的查询会在内部被转为对long型值的范围查

关于c++中的复合类型

目录 数组 字符串 结构体 共用体 枚举 指针 数和指针的关系 常见的存储方式 数组替代品 一.数组 存储在每个元素中值的类型 数组名 数组中的元素数 通用格式:typename arrayname [arraysize]; 数组从0开始编号,在最后一个元的索引,比数组长度小1 初始化时可以用大括号{}为元素赋值,中间用逗号隔开.如果只对数组一部分进行赋值,则编译器把其他赋予0 c++11新增数组初始化可以不用=.大括号可以不包含任何东西,默认全为0 . 禁止缩窄转换,如浮点型转整型,int a

在hive中直接对timestamp类型取max报错

之前直接对timestamp类型做max操作, select id,max(updatetime) updatetime from his.tag group by id; 结果查询的结果有的显示为1970-01-01,如下图: 解决办法: 先将timestamp类型用unix_timestamp函数转换成bigint 然后进行取max操作,最后再将结果通过from_unixtime函数转换成string select id,from_unixtime(max(unix_timestamp(up

将 javascript 中的 timestamp(时间戳) 转 c# 的 datetime类型

相信很多人在工作中都会遇到需要将 timestamp(时间戳) 转换为 datetime 类型,特别是做网站开发的时候,有时候需要将前端传递过来的 timestamp 转为 datetime 类型,而在转的过程中发现了需要注意的地方. 首先先说说在 javascript 中产生 timestamp 的方式,一般有以下几种方式: var date = new Date(); //获取timestamp var timestamp1 = date.getTime(); var timestamp2

关于MySQL中的三种日期类型

Mysql中我们经常用来存储日期的数据类型有三种:Date.Datetime.Timestamp. Date数据类型用来存储没有时间的日期.Mysql获取和显示这个类型的格式为"YYYY-MM-DD".支持的时间范围为"1000-00-00"到"9999-12-31". Datetime类型存储既有日期又有时间的数据.存储和显示的格式为 "YYYY-MM-DD HH:MM:SS".支持的时间范围是"1000-00-0