微軟 CEO:歡迎蘋果將 iMessage 引入 Win11 系統
1、Hive 建表語句詳解
轉自:https://www.jianshu.com/p/4f60f3c923fe
1.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.2、引數說明
-
CREATE TABLE 建立一個指定名字的表。如果相同名字的表已經存在,則丟擲異常;使用者可以用 IF NOT EXISTS 選項來忽略這個異常。
-
EXTERNAL 關鍵字可以讓使用者建立一個外部表,預設是內部表。外部表在建表的必須同時指定一個指向實際資料的路徑(LOCATION),Hive 建立內部表時,會將資料移動到資料倉庫指向的路徑;若建立外部表,僅記錄資料所在的路徑,不對資料的位置做任何改變。在刪除表的時候,內部表的元資料和資料會被一起刪除,而外部表只刪除元資料,不刪除資料。
-
COMMENT 是給表字段或者表內容添加註釋說明的。
-
PARTITIONED BY 給表做分割槽,決定了表是否是分割槽表。
-
CLUSTERED BY 對於每一個表(table)或者分割槽, Hive 可以進一步組織成桶,也就是說桶是更為細粒度的資料範圍劃分,Hive採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。
-
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',', 這裡指定表儲存中列的分隔符,預設是 \001,這裡指定的是逗號分隔符,還可以指定其他列的分隔符。
-
STORED AS SEQUENCEFILE|TEXTFILE|RCFILE,如果檔案資料是純文字,可以使用 STORED AS TEXTFILE,如果資料需要壓縮,使用 STORED AS SEQUENCEFILE。
-
LOCATION 定義 hive 表的資料在 hdfs 上的儲存路徑,一般管理表(內部表不不要自定義),但是如果定義的是外部表,則需要直接指定一個路徑。
1.3、建立表的三種方式
1.3.1、 使用 create 命令
CREATE TABLE `employee`(
`dept_no` int,
`addr` string,
`tel` string)
partitioned by(statis_date string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
詳細參考上述建表說明。
可以使用describe formatted employee檢視建表相關的各種配置屬性以及預設屬性。
3.2、 create table ...as select..(CTAS)
[AS select_statement] 這個語句是用來通過查詢已有的表來建立一張新表,這樣可以根據已有的表來建立子表,對於資料分析和優化都是有很大的好處的。
create table employee1
as
select * from employee where statis_date='20180229';
使用查詢建立並填充表,select 中選取的列名會作為新表的列名(所以通常是要取別名);
會改變表的屬性、結構,比如只能是內部表、分割槽分桶也沒了:
目標表不允許使用分割槽分桶的,FAILED: SemanticException [Error 10068]: CREATE-TABLE-AS-SELECT does not support partitioning in the target table,對於舊錶中的分割槽欄位,如果通過 select * 的方式,新表會把它看作一個新的欄位,這裡要注意 ;
目標表不允許使用外部表,如 create external table … as select… 報錯 FAILED: SemanticException [Error 10070]: CREATE-TABLE-AS-SELECT cannot create external table;
建立的表儲存格式會變成預設的格式 TEXTFILE 。
可以指定表的儲存格式,行和列的分隔符等。
3.3、 使用 like 建立相同結構的表
CREATE TABLE LIKE
用來複製表的結構
需要外部表的話,通過 create external table like … 指定
不填充資料