hivehive表很大的时候查询报错问题

Posted Accipiter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hivehive表很大的时候查询报错问题相关的知识,希望对你有一定的参考价值。

  线上hive使用环境出现了一个奇怪的问题,跑一段时间就报如下错误:

FAILED: SemanticException MetaException(message:Exception thrown when executing query : SELECT A0.PART_NAME,A0.PART_NAME AS NUCORDER0 FROM PARTITIONS A0 LEFT OUTER JOIN TBLS B0 ON A0.TBL_ID = B0.TBL_ID LEFT OUTER JOIN DBS C0 ON B0.DB_ID = C0.DB_ID WHERE C0.`NAME` = ? AND B0.TBL_NAME = ? ORDER BY NUCORDER0)

然后,等待一段时间就又可能执行了。

     经过逐步问题定位(拆分各个查询),发现是对一个特大表(每小时大概80G左右数据,高峰时段更大)的查询引起的。在查询中有如下的语句:

where (cast(if(length(hour)<2, concat(day,\‘‘0\‘‘,hour), concat(day,hour)) as INT) between 2017101006 and 2017101017

    其目的是想实现滑动时间窗口几个小时的数据查询,由于有跨天的存在,因此写的和上边一样。但是这样写对于特大表实际上是不行的,没有用到分区。

问题找到了,解决方案如下:

1.针对查询要求,重新设计表,按照天和小时一起来分区,新的分区day_time。

2.用新的表直接查询的时候可以使用day_time between  2017101006 and 2017101017 来查询

3.后续观察,发现不报如上错误了。

 

以上是关于hivehive表很大的时候查询报错问题的主要内容,如果未能解决你的问题,请参考以下文章

HiveHive 基础

HiveHive 一些面试题

HiveHive初识

为啥尽管源代码没有变化,但从一个系统到另一个系统的片段数量却有很大差异?

Hive-基本概念

oracle删除表的时候报错