将 table 导入 Sqoop 时出现错误 ORA-01843
Error ORA-01843 when importing table to Sqoop
我已经将包含 5400 万行的 table 导入到我的 Hadoop 集群 的 HDFS,现在,从 Oracle 数据库导入 table
的一部分
[我创建了一个 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.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 数据类型更改为字符串只是为了导入 table,但是它可能会给我不准确的结果。
编辑:
我发现这是 视图 创建中的内部数据库错误。
我创建 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'))
以使其工作。
我不会关闭问题,因为我想要这个问题的答案。
如果我找到了,我会分享。
此问题最常见的原因是因为您的列名称带有关键字,例如将列命名为 "key" 或 "order"(只是一个虚拟示例)尝试导入 table像这样
--查询"select * from DB.TABLE where $CONDITIONS"
错误出在我创建视图的方式中:
我使用 select 日期间隔的文字格式创建了视图。
类似
DT_F>'02/04/16
但是当我使用
创建 View 时
to_date('02/04/16', 'dd/mm/yy')
不再出现 ORA-01843 错误。
我已经将包含 5400 万行的 table 导入到我的 Hadoop 集群 的 HDFS,现在,从 Oracle 数据库导入 table
的一部分
[我创建了一个 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.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 数据类型更改为字符串只是为了导入 table,但是它可能会给我不准确的结果。
编辑:
我发现这是 视图 创建中的内部数据库错误。 我创建 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'))
以使其工作。
我不会关闭问题,因为我想要这个问题的答案。 如果我找到了,我会分享。
此问题最常见的原因是因为您的列名称带有关键字,例如将列命名为 "key" 或 "order"(只是一个虚拟示例)尝试导入 table像这样
--查询"select * from DB.TABLE where $CONDITIONS"
错误出在我创建视图的方式中:
我使用 select 日期间隔的文字格式创建了视图。
类似
DT_F>'02/04/16
但是当我使用
创建 View 时
to_date('02/04/16', 'dd/mm/yy')
不再出现 ORA-01843 错误。