sqoop导入从源获取更多记录

5vf7fwbs  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(386)

我最近遇到了一个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 outer连接,当在db上运行时,它返回x个记录,这正是我试图检索的。
查询是:

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

由于tab2\u id是table2的一个pk,所以我对--split by子句使用相同的pk。
但是我不明白为什么sqoop在指定不同的Map器时返回不同的记录

vuktfyat

vuktfyat1#

问题是中间提交给sqoop作业的sql查询没有生成正确的结果集。
原因::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块对将数据拆分到Map器没有影响,从而导致将整个数据委托给所有Map器(以生成的为准)。

相关问题