天天看點

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

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

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

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上的存儲路徑,一般管理表(内部表不不要自定義),但是如果定義的是外部表,則需要直接指定一個路徑。實際上不指定也沒事,會使用預設路徑

總結:實際建表可能會對檔案的行列分隔符要求自定義,檔案的存儲方式有所要求 ,表的分區要求是自動分區,表的存儲位置要放到指定路徑下等等各種不确定需求,建立的表也是定制化的五花八門,但是核心都在這些基礎的建表标準文法裡進行變動,變動不同子產品實作不同需求。

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

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

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

繼續閱讀