2015-06-16 56 views
1

我正在使用sqoop使用自由格式查詢導入數據。我sqoop進口看起來象下面這樣:Sqoop中的Ambigious列名稱

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的一個已知限制嗎?

回答

2

沒有。在複製列前綴是完成此操作的唯一方法。