hive和presto的一些對比
阿新 • • 發佈:2019-01-04
1.本質區別
- Hive是把一個查詢轉化成多個MapReduce任務,然後一個接一個執行。執行的中間結果通過對磁碟的讀寫來同步。然而,Presto沒有使用MapReduce,它是通過一個定製的查詢和執行引擎來完成的。它的所有的查詢處理是在記憶體中,這也是它的效能很高的一個主要原因。
2.執行速度
- presto由於是基於記憶體的,而hive是在磁碟上讀寫的,因此presto比hive快很多,但是由於是基於記憶體的當多張大表關聯操作時易引起記憶體溢位錯誤
3.處理json型別的資料
- presto處理如下:
select
json_extract_scalar(xx['custom'],'$.position')
from table
- hive處理如下:
select
get_json_object(xx['custom'],'$.position')
from table
此外Presto還有一個函式json_extract是直接返回一個json串,根據需要自己需要選擇函式
4.列轉行
- Hive
select student, score from tests lateral view explode(split(scores, ',')) t as score;
- Presto
select student, score from tests cross json unnest(split(scores, ',') as t (score)