Hive知識點總結(一)

2021-08-20 22:04:22 字數 4488 閱讀 4983

眾所周知實際開發過程中,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...