(6)hadoop學習——hive的檔案儲存和基本資料型別
上一篇介紹了hive的架構,以及hive語句執行的過程。
這篇介紹hive的檔案儲存和基本資料型別。
Hive是hdfs上的資料倉庫,而hdfs上存放的都是檔案,所以hive中的表可以理解為對hdfs上檔案的對映。
看完下面的介紹,相信你能很清楚的理解:“hive中的表就是hdfs的檔案”這句話。
一,hive的檔案儲存
預設hive倉庫的路徑為/user/hive/warehouse/database.db/
使用hadoop dfs –ls /user/hive/warehouse/database.db/ 命令,可以檢視該資料倉庫下所有的表:
第一列為許可權,第二列是使用者,第三列使用者組,第四列大小(此處不顯示,需要再進一層目錄),第五列為建立時間,第六列為hdfs上具體目錄。
hive庫中每個表都會在/user/hive/warehouse/database.db/下有相應目錄。
找個表進去看:
可以看到,這時第四列有大小了。第一行是標識位,另外幾行是hive自動把表分成了幾份檔案。如果將其中一個part刪掉,相應的該表資料量會減少。
如果把其中一個part再load一份,相應的表資料又會增加。(可以先把檔案get到本地,再put進去,或者建一個備份表,把備份表的檔案移動過去或者使用load命令)
注:如果相同檔案,hive會自動給檔案命名為copy。
所以如果你不小心把hdfs上相應的表文件全部刪掉了,就相當於在hive中執行了truncate table操作。
2、Hive建表語句:
CREATE TABLE IF NOT EXISTS table_name
(
company_name String comment '公司名稱',
company_id String comment '公司ID'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY'\t'
LINES TERMINATED BY '\n';
stored as textfile;
最後幾句分別代表,指定列分隔符為製表符,行分隔符為\n,並且該表文件在hdfs中儲存格式為text格式。
3、load命令
可以直接將linux本地檔案load到hive表中,只要保證檔案型別、列分隔符和行分隔符與建表時指定的一致。
具體語句:
load data local inpath '檔名' into table tablename;
假設檔案不在本地,則不需要local關鍵字。4、hive的基本資料型別
資料型別 |
所佔位元組 |
開始支援版本 |
TINYINT |
1byte |
|
SMALLINT |
2byte |
|
INT |
4byte |
|
BIGINT |
8byte |
|
BOOLEAN |
||
FLOAT |
4byte單精度 |
|
DOUBLE |
8byte雙精度 |
|
STRING |
||
BINARY |
從Hive0.8.0開始支援 |
|
TIMESTAMP |
從Hive0.8.0開始支援 |
|
DECIMAL |
從Hive0.11.0開始支援 |
|
CHAR |
從Hive0.13.0開始支援 |
|
VARCHAR |
從Hive0.12.0開始支援 |
|
DATE |
從Hive0.12.0開始支援 |
下一篇具體介紹複雜型別的使用。