建表語句:
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 EXISTS 選項來忽略這個異常。
EXTERNAL 關鍵字可以讓用戶創建一個外部表。
COMMENT 為表和列添加注釋。
PARTITIONED BY 創建分區表。
CLUSTERED BY 創建分桶表。
SORTED BY 排序(不常用)。
ROW FORMAT 數據切分格式,
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
例如:
row format delimited fields terminated by '\t'
STORED AS 指定存儲文件類型。常用的存儲文件類型:SEQUENCEFILE(二進制序列文件)、TEXTFILE(文本)、RCFILE(列式存儲格式文件);如果文件數據是純文本,可以使用STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCEFILE。
LOCATION 指定表在HDFS上的存儲位置。
LIKE 允許用戶復制現有的表結構,但是不復制數據。
管理表與外部表的區別:
管理表:默認創建的表都是所謂的管理表,有時也被稱為內部表。因為這種表,Hive會(或多或少地)控制着數據的生命周期。Hive默認情況下會將這些表的數據存儲在由配置項hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定義的目錄的子目錄下。 當我們刪除一個管理表時,Hive也會刪除這個表中數據。管理表不適合和其他工具共享數據。
創建管理表
create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student2';
根據查詢結果創建表(查詢的結果會添加到新創建的表中)
create table if not exists student3 as select id, name from student;
根據已經存在的表結構創建表
create table if not exists student4 like student;
查詢表的類型
hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE
外部表(一般推薦創建外部表):Hive並非認為其完全權限擁有這份數據,數據是最寶貴的,刪除該表並不會刪除掉這份數據,不過描述表的元數據信息會被刪除掉。每天將收集到的網站日志定期流入HDFS文本文件。在外部表(原始日志表)的基礎上做大量的統計分析,用到的中間表、結果表使用內部表存儲,數據通過SELECT+INSERT進入內部表。
創建外部表
create external table if not exists default.student5(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';
向外部表中導入數據
load data local inpath '/opt/module/datas/dept.txt' into table default.student5;
查詢結果
hive (default)> select * from student5;
查詢表的類型
hive (default)> desc formatted student5;
Table Type: EXTERNAL_TABLE
hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE
修改外部表student5為內部表
alter table student5 set tblproperties('EXTERNAL'='FALSE');
注:'EXTERNAL'='TRUE'和'EXTERNAL'='FALSE'為固定寫法,區分大小寫
查詢表的類型
hive (default)> desc formatted student2;
Table Type: MANAGED_TABLE