关闭

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

标签: 解决方案
759人阅读 评论(0) 收藏 举报

原因: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包进行分析,具体到其他版本需要具体进行测试。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8399次
    • 积分:132
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:1篇
    • 译文:0篇
    • 评论:9条
    文章存档
    最新评论