您的位置:首页 > 产品设计 > UI/UE

解决Sqoop使用—query 导入时不支持别名的问题

2013-12-03 20:10 435 查看
原因: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.csdn.net/exception_ex/article/details/17166225

注:本文是针对sqoop-1.4.3-cdh4.4.0.jar包进行分析,具体到其他版本需要具体进行测试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  解决方案
相关文章推荐