- Hive 的數(shù)據(jù)導(dǎo)入: 可以使用Load命令導(dǎo)入县匠,也可以使用Sqoop組件導(dǎo)入數(shù)據(jù)。
- Hive不支持insert插入單條語句
- Hive的數(shù)據(jù)查詢
- Hive的Java客戶端和自定義函數(shù)
Hive執(zhí)行l(wèi)oad導(dǎo)入數(shù)據(jù)撒轮。
load data local inpath ‘/root/data/student01.txt’ into table t2;
local 表示數(shù)據(jù)從本地操作系統(tǒng)中導(dǎo)入乞旦。如果不寫local表示從hdfs中導(dǎo)入。
local data local inpath ‘/root/data/student02.txt’ into table t3;
將/root/data 下的所有數(shù)據(jù)導(dǎo)入t3表中题山,并且覆蓋原來的數(shù)據(jù) load data local inpath ‘/root/data/’ overwrite into table t3
將HDFS中兰粉,/input/student01.txt導(dǎo)入到t3 load data inpath ‘/input/student01.txt’ overwrite into table t3;
load data local inpath ‘/root/data/data1.txt’ into table partition_table partition (gender=’M’);
Sqoop 數(shù)據(jù)的導(dǎo)入和導(dǎo)出
關(guān)于sqoop的導(dǎo)入和導(dǎo)出很簡單,直接下載壓縮包顶瞳,然后解壓玖姑,設(shè)置兩個環(huán)境變量就可以。
設(shè)置第一個環(huán)境變量:
- export HADOOP_COMMON_HOME=….(hadoop的安裝目錄)
- export HADOOP_MAPRED_HOME=….(MapReduce的目錄慨菱,這個目錄和hadoop目錄一般一樣)
- 使用Sqoop導(dǎo)入Oracle數(shù)據(jù)到HDFS中:
./sqoop import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp –columns ‘empno, ename, job, sal, deptno’ -m 1 –target-dir ‘/sqoop/emp’
但是這樣指向會報錯焰络,因為需要jdbc驅(qū)動,需要把oracle的jdbc傳入到sqoop的lib目錄下抡柿。
這樣就會成功執(zhí)行sqoop的數(shù)據(jù)導(dǎo)入和導(dǎo)出舔琅,整個執(zhí)行過程就是通過MapReduce來完成的, - 使用sqoop導(dǎo)入oracle數(shù)據(jù)到Hive中
./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp -m 1 –columns ‘empno,ename,job,sal,deptno’ - 使用sqoop導(dǎo)入oracle數(shù)據(jù)到Hive中洲劣,并且指定表名
./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp -m 1 –columns ‘empno,ename,job,sal,deptno’ –hive-table emp1 - 使用sqoop導(dǎo)入oracle數(shù)據(jù)到hive表中备蚓,并使用where條件
./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger –table emp -m 1 –columns ‘empno,ename,job,sal,deptno’ –hive-table emp1 –where ‘DEPTNO=10’ - 使用sqoop導(dǎo)入oracle數(shù)據(jù)到hive中课蔬,并使用查詢語句
./sqoop import –hive-import –connect jdbc:oracle:thin:@192.168.56.101:1521:orcl –username scott –password tiger -m 1 –query ‘SELECT * FROM EMP WHERE SAL<2000 AND $CONDITIONS’ –target-dir ‘/sqoop/emp5’ –hive-table emp5
這里需要注意的是$CONDITIONS - 使用sqoop將hive中的數(shù)據(jù)導(dǎo)出到oracle數(shù)據(jù)庫中。
./sqoop export –connect jdbc:oracle:thin:@192.18/56.101:1521:orcl –username soctt –password tiger -m 1 –table MYEMP –export-dir …..
Hive的數(shù)據(jù)查詢
在hive中進行數(shù)據(jù)操作的時候郊尝,總是將查詢轉(zhuǎn)換成一個MapReduce任務(wù)進行執(zhí)行二跋,但是對于簡單的任務(wù)是沒有必要轉(zhuǎn)成一個MapReduce任務(wù)執(zhí)行的,這個時候就可以配置一個fetch task功能流昏,讓fetch task功能支持簡單的數(shù)據(jù)的操作扎即。
配置方式有以下幾種:
- 在hive的命令提示符下面執(zhí)行:set hive.fetch.task.conversion=more;
- 在啟動hive命令提示符的時候,加一個參數(shù)也可以開啟這個功能:hive –hiveconf hive.fetch.task.conversion=more
- 修改hive-site.xml文件
前兩種方式都可以配置這個功能况凉,但是這種配置都是臨時的谚鄙。可以修改hive-site.xml文件使其永久有效刁绒。
修改hive-site.xml文件闷营,加一行屬性:
<property>
<name>hive.fetch.task.conversion</name>
<value>more</value>
</property>
Hive的函數(shù):
- 內(nèi)置函數(shù)
- 自定義函數(shù)
數(shù)學(xué)函數(shù):
- round 四舍五入
- ceil 向上取整
- floor 向下取整
select round(45.926, 2); 45.926保留兩位小數(shù),最終結(jié)果是45.93
字符函數(shù):
- lower
- upper
- length
- concat
- substr
- trim
- lpad
- rpad
select lower(‘Hello WORLD’), upper(‘hhhh’) select length(‘HelloWorld’) ….
lpad:左填充 rpad:右填充
select lpad(‘a(chǎn)bcd’, 10, ‘’), rpad(‘a(chǎn)bcd’, 10, ‘’)
收集函數(shù)
- size
size(map(<key, value>, <key, value>));
轉(zhuǎn)換函數(shù)
- cast
select cast(1 as bigint); select cast(‘2015-08-10’ as date);
日期函數(shù)
- to_date
- year
- month
- day
- weekofyear
- datediff
- date_add
- date_sub
條件函數(shù)
- coalesce:從左到右返回第一個不為null的值
- case … when … : 條件表達式
聚合函數(shù):
- count
- sum
- min
- max
- avg
表生成函數(shù)
- explode
Hive的表連接
- 等值連接
- 不等值連接
- 外連接
- 自連接
等值連接:
select e.empno, e.ename, e.sal, e.dname from emp e, dept d where e.deptno=d.deptno;
不等值連接:
外連接:
通過外連接可以將對于連接條件不成立的記錄任然包含在最后的結(jié)果中:其中分成:
- 左外連接
- 右外連接
Hive的子查詢:
Hive的java客戶端操作:
首先需要啟動Hive遠程服務(wù):hive –service hiveserver
- JDBC
- Thrift Client
Hive的JDBC客戶端操作:
- 獲取連接
- 創(chuàng)建運行環(huán)境
- 執(zhí)行HQL
- 處理結(jié)果
- 釋放資源
hive-jdbc-…jar 這個就是hive的jdbc文件知市。