Sqoop导入从源获取更多记录

时间:2018-02-21 08:01:44

标签: sqoop

我最近遇到了SQOOP导入问题。

当我提到以下内容时:

--num-mappers 10 SQOOP import fetches 10x records
--num-mappers 15 SQOOP import fetches 15x records
--num-mappers 1 SQOOP import fetches exact records

用于相同的选择查询。

select查询包含一个LEFT外连接,当在DB上运行时返回x记录,这就是我想要检索的内容。

查询是:

SELECT table1.*,table2.* from table1 left outer join table2 on
(table1.tab1_id = table2.tab2_id);

由于tab2_id是table2的PK,我对--split-by子句使用相同的。

但我无法理解为什么在指定不同的#mappers时SQOOP会返回不同的#records

1 个答案:

答案 0 :(得分:0)

问题在于sql查询,即中间提交给SQOOP作业,没有产生正确的结果集。

原因:: SQOOP命令看起来像::

sqoop import --connect <JDBC connection string> -m 10 --hive-drop-import- 
delims --fields-terminated-by '\001' --fetch-size=10000 --split-by <PK
column> --query "SELECT table1.*,table2.* from table1 left outer join
table2 on (table1.tab1_id = table2.tab2_id) AND \$CONDITIONS" 

此$ CONDITIONS内部由下限/上限边界值替换。

由于查询中没有where条件,因此$ CONDITIONS块对数据拆分到映射器没有任何影响,导致将整个数据委派给所有映射器,无论哪个都在生成。