Sqoop 中不明确的列名
Ambigious column name in 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
Sqoop 给我一个不明确的列名错误,因为 --split-by
中指定的 emp_no
列在两个表中都存在。
如果我将 --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 的已知限制吗?
没有。为重复的列添加前缀是完成此操作的唯一方法。
我正在使用 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
Sqoop 给我一个不明确的列名错误,因为 --split-by
中指定的 emp_no
列在两个表中都存在。
如果我将 --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 的已知限制吗?
没有。为重复的列添加前缀是完成此操作的唯一方法。