1. 程式人生 > >hive詳解(二)

hive詳解(二)

hive操作

建立表的本質:  在hdfs的/user/hive/warehouse下的對應的庫目錄下建立表目錄 刪除表的本質:  刪除表資料對應的目錄

載入資料: (1)values(不建議使用,耗時太長)

insert into t_2 values('1','zhangsan');

我們可以看到,這個時間(雖然與我的叢集執行速度有關),但實在是太慢了。 (2)put操作(即上傳檔案)

hdfs dfs -put /xxx /user/hive/warehouse/brz.db/t_3

這裡我上傳stu檔案

[[email protected] test]# hdfs dfs -put ./stu /user/hive/warehouse/brz.db/t_2
[
[email protected]
test]# hdfs dfs -cat /user/hive/warehouse/brz.db/t_2/stu 1liming 2daming

可以看到,上傳成功。hive中檢視: 注意:hive的分隔符預設為:(ctrl+v ctrl+A),hive是嚴格的讀時模式,如果格式不正確,就會用MULL代替 (3)load方式

load data [local] inpath '/usr/local/hive/xxxx' into table tableName;  

**注意:**加local則為linux下的目錄

小技巧:在hive的客戶端中執行hdfs和linux的shell命令,需要在命令之前加上!

!hdfs dfs -ls /

載入資料的本質: 將資料檔案copy(不完全是copy)到對應表目錄下。 如果資料是從本機中載入的,則copy資料到表目錄下; 如果資料是從hdfs中載入,則移動(剪下)資料到表目錄下。

(4)insert into載入資料

insert into t_4
select * from t_2
where uid < 7
;

克隆表,不帶資料:like

create table if not exists t_5 like t_4;  

克隆錶帶資料:

create table if not exists t_6 like t_2 location '/user/hive/warehouse/brz.db/t_2';  

注意: location後指定的一定是hdfs的目錄,而不是檔案

克隆錶帶資料:

更靈活的方式 跟建立表的方式一樣,元資料和目錄都會建立

create table if not exists t_7
as
select * from t_2
where uid < 3;

設定hive執行的本機模式:

set hive.exec.mode.local.auto=true;

create table if not exists t_8
as
select uname from t_2
where 1=0
;

速度明顯快了很多。

檢視庫描述:

desc database [extended] brz;
describe database [extended] brz;

查看錶:

desc [extended] t_8;
describe [extended] t_2;
//加extended顯示較為詳細	
show create table t_2;//顯示的結果較全

案例:

CREATE TABLE log(
id string COMMENT 'this is id column',
phonenumber bigint,
mac string,
ip string,
url string,
stat01 string,
stat02 string,
upflow int,
downflow int,
status string,
dt string
)
COMMENT 'this is log table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '	'
LINES TERMINATED BY '\n'
stored as textfile;

載入資料:

load data local inpath '/usr/local/hive/test/data.log.txt' into table log;

需求: 1、統計每個使用者的上下行流量以及總流量(用人眼可識別的流量單位表示,保留2位小數)

select
l.phonenumber,
sum(l.upflow) as upflow,
sum(l.downflow) as downflow,
sum(l.upflow + l.downflow) as sumflow
from log l
group by l.phonenumber
;

2、求訪問排名前三的url:

select
l.url,
count(l.url) as urlcount 
from log l
group by l.url
order by urlcount desc 
limit 3
;

3、模擬收費(總流量*價格)

表的修改: 1、修改表名 rename to

alter table t_2 rename to t_user_info;

2、修改列名:change column

alter table t_9 change column uname name string;

3、修改列的位置:

alter table t_9 change column name name string after uage;
alter table t_9 change column uage uage string after uname;

alter table t_9 change column uage uage string first;

4、修改欄位型別

alter table t_9 change column uid uid string;

5、增加欄位 add columns

alter table t_9 add columns (
usex int,
addr string
)
;

6、刪除欄位:replace columns(本質:先刪除表,再建立表)

alter table t_9 replace columns(
uid string,
uname string,
addr string
)
;

7、內部表和外部表的轉換:

alter table t_9 set tblproperties("EXTERNAL"="TRUE");   ##true一定要大寫
alter table t_9 set tblproperties("EXTERNAL"="false");  ##false大小寫都沒關係

顯示當前庫:

set hive.cli.print.current.db=true;

刪除庫:

drop database if exists gp;  ##刪除空庫
drop database if exists test cascade; ##cascade強制刪除