您好,登錄后才能下訂單哦!
1.當(dāng)PartitionColumn的基數(shù)為1(如下圖)時(shí)。則會(huì)報(bào)錯(cuò)
報(bào)錯(cuò)如下圖
源代碼如下
\sqoop-1.99.6-bin-hadoop200\connector\connector-generic-jdbc\src\main\java\org\apache\sqoop\connector\jdbc\GenericJdbcPartitioner.java
將源代碼 改為
即可
2.Job中 參數(shù) Null value allowed for the partition column: false 時(shí) 即使partition column 有null也不會(huì)報(bào)錯(cuò),還是將為null的記錄導(dǎo)入到HDFS中去了。
結(jié)論:不是問題,當(dāng)該參數(shù)為false時(shí),不會(huì)起pid is null 的map去導(dǎo),為true時(shí)才會(huì),所以不報(bào)錯(cuò)是正確的。
3.日期時(shí)間的問題,具體修改方式如下圖
E:\IdeaProject\sqoop-1.99.6-bin-hadoop200\connector\connector-generic-jdbc\src\main\java\org\apache\sqoop\connector\jdbc\GenericJdbcExtractor.java
4.oracle 中 時(shí)間類型做 pid時(shí)會(huì)報(bào)錯(cuò)
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.當(dāng)用時(shí)間作為pid時(shí),如果時(shí)間時(shí)公元1000年以前會(huì)報(bào)錯(cuò)
修復(fù)方法:
--1:
/**
* 格式化公元1000年之前的時(shí)間字符串
* @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;
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。