一、建庫sql
create database mydb; create database if no exists mydb; create database if no exists mydb location "/aa/bb";
二、查詢數據庫 數據庫
查詢庫列表:show databases;
查詢庫詳細信息:desc database [extended] mydb;
查詢建庫的詳細信息:show create database mydb;函數
三、刪除數據庫oop
drop database mydb;
drop database if exists mydb;
drop database if exists mydb [restrict|cascade];rest
四、先進入咱們要操做的數據庫/切換庫code
use mydb;orm
五、查看數據庫裏面的表排序
show tables;
show tables in mydb;hadoop
六、添加表ci
建立內部表(Managered_Table)
create table mingxing_mng(id int, name string, sex string, age int, department string) row format delimited fields terminated by ',';
show create table mingxing;
建立外部表(External_Table)
create external table mingxing_ext(id int, name string, sex string, age int, department string) row format delimited fields terminated by ',' location '/home/hadoop/hivedata';
注意:建立外部表的時候指定location的位置必須是目錄,不能是單個文件
跟內部表對比:
一、在建立表的時候指定關鍵字: external
二、通常來講,建立外部表,都須要指定一個外部路徑
無論是建立外部表仍是內部表,均可以指定數據存儲目錄
默認的目錄:
hdfs://hadoop02:9000/user/hive/warehouse/myhive.db/student/student.txt
建立分區表
create table mingxing_ptn(id int, name string, sex string, age int, department string) partitioned by (city string) row format delimited fields terminated by ',';
注意:partitioned裏的字段不是能是表中聲明的字段,,必須是一個新字段
表字段
分區字段
建立分桶表
create table mingxing_bck(id int, name string, sex string, age int, department string) clustered by(id) sorted by(age desc) into 4 buckets row format delimited fields terminated by ',';
注意:clustered裏的字段必需要是表字段中出現的字段
分桶字段
表字段
分桶字段和排序字段能夠不同,分桶字段和排序字段都必須是表字段中的一部分
分桶的原理和MapReduce的HashPartitioner的原理一致
七、刪除表
drop table mingxing;
drop table if exists mingxing;
八、對錶進行重命名
alter table mingxing rename to student;
九、對錶的字段進行操做(增長add,刪除drop,修改change,替換replace)
增長字段:
alter table mingxing add columns (province string);
alter table mingxing add columns (province string, salary bigint);
刪除字段:
drop(不支持) XXXXX
修改字段:
alter table mingxing change age newage string; // 修改字段的定義
alter table mingxing change age newage string after id; // 修改字段的定義 + 順序
alter table mingxing change age newage string first; // 修改age字段爲第一個字段
替換字段
alter table mingxing replace columns(id int, name string, sex string); // 替換全部字段
十、對錶中的分區進行操做
增長分區:
alter table mingxing_ptn add partition(city='beijing');
alter table mingxing_ptn add partition(city='beijing') partition(city='tianjin');
alter table mingxing_ptn add partition(city='beijing', email="abc@163.com");
alter table mingxing_ptn add partition(city='beijing', email="abc@163.com") partition(city='tianjin', email="cba@163.com");
刪除分區:
alter table mingxing_ptn drop partition(city='beijing');
alter table mingxing_ptn drop partition(city='beijing'), partition(city='tianjin');
alter table mingxing_ptn add partition(city='beijing', email="abc@163.com");
alter table mingxing_ptn add partition(city='beijing', email="abc@163.com"), partition(city='tianjin', email="cba@163.com");
修改分區路徑:
alter table mingxing_ptn partition(city="beijing") set location "/mingxing_beijing";
十一、查詢顯示命令
查看庫:show databases;
查看錶:show tables;
查看建表完整語法:show create table mingxing_mng;
查看內置函數庫:show functions;
查看函數的詳細手冊:desc function extended concat;
查看分區:show partitions mingxing_ptn;
查看錶的字段:desc mingxing_mng;
查看錶的詳細信息:desc extended mingxing_mng;
查看錶的格式化了以後的詳細信息:desc formatted mingxing_mng;
十二、load方式導入數據
導入本地相對路徑的數據
load data local inpath './student.txt' into table mingxing;
load data local inpath './student.txt' overwrite into table mingxing;
(覆蓋導入)
導入本地絕對路徑數據:
load data local inpath '/home/hadoop/hivedata/student.txt' into table mingxing;
導入HDFS上的簡便路徑數據:
load data inpath '/home/hadoop/hivedata/student.txt' into table mingxing;
導入HDFS上的全路徑模式下的數據:
load data inpath 'hdfs://hadoop01:9000/home/hadoop/hivedata/student.txt' into table mingxing;
導入本地數據和導入HDFS上的數據的區別:
一、導入HDFS上的數據到hive表,表示截切,移動
二、導入本地數據,至關於複製或者上傳
1三、利用insert關鍵字往表中插入數據
單條數據插入:
insert into table mingxing values(001,'huangbo','male',50,'MA');
單重插入模式: insert ... select ....
insert into table student select id,name,sex,age,department from mingxing;
注意:查詢出的字段必須是student表中存在的字段
多重插入模式:
from mingxing
insert into table student1 select id,name,sex,age
insert into table student2 select id,department;
from mingxing2
insert into table student1 partition(department='MA') select id,name,sex ,age where department='MA'
insert into table student1 partition(department='CS') select id,name,sex ,age where department='CS';
靜態分區插入:
須要手動的建立分區
alter table student add partition (city="zhengzhou")
load data local inpath '/root/hivedata/student.txt' into table student partition(city='zhengzhou');
動態分區插入:
打開動態分區的開關:set hive.exec.dynamic.partition = true;
設置動態分區插入模式:set hive.exec.dynamic.partition.mode = nonstrict
create table student(name string, department string) partitioned by (id int) .....
insert into table student partition(id) select name,department,id from mingxing2;
student表字段:name,department, 分區字段是id
查詢字段是:name,department,id,分區字段
注意:動態分區插入的分區字段必須是查詢語句當中出現的字段中的最後一個
CTAS(create table ... as select ...)(直接把查詢出來的結果存儲到新建的一張表裏)
create table student as select id,name,age,department from mingxing;
注意:自動新建的表中的字段和查詢語句出現的字段的名稱,類型,註釋如出一轍
限制:
一、不能建立外部表
二、不能建立分區表
三、不能建立分桶表
分桶插入:
建立分桶表:
create table mingxing(id int, name string, sex string, age int, department string)
clustered by(id) sorted by(age desc) into 4 buckets
row format delimited fields terminated by ',';
插入數據:
insert into table mingxing select id,name,sex,age,department from mingxing2
distribute by id sort by age desc;
注意:查詢語句中的分桶信息必須和分桶表中的信息一致
1四、like關鍵字使用:複製表結構
create table student like mingxing;
1五、利用insert導出數據到本地或者hdfs
單模式導出數據到本地:
insert overwrite local directory '/root/outputdata' select id,name,sex,age,department from mingxing;
多模式導出數據到本地:
from mingxing
insert overwrite local directory '/root/outputdata1' select id, name
insert overwrite local directory '/root/outputdata2' select id, name,age
簡便路徑模式導出到hdfs:
insert overwrite directory '/root/outputdata' select id,name,sex,age,department from mingxing;
全路徑模式查詢數據到hdfs:
insert overwrite directory 'hdfs://hadoop01:9000/root/outputdata1' select id,name,sex,age,department from mingxing;
local :導出到本地目錄
overwrite :表示覆蓋
1六、清空數據庫表中的數據
truncate table mingxing2;
1七、select查詢
order by : 全局排序
若是一個HQL語句當中設置了order by,那麼最終在HQL語句執行過程當中設置的
set mapreduce.job.reduces = 4 不起做用。!!
sort by :局部排序
通常來講,要搭配 分桶操做使用
distribute by id sort by age desc;
distribute by : 純粹就是分桶
在使用distribute by的時候:要設置reduceTask的個數
cluster by : 既分桶,也排序
cluster by age = distribute by age sort by age;
distribute by age sort by age,id != cluster by age sort by id
cluster by 和 sort by 不能同時使用
1八、join查詢
限制:
支持 等值鏈接, 不支持 非等值鏈接
支持 and 操做, 不支持 or
支持超過2個表的鏈接
經驗:
當出現多個表進行鏈接時,最好把小表放置在前面!! 把大表放置在最後
join分類; inner join left outer join right outer join full outer join left semi join 它是in、exists的高效實現 select a.* from a left semi join b on a.id = b.id 等價於: select a.* from a where a.id in (select b.id from b);