先下結論:
看了hive 1.1.0 grouping sets 實現(從源碼及執行計划都可以看出與kylin實現不一樣),(前提是可累加,如sum函數)他並沒有像kylin一樣先按照group by 全字段聚合再上卷。
hive實現就是無腦復制,可以理解成是 group by grouping sets 所有組合 然后 在union 起來(grouping sets會比后者少掃描grouping sets組合份原始數據。
tez和sparksql grouping sets之所以快可能是跟kylin實現差不多,先匯總再上卷來減少數據無腦復制成本,這個spark實現有空可以看看)
從執行計划就可以看出 hive grouping sets 實現相當於就一個stage,是做不到先聚合再上卷的。其實就是把原始數據復制grouping sets 組合份