蜂巢中的表连接失败

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。

以上是关于蜂巢中的表连接失败的主要内容,如果未能解决你的问题,请参考以下文章

蜂巢加入失败 mr.MapredLocalTask

为啥在 Access 中使用 UNION ALL 时出现 ODBC 连接失败错误?

在哪里进行连接以展平表..?蜂巢或甲骨文

数据存储 - 订阅错误,连接失败:

MariaDB jdbc 连接在批量插入期间失败

与主线程在 QThread 中创建的连接对象失败,并且一个 QThread 中的对象之间的连接失败