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即可。

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