hive表新建外部表關聯hdfs文件

  • 已經安裝好Hadoop和hive環境,hive把元數據存儲在mysql數據庫。這裏僅討論外部表和HDFS的關聯,並且刪掉外部表之後,對HDFS上的文件沒有影響
  1. 在HDFS創建分區,並存有文件 在hdfs中存入文件,以日期爲partition,數據文件格式如下:
-rw-r--r--   3 bigdata supergroup      16031 2018-02-07 09:40 /user/bigdata/dataflowpre/20180207/10.37.167.204_25_1_2018020709.1517967113614

文件中的數據格式如下:

2;Lily;1991;Shanghai
3;Jack;1992;Guangxi
4;Jenny;1999;Xinjiang
5;Jay;1995;Xizang
6;Tom;1990;Beijing
7;Lily;1991;Shanghai
8;Jack;1992;Guangxi
9;Jenny;1999;Xinjiang
10;Jay;1995;Xizang
  1. 創建hive外部表(建表語句沒有用location直接關聯HDFS文件) 根據HDFS上的源文件裏面的數據格式,創建hive外部表。
create external table t4 (seq int,name string,year int, city string) partitioned by (day string) row format delimited fields terminated by '\073' stored as textfile;

源文件裏面列之間的分隔符是分號,hive裏面分號是特殊符號(命令執行結束符),如果建表語句裏面用分號則會出錯,使用分號的ascii碼'\073'(這裏用了八進制碼)則正常。 查看t4的表結構:  表格已經成功創建。

  1. 關聯HDFS文件 hive並不會自動關聯hdfs中指定目錄的partitions目錄,需要手工操作。 通過給已經創建的表增加分區數據的方式,與HDFS上的文件相互關聯起來。 語法格式:
alter table 表名稱 add partition (分區名1=分區值1,...) location 'HDFS上的文件的路徑';

關聯20180207的分區:

alter table t4 add partition (day=20180207) location '/user/bigdata/dataflowpre/20180207';

執行下面命令,查看錶格可以發現數據已經導入。

select * from t4;

得到如下圖所示: 

但是最前面一列爲何是null還不清楚,後面繼續查。 新建表,將seq屬性修改爲string即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章