分享

sqoop hcatalog export oracle 错误 Projected column xx not in the list of

[mw_shl_code=bash,true]sqoop export --verbose --connect jdbc:oracle:thin:@10.0.0.1:1521:orcl --username test --password test --table TEST_EXPORT -m 1 \
--hcatalog-database hive_test \
--hcatalog-table hive_test_table \
--columns "REGION_CODE" \
--input-fields-terminated-by '\001' \
--input-lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
--null-string 'null' \
--null-non-string 0[/mw_shl_code]
报错:ERROR tool.ExportTool: Encountere IOException running export job: java.io.IOException:Projected column region_code not in the list of columns from database

hive和oracle表结构和字段类型是一样的。
使用的是HDP-2.6.2.14-5版本,sqoop-1.4.6 .
去查了下sqoop源码,在比较命令行参数中参数中的字段和从oracle中获取的字段时,命令行中的参数被轮换成了小写,而从oracle获取的字段名字是大写的,因此对不上报错。
[mw_shl_code=bash,true]
String[] colNames = options.getColumns();//获取命令行字段
    dbColumnNames = new String[colNames.length];//

    for (int i = 0; i < colNames.length; ++i) {
      dbColumnNames = colNames.toLowerCase();//将命令行的参数中字段名转换为小写
    }
colInfo.putAll(connManager.getColumnInfo(dbTableName));//从jdbc获取oracle的字段名,字段名为大写
      for (String col : dbColumnNames) {
        List<Integer> info = colInfo.get(col);
        if (info == null) { //比较dbColumnNames中的小写字段名与ORACLE中中字段名,抛出异常
          throw new IOException("Projected column " + col
            + " not in list of columns from database");
        }
        dbColumnInfo.put(col, info);
      }[/mw_shl_code]

你们有遇到这个问题吗?




已有(3)人评论

跳转到指定楼层
s060403072 发表于 2019-4-17 12:41:00
找下这个字段:region_code ,看看导入表和被导入表是否都有
回复

使用道具 举报

巨波小学生 发表于 2019-4-17 13:34:33
s060403072 发表于 2019-4-17 12:41
找下这个字段:region_code ,看看导入表和被导入表是否都有

hive和oracle表字段是一样的。
回复

使用道具 举报

s060403072 发表于 2019-4-17 22:10:45
巨波小学生 发表于 2019-4-17 13:34
hive和oracle表字段是一样的。

楼主按照下面方式来操作:
1.可以尝试去掉--columns "REGION_CODE" \
看看是否有错误

2.按照下面方式
--columns REGION_CODE \
看看有什么问题。

3.不带REGION_CODE ,带上其它字段
--columns 你的字段名称1,你的字段名称2 \


看看上述都是什么问题

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条