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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM