首页 > 解决方案 > Sqoop 错误:导入需要 --table 或 --query

问题描述

使用以下 sqoop 命令(oracle 查询)时出现命令未找到错误。
我使用另一个 sqoop 命令连接到另一个具有不同 jdbc 连接字符串的数据库,它连接并获取数据而没有错误。不知道问题出在哪里,有人可以帮助解决此错误吗?提前致谢。

`sqoop import 
 --connectjdc:oracle:thin:@//(connection string)
 --query 
"Select sys, 
case when (substring(gid,3,3))="_A_" or gid="NJ_Parsipanny") then "core"
when
else "misc" end "org",
aid, aname,
b.workid as "waddress",
f.ai,
a.ag,
b.jobd,
b.jobk,
e.emstatus,
b.jobfunc,
b.superid,
c.fname+" "+c.lname as "S_Name",
FROM ad.db.tbl_a a
left join common.db.b b
on a.tid=b.sbid
left join common.db.c c
on b.sid=c.sbid
left join common.db.d d
on c.sid=d.sbid
left join common.db.e e
on d.sid=e.sbid
left join ad.db.tbl_f f
on a.AG=f.AG 
WHERE RIGHT(a.AG,1) IN ("E","T")
AND \$CONDITIONS"
--num-mappers 1
--target-dir /abc/46780
--fields-terminated-by ","
--user-name xyz
--password-file hdfs:///abc/46780/p/pswd.txt`

错误:找不到命令。导入第 26 行需要 --table 或 --query:--query:未找到命令第 44 行:--num-mappers:未找到命令第 45 行:--target-dir:未找到命令第 46 行:-- fields-terminated-by:找不到命令第 47 行:--用户名:找不到命令第 48 行:--password-file:找不到命令

标签: oraclesqoop

解决方案


我假设您正在从linux shell command line.

我将重写 sqoop 命令如下。

首先,我将通过 Oracle 控制台测试查询以查看查询是否正常工作。

其次,在每行的末尾,你应该把斜杠\

第三,您应该将字符串文字放在单引号'string literal'而不是双引号之间的查询中。

sqoop import \
--connectjdc:oracle:thin:@//(connection string) \
--query  "Select sys, 
case when (substring(gid,3,3))='_A_' or gid='NJ_Parsipanny') then 'core'
when
else 'misc' end 'org',
aid, aname,
b.workid as waddress,
f.ai,
a.ag,
b.jobd,
b.jobk,
e.emstatus,
b.jobfunc,
b.superid,
c.fname+' '+c.lname as S_Name,
FROM ad.db.tbl_a a
left join common.db.b b
on a.tid=b.sbid
left join common.db.c c
on b.sid=c.sbid
left join common.db.d d
on c.sid=d.sbid
left join common.db.e e
on d.sid=e.sbid
left join ad.db.tbl_f f
on a.AG=f.AG 
WHERE RIGHT(a.AG,1) IN ('E','T')
AND \$CONDITIONS" \
--num-mappers 1 \
--target-dir /abc/46780 \
--fields-terminated-by "," \
--username xyz \
--password-file hdfs:///abc/46780/p/pswd.txt

推荐阅读