2、列举出数据库下面所有的数据库表
bin/sqoop list-tables --connect jdbc:mysql://192.168.163.30:3306/azkaban --username root --password admin
3、导入mysql表到hdfs上面来 但是没有指定hdfs的导入路径
bin/sqoop import --connect jdbc:mysql://192.168.163.30:3306/userdb --username root --password admin --table emp -m 1
4、入mysql表到hdfs上面来 指定hdfs的路径
bin/sqoop import --connect jdbc:mysql://192.168.163.30:3306/userdb --username root --password admin --table emp -m 1 --delete-target-dir --target-dir /sqoop/emp
5、导入数据到hdfs上面来,指定hdfs的路径,并且指定导出字段之间的分隔符
bin/sqoop import --connect jdbc:mysql://192.168.163.30:3306/userdb --username root \
--password admin --table emp -m 1 --delete-target-dir --target-dir /sqoop/emp2 \
--fields-terminated-by '\t'
6、导入数据到hive表里面来
需要将hive-exec包放到sqoop的lib目录下面来
hive建表:
create external table emp_hive(id int,name string,deg string,salary int ,dept string) row format delimited fields terminated by '\001';
bin/sqoop import --connect jdbc:mysql://192.168.163.30:3306/userdb --username root \
--password admin --table emp -m 1 --delete-target-dir --target-dir /sqoop/emp2 \
--fields-terminated-by '\001' --hive-import --hive-table sqooptohive.emp_hive --hive-overwrite
如果mysql表字段比hive字段多,那么hive里面就会丢几个字段
如果mysql表字段比hive字段少,那么hive里面就会有字段为null值
7、导入数据到hive里面来,并且自动创建hive表
bin/sqoop import --connect jdbc:mysql://192.168.163.30:3306/userdb \
--username root --password admin --table emp_conn --hive-import -m 1 \
--hive-database sqooptohive;
8、导入数据子集
bin/sqoop import \
--connect jdbc:mysql://192.168.163.30:3306/userdb \
--username root --password admin --table emp_add \
--target-dir /sqoop/emp_add -m 1 --delete-target-dir \
--where "city = 'sec-bad'"
9、通过sql语句查找导入hdfs里面来
使用sql语句来进行查找是不能加参数--table
并且必须要添加where条件,
并且where条件后面必须带一个$CONDITIONS 这个字符串,
并且这个sql语句必须用单引号,不能用双引号
bin/sqoop import --connect jdbc:mysql://192.168.163.30:3306/userdb \
--username root --password admin \
-m 1 --delete-target-dir \
--target-dir /sqoop/emp_conn \
--query 'select phno from emp_conn where 1=1 and $CONDITIONS'
10、增量的导入
只导入我们部分需要的数据
现在时间2018-11-20 02:30:00 导入数据时间 2018-11-19 00:00:00 2018-11-19 23:59:59
全量导入,数据太多,对数据库压力比较大
id
1
2
3
4
5
记录下来,第一次id到了3
增量的导入
bin/sqoop import \
--connect jdbc:mysql://192.168.163.30:3306/userdb \
--username root \
--password admin \
--table emp \
--incremental append \
--check-column id \
--last-value 1202 \
-m 1 \
--target-dir /sqoop/increment
如何解决增量导入的问题??
每个表都会有三个固定的字段
create_time
update_time
is_delete
operator
create_time 2018-11-18 20:12:32
update_time 2018-11-19 20:12:32
如何解决导入增量的问题
每个数据都会有一个创建时间,可以根据我们的创建时间来判断是否是我们前一天的数据
如何解决导入减量数据的问题???
什么是减量数据????删除掉的数据 数据不是做真删除
做假删除,其实就是改变了一些数据的状态,数据的更新时间同步改变
银行客户 13859687451
变更手机号 13896541235
所有的减量数据都转化为变更数据来处理
第一个:涉及到数据的变更问题,
变更数据一定有更新时间 每天导入数据的时候,需要根据创建时间和更新时间来一起判断
第一条数据 create_time 2018-11-19 12:23:45
第二条数据 update_time 2018-11-19 15:23:45
根据两个条件来同时进行判断,满足任意一个,都要将数据导入过来
id create_time update_time
1 2018-11-15 23:45:15 2018-11-15 23:45:15
1 2018-11-15 23:45:15 2018-11-28 23:45:15
group by id
如何解决减量问题??
如何解决变更问题???
都是根据create_time update_time 来联合进行判断