hive中grouping sets的使用

hive中grouping sets 數量較多時如何處理? 
 
能夠使用以下設置來
set hive.new.job.grouping.set.cardinality = 30;
這條設置的意義在於告知解釋器,group by以前,每條數據複製量在30份之內。
 
grouping sets是一種將多個group by 邏輯寫在一個sql語句中的便利寫法。
 
demo:
 
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。
相關文章
相關標籤/搜索