3.sqoop过滤数据导入hive表(where和query条件)

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并行运行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章