我有两个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年)之前的日期值。有什么建议吗?感谢
答案 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