1Hive簡(jiǎn)介
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)開魯免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1.1 Hive定義
Hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供類SQL查詢功能。
本質(zhì)是將SQL轉(zhuǎn)換為MapReduce程序。
1.2為什么使用Hive
1、面臨的問(wèn)題
人員學(xué)習(xí)成本太高
項(xiàng)目周期要求太短
我只是需要一個(gè)簡(jiǎn)單的環(huán)境
MapReduce 如何搞定
復(fù)雜查詢好難
Join如何實(shí)現(xiàn)
2、為什么要使用Hive
操作接口采用類SQL語(yǔ)法,提供快速開發(fā)的能力
避免了去寫MapReduce,減少開發(fā)人員的學(xué)習(xí)成本
擴(kuò)展功能很方便
1.3 Hive特點(diǎn)
1、可擴(kuò)展
Hive可以自由的擴(kuò)展集群的規(guī)模,一般情況下不需要重啟服務(wù)
2、延展性
Hive支持用戶自定義函數(shù),用戶可以根據(jù)自己的需求來(lái)實(shí)現(xiàn)自己的函數(shù)
3、容錯(cuò)
良好的容錯(cuò)性,節(jié)點(diǎn)出現(xiàn)問(wèn)題SQL仍可完成執(zhí)行
1.4 Hive與Hadoop的關(guān)系
1.5 Hive與傳統(tǒng)數(shù)據(jù)庫(kù)的關(guān)系
1.6 Hive的歷史
由FaceBook 實(shí)現(xiàn)并開源
2011年3月,0.7.0版本 發(fā)布,此版本為重大升級(jí)版本,增加了簡(jiǎn)單索引,HAING等眾多高級(jí)特性
2011年06月,0.7.1 版本發(fā)布,修復(fù)了一些BUG,如在Windows上使用JDBC的的問(wèn)題
2011年12月,0.8.0版本發(fā)布,此版本為重大升級(jí)版本,增加了insert into 、HA等眾多高級(jí)特性
2012年2月5日,0.8.1版本發(fā)布,修復(fù)了一些BUG,如使 Hive 可以同時(shí)運(yùn)行在 Hadoop0.20.x 與 0.23.0
2012年4月30日,0.9.0版本發(fā)布,重大改進(jìn)版本,增加了對(duì)Hadoop 1.0.0的支持、實(shí)現(xiàn)BETWEEN等特性。
1.7 Hive的未來(lái)發(fā)展
增加更多類似傳統(tǒng)數(shù)據(jù)庫(kù)的功能,如存儲(chǔ)過(guò)程
提高轉(zhuǎn)換成的MapReduce性能
擁有真正的數(shù)據(jù)倉(cāng)庫(kù)的能力
UI部分加強(qiáng)
2軟件準(zhǔn)備與環(huán)境規(guī)劃
2.1 Hadoop環(huán)境介紹
Hadoop安裝路徑:/home/test/Desktop/hadoop-1.0.0/
Hadoop元數(shù)據(jù)存放目錄:/home/test/data/core/namenode
Hadoop數(shù)據(jù)存放路徑:/home/test/data/core/datanode
Hive安裝路徑:/home/test/Desktop/
Hive數(shù)據(jù)存放路徑:/user/hive/warehouse
Hive元數(shù)據(jù)
第三方數(shù)據(jù)庫(kù):derby MySQL
2.2軟件準(zhǔn)備
OS
ubuntu
JDK
java 1.6.0_27
Hadoop
hadoop-1.0.0.tar
Hive
hive-0.8.1.tar
2.3項(xiàng)目結(jié)構(gòu)
2.4 Hive配置文件介紹
1、Hive配置文件介紹
hive-site.xml hive的配置文件
hive-env.sh hive的運(yùn)行環(huán)境文件
hive-default.xml.template 默認(rèn)模板
hive-env.sh.template hive-env.sh默認(rèn)配置
hive-exec-log4j.properties.template exec默認(rèn)配置
hive-log4j.properties.template log默認(rèn)配置
2、hive-site.xml
< property>javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true JDBC connectstring for a JDBC metastore javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver classname for a JDBC metastore javax.jdo.option.ConnectionUserName root username touse against metastore database javax.jdo.option.ConnectionPassword test password touse against metastore database
3、hive-env.sh
配置Hive的配置文件路徑:export HIVE_CONF_DIR= your path
配置Hadoop的安裝路徑:HADOOP_HOME=your hadoop home
2.5使用Derby數(shù)據(jù)庫(kù)的安裝方式
1、什么是Derby安裝方式
ApacheDerby是一個(gè)完全用java編寫的數(shù)據(jù)庫(kù),所以可以跨平臺(tái),但需要在JVM中運(yùn)行
Derby是一個(gè)Open source的產(chǎn)品,基于Apache License 2.0分發(fā)
即將元數(shù)據(jù)存儲(chǔ)在Derby數(shù)據(jù)庫(kù)中,也是Hive默認(rèn)的安裝方式。
2、安裝Hive
解壓Hive:tar zxvf hive-0.8.1.tar /home/test/Desktop
建立軟連接:ln –s hive-0.8.1 hive
添加環(huán)境變量
export HIVE_HOME=/home/test/Desktop/hive export PATH=….HIVE_HOME/bin:$PATH:.
3、配置Hive
進(jìn)入hive/conf目錄
依據(jù)hive-env.sh.template,創(chuàng)建hive-env.sh文件
cp hive-env.sh.template hive-env.sh
修改hive-env.sh
指定hive配置文件的路徑
export HIVE_CONF_DIR=/home/test/Desktop/hive/conf
指定Hadoop路徑
HADOOP_HOME=/home/test/Desktop/hadoop
4、hive-site.xml
javax.jdo.option.ConnectionURL jdbc:derby:;databaseName=metastore_db;create=true JDBCconnect string for a JDBC metastore javax.jdo.option.ConnectionDriverName org.apache.derby.jdbc.EmbeddedDriver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName APP username to use against metastoredatabase javax.jdo.option.ConnectionPassword mine password to use against metastoredatabase
5、啟動(dòng)hive
命令行鍵入
Hive
顯示
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Pleaseuse org.apache.hadoop.log.metrics.EventCounter in all the log4j.propertiesfiles. Logging initialized using configuration injar:file:/home/test/Desktop/hive-0.8.1/lib/hive-common-0.8.1.jar!/hive-log4j.properties Hive historyfile=/tmp/test/hive_job_log_test_201208260529_167273830.txt hive>
5、測(cè)試語(yǔ)句
建立測(cè)試表test
createtable test (key string); showtables;
2.6使用MySQL數(shù)據(jù)庫(kù)的安裝方式
1、安裝MySQL
Ubuntu 采用apt-get安裝
sudo apt-get install mysql-server
建立數(shù)據(jù)庫(kù)hive
create database hive
創(chuàng)建hive用戶,并授權(quán)
grant all on hive.* to hive@'%' identified by 'hive'; flush privileges;
2、安裝Hive
解壓Hive:
tar zxvf hive-0.8.1.tar /home/test/Desktop
建立軟連接:
ln –s hive-0.8.1 hive
添加環(huán)境變量
exportHIVE_HOME=/home/test/Desktop/hive exportPATH=….HIVE_HOME/bin:$PATH:.
3、修改hive-site.xml
javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionPassword hive hive.hwi.listen.port 9999 This is the port the Hive Web Interface will listenon datanucleus.autoCreateSchema false datanucleus.fixedDatastore true hive.metastore.local true controls whether toconnect to remove metastore server or open a new metastore server in HiveClient JVM
4、啟動(dòng)Hive
命令行鍵入:Hive
顯示
WARNING: org.apache.hadoop.metrics.jvm.EventCounter isdeprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all thelog4j.properties files. Logging initialized using configuration injar:file:/home/test/Desktop/hive-0.8.1/lib/hive-common-0.8.1.jar!/hive-log4j.properties Hive historyfile=/tmp/test/hive_job_log_test_201208260529_167273830.txt hive>
5、測(cè)試語(yǔ)句
建立測(cè)試表test
create table test (key string); show tables;
3 Hive內(nèi)建操作符與函數(shù)開發(fā)
3.1關(guān)系運(yùn)算符
等值比較: =
不等值比較: <>
小于比較: <
小于等于比較: <=
大于比較: >
大于等于比較: >=
空值判斷: IS NULL
非空判斷: IS NOT NULL
LIKE比較: LIKE
JAVA的LIKE操作: RLIKE
REGEXP操作: REGEXP
等值比較: =
語(yǔ)法:A=B
操作類型:所有基本類型
描述: 如果表達(dá)式A與表達(dá)式B相等,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where 1=1;
不等值比較: <>
語(yǔ)法: A <> B
操作類型: 所有基本類型
描述: 如果表達(dá)式A為NULL,或者表達(dá)式B為NULL,返回NULL;如果表達(dá)式A與表達(dá)式B不相等,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where 1 <> 2;
小于比較: <
語(yǔ)法: A < B
操作類型: 所有基本類型
描述: 如果表達(dá)式A為NULL,或者表達(dá)式B為NULL,返回NULL;如果表達(dá)式A小于表達(dá)式B,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where 1 < 2;
小于等于比較: <=
語(yǔ)法: A <= B
操作類型: 所有基本類型
描述: 如果表達(dá)式A為NULL,或者表達(dá)式B為NULL,返回NULL;如果表達(dá)式A小于或者等于表達(dá)式B,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where 1 <= 1;
大于等于比較: >=
語(yǔ)法: A >= B
操作類型: 所有基本類型
描述: 如果表達(dá)式A為NULL,或者表達(dá)式B為NULL,返回NULL;如果表達(dá)式A大于或者等于表達(dá)式B,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where 1 >= 1;
空值判斷: IS NULL
語(yǔ)法: A IS NULL
操作類型: 所有類型
描述: 如果表達(dá)式A的值為NULL,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where null is null;
非空判斷: IS NOT NULL
語(yǔ)法: A IS NOT NULL
操作類型: 所有類型
描述: 如果表達(dá)式A的值為NULL,則為FALSE;否則為TRUE
舉例:hive> select 1 from dual where 1 is not null;
LIKE比較: LIKE
語(yǔ)法: A LIKE B
操作類型: strings
描述: 如果字符串A或者字符串B為NULL,則返回NULL;如果字符串A符合表達(dá)式B 的正則語(yǔ)法,則為TRUE;否則為FALSE。B中字符”_”表示任意單個(gè)字符,而字符”%”表示任意數(shù)量的字符。
舉例:hive> select 1 from dual where ‘key' like 'foot%';
hive> select 1 from dual where ‘key ' like'foot____';
注意:否定比較時(shí)候用 NOT A LIKE B
hive> select 1 from dual where NOT ‘key ' like 'fff%';
JAVA的LIKE操作: RLIKE
語(yǔ)法: A RLIKE B
操作類型: strings
描述: 如果字符串A或者字符串B為NULL,則返回NULL;如果字符串A符合JAVA正則表達(dá)式B的正則語(yǔ)法,則為TRUE;否則為FALSE。
舉例:hive> select 1 from dual where 'footbar’ rlike'^f.*r$’;
注意:判斷一個(gè)字符串是否全為數(shù)字:
hive>select 1 from dual where '123456' rlike '^\\d+$';
hive> select 1 from dual where '123456aa' rlike'^\\d+$';
REGEXP操作: REGEXP
語(yǔ)法: A REGEXP B
操作類型: strings
描述: 功能與RLIKE相同
舉例:hive> select 1 from dual where ‘key' REGEXP'^f.*r$';
3.2邏輯運(yùn)算與數(shù)學(xué)運(yùn)算
加法操作: +
減法操作: -
乘法操作: *
除法操作: /
取余操作: %
位與操作: &
位或操作: |
位異或操作: ^
位取反操作: ~
邏輯與操作: AND
邏輯或操作: OR
邏輯非操作: NOT
取整函數(shù): round
指定精度取整函數(shù): round
向下取整函數(shù): floor
向上取整函數(shù): ceil
向上取整函數(shù): ceiling
取隨機(jī)數(shù)函數(shù): rand
自然指數(shù)函數(shù): exp
以10為底對(duì)數(shù)函數(shù): log10
以2為底對(duì)數(shù)函數(shù): log2
對(duì)數(shù)函數(shù): log
冪運(yùn)算函數(shù): pow
冪運(yùn)算函數(shù): power
開平方函數(shù): sqrt
二進(jìn)制函數(shù): bin
十六進(jìn)制函數(shù): hex
反轉(zhuǎn)十六進(jìn)制函數(shù): unhex
進(jìn)制轉(zhuǎn)換函數(shù): conv
絕對(duì)值函數(shù): abs
正取余函數(shù): pmod
正弦函數(shù): sin
反正弦函數(shù): asin
余弦函數(shù): cos
反余弦函數(shù): acos
positive函數(shù): positive
negative函數(shù): negative
UNIX時(shí)間戳轉(zhuǎn)日期函數(shù): from_unixtime
獲取當(dāng)前UNIX時(shí)間戳函數(shù): unix_timestamp
日期轉(zhuǎn)UNIX時(shí)間戳函數(shù): unix_timestamp
指定格式日期轉(zhuǎn)UNIX時(shí)間戳函數(shù): unix_timestamp
日期時(shí)間轉(zhuǎn)日期函數(shù): to_date
日期轉(zhuǎn)年函數(shù): year
日期轉(zhuǎn)月函數(shù): month
日期轉(zhuǎn)天函數(shù): day
日期轉(zhuǎn)小時(shí)函數(shù): hour
日期轉(zhuǎn)分鐘函數(shù): minute
日期轉(zhuǎn)秒函數(shù): second
日期轉(zhuǎn)周函數(shù): weekofyear
日期比較函數(shù): datediff
日期增加函數(shù): date_add
日期減少函數(shù): date_sub
If函數(shù): if
非空查找函數(shù): COALESCE
條件判斷函數(shù):CASE
字符串長(zhǎng)度函數(shù):length
字符串反轉(zhuǎn)函數(shù):reverse
字符串連接函數(shù):concat
帶分隔符字符串連接函數(shù):concat_ws
字符串截取函數(shù):substr,substring
字符串截取函數(shù):substr,substring
字符串轉(zhuǎn)大寫函數(shù):upper,ucase
字符串轉(zhuǎn)小寫函數(shù):lower,lcase
去空格函數(shù):trim
左邊去空格函數(shù):ltrim
右邊去空格函數(shù):rtrim
正則表達(dá)式替換函數(shù):regexp_replace
正則表達(dá)式解析函數(shù):regexp_extract
URL解析函數(shù):parse_url
json解析函數(shù):get_json_object
空格字符串函數(shù):space
重復(fù)字符串函數(shù):repeat
首字符ascii函數(shù):ascii
左補(bǔ)足函數(shù):lpad
右補(bǔ)足函數(shù):rpad
分割字符串函數(shù): split
集合查找函數(shù): find_in_set
Map類型構(gòu)建: map
Struct類型構(gòu)建: struct
array類型構(gòu)建: array
array類型訪問(wèn): A[n]
map類型訪問(wèn): M[key]
struct類型訪問(wèn): S.x
Map類型長(zhǎng)度函數(shù): size(Map
array類型長(zhǎng)度函數(shù): size(Array
類型轉(zhuǎn)換函數(shù)
1、加法操作: +
語(yǔ)法: A + B
操作類型:所有數(shù)值類型
說(shuō)明:返回A與B相加的結(jié)果。結(jié)果的數(shù)值類型等于A的類型和B的類型的最小父類型(詳見(jiàn)數(shù)據(jù)類型的繼承關(guān)系)。比如,int + int 一般結(jié)果為int類型,而int + double 一般結(jié)果為double類型
舉例:hive> select 1 + 9 from dual; 10
2、減法操作: -
語(yǔ)法: A – B
操作類型:所有數(shù)值類型
說(shuō)明:返回A與B相減的結(jié)果。結(jié)果的數(shù)值類型等于A的類型和B的類型的最小父類型(詳見(jiàn)數(shù)據(jù)類型的繼承關(guān)系)。比如,int – int 一般結(jié)果為int類型,而int – double 一般結(jié)果為double類型
舉例:hive> select 10 – 5 from dual;5
3、乘法操作 : *
語(yǔ)法: A * B
操作類型:所有數(shù)值類型
說(shuō)明:返回A與B相乘的結(jié)果。結(jié)果的數(shù)值類型等于A的類型和B的類型的最小父類型(詳見(jiàn)數(shù)據(jù)類型的繼承關(guān)系)。注意,如果A乘以B的結(jié)果超過(guò)默認(rèn)結(jié)果類型的數(shù)值范圍,則需要通過(guò)cast將結(jié)果轉(zhuǎn)換成范圍更大的數(shù)值類型
舉例:hive> select 40 * 5 from dual;200
4、除法操作 : /
語(yǔ)法: A / B
操作類型:所有數(shù)值類型
說(shuō)明:返回A除以B的結(jié)果。結(jié)果的數(shù)值類型為double
舉例:hive> select 40 / 5 from dual;8.0
注意: hive 中最高精度的數(shù)據(jù)類型是 double, 只精確到小數(shù)點(diǎn)后 16 位,在做除法運(yùn)算的時(shí)候要 特別注意:
hive>select ceil(28.0/6.99999999999999) from dual limit 1; 4
hive>select ceil(28.0/6.99999999999999) from dual limit 1; 5
5、取余操作 : %
語(yǔ)法: A % B
操作類型:所有數(shù)值類型
說(shuō)明:返回A除以B的余數(shù)。結(jié)果的數(shù)值類型等于A的類型和B的類型的最小父類型(詳見(jiàn)數(shù)據(jù)類型的繼承關(guān)系)。
舉例:hive> select 41 % 5 from dual; 1
hive> select 8.4 % 4 from dual; 0.40000000000000036
注意:精度在 hive 中是個(gè)很大的問(wèn)題,類似這樣的操作最好通過(guò)round 指定精度
hive> select round(8.4 % 4 , 2) from dual;0.4
6、位與操作 : &
語(yǔ)法: A & B
操作類型:所有數(shù)值類型
說(shuō)明:返回A和B按位進(jìn)行與操作的結(jié)果。結(jié)果的數(shù)值類型等于A的類型和B的類型的最小父類型(詳見(jiàn)數(shù)據(jù)類型的繼承關(guān)系)。
舉例:hive> select 4 & 8 from dual;0
hive> select 6 & 4 from dual;4
7、位或操作 : |
語(yǔ)法: A | B
操作類型:所有數(shù)值類型
說(shuō)明:返回A和B按位進(jìn)行或操作的結(jié)果。結(jié)果的數(shù)值類型等于A的類型和B的類型的最小父類型(詳見(jiàn)數(shù)據(jù)類型的繼承關(guān)系)。
舉例:hive> select 4 | 8 from dual; 12
hive> select 6 | 8 from dual; 14
8、位異或操作 : ^
語(yǔ)法: A ^ B
操作類型:所有數(shù)值類型
說(shuō)明:返回A和B按位進(jìn)行異或操作的結(jié)果。結(jié)果的數(shù)值類型等于A的類型和B的類型的最小父類型(詳見(jiàn)數(shù)據(jù)類型的繼承關(guān)系)。
舉例:hive> select 4 ^ 8 from dual; 12
hive> select 6 ^ 4 from dual; 2
9、位取反操作 : ~
語(yǔ)法: ~A
操作類型:所有數(shù)值類型
說(shuō)明:返回A按位取反操作的結(jié)果。結(jié)果的數(shù)值類型等于A的類型。
舉例:hive> select ~6 from dual; -7
hive> select ~4 from dual; -5
10、邏輯與操作 : AND
語(yǔ)法: A AND B
操作類型:boolean
說(shuō)明:如果A和B均為TRUE,則為TRUE;否則為FALSE。如果A為NULL或B為NULL,則為NULL
舉例:hive> select 1 from dual where 1=1 and 2=2; 1
11、邏輯或操作 : OR
語(yǔ)法: A OR B
操作類型:boolean
說(shuō)明:如果A為TRUE,或者B為TRUE,或者A和B均為TRUE,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where 1=2 or 2=2; 1
12、邏輯非操作 : NOT
語(yǔ)法: NOT A
操作類型:boolean
說(shuō)明:如果A為FALSE,或者A為NULL,則為TRUE;否則為FALSE
舉例:hive> select 1 from dual where not 1=2;
13、取整函數(shù) : round
語(yǔ)法: round(double a)
返回值: BIGINT
說(shuō)明: 返回double類型的整數(shù)值部分 (遵循四舍五入)
舉例:hive> select round(3.1415926) from dual; 3
hive> select round(3.5) from dual; 4
hive> create table dual as select round(9542.158) fromdual;
hive> describe dual; _c0 bigint
14、指定精度取整函數(shù) : round
語(yǔ)法: round(double a, int d)
返回值: DOUBLE
說(shuō)明: 返回指定精度d的double類型
舉例: hive> selectround(3.1415926,4) from dual; 3.1416
15、向下取整函數(shù) : floor
語(yǔ)法: floor(double a)
返回值: BIGINT
說(shuō)明: 返回等于或者小于該double變量的最大的整數(shù)
舉例:hive> select floor(3.1415926) from dual; 3
hive> select floor(25) from dual; 25
16、向上取整函數(shù) : ceil
語(yǔ)法: ceil(double a)
返回值: BIGINT
說(shuō)明: 返回等于或者大于該double變量的最小的整數(shù)
舉例:hive> select ceil(3.1415926) from dual; 4
hive> select ceil(46) from dual; 46
17、向上取整函數(shù) : ceiling
語(yǔ)法: ceiling(double a)
返回值: BIGINT
說(shuō)明: 與ceil功能相同
舉例:hive> select ceiling(3.1415926) from dual; 4
hive> select ceiling(46) from dual; 46
18、取隨機(jī)數(shù)函數(shù) : rand
語(yǔ)法: rand(),rand(int seed)
返回值: double
說(shuō)明: 返回一個(gè)0到1范圍內(nèi)的隨機(jī)數(shù)。如果指定種子seed,則會(huì)等到一個(gè)穩(wěn)定的隨機(jī)數(shù)序列
舉例:hive> select rand() from dual; 0.5577432776034763
19、自然指數(shù)函數(shù) : exp
語(yǔ)法: exp(double a)
返回值: double
說(shuō)明: 返回自然對(duì)數(shù)e的a次方
舉例:hive> select exp(2) from dual; 7.38905609893065
20、自然對(duì)數(shù)函數(shù): ln
語(yǔ)法: ln(double a)
返回值: double
說(shuō)明: 返回a的自然對(duì)數(shù)
21、以 10 為底對(duì)數(shù)函數(shù) :log10
語(yǔ)法: log10(double a)
返回值: double
說(shuō)明: 返回以10為底的a的對(duì)數(shù)
舉例:hive> select log10(100) from dual;2.0
22、以 2 為底對(duì)數(shù)函數(shù) :log2
語(yǔ)法: log2(double a)
返回值: double
說(shuō)明: 返回以2為底的a的對(duì)數(shù)
舉例:hive> select log2(8) from dual; 3.0
23、對(duì)數(shù)函數(shù) : log
語(yǔ)法: log(double base, double a)
返回值: double
說(shuō)明: 返回以base為底的a的對(duì)數(shù)
舉例:hive> select log(4,256) from dual; 4.0
24、冪運(yùn)算函數(shù) : pow
語(yǔ)法: pow(double a, double p)
返回值: double
說(shuō)明: 返回a的p次冪
舉例:hive> select pow(2,4) from dual; 16.0
25、開平方函數(shù) : sqrt
語(yǔ)法: sqrt(double a)
返回值: double
說(shuō)明: 返回a的平方根
舉例:hive> select sqrt(16) from dual; 4.0
26、二進(jìn)制函數(shù) : bin
語(yǔ)法: bin(BIGINT a)
返回值: string
說(shuō)明: 返回a的二進(jìn)制代碼表示
舉例:hive> select bin(7) from dual; 111
27、十六進(jìn)制函數(shù) : hex
語(yǔ)法: hex(BIGINT a)
返回值: string
說(shuō)明: 如果變量是int類型,那么返回a的十六進(jìn)制表示;如果變量是string類型,則返回該字符串的十六進(jìn)制表示
舉例:hive> select hex(17) from dual; 11
hive> select hex(‘a(chǎn)bc’) from dual; 616263
28、反轉(zhuǎn)十六進(jìn)制函數(shù) : unhex
語(yǔ)法: unhex(string a)
返回值: string
說(shuō)明: 返回該十六進(jìn)制字符串所代碼的字符串
舉例: hive> selectunhex(‘616263’) from dual; abc
hive> select unhex(‘11’) from dual; -
hive> select unhex(616263) from dual; abc
29、進(jìn)制轉(zhuǎn)換函數(shù) : conv
語(yǔ)法: conv(BIGINT num, int from_base, int to_base)
返回值: string
說(shuō)明: 將數(shù)值num從from_base進(jìn)制轉(zhuǎn)化到to_base進(jìn)制
舉例:hive> select conv(17,10,16) from dual; 11
hive> select conv(17,10,2) from dual; 10001
30、絕對(duì)值函數(shù) : abs
語(yǔ)法: abs(double a) abs(int a)
返回值: double int
說(shuō)明: 返回?cái)?shù)值a的絕對(duì)值
舉例:hive> select abs(-3.9) from dual; 3.9
hive> select abs(10.9) from dual; 10.9
31、正取余函數(shù) : pmod
語(yǔ)法: pmod(int a, int b),pmod(double a, double b)
返回值: int double
說(shuō)明: 返回正的a除以b的余數(shù)
舉例:hive> select pmod(9,4) from dual; 1
hive> select pmod(-9,4) from dual; 3
32、正弦函數(shù) : sin
語(yǔ)法: sin(double a)
返回值: double
說(shuō)明: 返回a的正弦值
舉例:hive> select sin(0.8) from dual; 0.7173560908995228
33、反正弦函數(shù) : asin
語(yǔ)法: asin(double a)
返回值: double
說(shuō)明: 返回a的反正弦值
舉例:hive> select asin(0.7173560908995228) from dual; 0.8
34、余弦函數(shù) : cos
語(yǔ)法: cos(double a)
返回值: double
說(shuō)明: 返回a的余弦值
舉例:hive> select cos(0.9) from dual; 0.6216099682706644
35、反余弦函數(shù) : acos
語(yǔ)法: acos(double a)
返回值: double
說(shuō)明: 返回a的反余弦值
舉例:hive> select acos(0.6216099682706644) from dual; 0.9
36、positive 函數(shù) : positive
語(yǔ)法: positive(int a), positive(double a)
返回值: int double
說(shuō)明: 返回a
舉例: hive> selectpositive(-10) from dual; -10
hive> select positive(12) from dual; 12
37、negative 函數(shù) : negative
語(yǔ)法: negative(int a), negative(double a)
返回值: int double
說(shuō)明: 返回-a
舉例:hive> select negative(-5) from dual; 5
hive> select negative(8) from dual; -8
38、UNIX 時(shí)間戳轉(zhuǎn)日期函數(shù) : from_unixtime
語(yǔ)法: from_unixtime(bigint unixtime[, string format])
返回值: string
說(shuō)明: 轉(zhuǎn)化UNIX時(shí)間戳(從1970-01-01 00:00:00 UTC到指定時(shí)間的秒數(shù))到當(dāng)前時(shí)區(qū)的時(shí)間格式
舉例:hive> select from_unixtime(1323308943,'yyyyMMdd')from dual; 20111208
39、獲取當(dāng)前 UNIX 時(shí)間戳函數(shù) : unix_timestamp
語(yǔ)法: unix_timestamp()
返回值: bigint
說(shuō)明: 獲得當(dāng)前時(shí)區(qū)的UNIX時(shí)間戳
舉例:hive> select unix_timestamp() from dual; 1323309615
40、日期轉(zhuǎn) UNIX 時(shí)間戳函數(shù) : unix_timestamp
語(yǔ)法: unix_timestamp(string date)
返回值: bigint
說(shuō)明: 轉(zhuǎn)換格式為"yyyy-MM-ddHH:mm:ss"的日期到UNIX時(shí)間戳。如果轉(zhuǎn)化失敗,則返回0。
舉例:hive> select unix_timestamp('2011-12-07 13:01:03')from dual; 1323234063
41、指定格式日期轉(zhuǎn) UNIX 時(shí)間戳函數(shù) :unix_timestamp
語(yǔ)法: unix_timestamp(string date, string pattern)
返回值: bigint
說(shuō)明: 轉(zhuǎn)換pattern格式的日期到UNIX時(shí)間戳。如果轉(zhuǎn)化失敗,則返回0。
舉例:hive> select unix_timestamp('2011120713:01:03','yyyyMMdd HH:mm:ss') from dual; 1323234063
42、日期時(shí)間轉(zhuǎn)日期函數(shù) : to_date
語(yǔ)法: to_date(string timestamp)
返回值: string
說(shuō)明: 返回日期時(shí)間字段中的日期部分。
舉例:hive> select to_date('2011-12-08 10:03:01') fromdual;
43、日期轉(zhuǎn)年函數(shù) : year
語(yǔ)法: year(string date)
返回值: int
說(shuō)明: 返回日期中的年。
舉例:hive> select year('2011-12-08 10:03:01') fromdual;2011
hive> select year('2012-12-08') from dual; 2012
44、日期轉(zhuǎn)月函數(shù) : month
語(yǔ)法: month (string date)
返回值: int
說(shuō)明: 返回日期中的月份。
舉例:hive> select month('2011-12-08 10:03:01') fromdual;12
hive> select month('2011-08-08') from dual; 8
45、日期轉(zhuǎn)天函數(shù) : day
語(yǔ)法: day (string date)
返回值: int
說(shuō)明: 返回日期中的天。
舉例:hive> select day('2011-12-08 10:03:01') from dual; 8
hive> select day('2011-12-24') from dual; 24
46、日期轉(zhuǎn)小時(shí)函數(shù) : hour
語(yǔ)法: hour (string date)
返回值: int
說(shuō)明: 返回日期中的小時(shí)。
舉例:hive> select hour('2011-12-08 10:03:01') fromdual;10
47、日期轉(zhuǎn)分鐘函數(shù) : minute
語(yǔ)法: minute (string date)
返回值: int
說(shuō)明: 返回日期中的分鐘。
舉例:hive> select minute('2011-12-08 10:03:01') fromdual; 3
48、日期轉(zhuǎn)秒函數(shù) : second
語(yǔ)法: second (string date)
返回值: int
說(shuō)明: 返回日期中的秒。
舉例:hive> select second('2011-12-08 10:03:01') fromdual; 1
49、日期轉(zhuǎn)周函數(shù) : weekofyear
語(yǔ)法: weekofyear (string date)
返回值: int
說(shuō)明: 返回日期在當(dāng)前的周數(shù)。
舉例:hive> select weekofyear('2011-12-08 10:03:01') fromdual;49
50、日期比較函數(shù) : datediff
語(yǔ)法: datediff(string enddate, string startdate)
返回值: int
說(shuō)明: 返回結(jié)束日期減去開始日期的天數(shù)。
舉例:hive> select datediff('2012-12-08','2012-05-09')from dual; 213
51、日期增加函數(shù) : date_add
語(yǔ)法: date_add(string startdate, int days)
返回值: string
說(shuō)明: 返回開始日期startdate增加days天后的日期。
舉例:hive> select date_add('2012-12-08',10) from dual;
52、日期減少函數(shù) : date_sub
語(yǔ)法: date_sub (string startdate, int days)
返回值: string
說(shuō)明: 返回開始日期startdate減少days天后的日期。
舉例:hive> select date_sub('2012-12-08',10) from dual;
53、If 函數(shù) : if
語(yǔ)法: if(boolean testCondition, T valueTrue, TvalueFalseOrNull)
返回值: T
說(shuō)明: 當(dāng)條件testCondition為TRUE時(shí),返回valueTrue;否則返回valueFalseOrNull
舉例:hive> select if(1=2,100,200) from dual; 200
hive> select if(1=1,100,200) from dual;100
54、非空查找函數(shù) : COALESCE
語(yǔ)法: COALESCE(T v1, T v2, …)
返回值: T
說(shuō)明: 返回參數(shù)中的第一個(gè)非空值;如果所有值都為NULL,那么返回NULL
舉例:hive> select COALESCE(null,'100','50′)from dual; 100
55、條件判斷函數(shù): CASE
語(yǔ)法 : CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
返回值 : T
說(shuō)明:如果 a 等于 b ,那么返回 c ;如果 a 等于 d ,那么返回 e ;否則返回 f
舉例:hive> Select case 100 when 50 then 'tom' when 100then 'mary' else 'tim' end from dual; mary
56、字符串長(zhǎng)度函數(shù): length
語(yǔ)法: length(string A)
返回值: int
說(shuō)明:返回字符串A的長(zhǎng)度
舉例:hive> select length('abcedfg') from dual; 7
57、字符串反轉(zhuǎn)函數(shù): reverse
語(yǔ)法: reverse(string A)
返回值: string
說(shuō)明:返回字符串A的反轉(zhuǎn)結(jié)果
舉例:hive> select reverse(abcedfg’) from dual; gfdecba
58、字符串連接函數(shù): concat
語(yǔ)法: concat(string A, string B…)
返回值: string
說(shuō)明:返回輸入字符串連接后的結(jié)果,支持任意個(gè)輸入字符串
舉例:hive> select concat(‘a(chǎn)bc’,'def’,'gh’) from dual;
abcdefgh
59、帶分隔符字符串連接函數(shù): concat_ws
語(yǔ)法: concat_ws(string SEP, string A, string B…)
返回值: string
說(shuō)明:返回輸入字符串連接后的結(jié)果,SEP表示各個(gè)字符串間的分隔符
舉例:hive> select concat_ws(',','abc','def','gh') fromdual;
abc,def,gh
60、字符串截取函數(shù): substr,substring
語(yǔ)法: substr(string A, int start),substring(string A, intstart)
返回值: string
說(shuō)明:返回字符串A從start位置到結(jié)尾的字符串
舉例:hive> select substr('abcde',3) from dual; cde
hive> select substring('abcde',3) from dual; cde
hive> selectsubstr('abcde',-1) from dual; e
61、字符串截取函數(shù): substr,substring
語(yǔ)法: substr(string A, int start, int len),substring(stringA, int start, int len)
返回值: string
說(shuō)明:返回字符串A從start位置開始,長(zhǎng)度為len的字符串
舉例:hive> select substr('abcde',3,2) from dual; cd
hive> select substring('abcde',3,2) from dual; cd
hive>select substring('abcde',-2,2) from dual; de
62、字符串轉(zhuǎn)大寫函數(shù): upper,ucase
語(yǔ)法: upper(string A) ucase(string A)
返回值: string
說(shuō)明:返回字符串A的大寫格式
舉例:hive> select upper('abSEd') from dual; ABSED
hive> select ucase('abSEd') from dual; ABSED
63、字符串轉(zhuǎn)小寫函數(shù): lower,lcase
語(yǔ)法: lower(string A) lcase(string A)
返回值: string
說(shuō)明:返回字符串A的小寫格式
舉例:hive> select lower('abSEd') from dual; absed
hive> select lcase('abSEd') from dual; absed
64、去空格函數(shù): trim
語(yǔ)法: trim(string A)
返回值: string
說(shuō)明:去除字符串兩邊的空格
舉例:hive> select trim(' abc ') from dual; abc
65、左邊去空格函數(shù): ltrim
語(yǔ)法: ltrim(string A)
返回值: string
說(shuō)明:去除字符串左邊的空格
舉例:hive> select ltrim(' abc ') from dual; abc
64、右邊去空格函數(shù): rtrim
語(yǔ)法: rtrim(string A)
返回值: string
說(shuō)明:去除字符串右邊的空格
舉例:hive> select rtrim(' abc ') from dual; abc
65、正則表達(dá)式替換函數(shù): regexp_replace
語(yǔ)法: regexp_replace(string A, string B, string C)
返回值: string
說(shuō)明:將字符串A中的符合java正則表達(dá)式B的部分替換為C。注意,在有些情況下要使用轉(zhuǎn)義字符,類似oracle中的regexp_replace函數(shù)。
舉例:hive> select regexp_replace('foobar', 'oo|ar', '')from dual; fb
66、正則表達(dá)式解析函數(shù): regexp_extract
語(yǔ)法: regexp_extract(string subject, string pattern, intindex)
返回值: string
說(shuō)明:將字符串subject按照pattern正則表達(dá)式的規(guī)則拆分,返回index指定的字符。
舉例:hive> select regexp_extract('foothebar','foo(.*?)(bar)', 1) from dual; the
hive> select regexp_extract('foothebar','foo(.*?)(bar)', 2) from dual; bar
hive> select regexp_extract('foothebar','foo(.*?)(bar)', 0) from dual; foothebar
注意,在有些情況下要使用轉(zhuǎn)義字符,下面的等號(hào)要用雙豎線轉(zhuǎn) 義,這是 java 正則表達(dá)式的規(guī)則。
select data_field,
regexp_extract(data_field,'.*?bgStart\\=([^&]+)',1)as aaa,
regexp_extract(data_field,'.*?contentLoaded_headStart\\=([^&]+)',1)as bbb,
regexp_extract(data_field,'.*?AppLoad2Req\\=([^&]+)',1)as ccc
from pt_nginx_loginlog_st
where pt = '2012-03-26' limit 2;
67、URL 解析函數(shù): parse_url
語(yǔ)法: parse_url(string urlString, string partToExtract [,string keyToExtract])
返回值: string
說(shuō)明:返回URL中指定的部分。partToExtract的有效值為:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, and USERINFO.
舉例:
hive>selectparse_url('http://facebook.com/path2/p.php?k1=v1&k2=v2#Ref1', 'HOST') fromdual; facebook.com
hive> selectparse_url('http://facebook.com/path2/p.php?k1=v1&k2=v2#Ref1', 'QUERY','k1') from dual; v1
68、json 解析函數(shù): get_json_object
語(yǔ)法: get_json_object(string json_string, string path)
返回值: string
說(shuō)明:解析json的字符串json_string,返回path指定的內(nèi)容。如果輸入的json字符串無(wú)效,那么返回NULL。
舉例:
hive> select get_json_object('{"store":
> {"fruit":\[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],
> "bicycle":{"price":19.95,"color":"red"}
> },
> "email":"amy@only_for_json_udf_test.net",
> "owner":"amy"
> }
> ','$.owner') from dual;
amy
69、空格字符串函數(shù): space
語(yǔ)法: space(int n)
返回值: string
說(shuō)明:返回長(zhǎng)度為n的字符串
舉例:
hive> select space(10) from dual;
hive> select length(space(10)) from dual; 10
70、重復(fù)字符串函數(shù): repeat
語(yǔ)法: repeat(string str, int n)
返回值: string
說(shuō)明:返回重復(fù)n次后的str字符串
舉例:hive> select repeat('abc',5) from dual;abcabcabcabcabc
71、首字符 ascii 函數(shù): ascii
語(yǔ)法: ascii(string str)
返回值: int
說(shuō)明:返回字符串str第一個(gè)字符的ascii碼
舉例:hive> select ascii('abcde') from dual; 97
72、左補(bǔ)足函數(shù): lpad
語(yǔ)法: lpad(string str, int len, string pad)
返回值: string
說(shuō)明:將str進(jìn)行用pad進(jìn)行左補(bǔ)足到len位
舉例:hive> select lpad('abc',10,'td') from dual;tdtdtdtabc
注意:與 GP , ORACLE 不同, pad 不能默認(rèn)
73、右補(bǔ)足函數(shù): rpad
語(yǔ)法: rpad(string str, int len, string pad)
返回值: string
說(shuō)明:將str進(jìn)行用pad進(jìn)行右補(bǔ)足到len位
舉例:hive> select rpad('abc',10,'td') from dual;abctdtdtdt
74、分割字符串函數(shù) : split
語(yǔ)法: split(stringstr, string pat)
返回值: array
說(shuō)明: 按照pat字符串分割str,會(huì)返回分割后的字符串?dāng)?shù)組
舉例:
hive> select split('abtcdtef','t') from dual;
["ab","cd","ef"]
75、集合查找函數(shù) : find_in_set
語(yǔ)法: find_in_set(string str, string strList)
返回值: int
說(shuō)明: 返回str在strlist第一次出現(xiàn)的位置,strlist是用逗號(hào)分割的字符串。如果沒(méi)有找該str字符,則返回0
舉例:hive> select find_in_set('ab','ef,ab,de') fromdual;2
hive> select find_in_set('at','ef,ab,de') from dual;0
76、集合統(tǒng)計(jì)函數(shù)
語(yǔ)法: count(*), count(expr), count(DISTINCT expr[, expr_.])
返回值: int
說(shuō)明: count(*)統(tǒng)計(jì)檢索出的行的個(gè)數(shù),包括NULL值的行;count(expr)返回指定字段的非空值的個(gè)數(shù);count(DISTINCTexpr[, expr_.])返回指定字段的不同的非空值的個(gè)數(shù)
舉例:hive> select count(*) from dual; 20
hive> select count(distinct t) from dual; 10
77、總和統(tǒng)計(jì)函數(shù) : sum
語(yǔ)法: sum(col), sum(DISTINCT col)
返回值: double
說(shuō)明: sum(col)統(tǒng)計(jì)結(jié)果集中col的相加的結(jié)果;sum(DISTINCT col)統(tǒng)計(jì)結(jié)果中col不同值相加的結(jié)果
舉例:hive> select sum(t) from dual; 100
hive> select sum(distinct t) from dual; 70
78、平均值統(tǒng)計(jì)函數(shù) : avg
語(yǔ)法: avg(col), avg(DISTINCT col)
返回值: double
說(shuō)明: avg(col)統(tǒng)計(jì)結(jié)果集中col的平均值;avg(DISTINCT col)統(tǒng)計(jì)結(jié)果中col不同值相加的平均值
舉例:hive> select avg(t) from dual; 50
hive> select avg (distinct t) from dual; 30
79、最小值統(tǒng)計(jì)函數(shù) : min
語(yǔ)法: min(col)
返回值: double
說(shuō)明: 統(tǒng)計(jì)結(jié)果集中col字段的最小值
舉例:hive> select min(t) from dual; 20
80、最大值統(tǒng)計(jì)函數(shù) : max
語(yǔ)法: maxcol)
返回值: double
說(shuō)明: 統(tǒng)計(jì)結(jié)果集中col字段的最大值
舉例:hive> select max(t) from dual; 120
81、Map 類型構(gòu)建 : map
語(yǔ)法: map (key1, value1, key2, value2, …)
說(shuō)明:根據(jù)輸入的key和value對(duì)構(gòu)建map類型
舉例:
hive> Create table alex_testas select map('100','tom','200','mary') as t from dual;
hive> describe alex_test;
t map
hive> select t from alex_test;
{"100":"tom","200":"mary"}
82、Struct 類型構(gòu)建 : struct
語(yǔ)法: struct(val1, val2, val3, …)
說(shuō)明:根據(jù)輸入的參數(shù)構(gòu)建結(jié)構(gòu)體struct類型
舉例:
hive> create table alex_test as selectstruct('tom','mary','tim') as t from dual;
hive> describe alex_test;
t struct
hive> select t from alex_test;
{"col1":"tom","col2":"mary","col3":"tim"}
83、array 類型構(gòu)建 : array
語(yǔ)法: array(val1, val2, …)
說(shuō)明:根據(jù)輸入的參數(shù)構(gòu)建數(shù)組array類型
舉例:
hive> create table alex_test as selectarray("tom","mary","tim") as t from dual;
hive> describe alex_test;