hive中grouping sets的使用

2021-09-12 17:17:52 字數 909 閱讀 8596

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,

cgrouping 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。

從HIVE中中查詢

從hive資料庫查詢文件 by ymd 拼接sql語句 string sql select from doc file where contains name wildcard 拼接名稱查詢語句 if stringutils.isnoneempty unstructuredbean.getname ...

Hive 中的日誌

日誌記錄了程式執行的過程,是一種查詢問題的利器。hive中的日誌分為兩種 1.系統日誌,記錄了hive的運 況,錯誤狀況。2.job 日誌,記錄了hive 中job的執行的歷史過程。系統日誌儲存在什麼地方呢 在hive conf hive log4j.properties 檔案中記錄了hive日誌的...

Hive 中的日誌

日誌記錄了程式執行的過程,是一種查詢問題的利器。hive中的日誌分為兩種 1.系統日誌,記錄了hive的運 況,錯誤狀況。2.job 日誌,記錄了hive 中job的執行的歷史過程。系統日誌儲存在什麼地方呢 在hive conf hive log4j.properties 檔案中記錄了hive日誌的...