【點滴學習】JDH函數應用 row_number()

2021-03-02 京東大數據專家

應用場景:假設有一個分類圖書銷量表,要求應用HIVE函數取出每類銷量排名前3的圖書及銷量。

解決思路:這屬於典型的分組取TopN的需求。根據需求,可以針對圖書銷量表,根據圖書類目、銷量進行order by排序,然後對排序後的銷量執行自定義函數row_number(),

JDH代碼:

SELECT

category,

sku_id,

sales

FROM

(

SELECT * FROM book_sales order by category, sales desc

)

where

row_number(category) <= 3

結果示例:

假設銷售表的記錄如下

類目

商品編號

銷量

管理類

1001

300

經濟類

2001

340

投資類

3001

200

管理類

1002

240

經濟類

2002

180

投資類

3002

160

管理類

1003

100

經濟類

2003

100

投資類

3003

320

管理類

1004

500

經濟類

2004

10

投資類

3004

80

……



經過order by全局排序後,記錄如下

類目

商品編號

銷量

管理類

1004

500

管理類

1001

300

管理類

1002

240

管理類

1003

100

……



經濟類

2001

340

經濟類

2002

180

經濟類

2003

100

經濟類

2004

10

……



投資類

3003

320

投資類

3001

200

投資類

3002

160

投資類

3004

80

……



接著執行row_number函數,返回值如下

類目

商品編號

銷量

row_number

管理類

1004

500

1

管理類

1001

300

2

管理類

1002

240

3

管理類

1003

100

4

……




經濟類

2001

340

1

經濟類

2002

180

2

經濟類

2003

100

3

經濟類

2004

10

4

……




投資類

3003

320

1

投資類

3001

200

2

投資類

3002

160

3

投資類

3004

80

4

……




注意:必須保證row_number執行是在reducer中執行,因為hive是基於MAPREADUCE的,上述的語句保證了銷售表的記錄按照類目和銷量做了全局排序,然後在reducer端執行row_number函數,如果在map端執行了row_number,那麼結果將是錯誤的。

相關焦點

  • Hive窗口函數row number的用法, 你肯定都會吧!
    row_number前面我們介紹窗口函數的時候說到了窗口函數的使用場景,我們也給它起了一個名字進行區分,通用窗口函數和特殊窗口函數,今天我們就來看一下排序相關的窗口函數,因為是窗口函數,並且我們說它是用來排序的,我們大概也能猜到它就是用來對窗口內的數據進行排序的其實關於排序我們前面也介紹過order by,sort by 等排序的方式Hive語法之常見排序方式
  • SQL中的ROW NUMBER() OVER()
    select id,name,age,salary,row_number()over(order by salary
  • Oracle 分析函數row_number() over (partition by order by )的使用
    1、格式row_number() over(partition by 列名1 order by 列名2 desc
  • SQL 中的 distinct 和 row_number() over() 的區別及用法
    3 row_number() over()在 SQL Server 資料庫中,為咱們提供了一個函數 row_number() 用於給資料庫表中的記錄進行標號,在使用的時候,其後還跟著一個函數 over(),而函數 over() 的作用是將表中的記錄進行分組和排序。
  • Row函數應用介紹精講
    函數名ROW用法提取行號,獲取自然數(組)寫法ROW(參考)Row函數是最常用的函數之一,用法卻很多。
  • row函數
    office財稅學習筆記👆星標★ROW函數是用來確定光標的當前行位置的函數 。語法:ROW(reference)如果省略 reference,則假定是對函數ROW單元格的引用。ROW函數不能引用多個區域。ROW()函數包含向後兼容性。用CurrentY屬性代替 。
  • R語言點滴:dplyr函數與查重案例(1)
    微信公眾號:醫意貫之如有問題或建議,請公眾號留言;如果你覺得該文章對你有幫助,歡迎讚賞R語言點滴
  • Row函數在Excel數組公式中的應用
    絕大多數excel數組公式中,都可以看到row函數的身影,那麼row函數到底起到什麼作用呢?我們先從它的基本用法說起。
  • Excel引用函數row,column,rows,columns
    (ID:ExcelLiRui)關鍵詞:row,column,rows,columns在日常工作中,Excel引用函數的應用範疇極為廣泛,如果你稍微了解一點引用函數的小知識和基礎用法,就可以在很多場景下輕鬆解決看似複雜的問題。
  • row和column函數的用法
    在很多公式中都看到過row和column函數的身影,今天我們學習一下這兩個函數的用法。
  • Excel Row函數和Rows函數的使用方法,含Row(A:A)與Row(1:1)實例
    在 Excel 中,Row函數用於返回單元格的行號,Rows函數用於返回數組或引用單元格的行數。如果Row函數省略參數,默認返回公式所在單元格的行號;Rows函數不能省略參數。Rows函數常與Indirect函數、Index函數、If函數、Match函數、SumProduct函數、Mod函數組合使用。
  • 函數Index和函數column、row聯合用法在實際案例中的運用
    excel在上一篇文章中,我們講述了函數index與函數column、函數row、函數match組合用法在實際操作中的應用,那麼在實際應用中我們分別使用了函數index、函數column組合用法將列分布的數據轉化為行分布,使用函數index和函數row組合用法將行分布的數據轉化為列分布,也就是通過函數的運用完成了數據的轉置工作。
  • 妙用Column列函數和Row行函數,享受意想不到的收穫
    這就就要用到COLUMN函數和row函數的值了,如COLUMN(「A1」)=1;ROW(「A1」)=1即可可以得到A1單元格的行和列的值了。那麼這兩個函數有什麼實際的應用呢?用處大大的:這裡只是以行row函數為例,列函數請讀者自己發揮。
  • 【軟體應用】office常用函數及竅門
    1、ABS函數   函數名稱:ABS   主要功能:求出相應數字的絕對值。   使用格式:ABS(number)   參數說明:number代表需要求絕對值的數值或引用的單元格。   應用舉例:如果在B2單元格中輸入公式:=ABS(A2),則在A2單元格中無論輸入正數(如100)還是負數(如-100),B2中均顯示出正數(如100)。
  • 看看excel高手是怎樣玩row函數!
     提示:點擊上方"excel教程"↑免費訂閱  您是否和我一樣菜,是否還不知excel中row是什麼意思,excel中row函數的使用方法?  OK,那我們先來看看row函數基本用法:  ROW() 返回當前行的行數。比如ROW(A1)返回A1單元格的行數1, ROW(B5)返回B5單元格的行數5,又比如ROW(),是返回當前行的行數。  難道row函數就是拿來做這麼個事兒的嗎?:)  來看看excel高手們是怎樣玩row函數,他們更多是和其它函數嵌套完成一些複雜操作。
  • excel row函數的好幫手是誰?TRANSPOSE函數
    我們都知道 row函數colum函數 有一個重要的功能可以實現構造數組;row函數的參數可以輸數字 比如 row(1:1)達標的當然是第一行了;而column函數的參數只能是字母column(A:A) 這個函數的弊端就是比如我想構造一個
  • row函數也能實現excel九九乘法表
    在上一篇文章中介紹了row函數和column函數的使用,這篇文章再繼續使用兩個案例介紹,再實際中會經常用到row函數和column函數 ,不過也不是很難,熟練操作就會啦 一 : ROW()函數和 COLUMN()函數
  • INDEX函數的兩種應用方法總結
    Index 函數在之前我的文章中簡單的介紹過,但沒有深入的講解,今日給大家以深入的講解一下,此函數的應用也非常的廣泛,也非常靈活,在以後的文章中還會涉及到這個函數的應用,非常值得大家認的學習一下。INDEX函數的功能是返回指定行、列或單元格的值。
  • Excel公式中的ROW和COLUMN函數都是幹嘛用的,看完這篇教程終於明白了!
    公眾號「Excel基礎學習園地」是一個免費發布Excel基礎知識、函數應用、操作技巧、學習方法等資訊的公眾號,請點擊上方
  • EXCEL常用函數一
    使用格式:AVERAGE(number1,number2,……)   參數說明:number1,number2,……:需要求平均值的數值或引用單元格(區域),參數不超過30個。使用格式:DAY(serial_number)  參數說明:serial_number代表指定的日期或引用的單元格。  應用舉例:輸入公式:=DAY("2003-12-18"),確認後,顯示出18。