hive创建外部表,导入数据

  1. 在HDFS创建分区,并存有文件
    手工创建或者由程序在HDFS上生成了分区目录,每个分区目录下有相应的文件。
    vi test.txt

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
2. 创建hive外部表(建表语句没有用location直接关联HDFS文件)
根据HDFS上的源文件里面的数据格式,创建hive外部表。

create external table if not exists persion (
seq int comment ‘客户编号,主键’,
name string comment ‘姓名’,
year int comment ‘年龄’,
city string comment ‘城市’)
partitioned by (day int)
row format delimited
fields terminated by ‘\073’
stored as textfile;

源文件里面列之间的分隔符是分号,hive里面分号是特殊符号(命令执行结束符),如果建表语句里面用分号则会出错,使用分号的ascii码’\073’(这里用了八进制码)则正常。

查看t3的表结构:
hive> desc persion;
OK
seq int 客户编号,主键
name string 姓名
year int 年龄
city string 城市
day int

Partition Information

col_name data_type comment

表格已经成功创建。

3.关联HDFS文件
hive并不会自动关联hdfs中指定目录的partitions目录,需要手工操作。
通过给已经创建的表增加分区数据的方式,与HDFS上的文件相互关联起来。
语法格式:

alter table 表名称 add partition (分区名1=分区值1,…) location ‘HDFS上的文件的路径’;

hive> alter table persion add partition (day=20) location ‘/data/test/’;
OK
Time taken: 0.157 seconds
执行下面命令,查看表格可以发现数据已经导入。

hive> select * from persion;
4.之后HDFS分区添加新文件,hive会自动关联
如果这个时候往HDFS上面的分区增加一个文件(符合t3表格式),hive表也可以自动读取到并添加数据。

如新建一个文件b.txt,内容是:1101;JayFEF;2095;BBBB

上传到HDFS的day=21分区:

[hdfs@master01 data]$ hadoop fs -put /data/a.txt /data/test/
直接查看表格,可以看到新的数据也已经添加进去。

hive> select * from persion;
OK
1101 JayFEF 2095 BBBB 20
2 Lily 1991 Shanghai 20
3 Jack 1992 Guangxi 20
4 Jenny 1999 Xinjiang 20
5 Jay 1995 Xizang 20
6 Tom 1990 Beijing 20
7 Lily 1991 Shanghai 20
8 Jack 1992 Guangxi 20
9 Jenny 1999 Xinjiang 20
10 Jay 1995 Xizang 20
Time taken: 0.451 seconds, Fetched: 10 row(s)

你可能感兴趣的:(hive)