我有两个表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()函数返回不同的时间戳(只有一毫秒的差异),由于时间戳,我得到重复的数据。
还有另一种方法可以在联合时获得两个函数的相同时间戳吗?
答案 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