sqoop:把数据从mysql导入到hive中

用sqoop把数据从mysql导入进hive中

首先你得在mysql中有个表,自己找一个有数据的表格

sqoop代码

sqoop impot \
--connect jdbc:mysql://wangtengfei:3306/test \
--username root \
--password 12345678 \
--table studentinfo \
-m 1 \
--hive-import \
--hive-table test.user_infor \
--create-hive-table

参数解释:
其中3306后面的是你在mysql中的数据库名
--table后面的是你在mysql数据库中的表名
--hive-table后面的在hive中的 数据库名.表名
最后一句的意思则是,如果hive中没有这个表,就会创建一个,一般是在第一次导入数据的时候用
这是将mysql全表的数据导入进去hive
如果想导入一份分看下面

sqoop import \
--coonect jdbc:mysql://wangtengfei:3306/test \
--username root \
--password 12345678 \
--table studentinfo \
--where "stuId>=25" \
-m 1 \
--hive-import \
--hive-table test.user_infor

通过加上where语句进行筛选数据,然后追加到hive的表中去
也可以用query来代替table+where

分区导入

从mysql把数据分区导入hive中去

首先在hive中减一个分区表,注意与hive中建表语句的不同

create table sqp_stu_table(
stuId int,
stuName string,
stuAge int,
stuGender string,
mobile string,
tution decimal(7,2),
fkClassId int
)
partitioned by (classId int)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;

sqoop分区导入语句

sqoop import \
--connect jdbc:mysql://wangtengfei:3306/test \
--username root \
--password 12345678 \
--table studentinfo \
--where "fkClassId=1" \
-m 1 \
--hive-import \
--hive-table test.sqp_stu_table \
--hive-partition-key classId \
--hive-partition-value '1' \
--fileds-terminated-by ',' \
--lines-terminated-by '\n'

注意:
分区导入的时候,注意自己的分区,,where写的是自己的分区范围,如果你是id,要写一个范围,
同时对应的hive-partition-value也要修改

这样就能实现从mysql导入hive中时候,分区了,在hdfs中可以查看,
也可以用命令在hive中查看,命令如下

show partitions sqp_stu_table;


可以写个shell脚本,注意参数设置

#!/bin/bash

B=$1

sqoop import \
--connect jdbc:mysql://wangtengfei:3306/test \
--username root \
--password 12345678 \
--table studentinfo \
--where "fkClassId$B" \
-m 1 \
--hive-import \
--hive-table test.sqp_stu_table \
--hive-partition-key classId \
--hive-partition-value '$B' \
--fields-terminated-by ',' \
--lines-terminated-by '\n'


#传一个参数就够了,注意where后面的条件,写的是分区的范围,,
#-key是分区的字段  -value是分区的范围,老师是根据序号分区是1-19,所以是两个参数,wo就是一个参数

你可能感兴趣的:(sqoop,mysql,hive,hadoop)