一. 數據庫操作
1、創建數據庫
//用戶可以用 IF NOT EXISTS 選項來忽略這個異常。create database [ if not exists ] myhive ;
2、創建數據庫并指定hdfs存儲位置
create database myhive2 location '/myhive2';
3、修改數據庫,可以使用alter database 命令來修改數據庫的一些屬性。但是數據庫的元數據信息是不可更改的,包括數據庫的名稱以及數據庫所在的位置
alter database myhive2 set dbproperties('createtime'='202004090');
4、查看數據庫詳細信息
①查看數據庫基本信息
desc database myhive2;
②查看數據庫更多詳細信息
desc database extended myhive2;
5、刪除數據庫
① 刪除一個空數據庫,如果數據庫下面有數據表,那么就會報錯
drop database myhive2;
②強制刪除數據庫,包含數據庫下面的表一起刪除
drop database myhive cascade;
//包含數據庫下面的表一起刪除; 不要執行,危險動作
6、數據庫切換
use myhive(自己的數據庫名稱);
二、Hive的字段類型
分類 | 類型 | 描述 | 字面量實例 |
---|---|---|---|
原始類型 | BOOLEAN | true/false | TRUE |
TINYINT | 1字節的有符號整數 -128~127 | 1Y | |
SMALLINT | 2個字節的有符號整數,-32768~32767 | 1S | |
INT | 4個字節的帶符號整數 | 1 | |
BIGINT | 8字節帶符號整數 | 1L | |
FLOAT | 4字節單精度浮點數1.0 | ||
DOUBLE | 8字節雙精度浮點數 | 1.0 | |
DEICIMAL | 任意精度的帶符號小數 | 1.0 | |
STRING | 字符串,變長 | “a”,’b’ | |
VARCHAR | 變長字符串 | “a”,’b’ | |
CHAR | 固定長度字符串 | “a”,’b’ | |
BINARY | 字節數組 | 無法表示 | |
TIMESTAMP | 時間戳,毫秒值精度 | 122327493795 | |
DATE | 日期 | ‘2020-04-29’ | |
INTERVAL | 時間頻率間隔 | ||
復雜類型 | ARRAY | 有序的的同類型的集合 | array(1,2) |
MAP | key-value,key必須為原始類型,value可以任意類型 | map(‘a’,1,’b’,2) | |
STRUCT | 字段集合,類型可以不同 | struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0) | |
UNION | 在有限取值范圍內的一個值 | create_union(1,’a’,63) |
三、內部表操作
1、創建基本數據表(內部表)
create table tableName(字段名稱 字段類型,字段名稱 字段類型)
ROW FORMAT DELIMITED IELDS TERMINATED BY char(char分隔符)
指定數據中字段與字段的分隔符 ‘\t’ 或 ‘,’ 或 ‘|’ 或其他
2、創建表并指定字段之間的分隔符
create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t' stored as textfile location '/user/stu2';
3、根據查詢結果創建表
create table stu3 as select * from stu2;
4、根據已經存在的表結構創建表
create table stu4 like stu2;
1
5、查詢表的類型
desc formatted stu2;
三、外部表操作
1. 外部表說明
外部表因為是指定其他的hdfs路徑的數據加載到表當中來,所以hive表會認為自己不完全獨占這份數據,所以刪除hive表的時候,數據仍然存放在hdfs當中,不會刪掉。
2. 管理表和外部表的使用場景
每天將收集到的網站日志定期流入HDFS文本文件。在外部表(原始日志表)的基礎上做大量的統計分析,用到的中間表、結果表使用內部表存儲,數據通過SELECT+INSERT進入內部表。
1、分別創建老師與學生表外部表,并向表中加載數據
create EXTERNAL table tableName(字段名稱 字段類型,字段名稱 字段類型)
建外部表需要指定數據的存儲路徑。通過LOCATION進行指定。
①創建老師表:
create external table techer (t_id string,t_name string) row format delimited fields terminated by '\t';
1
②創建學生表:
create external table student (s_id string,s_name string,s_birth string , s_sex string ) row format delimited fields terminated by '\t';
1
2、 從本地文件系統向表中加載數據
load data local inpath ‘文件路徑’ into table 表名;
1
3、加載數據并覆蓋已有數據
load data local inpath ‘文件路徑’ overwrite into table 表名;
4、 從hdfs文件系統向表中加載數據(需要提前將數據上傳到hdfs文件系統,其實就是一個移動文件的操作)
cd /export/servers/hivedatas
hdfs dfs -mkdir -p /hivedatas
hdfs dfs -put techer.csv /hivedatas/
load data inpath '/hivedatas/techer.csv' into table techer;
四、修改表
1. 表重命名
alter table old_table_name rename to new_table_name;//把表score4修改成score5alter table score4 rename to score5;
2. 增加/修改列信息
- 查詢表結構
desc score5;
- 添加列
alter table score5 add columns (mycol string, mysco string);
- 查詢表結構
desc score5;
- 更新列
alter table score5 change column mysco mysconew int;
- 查詢表結構
desc score5;
- 刪除表數據
truncate table 表名;
3.刪除表
drop table score5;