眾所周知實際開發過程中,hive主要是通過其豐富的內建函式,便捷的類sql來處理經過mapreduce清洗後的資料,下面我們進行hive的知識點總結。
1、hive使用方式
方式1:學習時使用的最基本的簡單查詢:
bin/hive //啟動hive
hive>select * from t_test; //進行簡單使用
方式2:作為服務啟動並使用:
bin/hiveserver2 -hiveconf hive.root.logger=debug,console //前台啟動
nohup bin/hiveserver2 1>/dev/null 2>&1 & //後台啟動
通過服務啟動成功後,可以去別的節點,通過beeline來連線使用
連線方式1:
bin/beeline //回車,進入beeline的命令介面
進入beeline命令介面後輸入:
beeline> !connect jdbc:hive2//mini1:10000 //mini1是hiveserver所啟動的那台主機名,埠預設是10000
然後就可以正常進行hive操作了
連線方式2:
在啟動的時候連線
bin/beeline -u jdbc:hive2://mini1:10000 -n root
接下來就可以進行hive操作了
方式3:指令碼化執行使用
在實際的生產過程中,上述兩種方法由於是互動式查詢,效率會比較低,無法應對大量的hive查詢任務。因此,更多的會選擇指令碼化執行機制,該機制的核心是hive可以用一次性命令的方式來執行給定的hql語句。
比如,可以將sql語句寫入shell指令碼,以便於指令碼化執行hive任務,並可以控制、排程眾多的hive任務:
vi t_order_etl.sh
#!/bin/bash
hive -e "select * from db_order.t_order"
hive -e "select * from default.t_user"
hql="create table default.t_bash as select * from db_order.t_order"
hive -e "$hql"
然後執行該shell即可,當然如果sql比較複雜的話,上述方式就不可取了,我們可以把hql語句寫入檔案中:
vi x.hql
select * from db_order.t_order;
select count(1) from db_order.t_user;
然後使用hive -f x.hql來執行即可。
2、建立庫表、資料匯入匯出及檔案格式
2.1、建立庫
hive中有乙個預設的庫:
庫名: default
庫目錄:/hive安裝目錄/warehouse
新建庫:
create database db_order;
庫建好後,在hdfs中會生成乙個庫目錄:
hdfs://hdp20-01:9000/user/hive安裝目錄/warehouse/db_order.db
2.2、建立表
use db_order;
create table t_order(id string,create_time string,amount float,uid string);
表建好後,會在所屬的庫目錄中生成乙個表目錄
/user/hive/warehouse/db_order.db/t_order
只是,這樣建表的話,hive會認為表資料檔案中的字段分隔符為 ^a
因此正確的建表語句為:
create table t_order(id string,create_time string,amount float,uid string)
row format delimited
fields terminated by ',';
這樣就指定了,我們的表資料檔案中的字段分隔符為 ","
2.2.1、建立外部表
create external table t_3(id int,name string,salary bigint,add string)
row format delimited
fields terminated by ','
location '/aa/bb';
外部表和內部表的特性差別:
1、內部表的目錄在hive的倉庫目錄中 ,而外部表的目錄由使用者指定;
因此實際開發中:
乙個hive的資料倉儲,最底層的表,一定是來自於外部系統,為了不影響外部系統的工作邏輯,在hive中可建external表來對映這些外部系統產生的資料目錄,並且就算在hive中把這個表給drop掉,也不會刪除資料目錄,也就不會影響到別的應用系統;然後在後續的etl操作,產生的各種表建議用managed_table。
2.2.2、建立分割槽表
分割槽的意義在於可以將資料分子目錄儲存,以便於查詢時讓資料讀取範圍更精準;
比如,**每天產生的瀏覽記錄,瀏覽記錄應該建乙個表來存放,但是,有時候,我們可能只需要對某一天的瀏覽記錄進行分析
這時,就可以將這個表建為分割槽表,每天的資料匯入其中的乙個分割槽;當然,每日的分割槽目錄,應該有乙個目錄名(分割槽字段)。
create table t_4(ip string,url string,staylong int)
partitioned by (day string) -- 分割槽標識不能存在於表字段中
row format delimited
fields terminated by ',';
2.2.3、ctas建表
(1)可以通過已存在表來建表:
create table t_user_2 like t_user;
新建的t_user_2表結構定義與源表t_user一致,但是沒有資料
(2)在建表的同時插入資料:
create table t_access_user
asselect ip,url from t_access;
t_access_user會根據select查詢的字段來建表,同時將查詢的結果插入新錶中。
2.3、匯入資料
方式1:匯入資料的一種方式:
手動用hdfs命令,將檔案放入表目錄;
方式2:在hive的互動式shell中用hive命令來匯入本地資料到表目錄:
hive>load data local inpath '/root/order.data.2' into table t_order;
方式3:用hive命令匯入hdfs中的資料檔案到表目錄:
不加local關鍵字,則是從hdfs的路徑中移動檔案到表目錄中:
hive>load data inpath '/access.log.2017-08-06.log' into table t_access partition(dt='20170806');
hive>load data inpath '/user.data.2' into table t_1;
注意:導本地檔案和導hdfs檔案的區別:
本地檔案匯入表:複製
hdfs檔案匯入表:移動
2.4、匯出資料
(1)將hive表中的資料匯入hdfs的檔案:
insert overwrite directory '/root/access-data'
row format delimited fields terminated by ','
select * from t_access;
(2)將hive表中的資料匯入本地磁碟檔案:
insert overwrite local directory '/root/access-data'
row format delimited fields terminated by ','
select * from t_access limit 100000;
2.5、檔案格式
hive支援很多種檔案格式: sequence file | text file | parquet file | rc file
create table t_access_text(ip string,url string,access_time string)
row format delimited fields terminated by ','
stored as textfile;
hive知識點詳解
hive支援的常用資料型別和檔案格式 hive是一種構建在hadoop上的資料倉儲,hive把sql查詢轉換為一系列在hadoop集群中執行的mapreduce作業,是mapreduce更高層次的抽象,不用編寫具體的mapreduce方法。hive將資料組織為表,這就使得hdfs上的資料有了結構,元...
學習hive知識點
1 建立檢視 hive create view valid records as select from records2 where temperature 9999 2 檢視檢視詳細資訊 hive describe extended valid records 3 從表中匯出資料 hadoop ...
Hive基礎知識點總結 DML
向表中載入資料的基本語法 load data local inpath opt module datas student.txt overwrite into table student partition partcol1 val1,具體的引數介紹 1.load data 表示載入資料 2.loc...