请帮我解决以下错误。在oracle中检查时工作正常,但在尝试通过SQOOP导入时失败。
版本:Hadoop 0.20.2-cdh3u4和Sqoop 1.3.0-cdh3u5
sqoop import $SQOOP_CONNECTION_STRING
--query 'SELECT st.reference,u.unit,st.reading,st.code,st.read_id,st.avg FROM reading st,tunit `tu,unit u
WHERE st.reference=tu.reference and st.number IN ('218730','123456') and tu.unit_id = u.unit_id
and u.enrolled='Y' AND st.reading <= latest_off and st.reading >= To_Date('20120701','yyyymmdd')
and st.type_id is null and $CONDITIONS'
--split-by u.unit
--target-dir /sample/input
错误:
12/10/10 09:33:21 ERROR manager.SqlManager:执行语句时出错: java.sql.SQLSyntaxErrorException:ORA-00904:“YYYYMMDD”:标识符无效
接着是......
12/10/10 09:33:21错误sqoop.Sqoop:运行Sqoop异常: 显示java.lang.NullPointerException
谢谢&amp;的问候,
泰米尔语
答案 0 :(得分:1)
我认为问题实际上是在Bash端(或者你的命令行解释)。您的查询包含例如以下片段u.enrolled ='Y'。请注意,您使用单引号转义字符常量。您似乎将整个查询放入其他单引号: - 查询'您的查询'。这导致像--query'...... u.enrolled ='Y'......'。但是这样的字符串被bash剥离为'... u.enrolled = Y ...'。你可以通过使用“echo”验证bash在将字符串传递给Sqoop之前究竟会对字符串做什么。
jarcec@jarcec-thinkpad ~ % echo '...u.enrolled='Y'...'
...u.enrolled=Y..
我建议您在查询中转义所有单引号(\')或为整个查询选择双引号。请注意,后面的选项需要使用反斜杠(\ $)转义$字符。