當前位置:首頁 » 編程語言 » hivesqllimit分頁
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hivesqllimit分頁

發布時間: 2022-09-04 16:13:23

① hive sql 中 怎麼用變數

分頁實現的方式比較多了
下面舉個例子
比如
獲取前10條數據
註:同時需要記錄這10條中最大的id為preid,作為下一頁的條件。
select
*
from
table
order
by
id
asc
limit
10;
select
*
from
table
where
id
>preid
order
by
id
asc
limit
10;

② hive支持以下哪些sql特性

一、關系運算:1. 等值比較: =
語法:A=B
操作類型:所有基本類型
描述: 如果表達式A與表達式B相等,則為TRUE;否則為FALSE
舉例:
hive>select 1 from lxw_al where 1=1;
1
2. 不等值比較: <>
語法: A <> B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A與表達式B不相等,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 <> 2;
1
3. 小於比較: <
語法: A < B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A小於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 < 2;
1

4. 小於等於比較: <=
語法: A <= B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A小於或者等於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 <= 1;
1
5. 大於比較: >
語法: A > B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A大於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 2 > 1;
1

6. 大於等於比較: >=
語法: A >= B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A大於或者等於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 >= 1;
1

注意:String的比較要注意(常用的時間比較可以先to_date之後再比較)
hive> select* from lxw_al;
OK
201111120900:00:00 2011111209

hive> selecta,b,a<b,a>b,a=b from lxw_al;
201111120900:00:00 2011111209 false true false

7. 空值判斷: IS NULL
語法: A IS NULL
操作類型: 所有類型
描述: 如果表達式A的值為NULL,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where null is null;
1

8. 非空判斷: IS NOTNULL
語法: A IS NOT NULL
操作類型: 所有類型
描述: 如果表達式A的值為NULL,則為FALSE;否則為TRUE
舉例:
hive> select1 from lxw_al where 1 is not null;
1

9. LIKE比較: LIKE
語法: A LIKE B
操作類型: strings
描述: 如果字元串A或者字元串B為NULL,則返回NULL;如果字元串A符合表達式B 的正則語法,則為TRUE;否則為FALSE。B中字元」_」表示任意單個字元,而字元」%」表示任意數量的字元。
舉例:
hive> select1 from lxw_al where 'football' like 'foot%';
1
hive> select1 from lxw_al where 'football' like 'foot____';
1
注意:否定比較時候用NOT ALIKE B
hive> select1 from lxw_al where NOT 'football' like 'fff%';
1

10. JAVA的LIKE操作: RLIKE
語法: A RLIKE B
操作類型: strings
描述: 如果字元串A或者字元串B為NULL,則返回NULL;如果字元串A符合JAVA正則表達式B的正則語法,則為TRUE;否則為FALSE。
舉例:
hive> select1 from lxw_al where 'footbar』 rlike '^f.*r$』;
1
注意:判斷一個字元串是否全為數字:
hive>select 1from lxw_al where '123456' rlike '^\\d+$';
1
hive> select1 from lxw_al where '123456aa' rlike '^\\d+$';

11. REGEXP操作: REGEXP
語法: A REGEXP B
操作類型: strings
描述: 功能與RLIKE相同
舉例:
hive> select1 from lxw_al where 'footbar' REGEXP '^f.*r$';
1
二、數學運算:1. 加法操作: +
語法: A + B
操作類型:所有數值類型
說明:返回A與B相加的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。比如,int + int 一般結果為int類型,而int + double 一般結果為double類型
舉例:
hive> select1 + 9 from lxw_al;
10
hive> createtable lxw_al as select 1 + 1.2 from lxw_al;
hive>describe lxw_al;
_c0 double

2. 減法操作: -
語法: A – B
操作類型:所有數值類型
說明:返回A與B相減的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。比如,int – int 一般結果為int類型,而int – double 一般結果為double類型
舉例:
hive> select10 – 5 from lxw_al;
5
hive> createtable lxw_al as select 5.6 – 4 from lxw_al;
hive>describe lxw_al;
_c0 double

3. 乘法操作: *
語法: A * B
操作類型:所有數值類型
說明:返回A與B相乘的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。注意,如果A乘以B的結果超過默認結果類型的數值范圍,則需要通過cast將結果轉換成范圍更大的數值類型
舉例:
hive> select40 * 5 from lxw_al;
200

4. 除法操作: /
語法: A / B
操作類型:所有數值類型
說明:返回A除以B的結果。結果的數值類型為double
舉例:
hive> select40 / 5 from lxw_al;
8.0

注意:hive中最高精度的數據類型是double,只精確到小數點後16位,在做除法運算的時候要特別注意
hive>select ceil(28.0/6.999999999999999999999) from lxw_allimit 1;
結果為4
hive>select ceil(28.0/6.99999999999999) from lxw_al limit1;
結果為5

5. 取余操作: %
語法: A % B
操作類型:所有數值類型
說明:返回A除以B的余數。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 41 % 5 from lxw_al;
1
hive> select 8.4 % 4 from lxw_al;
0.40000000000000036
注意:精度在hive中是個很大的問題,類似這樣的操作最好通過round指定精度
hive> select round(8.4 % 4 , 2) from lxw_al;
0.4
6. 位與操作: &
語法: A & B
操作類型:所有數值類型
說明:返回A和B按位進行與操作的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 4 & 8 from lxw_al;
0
hive> select 6 & 4 from lxw_al;
4

7. 位或操作: |
語法: A | B
操作類型:所有數值類型
說明:返回A和B按位進行或操作的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 4 | 8 from lxw_al;
12
hive> select 6 | 8 from lxw_al;
14

8. 位異或操作: ^
語法: A ^ B
操作類型:所有數值類型
說明:返回A和B按位進行異或操作的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 4 ^ 8 from lxw_al;
12
hive> select 6 ^ 4 from lxw_al;
2

9.位取反操作: ~
語法: ~A
操作類型:所有數值類型
說明:返回A按位取反操作的結果。結果的數值類型等於A的類型。
舉例:
hive> select ~6 from lxw_al;
-7
hive> select ~4 from lxw_al;
-5
三、邏輯運算:1. 邏輯與操作: AND
語法: A AND B
操作類型:boolean
說明:如果A和B均為TRUE,則為TRUE;否則為FALSE。如果A為NULL或B為NULL,則為NULL
舉例:
hive> select 1 from lxw_al where 1=1 and 2=2;
1

2. 邏輯或操作: OR
語法: A OR B
操作類型:boolean
說明:如果A為TRUE,或者B為TRUE,或者A和B均為TRUE,則為TRUE;否則為FALSE
舉例:
hive> select 1 from lxw_al where 1=2 or 2=2;
1

3. 邏輯非操作: NOT
語法: NOT A
操作類型:boolean
說明:如果A為FALSE,或者A為NULL,則為TRUE;否則為FALSE
舉例:
hive> select 1 from lxw_al where not 1=2;
1

四、數值計算1. 取整函數: round
語法: round(double a)
返回值: BIGINT
說明: 返回double類型的整數值部分(遵循四捨五入)
舉例:
hive> select round(3.1415926) from lxw_al;
3
hive> select round(3.5) from lxw_al;
4
hive> create table lxw_al as select round(9542.158) fromlxw_al;
hive> describe lxw_al;
_c0 bigint

2. 指定精度取整函數: round
語法: round(double a, int d)
返回值: DOUBLE
說明: 返回指定精度d的double類型
舉例:
hive> select round(3.1415926,4) from lxw_al;
3.1416

3. 向下取整函數: floor
語法: floor(double a)
返回值: BIGINT
說明: 返回等於或者小於該double變數的最大的整數
舉例:
hive> select floor(3.1415926) from lxw_al;
3
hive> select floor(25) from lxw_al;
25

4. 向上取整函數: ceil
語法: ceil(double a)
返回值: BIGINT
說明: 返回等於或者大於該double變數的最小的整數
舉例:
hive> select ceil(3.1415926) from lxw_al;
4
hive> select ceil(46) from lxw_al;
46

5. 向上取整函數: ceiling
語法: ceiling(double a)
返回值: BIGINT
說明: 與ceil功能相同
舉例:
hive> select ceiling(3.1415926) from lxw_al;
4
hive> select ceiling(46) from lxw_al;
46
6. 取隨機數函數: rand
語法: rand(),rand(int seed)
返回值: double
說明: 返回一個0到1范圍內的隨機數。如果指定種子seed,則會等到一個穩定的隨機數序列
舉例:
hive> select rand() from lxw_al;
0.5577432776034763
hive> select rand() from lxw_al;
0.6638336467363424
hive> select rand(100) from lxw_al;
0.7220096548596434
hive> select rand(100) from lxw_al;
0.7220096548596434

7. 自然指數函數: exp
語法: exp(double a)
返回值: double
說明: 返回自然對數e的a次方
舉例:
hive> select exp(2) from lxw_al;
7.38905609893065
自然對數函數: ln
語法: ln(double a)
返回值: double
說明: 返回a的自然對數
舉例:
hive> select ln(7.38905609893065) from lxw_al;
2.0

8. 以10為底對數函數: log10
語法: log10(double a)
返回值: double
說明: 返回以10為底的a的對數
舉例:
hive> select log10(100) from lxw_al;
2.0

9. 以2為底對數函數: log2
語法: log2(double a)
返回值: double
說明: 返回以2為底的a的對數
舉例:
hive> select log2(8) from lxw_al;
3.0

10. 對數函數: log
語法: log(double base, double a)
返回值: double
說明: 返回以base為底的a的對數
舉例:
hive> select log(4,256) from lxw_al;
4.0

11. 冪運算函數: pow
語法: pow(double a, double p)
返回值: double
說明: 返回a的p次冪
舉例:
hive> select pow(2,4) from lxw_al;
16.0

12. 冪運算函數: power
語法: power(double a, double p)
返回值: double
說明: 返回a的p次冪,與pow功能相同
舉例:
hive> select power(2,4) from lxw_al;
16.0

13. 開平方函數: sqrt
語法: sqrt(double a)
返回值: double
說明: 返回a的平方根
舉例:
hive> select sqrt(16) from lxw_al;
4.0

14. 二進制函數: bin
語法: bin(BIGINT a)
返回值: string
說明: 返回a的二進制代碼表示
舉例:
hive> select bin(7) from lxw_al;
111

15. 十六進制函數: hex
語法: hex(BIGINT a)
返回值: string
說明: 如果變數是int類型,那麼返回a的十六進製表示;如果變數是string類型,則返回該字元串的十六進製表示
舉例:
hive> select hex(17) from lxw_al;
11
hive> select hex(『abc』) from lxw_al;
616263

16. 反轉十六進制函數: unhex
語法: unhex(string a)
返回值: string
說明: 返回該十六進制字元串所代碼的字元串
舉例:
hive> select unhex(『616263』)from lxw_al;
abc
hive> select unhex(『11』)from lxw_al;
-
hive> select unhex(616263) from lxw_al;
abc

17. 進制轉換函數: conv
語法: conv(BIGINT num, int from_base, int to_base)
返回值: string
說明: 將數值num從from_base進制轉化到to_base進制
舉例:
hive> select conv(17,10,16) from lxw_al;
11
hive> select conv(17,10,2) from lxw_al;
10001

18. 絕對值函數: abs
語法: abs(double a) abs(int a)
返回值: double int
說明: 返回數值a的絕對值
舉例:
hive> select abs(-3.9) from lxw_al;
3.9
hive> select abs(10.9) from lxw_al;
10.9

19. 正取余函數: pmod
語法: pmod(int a, int b),pmod(double a, double b)
返回值: int double
說明: 返回正的a除以b的余數
舉例:
hive> select pmod(9,4) from lxw_al;
1
hive> select pmod(-9,4) from lxw_al;
3

20. 正弦函數: sin
語法: sin(double a)
返回值: double
說明: 返回a的正弦值
舉例:
hive> select sin(0.8) from lxw_al;
0.7173560908995228

21. 反正弦函數: asin
語法: asin(double a)
返回值: double
說明: 返回a的反正弦值
舉例:
hive> select asin(0.7173560908995228) from lxw_al;
0.8

22. 餘弦函數: cos
語法: cos(double a)
返回值: double
說明: 返回a的餘弦值
舉例:
hive> select cos(0.9) from lxw_al;
0.6216099682706644

23. 反餘弦函數: acos
語法: acos(double a)
返回值: double
說明: 返回a的反餘弦值
舉例:
hive> select acos(0.6216099682706644) from lxw_al;
0.9
24. positive函數: positive
語法: positive(int a), positive(double a)
返回值: int double
說明: 返回a
舉例:
hive> select positive(-10) from lxw_al;
-10
hive> select positive(12) from lxw_al;
12
25. negative函數: negative
語法: negative(int a), negative(double a)
返回值: int double
說明: 返回-a
舉例:
hive> select negative(-5) from lxw_al;
5
hive> select negative(8) from lxw_al;
-8

③ SparkAPI中的spark.sql(sql)支持limit查詢嗎例如select * from tablename limit 1,10。

支持limit的,但不支持limit(2,10),想要分頁還得使用類似hive的開窗函數row_number

④ presto查詢數據怎麼實現分頁

在Spark,Storm橫行的時代,spark由於耗用內存高而很難滿足這種改良的需求,Storm由於和hive不是一個套路,本身實時流處理的思路也和我們的需求差距較大,所以,
尋求一個能提供類似SQL查詢介面,並且速度比較接近於實時,能利用現有集群硬體的實時SQL查詢引擎成為一個現有hive的替代查詢引擎。

⑤ hive limit怎麼使用

hive.groupby.skewindata=true:數據傾斜時負載均衡,當選項設定為true,生成的查詢計劃會有兩個MRJob。第一個MRJob 中,
Map的輸出結果集合會隨機分布到Rece中,每個Rece做部分聚合操作,並輸出結果,這樣處理的結果是相同的GroupBy Key
有可能被分發到不同的Rece中,從而達到負載均衡的目的;第二個MRJob再根據預處理的數據結果按照GroupBy Key分布到
Rece中(這個過程可以保證相同的GroupBy Key被分布到同一個Rece中),最後完成最終的聚合操作。

⑥ 請教利用mybatis實現hive庫分頁查詢,普通查詢已實現,關鍵是分頁,註明表裡沒有明顯的主鍵和聯合主鍵

select count(* ) from 表名 where 分頁條件

⑦ hive 分頁sql語句

分頁實現的方式比較多了 下面舉個例子 比如 獲取前10條數據
註:同時需要記錄這10條中最大的id為preId,作為下一頁的條件。
select * from table order by id asc limit 10;
select * from table where id >preId order by id asc limit 10;

⑧ HiveJDBC如何獲取當前SQL語句的表名

分頁實現的方式比較多了
下面舉個例子
比如
獲取前10條數據
註:同時需要記錄這10條中最大的id為preid,作為下一頁的條件。
select
*
from
table
order
by
id
asc
limit
10;
select
*
from
table
where
id
>preid
order
by
id
asc
limit
10;

⑨ HiveSQL核心技能之窗口計算

目標:
1、掌握 sum()、avg()等用於累計計算的聚合函數,學會對行數的限制(移動計算);
2、掌握 row_number(),rank()、dense_rank()用於排序的函數;
3、掌握 ntile()用於分組查詢的函數;
4、掌握 lag()、lead()偏移分析函數

窗口函數(window function):
與聚合函數類似,但是窗口函數是每一行數據都生成一個結果,聚合函數可以將多行數據按照規定聚合為一行,一般來說聚合後的行數要少於聚合前的行數,但是有時我們想要既顯示聚合前的數據,又要顯示聚合後的數據,這時便引入了窗口函數, 窗口函數是在 select 時執行的,位於 order by 之前

在日常工作中,經常遇到 計算截止某月或某天的累計數值 ,在Excel可以通過函數來實現,
在HiveSQL里,可以利用窗口函數實現。

1)2018年每月的支付總額和當年累計支付總額

2)對2017年和2018年公司的支付總額按月度累計進行分析,按年度進行匯總

說明:1、over中的 partition by 起到分組的作用;
2、order by 按照什麼順序進行累加,升序ASC、降序DESC,默認升序
3、正確的分組是非常重要的,partition by 後面的欄位是需要累計計算的區域,需要仔細理解

(計算三日留存、七日留存、三十日留存等方式可以使用這個函數。)

3)對2018年每個月的近三個月進行移動的求平均支付金額

用法:這三個函數的作用都是返回相應規則的排序序號,由於排序函數不是二次聚合計算,因此不一定要使用子查詢

4)2019年1月,用戶購買商品品類數量的排名

5)選出2019年支付金額排名在第10、20、30名的用戶

6)將2019年1月的支付用戶,按照支付金額分成5組

7)選出2019年退款金額排名前10%的用戶

說明:Lag和Lead分析函數可以在同一次查詢中取出同一欄位的 前N行數據(Lag)和後N行的數據(Lead) 作為獨立的列。

在實際應用當中,若要用到取今天和昨天的某欄位差值時,Lag和Lead函數的應用就顯得尤為重要。
當然,這種操作可以用表的 自連接實現 ,但是Lag和Lead與 left join、 right join等自連接相比,效率更高,SQL語句更簡潔。

8)支付時間間隔超過100天的用戶數(這一次購買距離下一次購買的時間?,注意datediff函數是日期大的在前面)

9)每個城市,不同性別,2018年支付金額最高的TOP3用戶

步驟總結:
1、首先篩選出每個用戶和每個用戶總的消費金額;
2、對兩個表進行連接提取需要的欄位;
3、對連接後的表進行二次聚合計算,計算出不同城市、性別的金額排名;
4、對二次聚合計算的表進行條件篩選提取

10)每個手機品牌退款金額前25%的用戶

步驟總結:
1、首先篩選出每個用戶和每個用戶的總退款金額;
2、對兩個表進行連接提取需要的欄位;
3、對連接後的表進行按手機品牌內分組;
4、對分組後的表進行條件篩選提取

⑩ 求問 hadoop +hive ,怎麼通過hive的sql實現分頁查詢(分批查詢)。

簡單的辦法是按小時分區,之後一次取一小時