2015-05-04 27 views
1

我在Hive中有2个表。如何在配置单元中获得给定时区的当前时间

table1中含有

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

表2包含

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

对于存在于表1的记录说: ​​“2015年3月4日15:00芝加哥”,我需要做一个查找表2中的相应的芝加哥纪录。它应该读取芝加哥的ID &说明并返回芝加哥当前的中央标准时间,即“2015-05-04 09:11”。

同样为丹佛它必须返回山标准时间&为檀香山它必须返回HAWAII-ALEUTIAN标准时间。

预计产量

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

我该怎么办呢?

回答

3

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

0

试试这个 to_utc_timestamp( '2015年1月1日00:00:00', 'PST')

收益2015年1月1日08:00:00

1

你需要加入表1表2使用以下查询:对我们说America/Chicago/Chicago正则表达式功能的

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) 

输出。这里,因此我正在输出的子字符串中提取Chicago并匹配timelocation列的子字符串。

有关蜂房正​​则表达式功能regexp_extract(string subject, string pattern, int index)检查@Hive Doc

+0

'子(REGEXP_EXTRACT())'是矫枉过正的详细信息。只需使用split([str],'\\ /')[1]' – gobrewers14

相关问题