Hive中表分類

2021-10-23 23:14:22 字數 3342 閱讀 3933

由hive全權管理的表

所謂的管理表指hive是否具備資料的管理許可權,如果該表是管理表,當使用者刪除表的同時,hive也會將表所對應的資料刪除,因此在生產環境下,為了防止誤操作,帶來資料損失,一般考慮將表修改為非管理表-外部表

總結:hive的管理,表結構,hdfs中表的資料檔案,都歸hive全權管理。---- hive刪除管理表,hdfs對應檔案也會被刪除。

缺點:資料不安全。

引用對映hdfs資料作為表管理,但無法刪除資料

外部表和管理表最大的區別在於刪除外部表,只是將mysql中對應該表的元資料資訊刪除,並不會刪除hdfs上的資料,因此外部表可以實現和第三方應用共享資料。在建立外表的時候需要新增乙個關鍵字"external"即可。create external ***()...

# 建立外部表

1. 準備資料檔案personout.txt

2. 上傳至hdfs中,該資料檔案必須被放在乙個單獨的資料夾內。該資料夾內的資料檔案被作為表資料

3. 建立表: create external location

在最後使用location 指定hdfs中資料檔案所在的資料夾即可。

create external table t_personout(

id int,

name string,

salary double,

birthday date,

*** char(1),

hobbies array,

cards map,

addr struct)row format delimited

fields terminated by ',' --列的分割

collection items terminated by '-'--陣列 struct的屬性 map的kv和kv之間

map keys terminated by '|'

lines terminated by '\n'

location '/file/personout.tb';

將表按照某個列的一定規則進行分割槽存放,減少海量資料情況下的資料檢索範圍,提高查詢效率;

舉例:電影表、使用者表

分割槽方案:按照使用者區域、電影型別

應用:依據實際業務功能,拿查詢條件的列作為分割槽列來進行分割槽,縮小mapreduce的掃瞄範圍,提高mapreduce的執行效率,

總結:table中的多個分割槽的資料是分割槽管理

1:刪除資料按照分割槽刪除。如果刪除某個分割槽,則將分割槽對應的資料也刪除(外部表,資料刪除,資料檔案依然在)。

2:查詢統計,多個分割槽被乙個表管理起來。

select * from 表 where 分割槽欄位為條件。

4.3.1 建立分割槽表

資料原始檔

# 檔案"bj.txt" (china bj資料)

1001,張三,1999-1-9,1000.0

1002,李四,1999-2-9,2000.0

1008,孫帥,1999-9-8,50000.0

1010,王宇希,1999-10-9,10000.0

1009,劉春陽,1999-9-9,10.0

# 檔案「tj.txt」 (china tj資料)

1006,郭德綱,1999-6-9,6000.0

1007,胡鑫喆,1999-7-9,7000.0

建表

create external table t_user_part(

id string,

name string,

birth date,

salary double

)partitioned by(country string,city string)--指定分割槽列,按照國家和城市分割槽。

row format delimited

fields terminated by ','

lines terminated by '\n';

建立分割槽表並匯入資料

# 匯入china和bj的資料

load data local inpath "/opt/bj.txt" into table t_user_part partition(country='china',city='bj');

# 匯入china和heb的資料

load data local inpath "/opt/tj.txt" into table t_user_part partition(country='china',city='tj');

檢視分割槽資訊

show partitions t_user_part;
使用分割槽查詢:本質上只要查詢條件在存在分割槽列

select * from t_user_part where city = 'bj'
刪除分割槽資訊

會連同分割槽資料一塊刪除

alter table t_user_part drop partition(country='china',city='bj');
新增分割槽(了解)

外部分割槽表,刪除後,hive不管理資料,但是資料檔案依然存在

alter table t_user_part add partition(country='china',city='heb') location '/file/t_user_part/heb';
# 表分類

1. 管理表

hive中table資料和hdfs資料檔案都是被hive管理。

2. 外部表--常用--hdfs檔案安全。

hive的table資料,如果刪除hive中的table,外部hdfs的資料檔案依舊保留。

3. 分割槽表--重要。

將table按照不同分割槽管理。

好處:如果where條件中有分割槽字段,則hive會自動對分區內的資料進行檢索(不再掃瞄其他分割槽資料),提高hive的查詢效率。

mysql中表分類MyISAM和InnoDB的區別

myisam和innodb的區別 1 mysql預設採用的是myisam。2 myisam不支援事務,而innodb支援。innodb的autocommit預設是開啟的,即每條sql語句會預設被封裝成 乙個事務,自動提交,這樣會影響速度,所以最好是把多條sql語句顯示放在begin和commit之間...

Hive中表示式包含空值的問題

在學習hive過程中遇到了乙個問題 如果查詢語句中的表示式包含空值,會導致最終表示式結果為空值。舉乙個例子,假設有乙個員工表emp name salcomm jack 1000 200tony 1200 300tom 1300 null rose 900100 lily 800500 tim1100...

hive的日誌分類和儲存位置

日誌記錄了程式執行的過程,是一種查詢問題的利器。hive中的日誌分為兩種 1.系統日誌,記錄了hive的運 況,錯誤狀況。2.job 日誌,記錄了hive 中job的執行的歷史過程。系統日誌儲存在什麼地方呢 在hive conf hive log4j.properties 檔案中記錄了hive日誌的...