由客戶端提交的HiveQL語句將最終被轉換爲一個或多個MapReduce任務並提交由Hadoop執行。不包含聚合和鏈接的簡單SELECT語句能夠使用一個單獨的只包含Map階段的任務實現。使用GROUP BY子句的聚合能夠使用一個獨立的MapReduce任務實現。包含大量多表鏈接的複雜查詢須要依靠多個MapReduce任務的順序執行來實現。oop
HiveQL編譯器的操做分爲好幾個階段。優化
在第一個階段中,查詢語句被解析並轉化成抽象的語法樹。隨後語法樹將被傳給語義分析器,在這一過程當中,經過使用元數據存儲中的信息來判別列名和數據類型。編譯器
語義分析器將它們轉化並生成一種內部的表達方式,而後傳遞給邏輯計劃生成器,在這裏將生成一顆邏輯操做樹。在邏輯計劃通過數次的傳遞和優化以後,它將被送往物理計劃生成器。通過物理計劃生成器和處理以後,將產生一張DAG(有向無環圖)用以生成最終的MapReduce任務。編譯