hive数据的导入导出

**

Load的导入数据

**
Load导入数据

#声明格式
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE]
INTO TABLE tablename [PARTITION (partcol1=vall,partcol2=val2...)]

解:[LOCAL]:表示的是从我们操作系统上的数据进行导入,若只是从hdfs里的数据进行导入,则local不需要写。
INPATH:指名导入的路径 ‘filepath’:是文件的路径
[OVERWRITE]:是否要覆盖表中已经存在的数据
[PARTITION]:若导入到分区表中,则要指名分区表中的分区partcol1=val1

1.Load导入一个文件的数据
eg:分别创建t2和t3表,t2和t3表中的字段都一样的,只是t2未指明数据的分隔符,故它是以制表符分开的;而t3
指明用逗号分开的,即加上了此句row format delimted fields terminated by ‘,’;
步骤如下:

1)/Users/mac/Documents目录中查看student01,student02,student03的内容
more student01.txt #查看student01.txt的内容
student01.txt:
1,Tom,23
2,Mary,20
student02.txt:
3,Mike,25
student03.txt:
4,Scott,21
5,King,202)查看表t2/t3表结构:desc t2,结果如下
tid                     int                                         
tname                   string                                      
age                     int
(3)将student01.txt数据导入t2中
student01.txt是存在操作系统中,故要用local。
hive中执行命令如下:
load data local inpath '/Users/mac/Documents/student01.txt' into table t2;
#导入成功,但是查看表t2,结果如下:全是空值
NULL    NULL    NULL
NULL    NULL    NULL
#注:是因为创建t2时没有设置分隔符,故它是用制表符分开,而student01.txt中的数据是用逗号分开的,故导入时它不认识逗号。4)将student01.txt数据导入t3中
hive> load data local inpath '/Users/mac/Documents/student01.txt' into table t3; 
#导入成功,查看t3表。数据显示正确

2.Load导入一个文件夹下面的所有数据
–将/Users/mac/Documents/data/下的所有数据文件导入t3表中,并且覆盖原来的数据.
路径只需要写到文件夹,它就可以读取该路径下的所有文件,overwrite是覆盖它,hive命令如下:

load data local inpath '/Users/mac/Documents/data/' overwrite into table t3;
查看表t3,全部导入进去

3.Load导入HDFS文件到Hive仓库中
将HDFS中,/input/student01.txt文件导入到hive数据仓库中,hive命令如下:

load data inpath '/input/student01.txt' overwrite into table t3;

4.Load导入操作系统文件到Hive的分区表中

#创建一个分区表
create table partion_table
    > (sid int,sname string)
    > partitioned by (gender string)
    > row format delimited fields terminated by ',';
data1.txt表的数据:
1,Tom,M
3,Mike,M
data2.txt表的数据:
2,Mary,F
--将data1.txt表中的数据导入到partion_table中gender='M'的分区表中
load data local inpath '/Users/mac/Documents/data/data1.txt' into table partion_table partition(gender='M');
查看网页http://localhost:50070/下面的目录中查看是否正确导入/user/hive/warehouse/partion_table/gender=M

**

sqoop的数据的导入导出

**
sqoop的安装
(1)从http://sqoop.apache.org/下载sqoop
(2)在conf下创建了一个sqoop-env.sh
加入了以下两条语句:指向Hadoop的安装路径
export HADOOP_COMMON_HOME=/usr/local/Cellar/hadoop/2.8.2
export HADOOP_MAPRED_HOME=/usr/local/Cellar/hadoop/2.8.2
(3)在sqoop.lib目录下将oracle的jdbc或者是mysql的jdbc传到此目录下:oracle是ojdbc14.jar,mysql是mysql-connector-java-5.1.37.jar

sqoop从mysql/oracle中导入数据到HDFS中
我们知道hive数据仓库中的数据也是保存在HDFS中,数据仓库是以表的形式存储,而HDFS是以文件的形式存储。
下面几个操作:
1.使用sqoop导入mysql数据到HDFS中

./sqoop import --connect jdbc:mysql://127.0.0.1:3306:imooc --username root --password root --table payment_order --columns 'id,product,price,currency,quantity' -m 1 --target-dir '/sqoop/emp'

注:(1)sqoop是用jdbc连接的,指名数据库,端口号,数据库名(imooc) –username 用户名 –password 密码
(2)sqoop的属性是用–来指名的,–table 指定要导入的表,–columns指名要导入的列项,-m 1 指名用几个mapreduce来做此项工作,–target-dir 导入的表放在HDFS的哪个目录下面
(3) sqoop也是基于mapreduced来对数据的导入和导出
导入结束后可在HDFS上查看该目录下/sqoop/emp的数据

2.使用sqoop导入oracle 数据到Hive中

./sqoop import --hive-import --connect jdbc:oracle:thin:@127.0.0.1:3306:imooc --username root --password root --table payment_order -m 1 --columns 'id,product,price,currency,quantity'

注:(1)数据是导入到数据仓库当中要指明:–hive-import,hive中会自动创建一张表,因为未指名表名,故会自动创建一张与导入数据同名的表。
导入后,在hive中查看show table;select查看表内容,已经导入表payment_order

3.使用sqoop导入oracle数据到Hive中,并且指定表名

./sqoop import --hive-import --connect jdbc:oracle:thin:@127.0.0.1:3306:imooc --username root --password root --table payment_order -m 1 --columns 'id,product,price,currency,quantity' --hive-table payment_order1

注:指定导入到Hive中的哪张表:–hive-table 表名,若hive中不存在此表,它会自动创建此表(payment_order1)

4.使用sqoop导入oracleo数据到Hive中,并使用where条件

./sqoop import --hive-import --connect jdbc:oracle:thin:@127.0.0.1:3306:imooc --username root --password root --table payment_order -m 1 --columns 'id,product,price,currency,quantity' --hive-table payment_order2 --where 'Deptno=10'

注:where语句:–where ‘条件’

5.使用sqoop导入oracle数据到Hive中,并使用查询语句

./sqoop import --hive-import --connect jdbc:oracle:thin:@127.0.0.1:3306:imooc --username root --password root --table payment_order -m 1 --query 'select * from payment_order where sal<2000' --target-dir '/sqoop/emp' --hive-table emp5
#会报错,因为用查询语句查询出来的结果是一个集合是个结果,而且查询语句的时候已经从特定表中查出了,故--table payment_order不需要
(2)用子查询时,必须加上$CONDITIONS
正确如下:
./sqoop import --hive-import --connect jdbc:oracle:thin:@127.0.0.1:3306:imooc --username root --password root  -m 1 --query 'select * from payment_order where sal<2000 AND $CONDITIONS' --target-dir '/sqoop/emp' --hive-table emp5

注:使用查询语句:–query ‘查询语句’,用了查询语句必须指名导出到HDFS的目录下的路径:’/sqoop/emp’,–hive-table是用来指明表的名称,表的名称也可以不用指定,但是HDFS的目录必须指定
上面是查询薪水<2000的信息导入到hive中
可在hive中用select查看有没导入成功

6.使用sqoop将Hive中的数据导出到oracle/mysql中

./sqoop export --connect jdbc:oracle:thin:@127.0.0.1:3306:imooc --username root --password root 
-m 1 --table MYEMP --export-dir '/sqoop/emp'

注:(1)–export-dir ‘/sqoop/emp’这个路径是HDFS中的路径,将’/sqoop/emp’文件下的数据导出到MYEMP表中
(2) 要先在oracle中创建表MYEMP表,且表的数据类型应该与/sqoop/emp表中的类型一致,才可以导出
这里写图片描述业务数据是指mysql等关系数据库中的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值