Hive Shell 表操作
阿新 • • 發佈:2019-01-11
建立管理表(內部表):
建立方式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;