創建表
創建表的語句
第一種
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]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]
[SKEWED BY (col_name, col_name, ...)
ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
[STORED AS DIRECTORIES]
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
說明:
1. IF NOT EXISTS:只會判斷表名是否存在,不會判斷表的結構是不是一樣的,也就意味這只要有相同的表名的表存在,那麼就不會創建新的表了
2. db_name:這個屬性可以使用也可以不使用,假如當前的活動的數據庫不是想要創建表的數據庫,那麼可以使用
3. data_type:hive中屬性的類型,主要有下面幾種:
primitive_type,array_type,map_type,struct_type,union_type
array_type:ARRAY < data_type >
map_type:MAP < primitive_type, data_type >
struct_type:STRUCT < col_name : data_type [COMMENT col_comment], ...>
//union,類似於C語言中的union,每一個union單元的值只解析成後面所有類型中的一種
union_type:UNIONTYPE < data_type, data_type, ... >
- PARTITIONED BY:詳解partition
- CLUSTERED BY:分桶
- EXTERNAL:外部表,默認的情況下,表的數據會被存放在
${hive.metastore.warehouse.dir}/database_name/table_name
路徑下,但是使用了EXTERNAL,那麼我們可以創建一個外部表,數據可以存放在自己指定的地方,通過location關鍵字指定。刪除外部表的時候並不會刪除掉表中的數據,不過描述表的元數據信息會被刪除(刪除表結構,不刪除表的數據)
第二種
#這種方式只會創建表的結構
create table table_name like existing_table_name
#
第三種
#創建表的結構,並且從原表獲取數據插入到新表中
create table table_name as select column_name from existing_table_name
查詢數據庫中有哪些表
show tables;
//當我們不在某一個數據庫下的時候,我們還是可以列舉指定數據庫下的表的:
show tables in db01;
//可以使用正則表達式來過濾出所需要的表名
show tables 'db01.*'
查詢table的元數據信息
describe extended db01.employees;
//使用formatted代替extended關鍵字,可以得到更爲可讀詳細的信息,一般使用Formatted較多
describe formatted db01.employees;
//查詢某一個字段的信息,只需要在表名後面加上字段名就可以了
describe db01.employees.salary
刪除表
DROP TABLE [IF EXISTS] table_name;
說明:
如果用戶開啓了Hadoop的回收站的功能,那麼數據將會被轉移到用戶在hdfs用戶根目錄下的.Trash目錄下,如果想要開啓這個功能,只需要設置fs.trash.interval的值設置成一個合理的值就可以了,這個值是回收站檢查點的間隔時間,過了這個時間就會清除.Trash目錄下的文件
修改表
//重命名錶
ALTER TABLE table_name RENAME TO new_table_name;
//修改表的屬性
ALTER TABLE table_name SET TBLPROPERTIES table_properties;
//修改表的描述信息
ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comment);