Hive几种数据导入导出的方式

Hive中数据导入导出还是很常用的,下面简单记录一下这几种方式,方便查阅。

数据导入

在将文件中的数据导入都Hive表中的时候,字段的分隔符只有在建表的时候指定,导入的时候无法指定字段分隔符。

  1. 本地文件系统导入到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');
  1. 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');
  1. 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;
  1. 创建表时从已有表导入数据
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;
  1. 导出数据到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;

你可能感兴趣的:(Hive)