sqoop2 1.99.6 中遇到问题及源码修改汇总

1.PartitionColumn的基数为1(如下图)时。则会报错

sqoop2 1.99.6 中遇到问题及源码修改汇总

报错如下图

sqoop2 1.99.6 中遇到问题及源码修改汇总

源代码如下

/sqoop-1.99.6-bin-hadoop200/connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/GenericJdbcPartitioner.java

sqoop2 1.99.6 中遇到问题及源码修改汇总

将源代码 改为 

sqoop2 1.99.6 中遇到问题及源码修改汇总sqoop2 1.99.6 中遇到问题及源码修改汇总

即可 

2.Job中 参数 Null value allowed for the partition column: false 时 即使partition column 有null也不会报错,还是将为null的记录导入到HDFS中去了。

结论:不是问题,当该参数为false时,不会起pid is null 的map去导,为true时才会,所以不报错是正确的。



3.日期时间的问题,具体修改方式如下图

E:/IdeaProject/sqoop-1.99.6-bin-hadoop200/connector/connector-generic-jdbc/src/main/java/org/apache/sqoop/connector/jdbc/GenericJdbcExtractor.java


sqoop2 1.99.6 中遇到问题及源码修改汇总


4.oracle 中 时间类型做 pid时会报错


sqoop2 1.99.6 中遇到问题及源码修改汇总

 if(JDBC_DRIVER_ORACLE.equals(jdbcDriver)){

        //如果是oracle则做特殊处理

        conditions.append(“to_timestamp(/'”).append(sdf.format((java.util.Date)lowerBound)).append(“/’,’yyyy-mm-dd hh34:mi:ss.ff’)”);

        conditions.append(” <= “);

        conditions.append(partitionColumnName);

        conditions.append(” AND “);

        conditions.append(partitionColumnName);

        conditions.append(lastOne ? ” <= ” : ” < “);

        conditions.append(“to_timestamp(/'”).append(sdf.format((java.util.Date)upperBound)).append(“/’,’yyyy-mm-dd hh34:mi:ss.ff’)”);

    }else{

        conditions.append(‘/”).append(sdf.format((java.util.Date)lowerBound)).append(‘/”);

        conditions.append(” <= “);

        conditions.append(partitionColumnName);

        conditions.append(” AND “);

        conditions.append(partitionColumnName);

        conditions.append(lastOne ? ” <= ” : ” < “);

        conditions.append(‘/”).append(sdf.format((java.util.Date)upperBound)).append(‘/”);

    }

    return conditions.toString();

如果是oracle 则做特殊判断。

5.当用时间作为pid时,如果时间时公元1000年以前会报错

sqoop2 1.99.6 中遇到问题及源码修改汇总

修复方法:

–1:

  /**

   * 格式化公元1000年之前的时间字符串

   * @param str

   * @return

   */

  protected String    formatTime(String str) {

      if(str.indexOf(“-“) == -1){

          return str;

      }else{

          return String.format(“%04d”, NumberUtils.createInteger(str.split(“-“)[0])).concat(str.substring(str.indexOf(“-“)));

      }

  }

–2:

    switch(partitionColumnType) {

      case Types.DATE:

        sdf = new SimpleDateFormat(“yyyy-MM-dd”);

        minDateValue = Date.valueOf(formatTime(partitionMinValue)).getTime();

        maxDateValue = Date.valueOf(formatTime(partitionMaxValue)).getTime();

        break;

      case Types.TIME:

        sdf = new SimpleDateFormat(“HH:mm:ss”);

        minDateValue = Time.valueOf(partitionMinValue).getTime();

        maxDateValue = Time.valueOf(partitionMaxValue).getTime();

        break;

      case Types.TIMESTAMP:

        sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);

        minDateValue = Timestamp.valueOf(formatTime(partitionMinValue)).getTime();

        maxDateValue = Timestamp.valueOf(formatTime(partitionMaxValue)).getTime();

        break;

    }



原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/186924.html

(0)
上一篇 2021年11月4日
下一篇 2021年11月4日

相关推荐

发表回复

登录后才能评论