原因:sqoop解析sql时,直接取的数据库字段的名字,没有取别名。不过sqoop为什么这么做,尚不清楚。
解决方案:修改文件:org.apache.sqoop.manager.SqlManager.java
找到getColumnNamesForRawQuery(String stmt)方法;
找到如下代码
String colName = metadata.getColumnName(i);
if (colName == null || colName.equals("")){
colName = metadata.getColumnLabel(i);
}
改为:
String colName =metadata.getColumnLabel(i);
if (colName == null || colName.equals("")) {
colName = metadata.getColumnName(i);
}
找到getColumnTypesForRawQuery(String stmt)方法;
同样:
找到如下代码
String colName = metadata.getColumnName(i);
if (colName == null || colName.equals("")){
colName = metadata.getColumnLabel(i);
}
改为:
String colName =metadata.getColumnLabel(i);
if (colName == null || colName.equals("")) {
colName = metadata.getColumnName(i);
}
重新编译项目,用新编译的该类替换sqoop-1.4.3-cdh4.4.0.jar包中类。并替换sqoop的根目录下的该jar包。问题解决!
本文主要通过对sqoop的远程debug跟踪定位解决的该问题,具体远程debug方法如下:
http://blog.youkuaiyun.com/exception_ex/article/details/17166225
注:本文是针对sqoop-1.4.3-cdh4.4.0.jar包进行分析,具体到其他版本需要具体进行测试。
本文详细介绍了如何通过修改SQOOP的源代码来解决其在解析SQL时直接获取数据库字段名而非别名的问题,并提供了远程调试方法。包括修改关键方法、重新编译和替换相关jar包的步骤。
1967

被折叠的 条评论
为什么被折叠?



