我在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
我该怎么做?
答案 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