Hive高階聚合函式 group by擴充套件

2021-10-01 06:59:44 字數 3208 閱讀 2941

目錄

指定多種聚合的維度、層次,對多個group by + union all進行替換、簡化

可實現從右到左遞減多級的統計,顯示統計某一層次結構的聚合

可以實現多個任意維度的查詢,會統計所選列中值的所有組合的聚合

按照一定規則給統計的各維度組合打標,並返回標識值。

1. group by擴充套件——grouping sets

簡要說明:在乙個 group by 查詢中,根據不同的維度組合進行聚合,等價於將不同維度的 group by 結果集進行 union all。

樣例hive-sql:

select

col1,

col2,

col3    ,

sum(income) as income,

count(distinct user_id) as user_qtty

from

dw.table_name

where

month_id = '201912'

group by

col1,

col2,

col3

grouping sets(col1,(col1,col2),(col1,col2,col3));

執行結果展示:

col1

col2

col3

income

user_qtty

54331

null

null

7217.6

8454331

1null

182.1

654331

4null

1047.5

954331

5null

1668.5

1754331

12901421

54331

12809

106.6

354331

4132331

54331

4133331

54331

5239

1122

54331

5248

1149

42. group by擴充套件——grouping__id

簡要說明:grouping sets會把在單個group by邏輯中沒有參與group by的那一列置為null值。

如果這一列原本就有null值的資料,會造成歧義,可以使用grouping__id函式解決。

grouping__id表示結果屬於哪乙個分組集合。

樣例hive-sql:

select

col1,

col2,

col3    ,

sum(income) as income,

count(distinct user_id) as user_qtty ,

grouping__id

from

dw.table_name

where

month_id='201912'

group by

col1,

col2,

col3

grouping sets(col1,(col1,col2),(col1,col2,col3))

3. group by擴充套件——with rollup

簡要說明:rullup函式是cube的子集,以最左側維度為主,按照順序依次進行聚合.

樣例hive-sql:

select

col1                   ,

col2   ,

col3 ,

sum(income)  as income,

sum(item_qtty) as item_qtty  ,

grouping__id

from

dw.table_name

where

month_id='201912'

group by

col1            ,

col2,

col3

with rollup

這裡,with rollup 等價於

grouping sets((),

col1,

(col1,col2),

(col1,col3) ,

(col1,col2,col3)

4.  group by擴充套件——with cube

簡要說明:cube函式,可以實現多個任意維度的查詢

cube(a,b,c)則首先會對(a,b,c)進行group by,

然後依次是(a,b),(a,c),(a),(b,c),(b),(c),最後在對全表進行group by,他會統計所選列中值的所有組合的聚合

用cube函式就可以完成所有維度的聚合工作.

樣例hive-sql:

select

col1,

col2,

col3,

col4,

col5,

sum(income) as income,

count(distinct user_id) as user_qtty  ,

grouping__id

from

dw.tablename

where

month_id='201912'

group by

col1                   ,

col2               ,

col3                   ,

col4                  ,

col5      

with cube 注:

hive.new.job.grouping.set.cardinality 配置:

例如:set hive.new.job.grouping.set.cardinality = 2048;

使用場景:當使用增強聚合函式,有取distinct去重的聚合指標,且要彙總的維度組合數大於等於32時,需要設定此引數;

引數配置:這個引數須大於等於grouping sets(with rollup、with cube)後面要計算的維度組合個數。

Hive高階聚合函式

0 基礎知識 1 pv page view 頁面訪問量 2 uv user view 訪問人數 3 uv表的資料如下 4 統計每個月的使用者瀏覽量,distinct 關鍵字是去除重複的值 select month,count distinct id from uv group by month 1 ...

Hive高階聚合函式

基礎知識 1 pv page view 頁面訪問量 2 uv user view 訪問人數 3 uv表的資料如下 4 統計每個月的使用者瀏覽量,distinct 關鍵字是去除重複的值 select month,count distinct id from uv group by month 1 un...

Hive 聚合函式

用途 計算總體標準差 格式 t stddev t,t,t,用途 計算樣本標準差 格式 t stddev samp t,t,t,用途 返回組內某個數字列的方差 介面格式 double variance column name 用途 返回組內某個數字列的方差 介面格式 double var pop co...