Hive中数据导入导出还是很常用的,下面简单记录一下这几种方式,方便查阅。
数据导入
在将文件中的数据导入都Hive表中的时候,字段的分隔符只有在建表的时候指定,导入的时候无法指定字段分隔符。
- 本地文件系统导入到Hive
hive> load data local inpath '/home/hdfs/user.txt' into table user;
分区表
hive> load data local inpath '/home/hdfs/user.txt' into table user partition(pt='20190909');
- HDFS上文件导入到Hive
将HDFS上数据导入到Hive时,只要将local关键去掉即可,其他的本地文件系统导入一样。
hive> load data inpath '/home/hdfs/user.txt' into table user;
分区表
hive> load data inpath '/home/hdfs/user.txt' into table user partition(pt='20190909');
- Hive表到表的导入
表到表的导入中,不能指定目标的字段,所以源表必须包含所有目标表所需要的字段,源表的字段可以比目标表多,但是不能比源表少。
在源表和目标表字段个数一样多,且顺序一一对应的情况下,可以偷懒使用select *
hive> insert into table user
> select * from user2;
指定字段,不能少于目标表的字段
hive> insert into table user
> select id,name,age from user2;
分区表
hive> insert into table user partition(pt='2019-08-01')
> select id,name,age from user2;
- 创建表时从已有表导入数据
hive> create table user as select * from user2
数据导出
1.导出数据到本地
在hive 0.11.0之前,无法指定列分隔符,导出的数据默认是用\x01进行分割的。
不指定列分隔符
hive> insert overwrite local directory '/home/hdfs/user'
> select * from user;
指定列分隔符
hive> insert overwrite local directory '/home/hadoop/death/tmp_user'
> row format delimited fields terminated by ','
> select * from user;
复杂数据类型
hive> insert overwrite local directory '/home/hadoop/export_hive'
> row format delimited fields terminated by '\t'
> collectionitems terminated by ','
> map keysterminated by ':'
> select * from userinfo;
- 导出数据到HDFS
数据导出到与数据导入有点类似,都是多了一个local关键字。
不指定列分隔符
hive> insert overwrite directory '/home/hdfs/user'
> select * from user;
指定列分隔符
hive> insert overwrite directory '/home/hadoop/death/tmp_user'
> row format delimited fields terminated by ','
> select * from user;