hive中grouping sets的使用
select A, B, C, group_id, count(A) from tableName group by --declare columns A, B, C grouping sets ( (A,C), (A,B), (B,C), (C) )其中grouping sets中的(A,C), (A,B), (B,C), (C) 代表4個group by 組合, 相當於寫了四個sql查詢語句使用了四個不同的group by策略。 group_id是為了區分每條輸出結果是屬於哪一個group by的資料。它是根據group by後面宣告的順序欄位是否存在於當前group by中的一個二進位制位組合資料。 比如(A,C)的group_id: group_id(A,C) = grouping(A)+grouping(B)+grouping (C) 的結果就是:二進位制:101 也就是5. select中的欄位是完整的A,B,C,但是我們知道由於group by的存在,select 欄位本不應該出現非group by欄位的,所以這裡我們要特別說明,如果直譯器發現group by A,C 但是select A,B,C 那麼執行時會將所有from 表取出的結果複製一份,B都置為null,也就是在結果中,B都為null。