Неоднозначное имя столбца в 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 дает мне неоднозначную ошибку имени столбца как emp_no
столбец, указанный в --split-by
присутствует в обеих таблицах.
Если я изменю --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 ответ
Решение
Нету. Префикс дублированного столбца - единственный способ сделать это.