我最近遇到了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
答案 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块对数据拆分到映射器没有任何影响,导致将整个数据委派给所有映射器,无论哪个都在生成。