2016-12-20 52 views
2

我有兩個表A和B.兩個表具有相同的列名。我想合併這兩個表並將其加載到表C.表C還具有與A和B相同的列名稱和時間戳記中的另一列(用於捕獲合併時間)。我不想在表C中有重複項。我嘗試使用union,但得到重複值,因爲Timestamp數據類型中的表C中的一列。在兩個表中都有unix_timestamp()函數

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

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

您可以在時間戳字段中插入NULL,然後執行:更新表C設置字段3 = UNIX_TIMESTAMP(),其中場3是你的建議空 –

+0

@GiacomoDegliEsposti感謝。我自己找到了解決方法。我試着像下面,它的工作。 '插入覆蓋表表C 選擇T1.field1,T1.field2,UNIX_TIMESTAMP()作爲場3 從 (從TABLE_A UNION選擇場,場2 選擇場1,從表-B域2)AS T1' –

回答

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 
+0

爲什麼我需要'組由'?沒有'group by'它工作得很好! –

+0

BTW。這很糟糕。我不知道這個問題,我剛剛在我的虛擬機上進行了驗證。感謝您提出:-) –

+1

P.s.請注意,當我使用GROUP BY時,我還使用了UNION ** ALL ** –

相關問題