mysql - Sqoop 中不明确的列名

标签 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

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 的已知限制吗?

最佳答案

没有。为重复的列添加前缀是实现此目的的唯一方法。

关于mysql - Sqoop 中不明确的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30875503/

相关文章:

mysql - 当 --where 子句的列名带有空格时,Apache Sqoop 导入 MySQL 失败

hadoop - 在 hive 表下看不到 HDFS 文件中的数据

mysql - 在重复字段的情况下获取mysql中的字段总和选择最大值

java - 使用 spring boot 对数据库的错误查询

hadoop - 从Spark将JavaRDD保存到HDFS

hadoop - 我可以绕开HDFS中的无更新限制吗?

java - 多个mysql表的数据到hadoop mapreduce

mysql - 数据库问题 : Fetching a default translation from a table

php - codeigniter 如何在此查询中设置条件并加入我的第二个表

sql-server - 使用sqoop从配置单元导出到sql服务器