Hadoop 连接两个表后配置单元时间戳值更改
我有两个配置单元表,一个保存一个带有时间戳数据类型的日期值。如果我使用键查询一条特定记录,它会正确显示日期值。 从表1中选择科目索引、科目打开日期,其中科目索引=1234Hadoop 连接两个表后配置单元时间戳值更改,hadoop,timestamp,hive,Hadoop,Timestamp,Hive,我有两个配置单元表,一个保存一个带有时间戳数据类型的日期值。如果我使用键查询一条特定记录,它会正确显示日期值。 从表1中选择科目索引、科目打开日期,其中科目索引=1234 acct_id account_open_date 1234 1963-03-01 00:00:00 但是,当将此表与另一个表联接时,返回的时间戳值在2031年更改为某个值 选择a.账户密钥,b.账户开户日期 从表2 a到表1 b的左外连接 在a.acct\U键上=b.acct\U键 acct_id
acct_id account_open_date
1234 1963-03-01 00:00:00
但是,当将此表与另一个表联接时,返回的时间戳值在2031年更改为某个值
选择a.账户密钥,b.账户开户日期
从表2 a到表1 b的左外连接
在a.acct\U键上=b.acct\U键
acct_id account_open_date
1234 2031-03-19 00:00:00
似乎此问题仅发生在Unix纪元时间(1970)之前的日期值。有什么建议吗?谢谢这里有两个问题,第一件事是join不使用时间戳和历元时间戳。在您的最后一行中,我假设联接返回的是其他时间戳的正确时间戳。如果我错了,请纠正我。因此,如果问题得到解决,您可以查看以处理纪元时间我无法重现您看到的内容,但是,您可以尝试将
帐户打开日期
转换为字符串
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
我试过了。在嵌套查询中将时间戳转换为字符串,如下所示。我也尝试过不使用嵌套查询,但不起作用。有人知道为什么吗 未工作版本:
SELECT
a.acct_id
,CAST(b.account_open_date AS STRING) new
,other_columns
FROM
db.table1 a,
LEFT OUTER JOIN db.table2 b ON (a.acct_id = b.acct_id)
;
SELECT
a.acct_id
,b.new
,other_columns
FROM
db.table1 a
LEFT OUTER JOIN (
SELECT
*
,CAST(account_open_date AS STRING) new
FROM
db.table2
) b
ON (a.acct_id=b.acct_id)
工作版本:
SELECT
a.acct_id
,CAST(b.account_open_date AS STRING) new
,other_columns
FROM
db.table1 a,
LEFT OUTER JOIN db.table2 b ON (a.acct_id = b.acct_id)
;
SELECT
a.acct_id
,b.new
,other_columns
FROM
db.table1 a
LEFT OUTER JOIN (
SELECT
*
,CAST(account_open_date AS STRING) new
FROM
db.table2
) b
ON (a.acct_id=b.acct_id)
谢谢你的建议。我想知道,我是否可以直接按如下方式转换为字符串,而不是使用嵌套查询。这两者有区别吗?选择a.acct\u id,cast(b.account\u open\u date as string)new,db.table1 a中的其他列,在a.acct\u id=b.acct\u id上左外连接db.table 2 b;如上所述,我无法重现您看到的内容,但我假设在
连接过程中,
时间戳列被更改。所以我做了cast
然后join
。如果这是你担心的,我不认为会有太大的性能差异。