hive視窗函式 Hive sql視窗函式原始碼分析

2021-10-12 05:13:22 字數 1284 閱讀 1551

在了解了視窗函式實現原理 spark、hive中視窗函式實現原理覆盤 和 sparksql比hivesql優化的點(視窗函式)之後,今天又擼了一遍hive sql 中視窗函式的原始碼實現,寫個筆記記錄一下。

簡單來說,視窗查詢有兩個步驟:將記錄分割成多個分割槽;然後在各個分割槽上呼叫視窗函式。

傳統的 udaf 函式只能為每個分割槽返回一條記錄,而我們需要的是不僅僅輸入資料是一張表,輸出資料也是一張表(table-in, table-out),因此 hive 社群引入了分割槽表函式 partitioned table function (ptf)。

1、**流轉圖

ptf 執行在分割槽之上、能夠處理分割槽中的記錄並輸出多行結果的函式。

hive會把queryblock,翻譯為執行操作樹operatortree,其中每個operator都會有三個重要的方法:

當遇到視窗函式時,會生成ptfoperator,ptfoperator 依賴ptfinvocation讀取已經排好序的資料,建立相應的輸入分割槽:ptfpartition inputpart;

windowtablefunction 負責管理視窗幀、呼叫視窗函式(udaf)、並將結果寫入輸出分割槽: ptfpartition outputpart。

2、其它細節

ptfoperator.process(object row, int tag)-->ptfinvocation.processrow(row)

真正對資料的操作是當相同的key完全放入同乙個ptfpartition之後,時機就是finishpartition:

void finishpartition() throws hiveexception  else  else     if ( next != null )  else         }      }    }  }  if ( next != null )  else       }    }  }}
需要把相同key的資料完全放入乙個ptfpartition進行操作,這時對加入的的條數做了限制,不能》=integer.max_value(21億),這塊需要注意。

我是小蘿蔔運算元

在成為最厲害最厲害最厲害的道路上

很高興認識你

hive sql之 視窗函式。

一 row number 函式 區別於其它排序函式,相當於多了乙個排序的列。資料準備 name money ming 12 yang 23 ming 35 ming 54 yang 43 1 按照其中money 進行排序並增加一行。select name,money,row number over ...

Hive視窗函式

1 定義 視窗函式屬於sql中比較高階的函式 mysql從8.0版本才支援視窗函式,5.6,5.7都沒有視窗函式 oracle 裡面一直支援視窗函式 hive也支援視窗函式 以下函式才是視窗函式 視窗函式 13個 lead lead col,n,default val 往後第n行資料 col 列名 ...

hive 視窗函式

hive高階函式 row number rank dense rank 這三個視窗函式的使用場景非常多 例子 員工表中,求每個崗位薪水前兩名的員工資訊 name,入職日期,sal row number over partition by job order by sal desc 這個函式會返回組內...