我已经将一个包含5400万行的表导入 Hadoop Cluster 的 HDFS ,现在,从Oracle DB导入该表的一部分<登记/>
[我已经创建了一个查看,选择的时间很短。仅产生260K行]
,我收到以下错误:
错误:java.io.IOException:nextKeyValue中的SQLException org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:277) 在 org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue(MapTask.java:556) 在 org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80) 在 org.apache.hadoop.mapreduce.lib.map.WrappedMapper $ Context.nextKeyValue(WrappedMapper.java:91) 在org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64) 在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
在org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)at org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:168)at at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:422)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709) 在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
引起:java.sql.SQLDataException:ORA-01843:不是有效月份
使用的命令是:
sqoop import --connect jdbc:oracle:thin:@<my_host:port:instanceia> --username <user> --password <pass> --table <DB.TABLE> --split-by NUM_LINE --m 10 --target-dir /user/rodrigo/SLICED_TABLE 2>&1|tee import_tab_menor.txt
我是Hadoop / Hive / Sqoop的新手,这只是为了学习,但我真的想知道如何解决这个问题。
我考虑创建视图,将 date 数据类型更改为字符串只是为了导入表格,但它可以为我提供真实的结果。
编辑:
我发现这是视图创建中的内部数据库错误。 我正在创建视图的方式返回了我需要的结果。但是创建它是一种错误的方法。
在Sqoop内部的查询中,您需要分隔最后一个AND \$CONDITIONS
,并且将查询发送到Oracle的格式为to_date('02/04/16', 'dd/mm/yy')
。然后它奏效了。
为了绕过错误,我创建了一个视图,将日期字段的数据类型更改为varchar,由于某种原因,它也不会起作用。
所以我再次使用to_number(to_char('02/04/16', 'dd/mm/yy'))
进行了更改以使其正常工作。
我不想结束这个问题,因为我想要解决这个问题。 如果我找到它,我会分享。
答案 0 :(得分:0)
此问题的最常见原因是因为您的列名称包含关键字,例如将列命名为&#34; key&#34;或者&#34;命令&#34; (只是一个虚拟的例子)尝试像这样导入表
- 查询&#34;从DB.TABLE中选择*其中\ $ CONDITIONS&#34;
答案 1 :(得分:0)
错误与我创建视图的方式有关:
我已使用文字格式创建视图以选择日期间隔。
像
这样的东西
DT_F>'02/04/16
但是当我使用
创建 View 时
to_date('02/04/16', 'dd/mm/yy')
错误ORA-01843不再发生。