联合两个表中都有unix_timestamp()函数

时间:2016-12-20 09:38:23

标签: sql hive hiveql

我有两个表A和B.两个都有相同的列名。我想合并这两个表并将其加载到表C.表C也有与A和B相同的列名,以及时间戳中的另一列(用于捕获合并时间)。我不想在表C中重复。我尝试了union,但是因为表C中的一列时间戳数据类型而获得重复值。

例如,下面是我的示例查询

insert overwrite table TableC 
select field1,field2, unix_timestamp() as field3 from table_A
UNION
select field1,field2, unix_timestamp() as field3 from table_B

两个unix_timestamp()函数返回不同的时间戳(只有一毫秒的差异),由于时间戳,我得到重复的数据。

还有另一种方法可以在联合时获得两个函数的相同时间戳吗?

1 个答案:

答案 0 :(得分:3)

  

UNIX_TIMESTAMP()
  以秒为单位获取当前的Unix时间戳   这个功能是   非确定性并阻止对查询进行适当的优化 -
  自2.0以来,这已经被弃用,而有利于CURRENT_TIMESTAMP

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

insert overwrite table TableC 
select field1,field2, unix_timestamp(current_timestamp) as field3 from table_A
UNION
select field1,field2, unix_timestamp(current_timestamp) as field3 from table_B

其他解决方法

insert overwrite table TableC 

select      field1,field2,unix_timestamp() as field3

from        (         select field1,field2 from table_A
            union all select field1,field2 from table_B
            ) t

group by    field1,field2

insert overwrite table TableC 

select      field1,field2,unix_timestamp() as field3

from        (     select field1,field2 from table_A
            union select field1,field2 from table_B
            ) t