數據庫詳解
-
數據庫相關
#/user/hive/warehouse/db_name.db create database if not exists db_name #指定HDFS目錄 作為hive的數據庫目錄 create database if not exists db_name location '/t' #刪除空數據庫 drop database db_name #刪除非空的數據庫 drop database db_name cascade; #顯示所有數據庫 show databases #應用數據庫 use db_name
表Table詳解
#查看表的信息 desc table_name describe table_name #查看表中更為詳細的信息 desc extended table_name #格式化查看表中更為詳細的信息 desc formatted table_name
-
管理表 ()
-
基本語法
create table if not exists table_name( id int, name string )row format delimited fields termimated by '\t';
-
基於as子查詢的建表方式
#1. 以后面子查詢的查詢列,作為表的結構
#2. 同時會把查詢結果的數據,插入新表中
create table if not exists table_name as select id from t_user; -
基於like關鍵字建表
#復制t_user的表結構,但不復制數據
create table if not exists table_name like t_user; -
指定表格位置[技巧]
#默認建表的位置 在當前數據庫中
#/user/hive/warehouse/lhc_140.db/t_user
#/user/hive/warehouse/lhc_140.db/t_user_as
#/user/hive/warehouse/lhc_140.db/t_user_like
#指定表格的創建位置 locationcreate table if not exists table_name( id int, name string )row format delimited fields termimated by '\t' location '/test1';
#存在目錄 套上一張表 [重點]create table if not exists t_user_suns( id int, name string )row format delimited fields terminated by '\t' location '/suns';
-
注意[技巧]
hdfs上同一個目錄下的所有文件,hive表統一操作處理
-
-
外部表
#基本創建語法
create external table if not exists table_name( id int, name string )row format delimited fields termimated by '\t';
#子查詢方式 create external table if not exists table_name as select id from t_user;
#like創建方式 create external table if not exists table_name like t_user; -
管理表 與 外部表的區別
#刪除管理表 ,HDFS上的目錄同樣刪除 drop table t_user_as; #刪除外部表,HDFS上的目錄及數據保留,刪除了metastore drop table t_user_ex;
3.分區表 (優化)
create table t_user_part( id int, name string) partitioned by (time string) row format delimited fields terminated by '\t'; load data local inpath '/root/data3' into table t_user_part partition (time='18'); load data local inpath '/root/data3' into table t_user_part partition (time='19'); select * from t_user_part #操作具體分區 where 分區條件 select count(*) from t_user_part where time='18' and id >3 ;
桶表 (抽樣,了解)
-
臨時表(
Hive中的數據導入和導出
-
數據的導入 import
-
load data local[重點]
#linux系統中向hdfs中的hive導入數據 load data local inpath '' into table table_name
-
load data
#從hdfs向hive導入數據 load data inpath 'hdfs_path' into table table_name #本質上就是把某一個目錄下的文件 移動到 新表的目錄中 load data inpath '/suns/data3' into table t_user_hdfs
-
創建表的過程中 通過as
-
insert 關鍵字 導入數據[重點]
# 與 as 通過子查詢導入數據 關鍵區別在於通過insert操作,表已經存在. insert into table t_user_2 select id,name from t_user;
-
通過hdfs put文件
bin/hdfs dfs -put /root/data3 /user/hive/warsehouse/lhc_140/t_user
-
-
數據的導出
-
insert方式【】
insert overwrite local directory '/root/xiaohei' select name from t_user; #底層應用mr,那么所有xiaohei目錄不能存在,自動生成文件名 000000_0 insert overwrite directory 'hdfs_path' select name from t_user;
-
Hive導入 導出命令【】
-
通過hdfs get文件
bin/hdfs dfs -get /user/hive/warsehouse/lhc_140/t_user /root
-
通過hive的啟動參數導出數據
bin/hive --database 'lhc125' -f /root/hive.sql > /root/result
-
sql
-
1. 基本sql select * from t_user #不啟動mr select id,name from t_user #啟動mr 2. 條件查詢 select * from t_user where name='sss'; 3. 謂詞 between and in not in is null is not null select * from t_user where id between 1 and 3 select * from t_user where id in (1,2) select * from t_user where id is null 4. 比較運算 > < >= <= != 5. 邏輯運算 and or 6. 排序 order by desc|asc 7. 分頁 limit select * from t_user limit 2; 8. sql函數 show functions; select substring(name,1,1) from t_user select upper(name) from t_user 9. 多表聯合查詢 inner join left outer join right outer join full join select e.id,e.name,d.id,d.dname from t_emp e inner join t_dept d on e.d_id = d.id; 10. count avg sum max min
-