如何使用sqoop命令中的查询将数据从Oracle导入Hive表

时间:2014-11-14 05:08:19

标签: hive sqoop

我在Oracle中有这个特定的查询

  

从call.CALL_IVR_DETAIL_FACT中选择count(*),其中customer_key IN(选择不同的CUSTOMER_KEY来自EDW.WORK_ORDER_DAILY_FACT WHERE WO_CHECKED_IN_DT_KEY BETWEEN' 20141001' AND' 20141031' AND WO_TYPE_KEY =' 7'和OFFICE_ONLY_FLAG_KEY<>' 2')和TIME_KEY之间' 01-OCT-14' AND' 31-OCT-14'

我需要将此查询的结果从Oracle导入到Hive表中。

我的sqoop命令如下

  

sqoop import --connect' xxxx' --username xxx - 密码xxxx - 查询'从call.CALL_IVR_DETAIL_FACT中选择*,其中customer_key IN(从EDW.WORK_ORDER_DAILY_FACT选择不同的CUSTOMER_KEY,在2014年1月' 20141031' 20141031' 20141001' 20141031&# 39; AND WO_TYPE_KEY =' 7' AND OFFICE_ONLY_FLAG_KEY<>' 2')和TIME_KEY之间' 01-OCT-14' AND' 31-OCT-14' AND $ CONDITIONS' -m 1 --hive-import --hive-table CALL_IVR_DETAIL_FACT --target-dir / apps / hive / warehouse / call_ivr_detail_fact

我收到以下错误:

  

ERROR manager.SqlManager:执行语句时出错:java.sql.SQLSyntaxErrorException:ORA-00904:" OCT":无效标识符

     

java.sql.SQLSyntaxErrorException:ORA-00904:" OCT":无效标识符

我插入的查询是否正确?

我应该改变什么?

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

阅读docs

  

在当前版本的Sqoop中使用自由格式查询的功能仅限于简单查询,其中WHERE子句中没有不明确的投影和OR条件。使用复杂查询(例如具有子查询或连接的查询导致模糊投影)可能会导致意外结果。

似乎您的自由格式查询缺少$CONDITIONS子句中的WHERE。此外,Sqoop管理可能有点过于复杂。