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导入导出数据 告一段落