java - Sqoop导入表报错ORA-01843

标签 java oracle apache hadoop sqoop

我已经将一个包含 5400 万行的表导入到我的 Hadoop 集群HDFS,现在,从 Oracle DB 导入该表的一部分
[我创建了一个 View ,只选择了一小段时间。结果只有 26 万行]
,我收到以下错误:

Error: java.io.IOException: SQLException in nextKeyValue at org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:277) at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:556) at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80) at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91) at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145) at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168) 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) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
Caused by: java.sql.SQLDataException: ORA-01843: not a valid month

使用的命令是:

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 新手,这只是为了学习,但我真的很想知道如何解决这个问题。

我考虑过创建一个 View ,将date 数据类型更改为字符串只是为了导入表,但它可能会给我不准确的结果。

编辑:

我发现这是创建 View 时的内部数据库错误。 我创建 View 的方式返回了我需要的结果。但创建它的方法是错误的。

在Sqoop里面的查询中你需要把最后一个AND \$CONDITIONS分开, 发送查询到 Oracle 的格式是 to_date('02/04/16', 'dd/mm/yy') .然后就成功了。

为了绕过错误,我创建了一个 View ,将日期字段的数据类型更改为 varchar,但出于某种原因,它也无法正常工作。

所以我又改成了to_number(to_char('02/04/16', 'dd/mm/yy'))使其发挥作用。

我不会关闭问题,因为我想要这个问题的答案。 如果我找到了,我会分享。

最佳答案

错误在于我创建 View 的方式:

我使用文字格式创建了 View 以选择日期间隔。

有点像

DT_F>'02/04/16

但是当我使用

创建 View

to_date('02/04/16', 'dd/mm/yy')

ORA-01843 错误不再出现。

关于java - Sqoop导入表报错ORA-01843,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44029327/

相关文章:

java - 从java如何调用存储过程传递oracle游标作为参数

c# - Oracle Managed DataAccess 连接对象保持连接打开

apache - 确保我的重写规则是 301 重定向

php - 如何将php变量传递到模态窗口

apache - 搞砸了 url 重写

java - 在 Java 中,如何在单线程程序中抛出 ConcurrentModificationException?

java - Applet 签名抛出 : java. security.AccessControlException。我怎样才能让它运行?

java - 无法解析的日期异常 : SimpleDateFormat

SQL 多重内连接数据库

java - Spring Roo 2.0.0M2示例脚本主页和tomcat问题