表的hive導入:
create table XXXXXXX201512 (N多字段構成)STORED AS PARQUETFILE;
insert into XXXXXXX201512 select * from XXXXXXX20151231;
以上的insert,3000萬的資料,一般是6、7分鐘的樣子,,一個表到總表産生的分片數是40多個,之後查詢一張表大概1秒左右
别用Spark-SQL進行以上的插入過程,原因如下:
測試用sparksql來導入:
create table XXXXXXX201512P (N多字段構成)STORED AS PARQUETFILE;
insert into XXXXXXX201512P select * from XXXXXXX20151231;
以上的insert,3000萬的資料,超過了10分鐘,一個表到總表産生的分片數是80多個,查詢1.5秒左右
從檔案數論證hive和sparksql對以上過程的分片機制:
得出結論:hive的上述過程是按照block的進行兩兩合并,然後壓縮成為parquet檔案的;sparksql是按照每個block壓縮成為parquet檔案的,同時,sparksql把空part也會算一個進行壓縮!!!
原表的資料:
part0,65個block;part1,0個block;part2,11個block;part3,0個block;part4,4個block;
block數量一共是80個,而hive産生的總表中由這個表過去的資料的part數量是40個!!!sparkSQL産生的總表中由這個表過去的資料的part數量是82個!!!
由此可以看出,在進行上述操作的時候,hive至少比spark還是優化了一點的。
具體是不是我說的兩兩合并,有待看源碼驗證!!!