原文:http://jingyan.baidu.com/article/a378c96092cf56b328283006.html
創建表的語句: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]
CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXIST 選項來忽略這個異常。EXTERNAL 關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION),Hive 創建內部表時,會將數據移動到數據倉庫指向的路徑;若創建外部表,僅記錄數據所在的路徑,不對數據的位置做任何改變。在刪除表的時候,內部表的元數據和數 據會被一起刪除,而外部表只刪除元數據,不刪除數據。如果文件數據是純文本,可以使用 STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCE 。有 分區的表可以在創建的時候使用 PARTITIONED BY 語句。一個表可以擁有一個或者多個分區,每一個分區單獨存在一個目錄下。而且,表和分區都可以對某個列進行 CLUSTERED BY 操作,將若干個列放入一個桶(bucket)中。也可以利用SORT BY 對數據進行排序。這樣可以為特定應用提高性能。
創建普通的表:create table test_table (id int,name string,no int) row format delimited fields terminated by ',' stored as textfile;
//指定了字段的分隔符為逗號,所以load數據的時候,load的文本也要為逗號,否則加載后為NULL。hive只支持單個字符的分隔符,hive默認的分隔符是\001
創建帶有partition的表:create table test_part (id int,name string,no int) partitioned by (dt string) row format delimited fields terminated by '\t' stored as textfile ;
用創建用\t作分隔符的表,PT為分區字段,
加載如下:
load data local inpath '/home/zhangxin/hive/test_hive.txt' overwrite into table test_part partition (dt='2012-03-05');
//local是本地文件,注意不是你電腦上的文件,是hadoop所在的本地文件
//如果是在hdfs里的文件,則不需要local。 overwrite into是覆蓋表分區,僅僅是這個分區的數據內容,如果是追加,則不需要overwrite
創建external表:(外部表)create external table test_external (id int,name string,no int) row format delimited fields terminated by ',' location '/home/zhangxin/hive/test_hive.txt';
//用逗號分隔的表,且無分區, location后是外部表數據的存放路徑
創建與已知表相同結構的表 Like:只復制表的結構,而不復制表的內容。create table test_like_table like test_bucket;