一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Hive 之Table、External Table、Partition(五)

 jasonbetter 2018-05-30
Hive 之Table、External Table、Partition(五)

一、 有關Hive的一些小結:

  • Hive 是一個建立在hadoop文件系統(tǒng)上的數據倉庫架構,可以用其對hdfs上數據進行分析與管理。
  • 實際上是將hdfs上的文件映射成table(按文件格式創(chuàng)建table,然后hive的數據倉庫會生成對應的目錄,默認的倉庫路徑:user/hive/warehouse/tablename,目錄名與這個表名相同,這時只要將符合table定義的文件加載到該目錄便可通過Hql對整個目錄的文件進行查詢了。
  • 將數據加載到該目錄可以用hdfs dfs -put 命令直接添加到該目錄;
  • 也可以通過load data local inpath ‘user/test.txt’ into table tableName,通過load命令加載數據與通過put命令加載文件的結果是一樣的,即在user/hive/warehouse/tablename 目錄下都會有加載進來的文件,如果用load命令加載的是hdfs上的文件則會將原h(huán)dfs目錄下對應的文件移動至hive的倉庫目錄下),并將這些元數據保存到關系型數據庫中,元數據存儲著表所對應的文件路徑,表的列與分區(qū),表創(chuàng)建時間,文件大小等屬性;
  • 同時支持用戶運用類sql對文件進行操作,這個操作主要是查詢。

hive 的數據模型中四種表:

 -Table內部表 
 -External Table 外部表
 -Partition分區(qū)表 
 -Bucket Table 桶表
  • 1
  • 2
  • 3
  • 4
  • 5

二、內部表

  • 表:Hive中的表和關系型數據庫中的表在概念上很類似,每個表在HDFS中都有相應的目錄用來存儲表的數據,這個目錄可以通過${HIVE_HOME}/conf/hive-site.xml配置文件中的hive.metastore.warehouse.dir屬性來配置,這個屬性默認的值是/user/hive/warehouse(這個目錄在HDFS上),我們可以根據實際的情況來修改這個配置。
  • 如果我有一個表test,那么在HDFS中會創(chuàng)建/user/hive/warehouse/test目錄(這里假定hive.metastore.warehouse.dir配置為/user/hive/warehouse);test表所對應的所有數據都存放在這個目錄中。
  • 如果刪除這張表,則表在關系數據中存儲的元數據以及在warehouse目錄下的數據也會被清除掉。

三、External Table 外部表

  • Hive中的外部表和表很類似,但是其數據不是放在自己表所屬的目錄中,而是存放到別處,這樣的好處是如果你要刪除這個外部表,該外部表所指向的數據是不會被刪除的,它只會刪除外部表對應的元數據;而如果你要刪除內部表,該表對應的所有數據包括元數據都會被刪除。

    外部表操作演示:

  • 1、創(chuàng)建外部表(創(chuàng)建的時候得用LOCATION 指定原數據存儲的路徑,不指定的話hive會在user/hive/warehouse下以外部表的表名創(chuàng)建目錄并將數據存儲在這里)

create EXTERNAL table t_external (year string,month int,num int)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
LOCATION '/usr/extends'; 
  • 1
  • 2
  • 3
  • 4
  • 加載數據可用:hdfs dfs -put filename /usr/extends 
    也可用: hive>load data local inpath ‘/home/centosm/test/hive’ into table t_external; 
    執(zhí)行l(wèi)oad 命令之前數據如下所示:

這里寫圖片描述

這里寫圖片描述

執(zhí)行l(wèi)oad 命令之后:

這里寫圖片描述

  • 2、查詢外部表內容

這里寫圖片描述

  • 3、查詢外部表中的文件路徑 
    select INPUT__FILE__NAME from t_external;

這里寫圖片描述

  • 4、如果刪除外部表,只會將其對應的元數據刪除了,目錄中的數據并不會被刪除
hive> drop table t_external;
hive> select * from t_external;
FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 't_external'
  • 1
  • 2
  • 3

這里寫圖片描述

由上可見對應的數據并沒有被刪除。

  • 綜上所述:外部表與內部表的區(qū)別如下

  • 1、在導入數據到外部表,數據并沒有移動到自己的數據倉庫目錄下,也就是說外部表中的數據并不是由它自己來管理的!而表則不一樣;

  • 2、在刪除表的時候,Hive將會把屬于表的元數據和數據全部刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的! 
    那么,應該如何選擇使用哪種表呢?在大多數情況沒有太多的區(qū)別,因此選擇只是個人喜好的問題。但是作為一個經驗,如果所有處理都需要由Hive完成,那么你應該創(chuàng)建表,否則使用外部表!

hadoop權威指南3如下建議 
這里寫圖片描述

四、Partition分區(qū)表

  • 在Hive中,表的每一個分區(qū)對應表下的相應目錄,所有分區(qū)的數據都是存儲在對應的目錄中。比如wyp表有dt和city兩個分區(qū),則對應dt=20131218,city=BJ對應表的目錄為/user/hive/warehouse/dt=20131218/city=BJ,所有屬于這個分區(qū)的數據都存放在這個目錄中。 
    這里寫圖片描述 
    這里寫圖片描述

下面以實際操作來明顯的展示分區(qū): 
創(chuàng)建分區(qū)表:

create table t_partition(ts bigint,line string)  
partitioned by (dt string,country string)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',';
  • 1
  • 2
  • 3
  • 4

查看表結構:

hive> desc t_partition;
OK
ts                      bigint                                      
line                    string                                      
dt                      string                                      
country                 string                                      

 # Partition Information          
 # col_name              data_type               comment             

dt                              string                                      
country                     string 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

向表中導入數據:

load data local inpath '/home/centosm/test/file3.txt'
into table t_partition
partition(dt='2017-04-01',country='US');
  • 1
  • 2
  • 3

。。。。導入多個文件到不同分區(qū)

數據導完后查詢表中數據如下:

hive> select * from t_partition;
OK
1111111         hello file1     2017-03-01      GB
2222            hello file2     2017-03-01      GB
123122222222    helloFile3      2017-04-01      CH
123122222222    helloFile3      2017-04-01      US
Time taken: 0.158 seconds, Fetched: 4 row(s)

hive> select * from t_partition where country='US';
OK
123122222222    helloFile3      2017-04-01      US

hive>  select * from t_partition where country='US' and dt='2017-04-01' ;
OK
123122222222    helloFile3      2017-04-01      US
Time taken: 0.216 seconds, Fetched: 1 row(s)

hive>  select * from t_partition where country='US' or dt='2017-03-01' ;
OK
1111111 hello file1     2017-03-01      GB
2222    hello file2     2017-03-01      GB
123122222222    helloFile3      2017-04-01      US
Time taken: 0.13 seconds, Fetched: 3 row(s)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

查詢表分區(qū)

hive> show partitions t_partition;
OK
dt=2017-03-01/country=GB
dt=2017-04-01/country=CH
dt=2017-04-01/country=US
Time taken: 0.074 seconds, Fetched: 3 row(s)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查詢hive存儲數據的目錄如下

hadoop fs -ls /user/hive/warehouse/t_partition/dt=2017-03-01/country=GB
Found 2 items
-rwxr-xr-x   1 centosm supergroup         20 2017-03-25 01:11 /user/hive/warehouse/t_partition/dt=2017-03-01/country=GB/file.txt
-rwxr-xr-x   1 centosm supergroup         17 2017-03-25 01:14 /user/hive/warehouse/t_partition/dt=2017-03-01/country=GB/file2.txt
  • 1
  • 2
  • 3
  • 4

由上述可知加載數據到分區(qū)后數據的目錄可能如下所述:

這里寫圖片描述

  • 綜上所述,分區(qū)只不過是將表中指定的文件存儲到更細化的文件目錄中,比如以時間為分區(qū),那么每天的數據則會存儲到以日期為目錄的路徑下,當進行查詢時在sql中指定where那個分區(qū)時就不用進行全表查詢,而是只需要查詢某一天這個目錄下的數據,很明顯這么做大大地加快了查詢的速度。
版權聲明:本文大部分為博主原創(chuàng),轉載請注明出處。 https://blog.csdn.net/u013850277/article/details/65749770

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    色婷婷视频在线精品免费观看| 日韩高清一区二区三区四区| 亚洲综合色婷婷七月丁香| 久久久精品日韩欧美丰满| 欧美黑人在线精品极品| 99久久人妻中文字幕| 成人午夜激情免费在线| 亚洲国产精品久久综合网| 欧美一级特黄大片做受大屁股| 日韩国产精品激情一区| 国产美女精品午夜福利视频| 国产精品超碰在线观看| 国产在线视频好看不卡| 国产日产欧美精品视频| 日本东京热视频一区二区三区 | 国产精品涩涩成人一区二区三区| 午夜精品一区免费视频| 精品人妻少妇二区三区| 欧洲精品一区二区三区四区| 亚洲国产精品一区二区| 人妻中文一区二区三区| 欧美日韩国产自拍亚洲| 亚洲综合天堂一二三区| 亚洲中文字幕高清视频在线观看| 婷婷九月在线中文字幕| 欧美偷拍一区二区三区四区| 国产精品99一区二区三区| 在线欧洲免费无线码二区免费| 久七久精品视频黄色的| 成人国产激情在线视频| 日韩欧美一区二区黄色| 熟女白浆精品一区二区| 欧美日韩国产精品黄片| 欧美一区二区不卡专区| 国产精品久久精品国产| 成人精品欧美一级乱黄| 丰满少妇被粗大猛烈进出视频| 插进她的身体里在线观看骚| 国产午夜福利不卡片在线观看 | 亚洲精品一二三区不卡| 国产亚洲成av人在线观看|