**
hive
表分為內部表和外部表。
外部表在刪除的時候並不會刪除到hdfs中的檔案,比較安全,所以對於重要的需要進行分析的日誌建議使用外部表進行操作,這樣不會出現誤操作影響到日誌的儲存。
內部表在闡述的時候會刪除掉hdfs中的檔案,所以一般用於建立臨時表,這樣臨時表在刪除後,也會刪除掉hdfs中的資料。
今天這裡主要是對內部表轉化為外部表進行相關的實驗。
試驗一:
建立內部表,匯入資料。將內部表修改為外部表,刪除該錶。檢視是否會刪除掉hdfs中的資料。
sql |
複製 |?01
02
//建立內部表
03
createtable tmp.pvlog(ip string,
current_date string,userinfo string)
04
partitioned by(ptdate string)
row format delimited fields
terminated
by'\t' ;
05
//上傳資料
06
loaddata
local inpath '/home/user/logs/log2012-08-14.txt'
into
table tmp.pvlog partition(ptdate=
'2012-08-14'
);
07
loaddata
local inpath '/home/user/logs/log2012-08-15.txt'
into
table tmp.pvlog partition(ptdate=
'2012-08-15'
);
08
//修改為外部表
09
use tmp ;
10
altertable pvlog set tblproperties (
'external'
='true'
);
11
//查詢
12
select ptdate,count(1
)from tmp.pvlog group
by ptdate ;
13
能查詢出資料
14
//刪除該錶
15
droptable pvlog ;
16
//查詢hdfs中的資料
17
bin/hadoop
dfs -ls /
user
/hive
/warehouse/tmp.db/pvlog/ptdate=*
18
能查詢到資料。
19
altertable pvlog add partition(ptdate=
'2012-08-14'
);
20
altertable pvlog add partition(ptdate=
'2012-08-15'
);
21結論:hdfs中的資料不會被刪除。
試驗二:
建立內部表,將內部表修改為外部表,通過load data 匯入資料。看外部表是否能通過loaddata的方式關聯到hdfs。
sql |
複製 |?01
02
//建立內部表
03
createtable tmp.pvlog(ip string,
current_date string,userinfo string)
04
partitioned by(ptdate string)
row format delimited fields
terminated
by'\t' ;
05
//修改為外部表
06
use tmp ;
07
altertable pvlog set tblproperties (
'external'
='true'
);
08
//上傳資料
09
loaddata
local inpath '/home/user/logs/log2012-08-14.txt'
into
table tmp.pvlog partition(ptdate=
'2012-08-14'
);
10
loaddata
local inpath '/home/user/logs/log2012-08-15.txt'
into
table tmp.pvlog partition(ptdate=
'2012-08-15'
);
11
//
12
//查詢
13
select ptdate,count(1
)from tmp.pvlog group
by ptdate ;
14
能查詢出資料
15實驗三:
建立外部表,通過hadoop
的hdfs上傳檔案,並以hive增加分割槽的方式來訪問資料,看是否能正常訪問到資料。
sql |
複製 |?01
02
//建立內部表
03
createtable tmp.pvlog(ip string,
current_date string,userinfo string)
04
partitioned by(ptdate string)
row format delimited fields
terminated
by'\t' ;
05
//修改為外部表
06
use tmp ;
07
altertable pvlog set tblproperties (
'external'
='true'
);
08
//上傳資料
09
bin/hadoop
dfs -mkdir /
user
/hive/warehouse/tmp.db/pvlog/ptdate=
2012
-08-
14
10
bin/hadoop dfs -mkdir /user
/hive/warehouse/tmp.db/pvlog/ptdate=
2012
-08-
15
11
bin/hadoop dfs -put /home/user
/logs/pvlog2012-08-
14.txt /
user
/hive/warehouse/tmp.db/pvlog/ptdate=
2012
-08-
14
12
bin/hadoop dfs -put /home/user
/logs/pvlog2012-08-
15.txt /
user
/hive/warehouse/tmp.db/pvlog/ptdate=
2012
-08-
15
1314
altertable pvlog add partition(ptdate=
'2012-08-14'
);
15
altertable pvlog add partition(ptdate=
'2012-08-15'
);
16
繼續查詢
17
select ptdate,ptchannel,count(1
)from tmp.pvlog group
by ptdate,ptchannel ;
18
可以查詢到資料
19結論:我們也可以通過hdfs上傳檔案,同時手動建立分割槽對映關係。來匯入資料。
整體結論:
1.外部表遠比內部表更加安全。而且上傳資料的方式與以前相同,不需要修改以前的邏輯。
2.如果外部表被錯誤刪除,則需要重新建表,及重新建立分割槽與資料的對映關係。
Hive內部表外部表轉化分析(裝)
link hive 表分為內部表和外部表。外部表在刪除的時候並不會刪除到hdfs中的檔案,比較安全,所以對於重要的需要進行分析的日誌建議使用外部表進行操作,這樣不會出現誤操作影響到日誌的儲存。內部表在闡述的時候會刪除掉hdfs中的檔案,所以一般用於建立臨時表,這樣臨時表在刪除後,也會刪除掉hdfs中...
Hive內部表 外部表
內部表 外部表 未被external修飾的是內部表 managed table 被external修飾的為外部表 external table 區別 內部表資料由hive自身管理,外部表資料由hdfs管理 內部表資料儲存的位置是hive.metastore.warehouse.dir 預設 user...
hive外部表和內部表
1.內部表指hive建立並通過load data inpath進資料庫的表,這種表可以理解為資料和表結構都儲存在一起的資料表。當你通過drop table table name 刪除元資料中表結構的同時,表中的資料也同樣會從hdfs中被刪除。sql view plain copy create ta...