1. 程式人生 > >hive建表的標準格式及其建表屬性詳解1

hive建表的標準格式及其建表屬性詳解1

         Hive建表是學習使用hive的第一步,然後才能基於表對hive資料倉庫進行操作。學習建表前,首先要知道hive表的構建屬性 ,知道哪些屬性是固定的,哪些屬性是可以定製的等等。

一.標準hql建表語法格式

1.官方標準語法:(hql不區分大小寫,下面[]裡的屬性是可選屬性

  CREATE [EXTERNAL] TABLE [IF NOT EXISTS]     table_name      
  [(col_name   data_type   [COMMENT col_comment], ...)]        
  [COMMENT   table_comment]                                    
  [PARTITIONED BY(col_name data_type [COMMENT col_comment], ...)]
  [CLUSTERED BY (col_name, col_name, ...)
  [SORTED BY(col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  [ROW FORMAT row_format] 
  [STORED AS file_format]
  [LOCATION hdfs_path]  

二.標準建表語法各項引數說明

1.CREATE TABLE 建立一個指定名字的表。如果相同名字的表已經存在,則丟擲異常;使用者可以用 IF NOT EXISTS 選項來忽略這個異常,一般也可以不加這個IF NOT EXISTS語句,最多丟擲錯誤。

2.EXTERNAL關鍵字可以讓使用者建立一個外部表,預設是內部表,外部表在建表的必須同時指定一個指向實際資料的路徑(LOCATION),Hive 建立內部表時,會將資料移動到資料倉庫指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。

3.COMMENT 後面跟的字串是給表字段或者表內容添加註釋說明的,雖然它對於表之間的計算沒有影響,但是為了後期的維護,所以實際開發都是必須要加COMMENT的。

4. PARTITIONED BY其實是給表做分割槽,決定了表是否是分割槽表。Hive中所謂分割槽表就是將表裡新增加一個欄位,就是分割槽的名字,這樣你在操作表中的資料時,可以按分割槽欄位進行過濾。具體分割槽解釋後面部落格有說明。

5.[ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ] 這裡指定表儲存中國列的劃分格式,預設是\001,這裡指定的是逗號分隔符,還可以指定其他列的分隔符,看實際需求

6.STORED AS   SEQUENCEFILE|TEXTFILE|RCFILE如果檔案資料是純文字,可以使用 STORED AS TEXTFILE。如果資料需要壓縮,使用 STORED AS SEQUENCEFILE。這裡主要牽涉到hive儲存的三種檔案格式,具體區別參考後續部落格。

7.CLUSTERED BY對於每一個表(table)或者分割槽, Hive可以進一步組織成桶,也就是說桶是更為細粒度的資料範圍劃分。Hive也針對某一列進行桶的組織。Hive採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中

8.LOCATION 其實是定義hive表的資料在hdfs上的儲存路徑,一般管理表(內部表不不要自定義),但是如果定義的是外部表,則需要直接指定一個路徑。實際上不指定也沒事,會使用預設路徑

總結:實際建表可能會對檔案的行列分隔符要求自定義,檔案的儲存方式有所要求 ,表的分割槽要求是自動分割槽,表的儲存位置要放到指定路徑下等等各種不確定需求,建立的表也是定製化的五花八門,但是核心都在這些基礎的建表標準語法裡進行變動,變動不同模組實現不同需求。

二.Hive基於上面標準建表語法的演示

1.建立一個列分隔符為‘,’的表,預設內部表

create table if not exists track(
id int comment'id',
ipname string  comment'ip名稱',
zart  decimal(10,5) comment'測試小數')                          
partitioned by (date string,hour string)
row format delimited fields terminated by '\t';

2.使用desc可以,查看錶結構,使用describe formatted 可以查看錶的詳細結構,使用show create talbe可以檢視建表語句。

1.檢視基礎表結構
hive (fdm_sor)> desc track;
OK
col_name	data_type	comment
id                  	int                 	id                  
ipname              	string              	ip??                
zart                	decimal(10,5)       	????                
date                	string              	                    
hour                	string              	                    
	 	 
# Partition Information	 	 
# col_name            	data_type           	comment             
	 	 
date                	string              	                    
hour                	string              	                    
====================================================================================
2.檢視詳細的表結構資訊
hive (fdm_sor)> describe formatted track;
OK
col_name	data_type	comment
# col_name            	data_type           	comment             
	 	 
id                  	int                 	id                  
ipname              	string              	ip??                
zart                	decimal(10,5)       	????                
	 	 
# Partition Information	 	 
# col_name            	data_type           	comment             
	 	 
date                	string              	                    
hour                	string              	                    
	 	 
# Detailed Table Information	 	 
Database:           	fdm_sor             	 
Owner:              	robot               	 
CreateTime:         	Mon Dec 31 00:23:26 CST 2018	 
LastAccessTime:     	UNKNOWN             	 
Protect Mode:       	None                	 
Retention:          	0                   	 
Location:           	hdfs://hadoop102:9000/user/hive/warehouse/fdm_sor.db/track	 
Table Type:         	MANAGED_TABLE       	 
Table Parameters:	 	 
	transient_lastDdlTime	1546187006          
	 	 
# Storage Information	 	 
SerDe Library:      	org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe	 
InputFormat:        	org.apache.hadoop.mapred.TextInputFormat	 
OutputFormat:       	org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat	 
Compressed:         	No                  	 
Num Buckets:        	-1                  	 
Bucket Columns:     	[]                  	 
Sort Columns:       	[]                  	 
Storage Desc Params:	 	 
	field.delim         	\t                  
	serialization.format	\t                  
====================================================================================
3.檢視建表語句,實際很常用的命令
hive (fdm_sor)> show create table track;
OK
createtab_stmt
CREATE  TABLE `track`(
  `id` int COMMENT 'id', 
  `ipname` string COMMENT 'ip??', 
  `zart` decimal(10,5) COMMENT '????')
PARTITIONED BY ( 
  `date` string, 
  `hour` string)
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://hadoop102:9000/user/hive/warehouse/fdm_sor.db/track'
TBLPROPERTIES (
  'transient_lastDdlTime'='1546187006')
Time taken: 0.033 seconds, Fetched: 17 row(s)
hive (fdm_sor)> 

3.關於建立分割槽表,實際開發中對於表的各種定製,如分割槽,儲存格式,路徑,內部表,外部表,以及實際開發中表的使用方式與注意事項,請參考後面部落格