1. 程式人生 > >Hive Shell 表操作

Hive Shell 表操作

建立管理表(內部表):

建立方式1:

create table [IF NOT EXISTS] test.user
(
id int [COMMENT '該欄位的註釋'],
name string,
age int
)
[COMMENT '對該表的註釋']

//行之間的分隔符為空格
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

//列之間的分隔符預設為換行符,一般不寫
[COLLECTION ITEMS TERMINATED BY '\n']

//儲存格式為普通的文字檔案,企業多用parquet和orc,效率高
STORED AS textfile 

//表預設會建立在資料庫的目錄下,也可單獨指定:
LOCATION '/user/hive/warehouse/user';

建立方式2:

//子查詢建立表
create table IF NOT EXISTS test.user2
AS select id,name from test.user;

建立方式3:

//複製已存在的表

create table IF NOT EXISTS test.user3
LIKE test.user;

載入資料進入表:

//加了local就是linux本地檔案,沒加就是hdfs上的檔案
//本質是直接將資料檔案複製到該表的目錄下,方便快捷
//overwrite 覆蓋資料

load data local inpath '/opt/datas/user.txt' [overwrite] into table test.user;

hdfs目錄下:
在這裡插入圖片描述

建立外部表(加了一個external):

//外部表與內部表區別:刪除外部表不會刪除表資料,只刪除元資料;
//					刪除內部表既刪除表資料,也刪除元資料;
//					即刪除外部表後,在hdfs下的表的目錄還在,只是hive中搜不到該表

create EXTERNAL table [IF NOT EXISTS] db_hive.user_ext
(
id int [COMMENT '該欄位的註釋'],
name string,
age int
)
[COMMENT '對該表的註釋']

//行之間的分隔符為空格
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

//列之間的分隔符預設為換行符,一般不寫
[COLLECTION ITEMS TERMINATED BY '\n']

//儲存格式為普通的文字檔案,企業多用parquet和orc,效率高
STORED AS textfile 

//表預設會建立在資料庫的目錄下,也可單獨指定:
LOCATION '/user/hive/warehouse/user';

建立分割槽表:

//分割槽表即在hdfs目錄下,在該表的目錄下將那些資料檔案分成多個目錄,
//不用每次查詢都將所有資料加載出來,

create table IF NOT EXISTS test.user_partitioned
(
id int,
name string,
age int
)
PARTITIONED BY (date string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS textfile;

分割槽表中載入資料:

load data local inpath '/opt/datas/user.txt' into table test.user_partitioned 
partition(date='2018/12/1');

hdfs中分割槽表目錄:
在這裡插入圖片描述

檢視分割槽表中資料:

//若是普通表查詢會在整個表目錄下載入所有資料檔案,
//而分割槽表加了個分割槽欄位可以只查詢某個分割槽的資料檔案

select * from test.user_partitioned where date='2018/12/1';
select * from test.user_partitioned where date='2018/11/30';

多級分割槽表:

create table IF NOT EXISTS test.user_partitioned_multiple
(
id int,
name string,
age int
)
PARTITIONED BY (month string,day string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS textfile;

hdfs目錄結構:
在這裡插入圖片描述

在這裡插入圖片描述

分割槽表分割槽未寫入元資料中:

第一種修復方式:

//用於手動在hdfs下分割槽表目錄下新增分割槽目錄,但為寫入表元資料,需修復

//例:
//	 dfs -mkdir -p  /user/hive/warehouse/table_name/day=12;
//	 dfs -put /opt/datas/user.txt  /user/hive/warehouse/table_name/day=12;

msck repair table table_name;

第二種修復方式(企業多用):

//用於手動在hdfs下分割槽表目錄下新增分割槽目錄,但為寫入表元資料,需修復

alter table table_name add partition(day='12');

查看錶有多少個分割槽:

show partitions table_name;

清除表資料:

truncate table test.user;

修改表的名稱:

alter table user rename to user10;

刪除表:

drop table if exists test.user10;