普通查詢:
SELECT [ALL | DISTINCT]select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BYcol_list]
[HAVING where_condition]
[ORDER BY col_list]
[CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY col_list]
]
[LIMIT number]
三個(gè)排序:
ORDER BY: #對整體進(jìn)行排序, 只能設(shè)置一個(gè)reduce.
#設(shè)置reduce的個(gè)數(shù)
set mapreduce.job.reduces=-1;
sort by:
#可以對每個(gè)reduce內(nèi)部進(jìn)行排序的操作, 并沒有根據(jù)reduce進(jìn)行排序.
#可以對每個(gè)reduce內(nèi)部進(jìn)行排序的操作, 前提reduce數(shù)量有多個(gè), 如果只有一個(gè), 和#order by是一樣的
distribute by: 跟 sort by: 放在一起才能好用.
#注意: 指定按照那個(gè)字段作為分區(qū)的字段, 執(zhí)行分區(qū)
cluster by:
#分區(qū)的字段和排序的字段都是同一個(gè),并且升序,可省略寫.
四個(gè)分析函數(shù):
放置位置select之前from之后.
row_numver() #順序數(shù)字排列,12345
rank() #順序數(shù)字并列排序123356
dense_rank()#順序數(shù)字延續(xù)排列123345
ntile()#平均分112233
當(dāng)前行跟其他行級聯(lián)求各種的五個(gè)函數(shù)
max/min/sum/avg/count
當(dāng)前行跟上下對比計(jì)算四個(gè)函數(shù)
LAG,LEAD,FIRST_VALUE,LAST_VALUE
hive的sql優(yōu)化
#1.列裁剪
hive.optimize.cp=true; 默認(rèn)就是TRUE
#2.分區(qū)裁剪
hive.optimize.pruner=true; 默認(rèn)就是TRUE
3.動(dòng)態(tài)分區(qū)表導(dǎo)入
#動(dòng)態(tài)分區(qū)
insert into table 分區(qū)表2 partition(month)
select * from 分區(qū)表1
--------------------------------------------------------------
#如果使用需要配置具體只設(shè)置前兩個(gè)即可:
~ 1 .查詢的原始表分區(qū)最后一個(gè)字段必須是分區(qū)字段
~ 2 .開啟動(dòng)態(tài)分區(qū)支持.默認(rèn)既開啟.
set hive.exec.dynamic.partition=true;
-----------------------------------------------------------
~ 3 .關(guān)閉HIVE嚴(yán)格語法模式.默認(rèn)是開啟.
set hive.exec.dynamic.partition.mode=nonstrict;
~ 4 .設(shè)置MR節(jié)點(diǎn),一共最大創(chuàng)建多少個(gè)分區(qū)
set(默認(rèn)100) hive.exec.max.dyanmic.partitions.pernode=10000
~ 5 .整個(gè)mr job中,最大可以創(chuàng)建多少個(gè)HDFS文件(默認(rèn)十萬個(gè))
set hive.exec.max.created.files=10000;
~ 6 .有空分區(qū)時(shí)候是不是要拋出異常.(一般不用設(shè)置)
set hive.exec.on.empty.partition=false;
函數(shù)分類
UDF函數(shù): 大部分的函數(shù)都是UDF函數(shù)
- 特點(diǎn): 一進(jìn)一出
- 例子: substr cast ....
UDAF函數(shù):
- 特點(diǎn): 多進(jìn) 一出
- 例子: 聚合函數(shù) sum count avg...
UDTF函數(shù):
- 特點(diǎn): 一進(jìn)多出
- 例子: explode
hive的調(diào)優(yōu)
hive的壓縮方案
4.如何調(diào)整MAP,跟REDUCE的數(shù)量
減少M(fèi)AP
在map讀取之前進(jìn)行文件合并操作.
set mapred.max.split.size=112345600;
set mapred.min.split.size.per.node=112345600;
set mapred.min.split.size.per.rack=112345600;
#-前面三個(gè)參數(shù)確定合并文件塊的大小,大于文件塊大小128m的榜轿,按照128m來分隔摄闸,
--小于128m,大于100m的认轨,按照100m來分隔勇劣,把那些小于100m的(包括小文件和分隔大文件剩下的)功咒,
set hive.input.format=
org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
#這個(gè)參數(shù)表示執(zhí)行前進(jìn)行小文件合并哩俭,
增加MAP
#把文件拆分成多個(gè)文件即可
set mapred.reduce.tasks=10;
create table a_1 as
select * from tab_info distribute by rand(123);
#按照123隨機(jī)數(shù),分散開十個(gè)文件.
調(diào)整reduce
set hive.exec.reducers.bytes.per.reducer=524288000; 調(diào)整每個(gè)reduce能夠處理數(shù)據(jù)量
當(dāng)調(diào)小后, reduce數(shù)量增加 , 調(diào)大后, reduce數(shù)量就會(huì)減少
set mapred.reduce.tasks=15; 強(qiáng)制調(diào)整reduce的數(shù)量
4.并行執(zhí)行
set hive.exec.parallel=true;
set hive.ex
案例:
select * from A
union all
select * from B;
上下合并查詢出來的