Hive入門學習隨筆(二)
====使用Load語句執行資料的匯入
--將作業系統上的檔案student01.txt資料匯入到t2表中
load data local inpath '/root/data/student01.txt' into table t2;
--將作業系統上/root/data資料夾下的所有檔案匯入t3表中,並且覆蓋原來的資料
load data local inpath '/root/data/' overwrite into table t3;
--將HDFS中,/input/student01.txt匯入到t3表中
load data inpath '/input/student01.txt' overwrite into table t3;
--將作業系統上的data1.txt匯入到分割槽t3表中
load data local inpath 'root/data/data1.txt' into table t3 partition (gender='M')
===使用Sqoop實現資料的匯入
Sqoop是一個工具,用來進行Hadoop與關係型資料之間的批量資料的匯入和匯出。
Sqoop的安裝非常簡單,只需要從網站上下載Sqoop的安裝包,並配置環境變數即可。
環境變數:
由於Sqoop是基於Hadoop的,所以需要通過環境變數HADOOP_COMMON_HOME來指明Hadoop的安裝目錄。
由於Sqoop是把作業最終轉換成MapReduce的作業進行提交執行,所以,需要通過環境變數HADOOP_MAPRED_HOME來指明MapReduce的Jar目錄。
--使用Sqoop匯入Oracle資料到HDFS中。
./sqoop import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1 --target-dir '/sqoop/emp'
--使用Sqoop匯入Oracle資料到Hive中。
./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1
--使用Sqoop匯入Oracle資料到Hive中,並且指定表名
./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1 --hive-table emp1
使用Sqoop匯入Oracle資料到Hive中,並且制定Where條件
./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1 --hive-table emp1 --where 'DEPTNO=10'
--使用Sqoop匯入Oracle資料到Hive中,並且使用查詢語句
./sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx --table emp --columns 'empno,ename,job,sal' -m 1 --hive-table emp1 --query 'SELECT * FROM EMP WHERE SAL<2000 $CONDITIONS' --target-dir '/sqoop/emp5' --hive-table emp5
--使用Sqoop將Hive中的資料匯出到Oracle中。
./sqoop export --connect jdbc:oracle:thin:@192.168.1.36:1521:orcl --username xxx --password xxx -m 1 --table MYEMP --export-dir HDFS路徑
Sqoop在業務系統中有著非常重要的作用,一般的應用場景是下面這個樣子。
====Hive的資料查詢
--查詢所有員工的所有資訊
select * from emp;
--查詢員工資訊:員工號 姓名 月薪
select empno, ename, sal from emp;
--查詢員工資訊:員工號 姓名 月薪 年薪 獎金 年收入
select empno, ename, sal, sal*12 comm, sal*12+nvl(comm, 0) from emp;
--查詢獎金為null的員工
select * from emp where comm is null;
--使用distinct來去掉重複記錄
select distinct deptno from rmp;
====Hive簡單查詢的FetchTask功能
從Hive0.10.0版本開始支援。開始了這個功能以後,我們執行一條簡單的語句(沒有函式、排序等)不會生成一個MapReduce作業。
hive-site.xml配置內容:
====在查詢中使用過濾
--查詢10號部門的員工
select * from emp where deptno=10;
--查詢名稱為KING的員工
select * from emp where ename='KING';
--查詢部門號是10,薪水小於2000的員工
select * from emp where deptno=10 and sal<2000;
--模糊查詢:查詢名字以S開頭的員工
select empno, ename, sal from emp where ename like 'S%';
--模糊查詢:查詢名字含有下劃線的員工
select empno, ename, sal from emp where ename like '%\\_%';
注意:下劃線在模糊查詢中有特殊的含義,代表任意字元。所以,語句中需要轉義符進行標記
====在查詢中使用排序
--查詢員工資訊:員工號 姓名 月薪 按照月薪排序
select empno, ename, sal from emp order by sal desc;
※order by後面可以使用:列名、表示式、別名、序號。
另外,如果想使用需要進行排序的時候,需要設定下面的環境變數。
set hive.groupby.orderby.position.alias=true;
※null排序:升序時null排最前面,降序時null排最後面,一般用法都是將null轉換成0之後進行排序。
====Hive的函式
內建函式可以直接呼叫。也可以通過編寫java程式來自定義函式
--內建函式
--自定義函式
①、自定義UDF需要繼承org.apache.hadoop.hive.ql.UDF
需要實現evaluate函式,evaluate函式支援過載。
②、將程式打包放到目標機器上去,進入Hive客戶端新增jar包
命令例:hive>add jar /root/udfjar/udf_text.jar
③、建立臨時函式:CREATE TEMPORARY FUNCTION <函式名> AS 'java類名'
命令例:hive>CREATE TEMPORARY FUNCTION myconcat AS 'demo.udf.ConcatString';
④、自動以函式使用。select <函式名> from table;
⑤、銷燬臨時函式:DROP TEMPORARY FUNCTION <函式名>
====Hive表連線
Hive的表連線分為:等值連線、不等值連線、外連結、自連線
--等值連線
select e.empno, e.ename, e.sal, d.name from emp e, dept d where e.deptno=d.deptno;
--不等值連線
select e.empno, e.ename, e.sal, s.grade from emp e, salgrade s where e.sal between s.local and s.hisal;
--外連結(包括左連線和右連線)
select d.deptno, d.dname, count(e.empno) from emp e right outer join dept d on (e.deptno=d.deptno) group by d.deptno, d.dname;
--自連線
核心:通過表的別名將同一張表視為多張表
====Hive中的子查詢
hive只支援from和where子句中的子查詢。
例:select e.ename from emp e where e.deptno in (select d.deptno from dept d where d.dname='SALES' or d.dname='KING');
注意:子查詢中的空值:如果子查詢返回的結果集中含有空值得話,我們不能使用not in,但是可以使用in。
====Hive的JDBC客戶端操作
①、啟動Hive遠端服務。命令:#hive --service hiveserver
②、JDBC客戶端操作
====Hive的Thrift Java客戶端操作
相關文章
- HTML入門學習筆記(二)HTML筆記
- Hive學習筆記 4 Hive的資料匯入Hive筆記
- webpack4入門學習筆記(二)Web筆記
- hadoop hive hbase 入門學習 (三)HadoopHive
- hive學習筆記Hive筆記
- Docker 入門學習筆記二:常用命令Docker筆記
- ReactJS入門學習二ReactJS
- JavaScript入門學習學習筆記(上)JavaScript筆記
- TS入門學習筆記筆記
- 【PostgreSQL】入門學習筆記SQL筆記
- git入門學習筆記Git筆記
- Docker入門學習筆記Docker筆記
- Unity學習筆記--入門Unity筆記
- ActionScript 學習筆記(入門)筆記
- mysql新手入門隨筆MySql
- webpack入門學習手記(二)Web
- gRPC入門學習之旅(二)RPC
- Hive 入門Hive
- Hive入門Hive
- 學習筆記| AS入門(二) 簡單控制元件篇(上)筆記控制元件
- 學習筆記|AS入門(二) 簡單控制元件篇(下)筆記控制元件
- 學習筆記|AS入門(二) 簡單控制元件篇(上)筆記控制元件
- Go 入門指南學習筆記Go筆記
- React入門指南(學習筆記)React筆記
- pandas 學習筆記 (入門篇)筆記
- MySQL學習筆記---入門使用MySql筆記
- JavaScript入門-學習筆記(一)JavaScript筆記
- Dubbo學習筆記(一) 入門筆記
- golang入門學習筆記(一)Golang筆記
- Kotlin 入門學習筆記Kotlin筆記
- LDA入門級學習筆記LDA筆記
- Hive學習筆記 1 Hive體系結構Hive筆記
- Hive學習筆記 6 Hive的JDBC連線Hive筆記JDBC
- mysql新手入門隨筆2MySql
- mysql新手入門隨筆4MySql
- JavaScript入門學習之旅(二)——JavaScript DOM程式設計藝術學習筆記(上)JavaScript程式設計筆記
- hive學習筆記之十一:UDTFHive筆記
- Hive學習筆記 2 Hive的資料型別Hive筆記資料型別