如何获取蜂巢中给定时区的当前时间

时间:2015-05-04 14:29:01

标签: java hadoop hive

我在Hive中有2个表。

table1包含

timelocation
2015-03-04 15:00 Chicago
2015-03-04 15:00 Denver
2015-03-04 15:00 Honolulu

table2包含

ID                       Description
America/Chicago          CENTRAL STANDARD TIME                              
America/Denver           MOUNTAIN  STANDARD TIME                            
Pacific/Honolulu         HAWAII-ALEUTIAN STANDARD TIME                       

对于table1中的记录说“2015-03-04 15:00 Chicago”,我需要在table2中查找相应的芝加哥记录。它应该读取ID&芝加哥的描述并返回芝加哥目前的中央标准时间,即“2015-05-04 09:11”。

同样对丹佛来说,它必须返回Mountain Standard Time&对于檀香山来说,它必须返回HAWAII-ALEUTIAN STANDARD TIME。

预期输出

timelocation
2015-05-04 09:11
2015-05-04 08:11
2015-05-04 04:11

我该怎么做?

3 个答案:

答案 0 :(得分:3)

我真的不想为你写这个问题,但希望这会指出你正确的方向。您需要加入tbl1 <=> tbl2。从每个表中的相应列中提取城市; split()功能会对您有所帮助。然后有一个漂亮的函数,你可以找到名为from_utc_timestamp()的{​​{3}},它带有一个时间戳(假设为UTC)并将其转换为给定的时区。您还需要将列Description转换为其时区缩写。你可以找到那些here。祝你好运!

答案 1 :(得分:1)

您需要使用以下查询加入 table1 table2

SELECT T1.timelocation,T2.ID,  T2.Description, to_utc_timestamp(SUBSTRING(T1.timelocation,1,16),T2.ID) AS newtime
FROM table 1 T1 INNER JOIN table2 T2 ON SUBSTRING(T1.timelocation,17)= SUBSTRING(regexp_extract(T2.ID,'/\w*',2),2) 

这里的正则表达式函数的输出说America/Chicago将是/Chicago,因此我在输出上做一个子字符串来提取Chicago并匹配子串timelocation列。{/ p>

有关hive正则表达式函数regexp_extract(string subject, string pattern, int index)的详细信息,请查看@Hive Doc

答案 2 :(得分:0)

试试这个     to_utc_timestamp(&#39; 2015-01-01 00:00:00&#39;,&#39; PST&#39;)

返回2015-01-01 08:00:00