zoukankan      html  css  js  c++  java
  • 【hive】hive表很大的时候查询报错问题

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

  • 相关阅读:
    SQL经常使用语法
    【LeetCode】Generate Parentheses 解题报告
    Linux进程间通信(IPC)
    Android菜单menu控件大全
    Android入门常见问题
    c++ struct与class的差别
    hdu 2011 多项式求和
    Android安全机制介绍
    HDOJ 4003 Find Metal Mineral
    HDU 2845 Beans (两次线性dp)
  • 原文地址:https://www.cnblogs.com/accipiter/p/7685919.html
Copyright © 2011-2022 走看看