Sqoop中的Ambigious列名

时间:2015-06-16 18:34:22

标签: mysql hadoop sqoop

我使用sqoop使用自由格式查询导入数据。我的sqoop导入如下所示:

sqoop 
--connect jdbc:mysql://mysql/employees
--username root
--password root
--target-dir "/user/Sqoop/employees/"
--delete-target-dir
--query "select e.* from employees e join dept_emp d on e.emp_no = d.emp_no and d.dept_no ='d001' where \$CONDITIONS limit 25"
--split-by emp_no

由于emp_no中指定的--split-by列在两个表中都存在,因此Sqoop给出了不明确的列名错误。

如果我将--split-by列更改为e.emp_no,则Sqoop查询边界值的查询将失败。用于查找边界值的sql是:

 SELECT MIN(emp_no), MAX(emp_no) FROM (select e.* from employees e join dept_emp d on e.emp_no = d.emp_no and d.dept_no ='d001' where  (1 = 1)  limit 25) AS t1

我应用了一个解决方法来查看此SQL并更改了我的导入,如下所示:

sqoop 
--connect jdbc:mysql://mysql/employees
--username root
--password root
--target-dir "/user/Sqoop/employees/"
--delete-target-dir
--query "select t1.* from employees t1 join dept_emp d on t1.emp_no = d.emp_no and d.dept_no ='d001' where \$CONDITIONS limit 25"
--split-by t1.emp_no

这很好用。还有其他方法可以达到这个目的吗?这是Sqoop的一个已知限制吗?

1 个答案:

答案 0 :(得分:2)

不。前缀复制列是实现此目的的唯一方法。