Hive內部表外部表轉化分析

2022-07-27 18:24:19 字數 4604 閱讀 9613

**

hive

表分為內部表和外部表。

外部表在刪除的時候並不會刪除到hdfs中的檔案,比較安全,所以對於重要的需要進行分析的日誌建議使用外部表進行操作,這樣不會出現誤操作影響到日誌的儲存。

內部表在闡述的時候會刪除掉hdfs中的檔案,所以一般用於建立臨時表,這樣臨時表在刪除後,也會刪除掉hdfs中的資料。

今天這裡主要是對內部表轉化為外部表進行相關的實驗。

試驗一:

建立內部表,匯入資料。將內部表修改為外部表,刪除該錶。檢視是否會刪除掉hdfs中的資料。

sql | 

複製 |?01

02

//建立內部表

03

create

table tmp.pvlog(ip string,

current_date string,userinfo string)

04

partitioned by

(ptdate string)

row format delimited fields

terminated

by'\t' ;

05

//上傳資料

06

load

data

local inpath '/home/user/logs/log2012-08-14.txt'

into

table tmp.pvlog partition(ptdate=

'2012-08-14'

);

07

load

data

local inpath '/home/user/logs/log2012-08-15.txt'

into

table tmp.pvlog partition(ptdate=

'2012-08-15'

);

08

//修改為外部表

09

use tmp ;

10

alter

table pvlog set tblproperties (

'external'

='true'

);

11

//查詢

12

select ptdate,

count(1

)from tmp.pvlog  group

by ptdate ;

13

能查詢出資料

14

//刪除該錶

15

drop

table pvlog ;

16

//查詢hdfs中的資料

17

bin/

hadoop

dfs -ls /

user

/hive

/warehouse/tmp.db/pvlog/ptdate=*

18

能查詢到資料。

19

alter

table pvlog add partition(ptdate=

'2012-08-14'

);

20

alter

table pvlog add partition(ptdate=

'2012-08-15'

);

21結論:hdfs中的資料不會被刪除。

試驗二:

建立內部表,將內部表修改為外部表,通過load data 匯入資料。看外部表是否能通過loaddata的方式關聯到hdfs。

sql | 

複製 |?01

02

//建立內部表

03

create

table 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

alter

table pvlog set tblproperties (

'external'

='true'

);

08

//上傳資料

09

load

data

local inpath '/home/user/logs/log2012-08-14.txt'

into

table tmp.pvlog partition(ptdate=

'2012-08-14'

);

10

load

data

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

create

table 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

alter

table 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

alter

table pvlog add partition(ptdate=

'2012-08-14'

);

15

alter

table 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...