1. 程式人生 > >【hive】hive表很大的時候查詢報錯問題

【hive】hive表很大的時候查詢報錯問題

一段時間 partition 查詢 query order exception concat 使用 小時

  線上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表很大的時候查詢報錯問題