加入两个表后,Hive时间戳值会发生变化

时间:2015-06-20 13:45:03

标签: hadoop timestamp hive

我有两个Hive表,一个包含Timestamp数据类型的日期值。如果我使用密钥查询一个特定记录,它会正确显示日期值。   从表1中选择acct_key,account_open_date,其中acct_key = 1234;

 acct_id   account_open_date
 1234      1963-03-01 00:00:00

但是,当将此表与另一个表连接时,返回的时间戳值在2031年更改为某个值 选择a.acct_key,b.account_open_date 来自Table_2,表1中的左外连接b 在a.acct_key = b.acct_key;

acct_id    account_open_date
 1234       2031-03-19 00:00:00

似乎这个问题只发生在Unix纪元时间(1970年)之前的日期值。有什么建议吗?感谢

3 个答案:

答案 0 :(得分:0)

这里有两个问题,首先是加入不使用时间戳和纪元时间戳。在最后一行中,我假设连接正在为其他时间戳返回正确的时间戳。如果我错了,请纠正我。因此,如果问题得到解决,您可以查看here来处理纪元时间

答案 1 :(得分:0)

我无法重现您所看到的内容但是,您可以尝试将account_open_date投射到string

select a.acct_id
    , b.new
    , other_columns
from db.table1
left outer join (
  select *
    , cast(account_open_date as string) new
  from db.table2 ) b
on a.acct_id=b.acct_id

答案 2 :(得分:0)

我试过了。在嵌套查询中将时间戳作为字符串转换,如下所示。我也试过没有嵌套查询,但这不起作用。谁知道为什么?

版本无效:

选择a.acct_id,将(b.account_open_date作为字符串)new,other_columns从db.table1 a,left outer join db.table 2 b a.acct_id = b.acct_id;

工作版:

选择a.acct_id     ,b.new     ,other_columns 来自db.table1 左外连接(   选择 *     ,cast(account_open_date as string)new   来自db.table2)b 在a.acct_id = b.acct_id