蜂巢中的表连接失败
Posted
技术标签:
【中文标题】蜂巢中的表连接失败【英文标题】:Table join in hive fails 【发布时间】:2015-05-07 11:15:42 【问题描述】:我有 hive 中 2 个表的以下数据
table1 包含
locn zone
NY AMERICA/CHICAGO
KC AMERICA/DENVER
LA AMERICA/CHICAGO
表 2 包含
stdtime locn
2015-03-04 15:00:00 NY
2015-03-04 16:00:00 KC
这是我的连接查询
select s.zone,t.stdtime,to_utc_timestamp(t.stdtime,s.zone) as newtime from table1 s inner join table2 t on s.locn=t.locn;
当我在 hortonworks 集群上运行此查询时出现错误
顶点失败,vertexName=Map 1,vertexId=vertex_1430758596575_17289_7_01,诊断=[任务失败,taskId=task_1430758596575_17289_7_01_000001,诊断=[TaskAttempt 0 失败,info=[错误:运行任务时失败:java.lang.RuntimeException:java. lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row "locn":"KC","zone":"America/Denver"
【问题讨论】:
【参考方案1】:请这样尝试
select s.zone,t.stdtime,to_utc_timestamp(t.stdtime,s.zone) as newtime from table1 s join table2 t on s.locn=t.locn;
在 hive 中的语法是 JOIN 而不是 INNER JOIN。
【讨论】:
你能检查一下 to_utc_timestamp(t.stdtime,s.zone) 函数吗?只需删除此功能并运行一次。只是为了确定我们在哪里得到了错误。 没有这个功能也可以。但是当我包含这个函数 to_utc_timestamp(t.stdtime,s.zone) 它失败了。 这意味着问题出在函数而不是连接上。您没有传递正确的参数 fpr 时区字段。再看函数。 timestamp to_utc_timestamp(timestamp, string timezone) 假设给定的时间戳在给定的时区并转换为 UTC(从 Hive 0.8.0 开始)。例如,to_utc_timestamp('1970-01-01 00:00:00','PST') 返回 1970-01-01 08:00:00。以上是关于蜂巢中的表连接失败的主要内容,如果未能解决你的问题,请参考以下文章