hive 导入导出数据

1.创建练习所需表(外部表)

hive> create external table export_test(id int,context string) row format delimited fields terminated by ' ' stored as textfile;

2.在本地创建练习数据

[root@hadoop02 hive]# touch export_data.txt

[root@hadoop02 hive]# vi export_data.txt   

2 3
3 4
5 6
7 8 
9 10
11 12
12 13
13 14
15 16

3.把本地数据导入到hive表中

hive> load data local inpath '/script/hive/export_data.txt' overwrite into table export_test;

查看数据:

hive> select * from export_test;

2 3
3 4
5 6
7 8 
9 10
11 12
12 13
13 14
15 16

已经全部导入进去。

查看本地数据是否有变化:

[root@hadoop02 hive]# cd /script/hive

-rw-r--r--. 1 root root 49 Nov  6 18:16 export_data.txt

可以看到本地数据没有任何变化.

查看hdsf 中目录变化:

[root@hadoop02 hive]# hadoop fs -ls /user/hive/warehouse/export_test

-rwxr-xr-x   2 root supergroup         49 2015-11-06 18:18 /user/hive/warehouse/export_test/export_data.txt

发现本地数据没有变化,而hdfs上也上传了一份到所创建表的目录下

尝试drop表看本地和hdfs上是否有变:

hive> drop table export_test;

通过使用上面命令发现:

[root@hadoop02 hive]# hadoop fs -text /user/hive/warehouse/export_test/export_data.txt

发现hdfs上的数据没有变化,本地数据也没有变化,只有元数据消失(注意上面创建的是外部表):

把hdfs上的数据导入到hive:

上传数据:

[root@hadoop02 hive]# hadoop fs -put /script/hive/export_data.txt  /input/data

查看上传是否成功:

[root@hadoop02 hive]# hadoop fs -ls  /input/data            

-rw-r--r--   2 root supergroup         49 2015-11-06 18:34 /input/data/export_data.txt

通过hdfs导入到hive表(重建上面所创建表):

hive> load data inpath '/input/data/export_data.txt' overwrite into table export_test3;

[root@hadoop02 hive]# hadoop fs -ls  /input/data

-rw-r--r--   2 root supergroup         21 2015-11-06 04:53 /input/data/add_partition.txt

查看建表目录:

[root@hadoop02 hive]# hadoop fs -ls /user/hive/warehouse/export_test3;

-rwxr-xr-x   2 root supergroup         49 2015-11-06 18:34 /user/hive/warehouse/export_test3/export_data.txt

删除表:

drop table export_test3;

查看目录:

[root@hadoop02 hive]# hadoop fs -ls /user/hive/warehouse/export_test3

可以看到数据还在。

load data inpath '/input/data/export_data.txt' overwrite into table export_test6; 但是使用它来指定会移动数据

 create external table export_test7(id int,context string) row format delimited fields terminated by ' ' stored as textfile location '/input/data';

这种方式来指定 就不会移动数据

删除外部表只会删除元数据;

创建内部表尝试上面操作:

hive> create  table export_test1(id int,context string) row format delimited fields terminated by ' ' stored as textfile;

hive> load data local inpath '/script/hive/export_data.txt' overwrite into table export_test1;

hive> drop table exprot_test1;

[root@hadoop02 hive]# hadoop fs -ls /user/hive/warehouse/export_test1

-rwxr-xr-x   2 root supergroup         49 2015-11-06 18:28 /user/hive/warehouse/export_test1/export_data.txt

从hdfs导入数据:

hive> create table export_test11(id int ,context string) row format delimited fields terminated by ' ' stored as textfile location '/data/input/';

删除表时会删除hdfs上的数据;

把文件导入到MySQL数据库:

[root@hadoop02 ~]# mysql -uroot -p123456 mysql --local-infile=1 -e "LOAD DATA LOCAL INFILE '/script/hive/export_data.txt' into table exporte fields
terminated by  ' '  ";

----------------------------------------------------------------------------------------------------------导出数据-----------------------------------------------------------------------------------------------------------------

MySQL数据导入到文件中:

[root@hadoop02 tmp]# mysql -uroot -p123456  mysql --local-infile=1 -e " select * from exporte into outfile '/tmp/mysql_out.csv' fields terminated by ' ' " ; 

这里注意 好像只能导入到/tmp文件中 其他均报错,暂放到tmp文件中,待解决?

hive中导入到文件中:

hive> insert overwrite local directory '/script/hive/ rowformat delimited fields terminated by ' ' select * from export_test9;

查看目录 会发现生成了了两个文件

利用下面的方式也可以直接导出

[root@hadoop02 bin]# hive -e "select * fromexport_test9">>/script/hive/out.txt

 执行HiveQL 脚本
脚本command.hql 内容:
drop table export_test11;
create table export_test11(id int,context string)
row format delimited  
fields terminated by '\t' 
stored as textfile;
load data local inpath '/script/hive/export_data.txt' overwrite into tableexport_test11;
执行命令:
$ hive –f commands.hql

至此hive导入导出数据 告一段落











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值