hive視窗函式使用
hive視窗函式的使用
前言
我們在學習hive視窗函式的時候,一定要先了解視窗函式的結構。而不是直接百度sum() over()、row_number() over()、或者count() over()的用法,如果這樣做,永遠也掌握不到視窗函式的核心。
看了很多文章後才知道over()才是視窗函式,而sum、row_number、count只是與over()搭配的分析函式,當然除了這三個函式還有其他的函式。
一、hive視窗函式語法
在前言中我們已經說了avg()、sum()、max()、min()是分析函式,而over()才是視窗函式,下面我們來看看over()視窗函式的語法結構、及常與over()一起使用的分析函式。
- over()視窗函式的語法結構
- 常與over()一起使用的分析函式
- 視窗函式總結
1、over()視窗函式的語法結構
分析函式over(partition by 列名 order by 列名 rows between 開始位置 and 結束位置)
over()函式中包括三個函式:包括分割槽partition by 列名、排序order by 列名、指定視窗範圍rows between 開始位置 and 結束位置。我們在使用over()視窗函式時,over()函式中的這三個函式可組合使用也可以不使用。
over()函式中如果不使用這三個函式,視窗大小是針對查詢產生的所有資料,如果指定了分割槽,視窗大小是針對每個分割槽的資料。
1.1、over()函式中的三個函式講解
order by
order by是排序的意思,是該視窗中的
A、partition by
partition by可理解為group by 分組。over(partition by 列名)搭配分析函式時,分析函式按照每一組每一組的資料進行計算的。
B、rows between 開始位置 and 結束位置
是指定視窗範圍,比如第一行到當前行。而這個範圍是隨著資料變化的。over(rows between 開始位置 and 結束位置)搭配分析函式時,分析函式按照這個範圍進行計算的。
視窗範圍說明
我們常使用的視窗範圍是ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示從起點到當前行),常用該視窗來計算累加。
- PRECEDING:往前
- FOLLOWING:往後
- CURRENT ROW:當前行
- UNBOUNDED:起點(一般結合PRECEDING,FOLLOWING使用)
- UNBOUNDED PRECEDING 表示該視窗最前面的行(起點)
- UNBOUNDED FOLLOWING:表示該視窗最後面的行(終點)
比如說
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示從起點到當前行)
ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING(表示往前2行到往後1行)
ROWS BETWEEN 2 PRECEDING AND 1 CURRENT ROW(表示往前2行到當前行)
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING(表示當前行到終點)
2、常與over()一起使用的分析函式
2.1、聚合類
avg()、sum()、max()、min()
2.2、排名類
row_number()按照值排序時產生一個自增編號,不會重複(如:1、2、3、4、5、6)
rank() 按照值排序時產生一個自增編號,值相等時會重複,會產生空位(如:1、2、3、3、3、6)
dense_rank() 按照值排序時產生一個自增編號,值相等時會重複,不會產生空位(如:1、2、3、3、3、4)
2.3、其他類
lag(列名,往前的行數,[行數為null時的預設值,不指定為null]),可以計算使用者上次購買時間,或者使用者下次購買時間。
lead(列名,往後的行數,[行數為null時的預設值,不指定為null])
ntile(n) 把有序分割槽中的行分發到指定資料的組中,各個組有編號,編號從1開始,對於每一行,ntile返回此行所屬的組的編號
3、視窗函式總結
其實視窗函式邏輯比較繞,我們可以把視窗理解為對錶中的資料進行分組,排序等計算。要真正的理解HIVE視窗函式,還是要結合練習題才行。
相關文章
- Hive視窗函式Hive函式
- hive視窗分析函式使用詳解系列二之分組排序視窗函式Hive函式排序
- hive05_視窗函式Hive函式
- hive視窗分析函式使用詳解系列一Hive函式
- Hive視窗函式保姆級教程Hive函式
- 大資料技術-hive視窗函式詳解大資料Hive函式
- Mysql視窗函式MySql函式
- SQL 視窗函式SQL函式
- PostgreSQL:視窗函式SQL函式
- SQL視窗分析函式使用詳解系列三之偏移量類視窗函式SQL函式
- PostgreSQL 視窗函式 ( Window Functions ) 如何使用?SQL函式Function
- Oracle分析函式與視窗函式Oracle函式
- MySQL視窗函式的具體使用TOCSMySql函式
- mysql視窗函式中的滑動視窗MySql函式
- 與SQL視窗函式相同SQL函式
- PostgreSQL>視窗函式的用法SQL函式
- MySQL視窗函式彙總MySql函式
- hive函式Hive函式
- MySQL視窗函式用法總結MySql函式
- MySQL 8.0 視窗函式-筆記MySql函式筆記
- Hive函式大全Hive函式
- 詳解SQL操作的視窗函式SQL函式
- 通俗易懂:視窗函式 | 全是案例函式
- Hive常用函式及自定義函式Hive函式
- hive內建函式Hive函式
- Hive是否支援in函式Hive函式
- Hive(五)常用函式Hive函式
- Hive(六)JSON函式HiveJSON函式
- Hive之分析函式Hive函式
- SQL輕鬆入門(5):視窗函式SQL函式
- SQL KEEP 視窗函式等價改寫案例SQL函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- 【hive】中的concat函式Hive函式
- hive 3.0.0自定義函式Hive函式
- Hive中自定義函式Hive函式
- Hive行轉列函式Hive函式
- 【大資料開發】Hive——Hive函式大全大資料Hive函式
- SparkSQL開窗函式SparkSQL函式