大數據(Hive數據庫、表的詳解及其Hive數據導入導出)

 

數據庫詳解
  1. 數據庫相關linux

  

#/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
  1. 管理表 ()sql

    1. 基本語法數據庫

      create table if not exists table_name(
      id int,
      name string
      )row format delimited fields termimated by '\t';
    2. 基於as子查詢的建表方式函數

      #1. 之後面子查詢的查詢列,做爲表的結構
      #2. 同時會把查詢結果的數據,插入新表中
      create table if not exists table_name as select id from t_user;
    3. 基於like關鍵字建表優化

      #複製t_user的表結構,但不復制數據
      create table if not exists table_name like t_user;
    4. 指定表格位置[技巧]spa

      #默認建表的位置 在當前數據庫中
      #/user/hive/warehouse/baizhi_140.db/t_user
      #/user/hive/warehouse/baizhi_140.db/t_user_as
      #/user/hive/warehouse/baizhi_140.db/t_user_like

      #指定表格的建立位置 location
      create 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';
    5. 注意[技巧]code

      hdfs上同一個目錄下的全部文件,hive表統一操做處理
  2. 外部表orm

    #基本建立語法
    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;
    1. 管理表 與 外部表的區別blog

 

 

#刪除管理表 ,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 ;

 

 

桶表 (抽樣,瞭解)

 

  1. 臨時表(

Hive中的數據導入和導出
  1. 數據的導入 import

    1. load data local[重點]

      #linux系統中向hdfs中的hive導入數據
      load data local inpath '' into table table_name 
    2. load data

      #從hdfs向hive導入數據
      load data inpath 'hdfs_path' into table table_name 
      ​
      #本質上就是把某一個目錄下的文件  移動到 新表的目錄中
      load data inpath '/suns/data3' into table t_user_hdfs
    3. 建立表的過程當中 經過as

    4. insert 關鍵字 導入數據[重點]

      # 與 as 經過子查詢導入數據 關鍵區別在於經過insert操做,表已經存在.
      insert into table t_user_2 select id,name from t_user;
    5. 經過hdfs put文件

      bin/hdfs dfs -put /root/data3 /user/hive/warsehouse/baizhi_140/t_user 
  2. 數據的導出

    1. insert方式【】

      insert overwrite local directory '/root/xiaohei' select name from t_user; 
      #底層應用mr,那麼全部xiaohei目錄不能存在,自動生成文件名 000000_0insert overwrite directory 'hdfs_path' select name from t_user; 
    2. Hive導入 導出命令【】

    3. 經過hdfs get文件

      bin/hdfs dfs -get  /user/hive/warsehouse/baizhi_140/t_user  /root
    4. 經過hive的啓動參數導出數據

      bin/hive --database 'baizhi125' -f /root/hive.sql > /root/result
    5. sql
    6. 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
相關文章
相關標籤/搜索