1. 程式人生 > >hive的常用操作

hive的常用操作

文件夾 char external list 正常 ted format ont light

1、hive的數據類型

tinyint/smallint/int/bigint
tinyint:從 0 到 255 的整型數據
smallint:從 0 到 65535 的整型數據
int:從 0 到 4294967296 的整型數據
bigint:所有數字
float/double
boolean
string
date

2、基本操作

顯示所有庫:show databases;
創建庫:create database media_pro;
切換到指定庫:use media_pro;
查看表結構:desc formatted t_pro_user_list;

創建分區表:
create table OUFEI_CHARGE_ORDERINFO_LOG
(state_date string,
create_date date,
sendtimes int) row format delimited fields terminated by ‘\t‘;

3、進階操作

  ①、分區表

create table OUFEI_CHARGE_ORDERINFO_LOG
(state_date string,
 create_date date,
 sendtimes int)
 partitioned by (logdate string)  row format delimited fields   terminated by ‘\t‘;

  這種正常的表存放的目錄就是你當前庫目錄的下級路徑:

  技術分享

  上圖中的標誌的分別是:分區字段、表所在庫、表所在路徑、表類型

  ②、外部表

 create external table t_detail
 (state_date string,
  create_date date,
  sendtimes int)
  partitioned by (logdate string)row format delimited fields terminated by ‘\t‘ location ‘/hive_exterdir/‘;
 //如果不加location的話,其實就是個內部表

  技術分享

  上圖的標紅的分別是:分區字段、指定數據文件路徑(後面將要導入的數據放進來就行load一下就行)、表的類型

  外部表名在hdfs上是看不見的

  ③、導數load in datapath

  內部表導入:

    load data inpath ‘/userdata/order.txt‘ into table oufei_charge_orderinfo_log partition (logdate=‘2017-06-16‘);

    這裏表示將userdata文件夾下的order.txt文件導入表中,並以‘2017-06-16‘作為分區字段的值;這裏如果userdata下沒有文件夾的話,可以把後面的文件名省略;

   外部表導入:

    load data inpath ‘/hive_exterdir/detail.txt‘ into table t_detail partition (logdate=‘2017-06-16‘);

    導入成功後,你會發現之前的detail.txt文件會被移動到分區目錄下

    技術分享

   ④、總結:內部表和外部表的區別:

    

1、在導入數據到外部表,數據並沒有移動到自己的數據倉庫目錄下,也就是說外部表中的數據並不是由它自己來管理的!內部表則不一樣;
2、在刪除表的時候,Hive將會把屬於表的元數據和數據全部刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的!
那麽,應該如何選擇使用哪種表呢?在大多數情況沒有太多的區別,因此選擇只是個人喜好的問題。但是作為一個經驗,如果所有處理都需要由Hive完成,那麽你應該創建內部表,否則使用外部表!

  

     

    

hive的常用操作