码迷,mamicode.com
首页 > 其他好文 > 详细

【hive】hive表很大的时候查询报错问题

时间:2017-10-18 12:39:03      阅读:375      评论:0      收藏:0      [点我收藏+]

标签:实现   throw   hive   col   _id   错误   ant   blog   目的   

  线上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.后续观察,发现不报如上错误了。

 

【hive】hive表很大的时候查询报错问题

标签:实现   throw   hive   col   _id   错误   ant   blog   目的   

原文地址:http://www.cnblogs.com/accipiter/p/7685919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!