- 已經安裝好Hadoop和hive環境,hive把元數據存儲在mysql數據庫。這裏僅討論外部表和HDFS的關聯,並且刪掉外部表之後,對HDFS上的文件沒有影響
- 在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
- 創建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的表結構: 表格已經成功創建。
- 關聯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即可。