1.导入表数据子集到hdfs(可以改成导入到hive,举一反三)
-
导入表使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。
-
按照条件进行查找,通过--where参数来查找表emp当中dept字段的值为 TP 的所有数据导入到hdfs上面去
sqoop import \
--connect jdbc:mysql://node2:3306/userdb \
--username root --password 123456 --table emp \
--target-dir /sqoop/emp_where -m 1 --delete-target-dir \
--where "dept = 'TP'"
提交查看HDFS上的目录看是否有数据生成
2.sql语句查找导入hdfs(可以到到hive,自己尝试)
我们还可以通过 –query参数来指定我们的sql语句,通过sql语句来过滤我们的数据进行导入
sqoop import \
--connect jdbc:mysql://node2:3306/userdb \
--username root --password 123456 \
--target-dir /sqoop/emp_sql -m 1 --delete-target-dir \
--query 'select * from emp where salary >30000 and $CONDITIONS'
提交查看HDFS上的目录看是否有数据生成
$CONTITONS是linux系统的变量,如果你想通过并行的方式导入结果,每个map task需要执行sql查询语句的副本,结果会根据sqoop推测的边界条件分区。query必须包含$CONDITIONS。这样每个scoop程序都会被替换为一个独立的条件。同时你必须指定--split-by '字段',后期是按照字段进行数据划分,最后可以达到多个MapTask并行运行。