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強制刪除