1

请帮助我解决以下错误。在 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: Error execution statement: java.sql.SQLSyntaxErrorException: ORA-00904: "YYYYMMDD": invalid identifier

其次是....

2010 年 12 月 10 日 09:33:21 错误 sqoop.Sqoop:运行 Sqoop 时出现异常:java.lang.NullPointerException

感谢和问候,

泰米尔语

4

1 回答 1

1

我相信问题实际上出在 Bash 方面(或您的命令行解释)。例如,您的查询包含以下片段 u.enrolled='Y'。请注意,您使用单引号转义字符常量。您似乎将整个查询放入额外的单引号中:--query 'YOUR QUERY'。这会产生类似 --query '...u.enrolled='Y'...' 的结果。然而,这样的字符串被 bash 剥离为 '...u.enrolled=Y...'。您可以通过使用“echo”来验证这一点,以查看在将字符串传递给 Sqoop 之前 bash 将如何处理您的字符串。

jarcec@jarcec-thinkpad ~ % echo '...u.enrolled='Y'...'
...u.enrolled=Y..

.

我建议要么转义查询中的所有单引号 (\'),要么为整个查询选择双引号。请注意,后面的选项需要使用反斜杠 (\$) 转义 $ 字符。

于 2012-11-14T22:27:46.350 回答