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

  • 相关阅读:
    dijkstra算法模板 -- 最短路
    0-1背包
    POJ 1456-Supermarket(贪心+并查集)
    CodeForces 556C
    CodeForces
    POJ 2253-Frogger(Floyd变形)
    POJ 1251-Jungle Roads(最小生成树)
    HDU 1846-Brave Game(巴什博弈)
    HDU 1233-还是畅通工程(经典最小生成树)
    51Nod 1649-齐头并进(最短路dijkstra)
  • 原文地址:https://www.cnblogs.com/accipiter/p/7685919.html
Copyright © 2011-2022 走看看